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

05.04.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Работа с иерархическими справочниками - выгрузка в дерево, рекурсивная выгрузка в Excel. Полное оформление ячеек.:
.epf 19,45Kb
7
7 Скачать (1 SM) Купить за 1 850 руб.

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

	// выгребаем запросом и кидаем в Дерево с ценами
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                   |	ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
                   |	ТоварыНаСкладахОстатки.Характеристика КАК Характеристика
                   |ПОМЕСТИТЬ втОстатки
                   |ИЗ
                   |	РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
                   |
                   |ИНДЕКСИРОВАТЬ ПО
                   |	Номенклатура,
                   |	Характеристика
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |	втОстатки.Номенклатура.ЭтоГруппа КАК Группа,
                   |	втОстатки.Номенклатура КАК Номенклатура,
                   |	втОстатки.Характеристика КАК Характеристика,
                   |	втОстатки.ВНаличииОстаток КАК Остаток,
                   |	ЕСТЬ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

См. также

SALE! 20%

Загрузка и выгрузка в 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С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

6000 5100 руб.

09.11.2016    234130    1062    898    

1003

Загрузка и выгрузка в 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 дней БЕСПЛАТНОГО пользования!

2400 руб.

12.08.2021    35491    348    68    

155

SALE! 30%

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

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    106922    313    173    

326

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

15600 руб.

20.11.2015    156054    376    378    

513

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

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» в 1С из Отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

4800 руб.

09.12.2020    25342    252    1    

114

SALE! 15%

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

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

11100 9435 руб.

29.10.2014    216743    657    527    

456
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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, ближе к концу недели планирую, познавательно. Возможно, будет даже лучше выделить в отдельную статью, особенно группировку строк
Оставьте свое сообщение