Работа с иерархическими справочниками - выгрузка в дерево, подключение характеристик, остатков, рекурсивная выгрузка в Excel с оформлением групп и ячеек

05.04.22

Интеграция - Загрузка и выгрузка в Excel

Максимально простая работа с иерархическим справочниками, дополненными характеристиками и остатками. Выгрузка в дерево и рекурсивный вывод в файл Excel с любым количеством группировок. Выделение и оформление групп, в том числе и цветами. Работа со шрифтами, ячейками, строками, областями. Новичкам будет полезно разобраться, код снабжен обильными комментариями.

Скачать исходный код

Наименование Файл Версия Размер
Работа с иерархическими справочниками - выгрузка в дерево, рекурсивная выгрузка в Excel. Полное оформление ячеек.:
.epf 19,45Kb
7
.epf 19,45Kb 7 Скачать

Дерево значений идеально подходит для выгрузки иерархии:

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

Рекурсия - обязательный ингредиент для обхода дерева (форматируем ячейки по ходу):

Процедура ВывестиДеревоВЭксель(СтрокиДерева, Лист, НомерСтроки, ВнешнийБланк)  // ТЕСТ перед переносом в Модуль
  	Для Каждого стрДерева из СтрокиДерева Цикл 
		Лист.Range(Лист.cells(НомерСтроки,1),Лист.cells(НомерСтроки,6)).Borders.Linestyle = 1; // тонкая линия вокруг ячеек
		Лист.Cells(НомерСтроки,1).NumberFormat = "@"; //"@" - текстовый  "0.00" - числовой
		Лист.cells(НомерСтроки,1).value = ?(стрДерева.Группа, "", Строка(стрДерева.Штрихкод));
	
		Если стрДерева.Группа Тогда // Форматируем строку ГРУППЫ  
			Если стрДерева.Уровень() = 0 Тогда // исключительно для Корня с уровнем 0
				Лист.Rows(НомерСтроки).Font.Size = 14;
				Лист.Rows(НомерСтроки).Font.Bold = 1;
				Лист.Rows(НомерСтроки).HorizontalAlignment = -4108; //По центру -4108
				Лист.Range(Лист.cells(НомерСтроки,1),Лист.cells(НомерСтроки,6)).Interior.Color = ПолучитьЦветExcelRGB(255, 255, 0); // залить желтым
			Иначе	
				Лист.Rows(НомерСтроки).Font.Size = 12;
				Лист.Rows(НомерСтроки).Font.Bold = 1;
				Лист.Range(Лист.cells(НомерСтроки,1),Лист.cells(НомерСтроки,6)).Interior.Color = ПолучитьЦветExcelRGB(50, 205, 50); // красим группу в салатовый			
			КонецЕсли;  
			Лист.cells(НомерСтроки,2).value = Строка(стрДерева.Номенклатура); // выводим только Номенклатуру
		Иначе // это детальные записи
			Лист.cells(НомерСтроки,2).value = Строка(стрДерева.Номенклатура) + "  /" + Строка(стрДерева.Характеристика) + "/";
			Если ВнешнийБланк Тогда
				Лист.cells(НомерСтроки,4).value = стрДерева.Цена; // выводим цену в ячейку			
				// красим ячейку в нужный цвет
				Если стрДерева.Остаток < 5 Тогда //красный
			  	 	Лист.Cells(НомерСтроки,3).Interior.Color = ПолучитьЦветExcelRGB(255,0,0);
			  	ИначеЕсли стрДерева.Остаток < 10 Тогда //желтый
			 	 	Лист.Cells(НомерСтроки,3).Interior.Color = ПолучитьЦветExcelRGB(255,255,0);
				Иначе //Зеленый 
					Лист.Cells(НомерСтроки,3).Interior.Color = ПолучитьЦветExcelRGB(0,255,0);
				КонецЕсли;
			Иначе // на внутреннем бланке нужно количество в цифрах, а цена не нужна
				Лист.cells(НомерСтроки,3).value = СтрЗаменить(стрДерева.Остаток,Символы.НПП,""); // убрать неразрывный пробел между тысячами Строка(стрДерева.Остаток);
			КонецЕсли;
			Лист.Cells(НомерСтроки,5).Interior.Color = ПолучитьЦветExcelRGB(255,200,200); //красим поле "необходимое количество"					
			Лист.Cells(НомерСтроки,6).FormulaLocal = "=RC[-2]*RC[-1]";
		КонецЕсли;  
		
		НомерСтроки = НомерСтроки + 1; // идем на следующую строку

		Если стрДерева.Строки.Количество() <> 0 Тогда // рекурсия 
				ВывестиДеревоВЭксель(стрДерева.Строки, Лист, НомерСтроки, ВнешнийБланк);
		КонецЕсли;	
	КонецЦикла;	
КонецПроцедуры

 

Тестировал на УТ 11.4.13.155.

Чуть позже добавлю полный справочник по командам Excel.

Дерево рекурсия Excel

См. также

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    212320    630    526    

446

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

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

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    152120    368    376    

503

Маркетплейсный загрузчик для 12-ти маркетплейсов в 1С:БП 3, УТ 11, КА 2, ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    32602    252    65    

126

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

Загрузка и выгрузка в Excel Оптовая торговля Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    217332    935    886    

946

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15482    83    0    

64

Универсальная загрузка остатков и цен поставщиков в 1С (УТ 11, КА 2, ERP 2.0) из файлов Excel, CSV, XML (YML и CML)

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

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

18000 руб.

23.01.2017    59142    65    48    

69
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SlavaKron 05.04.22 15:56 Сейчас в теме
В чём преимущество формирования файла excel через ком-объект по сравнению с табличным документом?
2. Rafaraf 37 05.04.22 16:15 Сейчас в теме
возможность форматирования на "ходу", управляя ячейками Excel напрямую. Понятно, что решение только под Windows
3. SlavaKron 05.04.22 16:23 Сейчас в теме
(2) Но ведь форматировать на ходу можно и ячейки табличного документа, то есть без всяких макетов, ровно так же, как вы это делаете с листом excel.
4. Rafaraf 37 05.04.22 16:25 Сейчас в теме
(3)
Но ведь форматировать на ходу можно и ячейки табличного документа, то есть без всяких макетов, ровно так же, как вы это делаете с листом excel.

Формулы можно вставлять ? вынесутся ли они в файл, который нужно отправить заказчику? Как будет лого позиционироваться ? там всяких камешков насыпано столько, что лучше уже на ходу с нуля собрать файл, как сделано в примере
5. SlavaKron 05.04.22 16:33 Сейчас в теме
(4) Формулы – нет, но в вашем листинге формирования дерева не увидел использование формул. Про картинку не в курсе, есть ли проблемы с сохранением. Я не критикую, просто для данной задачи показалось проще использовать ТабДок.

Публикация, как я понял, будет больше интересна как пример работы со свойствами объектов Excel. Если будет отдельная статья по ним, то еще лучше.
6. Rafaraf 37 05.04.22 16:42 Сейчас в теме
(5) формул там навалом ) и лого плавает )
да, я хочу дополнить статью полным справочником по работе с Excel, ближе к концу недели планирую, познавательно. Возможно, будет даже лучше выделить в отдельную статью, особенно группировку строк
Оставьте свое сообщение