Как в запросе 1С:Предприятие 8 одно строковое поле разделить на два?

ПОДСТРОКА / SUBSTRING функция разделяет колонку в запросе 1С8

Приветсвую вас, уважаемые читатели блога SoftMaker.kz! Сегодня, с помощью примеров, мы рассмотрим, как на практике можно использовать функцию запросов 1С ПОДСТРОКА / SUBSTRING. Использование данной функции пригодится не только в простых запросах, которые мы рассмотрим здесь, но и при соединении и объединении запросов, а также в пакетных запросах.

ПОДСТРОКА / SUBSTRING функция разделяет колонку в запросе 1С8

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

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

Перейдём к практике:

ВЫБРАТЬ
	Типовой.Регистратор КАК Название,
	ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 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».

В этом же запросе, используется выражение:

СУММА(ВЫБОР
	КОГДА МЕСЯЦ(Типовой.Период) = 3
		ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2))
	ИНАЧЕ 0
КОНЕЦ) КАК Март

В этой же задаче необходимо было добавить новые колонки с названиями месяцев и с суммами по ним. Как раз это выражение решает эту задачу. Если Вам нужно использовать другие месяца, например январь, то заменим выражение:

СУММА(ВЫБОР
	КОГДА МЕСЯЦ(Типовой.Период) = 1
		ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2))
	ИНАЧЕ 0
КОНЕЦ) КАК Январь

Приведу пример текста запроса, в котором с помощью цикла формируются поля месяцев (выделено жирным), начиная с марта по февраль.

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

Итак, с помощью кода приведенного выше (выделено жирным), выводятся части запроса с месяцами. Таким образом, происходит добавление новых колонок с названиями месяцев и с суммами по ним.


Хочу обратить ваше внимание на бесплатный курс по «Языку запросов 1С» от Сотникова Анатолия. Этот опытный преподаватель наглядно покажет вам, как строить запросы в 1С. Вот некоторые вопросы, которые будут обсуждаться:
  • Что такое запросы?
  • Для чего нужны параметры запроса?
  • Какие есть параметры у виртуальной таблицы?
  • Как писать условия в запросах?
  • Что такое псевдонимы?
  • Как сделать запрос к справочнику?
  • Как работать с результатом запроса во встроенном языке 1С?
  • Далее увидите сами...
Материал подобран весьма великолепный! Поэтому не стоит тратить время на его поиски во всемирной сети! Не теряйте драгоценное время! Все подробности о том, что есть в бесплатных видеоуроках на странице автора.

Вот один из уроков о консоле запросов:


Этот блог читают уже более 3000 человек
- читай и ТЫ!
[dwqa-submit-question-form]

0 ответы

Ответить

Want to join the discussion?
Feel free to contribute!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *