HelpF.pro

Как в запросе одно строковое поле разделить на два ( ПОДСТРОКА )?

Задача состояла в том, что нужно было из реквизита документа Сответствие выделить две строки и сделать сортировку по ним. Соответствие счета, такого вида: 779000/004599. Как разбить это значение на два?

У функции ПОДСТРОКА три параметра. В качестве первого указывается исходная строка, из которой требуется выделить часть символов — подстроку. Понятно, что тип значения этого параметра — это Строка. Внимание, это очень важное замечание, если использовать тип первого параметра не строку, функция не будет работать, запрос будет выдавать ошибку! Второй параметр определяет позицию символа в исходной строке, с которого начинается выделение части строки, а третий — это длина выделяемой подстроки. Тип значения для второго и третьего параметров — число.

Перейдём к практике:
Код 1C v 8.х
 ВЫБРАТЬ
Типовой.Регистратор КАК Название,
ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) КАК СчетЗатрат,
ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) КАК Отдел,
СУММА(ВЫБОР
КОГДА МЕСЯЦ(Типовой.Период) = 3
ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2))
ИНАЧЕ 0
КОНЕЦ) КАК Март
ИЗ
РегистрБухгалтерии.Типовой КАК Типовой
ГДЕ
Типовой.СчетКт = &СчетКт
И Типовой.Период МЕЖДУ &ПериодНач И &ПериодКон

СГРУППИРОВАТЬ ПО
ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6),
ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11),
Типовой.Регистратор

УПОРЯДОЧИТЬ ПО
Отдел,
СчетЗатрат

Результат этого запроса следующий:
Название СчетЗатрат Отдел Март
Платежное поручение исходящее 00000000319 от 01.03.2010 14:42:54 779000 004599 9 000
Платежное поручение исходящее 00000000320 от 02.03.2010 12:07:34 779000 004599 4 721,6
Платежное поручение исходящее 00000000203 от 01.03.2010 12:28:52 786500 004599 987 614,51
Платежное поручение исходящее 00000000227 от 03.03.2010 14:16:00 786500 004599 400 000
Платежное поручение исходящее 00000000238 от 05.03.2010 12:37:57 732000 004600 5 400
Платежное поручение исходящее 00000000197 от 01.03.2010 11:53:11 732500 004600 12 100
Платежное поручение исходящее 00000000198 от 01.03.2010 11:55:39 732500 004600 12 100
Платежное поручение исходящее 00000000279 от 26.03.2010 0:00:00 734100 004600 19 609
Платежное поручение исходящее 00000000287 от 29.03.2010 14:15:36 734100 004600 55 300
Платежное поручение исходящее 00000000291 от 30.03.2010 11:01:10 734100 004600 18 090
Платежное поручение исходящее 00000000268 от 18.03.2010 10:34:25 738000 004600 10 050
Платежное поручение исходящее 00000000276 от 18.03.2010 12:20:20 750400 004600 13 060,98
Платежное поручение исходящее 00000000281 от 29.03.2010 12:33:46 750400 004600 555 645,41
Платежное поручение исходящее 00000000234 от 04.03.2010 12:21:55 754450 004600 24 120
Платежное поручение исходящее 00000000290 от 30.03.2010 10:44:39 754450 004600 100 000
Платежное поручение исходящее 00000000240 от 09.03.2010 10:53:24 786300 004600 20 800
Платежное поручение исходящее 00000000269 от 18.03.2010 10:58:04 786300 004600 61 012
Платежное поручение исходящее 00000000289 от 30.03.2010 9:27:14 786300 004600 6 000
Платежное поручение исходящее 00000000223 от 03.03.2010 12:13:38 786500 004600 36 000
Платежное поручение исходящее 00000000228 от 04.03.2010 9:52:35 786500 004600 378 138,85
Платежное поручение исходящее 00000000229 от 04.03.2010 9:57:50 786503 004600 126 117,75
Платежное поручение исходящее 00000000200 от 01.03.2010 11:58:06 754422 004762 63 000
Платежное поручение исходящее 00000000286 от 29.03.2010 14:10:18 764422 004762 10 000
Платежное поручение исходящее 00000000267 от 17.03.2010 0:00:00 764423 004762 464 370
Платежное поручение исходящее 00000000261 от 15.03.2010 11:16:28 764522 004762 81 357

Итак, если мы берём строку 779000/004599, то ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) будет выделять строку "779000". А ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) будет выводить "004599".

В этом же запросе, используется выражение:
Код 1C v 8.х
 СУММА(ВЫБОР
КОГДА МЕСЯЦ(Типовой.Период) = 3
ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2))
ИНАЧЕ 0
КОНЕЦ) КАК Март


В этой же задаче необходимо было добавить новые колонки с названиями месяцев и с суммами по ним. Как раз это выражение решает эту задачу. Если Вам нужно использовать другие месяца, например январь, то заменим выражение:
Код 1C v 8.х
 СУММА(ВЫБОР
КОГДА МЕСЯЦ(Типовой.Период) = 1
ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2))
ИНАЧЕ 0
КОНЕЦ) КАК Январь


Приведу пример текста запроса, в котором с помощью цикла формируются поля месяцев (выделено жирным), начиная с марта по февраль.
Код 1C v 8.х
 
ТекстЗапроса = "
|ВЫБРАТЬ
|Типовой.Регистратор КАК Название,
|ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) КАК СчетЗатрат,
|ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) КАК Отдел,";

Для Сч = 1 По 12 Цикл
Если Сч < 11 Тогда
Мес = Сч + 2;
Иначе
Мес = Сч - 10;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|СУММА(ВЫБОР
| КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + "
| ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2))
| ИНАЧЕ 0
|КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",",");
КонецЦикла;
ТекстЗапроса = ТекстЗапроса + "
|ИЗ
| РегистрБухгалтерии." + ИмяРегистраБухгалтерии + ".ДвиженияССубконто(
| &НачПериода,
| &КонПериода,";

СтрокаОграниченийПоРеквизитам = " (Активность = ИСТИНА) И (Счет В ИЕРАРХИИ (&СчетАнализа))";

ТекстЗапроса = ТекстЗапроса + СтрокаОграниченийПоРеквизитам + "
| ) КАК Типовой
|";

ТекстЗапроса = ТекстЗапроса + "
|ГДЕ
| Типовой.СчетКт = &СчетАнализа
| И Типовой.Период МЕЖДУ &НачПериода И &КонПериода
|СГРУППИРОВАТЬ ПО
| ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6),
| ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11),
| Типовой.Регистратор
|УПОРЯДОЧИТЬ ПО
| Отдел,
| СчетЗатрат";

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/766.html