Обход по группировкам в запросе, соединение таблиц, параметры в запросе, выгрузка прайс-листа в Excel, PDF, Docx, TXT

18.07.22

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

В помощь начинающим программистам. Использую обработку из предыдущей моей публикации для разработки выгрузки Прайс-листа в Excel, PDF, Docx, TXT. Рассмотрю, как работает обход результата запроса ПоГруппировкам (релиз платформы 1С:Предприятие 8.3 (8.3.20.1674), самописная конфигурация).

ЗАДАЧА: необходимо реализовать механизм выгрузки Прайс-листа нашей организации (номенклатура в наличии, с актуальными ценами), с возможностью отбора по Складу.

 

  • Возьмем обработку из предыдущей моей публикации и модифицируем под текущую задачу.
  • Копируем обработку. Меняем название на ВыгрузкаПрайсаВФайл. Добавляем реквизит: Склад (Тип: СправочникСсылка.Склады)
  • Разместим реквизит Склад на форме обработки.

 

 

  • Доработаем Макет. В моем варианте печатная форма Прайса будет иметь такой вид. Как редактировать макет печатных форм можно посмотреть уроки в Интернете.

 

 

  • Код функции ЗаполнитьТаблицуНаСервере изменим следующим образом:
 
 Функция ЗаполнитьТаблицуНаСервере(ТабДок, Склад)   
	 
	 Макет = Обработки.ВыгрузкаПрайсаВФайл.ПолучитьМакет("Макет");
	 ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); 
	 ОбластьКатегория = Макет.ПолучитьОбласть("ОблКатегория");  
	 ОбластьШапка = Макет.ПолучитьОбласть("ОблШапка");
	 ОбластьСклад = Макет.ПолучитьОбласть("ОблСклад");
	 ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); 
	 ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	 
	 Запрос = Новый Запрос; 
	 Запрос.Текст = 
	 "ВЫБРАТЬ
	 |	Товары.Родитель КАК Категория,
	 |	Товары.Наименование КАК Наименование,
	 |	ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток,0) КАК Количество,
	 |	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
	 |	ОстаткиТоваровОстатки.Склад КАК Склад
	 |ИЗ
	 |	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
	 |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары   
	 |
	 |		ПРАВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки() КАК ОстаткиТоваровОстатки
	 |		ПО ОстаткиТоваровОстатки.Номенклатура = Товары.Ссылка
	 |		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Товары.Ссылка  
	 |
	 |ГДЕ 
	 |	ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток,0) > 0 И НЕ Товары.ПометкаУдаления  
	 |	И 
	 |		(НЕ &ОтборПоСкладу ИЛИ (ОстаткиТоваровОстатки.Склад = &Склад))	
	 |
	 |УПОРЯДОЧИТЬ ПО
	 |	Категория, 
	 |	Склад,
	 |	Наименование,	
	 |	Количество
	 |ИТОГИ ПО 
	 |	Склад, Категория";
	 
	 
	 Запрос.УстановитьПараметр("ОтборПоСкладу", ЗначениеЗаполнено(Склад));
	 Запрос.УстановитьПараметр("Склад", Склад); 
	 
	 РезультатЗапроса = Запрос.Выполнить();
	 
	 Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	 
	 ОбластьЗаголовок.Параметры.Дата = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
	 ТабДок.Вывести(ОбластьЗаголовок);  
	 
	 Пока Выборка.Следующий() Цикл
		 ОбластьСклад.Параметры.Склад = "Склад " + Выборка.Склад; 
		 ТабДок.Вывести(ОбластьСклад); 
		 ТабДок.Вывести(ОбластьШапка);
		 
		 ВыборкаКатегория = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); 
		 
		 Пока ВыборкаКатегория.Следующий() Цикл
			 ОбластьКатегория.Параметры.Категория = ВыборкаКатегория.Категория; 
			 ТабДок.Вывести(ОбластьКатегория);  
			 
			 ВыборкаДетальныеЗаписи = ВыборкаКатегория.Выбрать();
		 
			 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
				 ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
				 ТабДок.Вывести(ОбластьСтрока)		
			 КонецЦикла; 
			 ТабДок.Вывести(ОбластьПодвал);
			КонецЦикла;

	 КонецЦикла;  
	 
	 Возврат(ТабДок);
	 
 КонецФункции
 

 

  • Обратите внимание: в функцию теперь передается второй параметр - Склад. Для этого в процедуре КнопкаВыгрузить передаем параметр Объект.Склад
//Заполним ТабДок на сервере
		ЗаполнитьТаблицуНаСервере(ТабДок, Объект.Склад);

 

Рассмотрим детально запрос

ВЫБРАТЬ
        ОстаткиТоваровОстатки.Склад КАК Склад,
	 	Товары.Родитель КАК Категория,
	 	Товары.Наименование КАК Наименование,
	 	ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток,0) КАК Количество,
	 	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
	 	
	 ИЗ
	 	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
	 		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары   
	 
	 		ПРАВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки() КАК ОстаткиТоваровОстатки
	 		ПО ОстаткиТоваровОстатки.Номенклатура = Товары.Ссылка
	 		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Товары.Ссылка  
	 
	 ГДЕ 
	 	ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток,0) > 0 И НЕ Товары.ПометкаУдаления  
	 	И 
	 		(НЕ &ОтборПоСкладу ИЛИ (ОстаткиТоваровОстатки.Склад = &Склад))	
	 
	 УПОРЯДОЧИТЬ ПО
	 	Категория, 
	 	Склад,
	 	Наименование,	
	 	Количество
	 ИТОГИ ПО 
	 	Склад, 
		Категория

Нам необходимо получить список товаров, которые имеются в наличии на складах, а также наиболее актуальную цену.

  • Общаемся в запросе к Соединению таблиц: Справочника "Номенклатура", виртуальной таб. СрезПоследних Регистра сведений "ЦеныНоменклатуры" и Регистру накопления - "ОстаткиТоваров". Соединяем по полю Номенклатура

Обратите внимание: таблице Справочник.Номенклатура я задала псевдоним "Товары", во избежание возникновения ошибок при исполнении запроса, поскольку название таблицы совпадает с наименованием полей регистров.

  • Не задаем параметр Период для регистров, поскольку нам нужны самые "свежие" остатки товаров и цены.
  • В секции ГДЕ указываем, что нас интересуют товары, имеющиеся в наличии и не помеченные на удаление.
  • А также проверяем не пусто ли значение параметра Склад. В случае, если пользователь не выбрал на форме интересующий Склад, в прайс пойдет информация по всем складам.
  • Сгруппируем ИТОГИ ПО Складу и Категории
  • Установим параметры.

 

Результат запроса в консоли выглядит так:

 

 

В результирующем запросе у нас есть ИТОГИ, поэтому обходить результат будем ПоГруппировкам, а затем выберем Детальные записи.

Более подробно об этом типе обхода советую прочесть в Главе.2 книги "Язык запросов 1С: Предприятие" Е.Ю. Хрусталевой.

  • В цикле мы получаем записи группировки 1-го уровня (Склад), во вложенном цикле записи группировки 2-го уровня (Категория) и в выборке детальных записей - сами строки с номенклатурой.

 

  • Получаем Макет. Области макета. В обходах выборки заполняем параметры. И возвращаем ТабДок.

 

Наша обработка готова. 

На первом скрине: на форме склад не был выбран, Прайс выгружен в формат PDF .

На первом скрине: результат с отбором по складу, Прайс выгружен в формат XLS.

 

   

 

Пробуйте, запускайте.

Успешной работы!

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    136429    755    391    

782

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    137510    752    292    

400

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3.87.x и УТ 11.5.16.x

28000 руб.

23.07.2020    48034    209    64    

170

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 руб.

15.04.2019    69866    172    143    

113

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

14580 руб.

18.02.2016    184203    570    509    

515

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.228.x) и БП 3.0 (3.0.154.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    21485    139    40    

98

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 руб.

03.12.2020    35049    85    59    

82

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)

Переход и перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.227.x), ERP 2.5 (2.5.16.x), КА 2.5 (2.5.16.x) .

28000 руб.

24.06.2020    62052    48    27    

79