Профессия — 1С » Как преобразовать колонки в строки в запросе

Профессия — 1С

Рукопашный бой Карташ

Категории

-->

Как преобразовать колонки в строки в запросе

рубрики: Фишки | Дата: 14 января, 2016

Недавно столкнулся с ситуацией когда надо было в запросе значения в колонках расположить в строках. Если конкретнее, надо было сделать запрос к регистру накопления СтраховыеВзносыИсчисленные и выбрать из него ресурсы: ПФРСтраховая, ПФРНакопительная, ФСС, ФФОМС, ТФОМС, но сделать это таким образом, чтобы значения каждого ресурса располагались не каждый в отдельной колонке, а в одной колонке друг под другом.
То есть если делаем обычный запрос к регистру:


ВЫБРАТЬ
	СтраховыеВзносыИсчисленные.ФизЛицо,
	СтраховыеВзносыИсчисленные.Организация,
	СтраховыеВзносыИсчисленные.ПФРСтраховая,
	СтраховыеВзносыИсчисленные.ПФРНакопительная,
	СтраховыеВзносыИсчисленные.ФСС,
	СтраховыеВзносыИсчисленные.ФФОМС,
	СтраховыеВзносыИсчисленные.ТФОМС
ИЗ
	РегистрНакопления.СтраховыеВзносыИсчисленные КАК СтраховыеВзносыИсчисленные

получаем вот такой результат:

Физлицо Организация ПФРСтраховая ПФРНакопительная ФСС ФФОМС ТФОМС
Иванов Иван Иваныч ООО «Иванов» 3500,00 1500,00 725,00 275,00 500,00

а нужно было преобразовать его вот в такой:

Физлицо Организация ВидНалога Сумма
Иванов Иван Иваныч ООО «Иванов» ПФРСтраховая 3500,00
Иванов Иван Иваныч ООО «Иванов» ПФРНакопительная 1500,00
Иванов Иван Иваныч ООО «Иванов» ФСС 725,00
Иванов Иван Иваныч ООО «Иванов» ФФОМС 275,00
Иванов Иван Иваныч ООО «Иванов» ТФОМС 500,00

Решение следующее:

  • Сначала создадим таблицу с перечнем налогов вот такого вида:

    ВидНалога
    ПФРСтраховая
    ПФРНакопительная
    ФСС
    ФФОМС
    ТФОМС

    с помощью вот такого запроса:

    
    ВЫБРАТЬ
    	"ПФРНакопительная" КАК ВидНалога
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    	"ПФРСтраховая"
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    	"ФСС"
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    	"ФФОМС"
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    	"ТФОМС"
    
  • А теперь поместим эту таблицу во временную и присоединим к ней таблицу с записями регистра с помощью внутреннего соединения вот таким образом:

    
    ВЫБРАТЬ
    	ПереченьНалогов.ВидНалога
    ПОМЕСТИТЬ ВТ_ВидыНалогов
    ИЗ
    	(ВЫБРАТЬ
    		"ПФРНакопительная" КАК ВидНалога
    	ОБЪЕДИНИТЬ ВСЕ
    	ВЫБРАТЬ
    		"ПФРСтраховая"
    	ОБЪЕДИНИТЬ ВСЕ
    	ВЫБРАТЬ
    		"ФСС"
    	ОБЪЕДИНИТЬ ВСЕ
    	ВЫБРАТЬ
    		"ФФОМС"
    	ОБЪЕДИНИТЬ ВСЕ
    	ВЫБРАТЬ
    		"ТФОМС") КАК ПереченьНалогов
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	СтраховыеВзносыИсчисленные.ФизЛицо,
    	СтраховыеВзносыИсчисленные.Организация,
    	ВТ_ВидыНалогов.ВидНалога,
    	ВЫБОР
    		КОГДА ВТ_ВидыНалогов.ВидНалога = "ПФРНакопительная"
    			ТОГДА СтраховыеВзносыИсчисленные.ПФРНакопительная
    		КОГДА ВТ_ВидыНалогов.ВидНалога = "ПФРСтраховая"
    			ТОГДА СтраховыеВзносыИсчисленные.ПФРСтраховая
    		КОГДА ВТ_ВидыНалогов.ВидНалога = "ФСС"
    			ТОГДА СтраховыеВзносыИсчисленные.ФСС
    		КОГДА ВТ_ВидыНалогов.ВидНалога = "ФФОМС"
    			ТОГДА СтраховыеВзносыИсчисленные.ФФОМС
    		КОГДА ВТ_ВидыНалогов.ВидНалога = "ТФОМС"
    			ТОГДА СтраховыеВзносыИсчисленные.ТФОМС
    	КОНЕЦ КАК Сумма
    ИЗ
    	ВТ_ВидыНалогов КАК ВТ_ВидыНалогов
    		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СтраховыеВзносыИсчисленные КАК СтраховыеВзносыИсчисленные
    		ПО (ВТ_ВидыНалогов.ВидНалога = "ПФРНакопительная"
    					И СтраховыеВзносыИсчисленные.ПФРНакопительная <> 0
    				ИЛИ ВТ_ВидыНалогов.ВидНалога = "ПФРСтраховая"
    					И СтраховыеВзносыИсчисленные.ПФРСтраховая <> 0
    				ИЛИ ВТ_ВидыНалогов.ВидНалога = "ФСС"
    					И СтраховыеВзносыИсчисленные.ФСС <> 0
    				ИЛИ ВТ_ВидыНалогов.ВидНалога = "ФФОМС"
    					И СтраховыеВзносыИсчисленные.ФФОМС <> 0
    				ИЛИ ВТ_ВидыНалогов.ВидНалога = "ТФОМС"
    					И СтраховыеВзносыИсчисленные.ТФОМС <> 0)
    

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

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

   

2014 - 2023г. Профессия — 1С. Обмен опытом по программированию в 1С