2. Данные для отчета P&L. Выгрузка
В первом примере мы познакомились с выгрузкой набора данных типа «Объект». В данном примере рассмотрим более сложный вариант — выгрузку результатов выполнения Запроса ( для этого будет использоваться тип источника данных «Запрос», соответственно).
1С База: 1С Бухгалтерия 3.0;
выгрузка построена на данных «Бухгалтерского учета».
Потому как большинство отчетов в 1С строится запросами, в данном примере предлагаем выполнить заранее подготовленный запрос, который показывает финансовый результат работы организации, для этого вставьте ниже представленный текст запроса в окно для текста запроса и нажимаем “Далее“ в правом нижнем углу окна.
Итак, заходим в раздел «Проекты» Экстрактора 1С, нажимаем «Создать».
Выбираем тип источника данных «Запрос».
В открывшемся окне задаем наименование и добавляем текст запроса (Вы можете использовать предоставленный в данной статье текст запроса, составить свой на языке программирования 1С или воспользоваться конструктором запроса по кнопке «Конструктор…», как это сделать смотрите в статье).
ВЫБРАТЬ РАЗЛИЧНЫЕ ХозрасчетныйОбороты.КорСчет КАК КорСчет ПОМЕСТИТЬ КоррСчета99 ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ), КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ), Месяц, Счет В ИЕРАРХИИ (&Счет99), , , , ) КАК ХозрасчетныйОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ХозрасчетныйОбороты.Период КАК Период, ХозрасчетныйОбороты.Регистратор КАК Регистратор, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = &Счет9001 ТОГДА ХозрасчетныйОбороты.Субконто3 ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = &Счет9002 ТОГДА ХозрасчетныйОбороты.КорСубконто1 ИНАЧЕ "" КОНЕЦ КОНЕЦ КАК Номенклатура, ХозрасчетныйОбороты.Регистратор.ДоговорКонтрагента КАК ДоговорКонтрагента, ЕСТЬNULL(ХозрасчетныйОбороты.Подразделение, ХозрасчетныйОбороты.ПодразделениеКор) КАК Подразделение, ХозрасчетныйОбороты.Организация КАК Организация, ХозрасчетныйОбороты.Регистратор.Контрагент КАК Контрагент, ХозрасчетныйОбороты.КоличествоОборот * -1 КАК КолВо, ХозрасчетныйОбороты.СуммаОборотКт КАК Выручка, ХозрасчетныйОбороты.КорСчет КАК КорСчет, ХозрасчетныйОбороты.КорСчет.Наименование КАК КорСчетНаименование, ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1, ХозрасчетныйОбороты.СуммаОборот * -1 КАК СуммаОборот, ХозрасчетныйОбороты.Счет КАК Счет, ХозрасчетныйОбороты.Счет.Наименование КАК СчетНаименование, ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт, ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.Счет ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.Счет.Родитель ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.Счет.Родитель.Родитель КОНЕЦ КОНЕЦ КОНЕЦ КАК СчетВерхнийУровень, ВЫБОР КОГДА ХозрасчетныйОбороты.КорСчет.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.КорСчет ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.КорСчет.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.КорСчет.Родитель ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.КорСчет.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.КорСчет.Родитель.Родитель КОНЕЦ КОНЕЦ КОНЕЦ КАК КорСчетВерхнийУровень, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = &Счет9002 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт ИНАЧЕ 0 КОНЕЦ КАК Себестоимость, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель <> &Счет9002 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт ИНАЧЕ 0 КОНЕЦ КАК СуммаЗатрат, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет91) ТОГДА ХозрасчетныйОбороты.Субконто1 ИНАЧЕ ХозрасчетныйОбороты.КорСубконто1 КОНЕЦ КАК СтатьяЗатрат, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9001) ИЛИ ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9101) ТОГДА "01.Выручка" ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9002) ТОГДА "02.Себестоимость" ИНАЧЕ "03.Затраты" КОНЕЦ КОНЕЦ КАК ВидДвижения, ХозрасчетныйОбороты.Субконто1 КАК Субконто1 ПОМЕСТИТЬ ВТ_Промежуточная ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты( НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ), КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ), Регистратор, счет В ИЕРАРХИИ (&счет91) ИЛИ счет В ИЕРАРХИИ (&счет90), , , , ) КАК ХозрасчетныйОбороты ГДЕ НЕ ХозрасчетныйОбороты.КорСчет В ИЕРАРХИИ (&Счет99) И ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(ХозрасчетныйОбороты.Регистратор) = ТИП(Документ.РегламентнаяОперация) ТОГДА НЕ ХозрасчетныйОбороты.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыРегламентныхОпераций.РеформацияБаланса) ИНАЧЕ ИСТИНА КОНЕЦ ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ХозрасчетныйОбороты.Период, ХозрасчетныйОбороты.Регистратор, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = &Счет9001 ТОГДА ХозрасчетныйОбороты.Субконто3 ИНАЧЕ "" КОНЕЦ, ХозрасчетныйОбороты.Регистратор.ДоговорКонтрагента, ЕСТЬNULL(ХозрасчетныйОбороты.Подразделение, ХозрасчетныйОбороты.ПодразделениеКор), ХозрасчетныйОбороты.Организация, ХозрасчетныйОбороты.Регистратор.Контрагент, ХозрасчетныйОбороты.КоличествоОборот, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9001) ИЛИ ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9101) ТОГДА ХозрасчетныйОбороты.СуммаОборотДт * -1 ИНАЧЕ 0 КОНЕЦ, ХозрасчетныйОбороты.КорСчет, ХозрасчетныйОбороты.КорСчет.Наименование, ХозрасчетныйОбороты.КорСубконто1, ХозрасчетныйОбороты.СуммаОборот, ХозрасчетныйОбороты.Счет, ХозрасчетныйОбороты.Счет.Наименование, ХозрасчетныйОбороты.СуммаОборотКт * -1, ХозрасчетныйОбороты.СуммаОборотДт * -1, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.Счет ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.Счет.Родитель ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.Счет.Родитель.Родитель КОНЕЦ КОНЕЦ КОНЕЦ, ВЫБОР КОГДА ХозрасчетныйОбороты.КорСчет.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.КорСчет ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.КорСчет.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.КорСчет.Родитель ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.КорСчет.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка) ТОГДА ХозрасчетныйОбороты.КорСчет.Родитель.Родитель КОНЕЦ КОНЕЦ КОНЕЦ, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель = &Счет9002 ТОГДА ХозрасчетныйОбороты.СуммаОборотКт * -1 ИНАЧЕ 0 КОНЕЦ, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Родитель <> &Счет9002 ТОГДА ХозрасчетныйОбороты.СуммаОборотКт * 1 + ХозрасчетныйОбороты.СуммаОборотДт * -1 ИНАЧЕ 0 КОНЕЦ, ХозрасчетныйОбороты.КорСчет.Наименование, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9001) ИЛИ ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9101) ТОГДА "01.Выручка" ИНАЧЕ ВЫБОР КОГДА ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&Счет9002) ТОГДА "02.Себестоимость" ИНАЧЕ "03.Затраты" КОНЕЦ КОНЕЦ, ХозрасчетныйОбороты.Субконто1 ИЗ КоррСчета99 КАК КоррСчета99 ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ), КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ), Регистратор, , , , , ) КАК ХозрасчетныйОбороты ПО (КоррСчета99.КорСчет = ХозрасчетныйОбороты.Счет) ГДЕ ХозрасчетныйОбороты.КорСчет В ИЕРАРХИИ (&Счет99) И НЕ(ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&счет91) ИЛИ ХозрасчетныйОбороты.Счет В ИЕРАРХИИ (&счет90)) И ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(ХозрасчетныйОбороты.Регистратор) = ТИП(Документ.РегламентнаяОперация) ТОГДА НЕ ХозрасчетныйОбороты.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыРегламентныхОпераций.РеформацияБаланса) ИНАЧЕ ИСТИНА КОНЕЦ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Промежуточная.Период КАК Период, СУММА(ВТ_Промежуточная.СуммаОборот) КАК СуммаОборот, "04.Прибыль" КАК ВидДвижения, ВТ_Промежуточная.Подразделение КАК Подразделение, ВТ_Промежуточная.Организация КАК Организация, "3" КАК Поле1 ПОМЕСТИТЬ ВТ_Прибыль ИЗ ВТ_Промежуточная КАК ВТ_Промежуточная СГРУППИРОВАТЬ ПО ВТ_Промежуточная.Период, ВТ_Промежуточная.Подразделение, ВТ_Промежуточная.Организация ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Промежуточная.Период КАК Период, ВТ_Промежуточная.Регистратор КАК Регистратор, ВТ_Промежуточная.Номенклатура КАК Номенклатура, ВТ_Промежуточная.ДоговорКонтрагента КАК ДоговорКонтрагента, ВТ_Промежуточная.Подразделение КАК Подразделение, ВТ_Промежуточная.Контрагент КАК Контрагент, СУММА(ВТ_Промежуточная.КолВо) КАК КолВо, ВТ_Промежуточная.ВидДвижения КАК ВидДвижения, СУММА(ВТ_Промежуточная.СуммаОборот) КАК СуммаОборот, СУММА(ВТ_Промежуточная.Выручка) КАК Выручка, СУММА(ВТ_Промежуточная.Себестоимость) КАК Себестоимость, СУММА(ВТ_Промежуточная.СуммаЗатрат) КАК СуммаЗатрат, СУММА(ВТ_Промежуточная.СуммаОборотДт) КАК СуммаОборотДт, СУММА(ВТ_Промежуточная.СуммаОборотКт) КАК СуммаОборотКт, ВТ_Промежуточная.Счет КАК Счет, ВТ_Промежуточная.СчетНаименование КАК СчетНаименование, ВТ_Промежуточная.Субконто1 КАК Субконто1, ВТ_Промежуточная.СчетВерхнийУровень КАК СчетВерхнийУровень, ВТ_Промежуточная.КорСчет КАК КорСчет, ВТ_Промежуточная.КорСубконто1 КАК КорСубконто1, ВТ_Промежуточная.КорСчетНаименование КАК КорСчетНаименование, ВТ_Промежуточная.КорСчетВерхнийУровень КАК КорСчетВерхнийУровень, ВЫБОР КОГДА ВТ_Промежуточная.ВидДвижения = "03.Затраты" ТОГДА ЕСТЬNULL(ВТ_Промежуточная.СтатьяЗатрат, "") ИНАЧЕ "" КОНЕЦ КАК СтатьяЗатрат, Организации.Ссылка КАК Организация, Организации.ИНН КАК ОрганизацияИНН ИЗ ВТ_Промежуточная КАК ВТ_Промежуточная ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации ПО ВТ_Промежуточная.Организация = Организации.Ссылка СГРУППИРОВАТЬ ПО ВТ_Промежуточная.Период, ВТ_Промежуточная.Регистратор, ВТ_Промежуточная.Номенклатура, ВТ_Промежуточная.ДоговорКонтрагента, ВТ_Промежуточная.Подразделение, ВТ_Промежуточная.Контрагент, ВТ_Промежуточная.КорСчет, ВТ_Промежуточная.КорСчетНаименование, ВТ_Промежуточная.КорСубконто1, ВТ_Промежуточная.Счет, ВТ_Промежуточная.СчетНаименование, ВТ_Промежуточная.СчетВерхнийУровень, ВТ_Промежуточная.КорСчетВерхнийУровень, ВТ_Промежуточная.ВидДвижения, ВТ_Промежуточная.Субконто1, Организации.Ссылка, Организации.ИНН, ВЫБОР КОГДА ВТ_Промежуточная.ВидДвижения = "03.Затраты" ТОГДА ЕСТЬNULL(ВТ_Промежуточная.СтатьяЗатрат, "") ИНАЧЕ "" КОНЕЦ ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТ_Прибыль.Период, "", "", "", ВТ_Прибыль.Подразделение, "", 0, ВТ_Прибыль.ВидДвижения, ВТ_Прибыль.СуммаОборот, 0, 0, 0, 0, 0, "", "", "", "", "", "", "", "", "", Организации.Ссылка, Организации.ИНН ИЗ ВТ_Прибыль КАК ВТ_Прибыль ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации ПО ВТ_Прибыль.Организация = Организации.Ссылка УПОРЯДОЧИТЬ ПО Период, ВидДвижения
Остановимся подробнее на данной конструкции в запросе:
РегистрБухгалтерии.Хозрасчетный.Обороты(НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ), КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ))
Она позволяет передать в запрос один параметр с датой, в отличии от привычного многим, выбора «Начала периода» и «Окончания периода» в отчетах.
На этапе настройки набора данных оставляем все выбранные поля, кроме:
Параметры.Счет90;
Параметры.Счет9001;
Параметры.Счет9002;
Параметры.Счет91;
Параметры.Счет9101;
Параметры.Счет99.
Обратите внимание, поле «Параметры.Дата» должно быть выбрано, т.к. это параметр, по которому будет производиться сегментирование.
Теперь переходим во вкладку «Параметры» и указываем счета для передачи их в запрос в качестве параметра, указывая для каждого параметра в колонке «Значение» соответствующие счета:
90;
90.01;
90.02;
91;
91.01;
99.
На этапе настройки вычисляемых полей выбираем:
Субконто1Тип;
КорСубконто1Тип;
СтатьяЗатратГуид.
Затем выбираем подключение и создаем таблицу-приемник (6 и 7 этапы инструкции по созданию проекта). На этапе сопоставления полей проверяем установленный флаг для сегмента.
Этап расширенных настроек пропускаем и завершаем настройку проекта.
Затем задаем наименование проекту в соответствующем поле, затем заходим в настройки строки проекта с помощью кнопки .
Теперь настроим обработчик формирования очереди для первичной/полной выгрузки данных:
активируем переключатель «Обработчик:»;
выбираем вид «Предопределенный обработчик»;
выбираем сам обработчик «Инициализация очереди выгрузки по периоду»;
переходим к настройке параметров обработчика, здесь указываем:
Вид объекта — РегистрыБухгалтерии;
Имя объекта — Хозрасчетный;
Поле даты — Период;
Имя параметра — Дата;
Периодичность — Месяц.
Нажимаем «Сохранить и закрыть».
Переходим к настройке обработчика формирования очереди при изменении объектов:
устанавливаем флаг «Вкл.»;
указываем вид объекта: «РегистрыБухгалтерии»;
указываем имя объекта: «Хозрасчетный»;
выбираем вид «Предопределенный обработчик»;
выбираем сам обработчик «Регистрация изменений по периоду»;
переходим к настройке параметров обработчика, здесь указываем:
Поле даты — Период;
Имя параметра — Дата;
Режим — Стандартный;
Периодичность — Месяц.
Сохраняем параметры обработчика и нажимаем «Применить и закрыть» для настроек строки проекта.
Теперь осталось выполнить выгрузку: нажимаем поочередно кнопки «Записать», «Сформировать очередь» и «Выполнить проект».