Вывести прайс лист с группировками из 1с в excel
Переделываю чужую обработку. ERP переписанная. Не знаю как выполнить группировку по номенклатуре в excel. Помогите разобраться.
В интернете очень мало чего нашла,ничего не подходит....
В интернете очень мало чего нашла,ничего не подходит....
Процедура ВыгрузитьШаблоны() Экспорт
Если глПустоеЗначение(КаталогШаблонов) Тогда
глСообщить(ЭтотОбъект,"Не указан каталог сохранения шаблонов заказов!");
Возврат;
КонецЕсли;
Для Каждого _Контрагент Из ТЧКонтрагенты Цикл
Если _Контрагент.ВыгружатьШаблон = Истина Тогда
ВыгрузитьШаблон(_Контрагент);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ВыгрузитьШаблон(ВхСтрокаКонтрагент)
ActiveDOC = ПолучитьМакет("ШаблонЗаказа");
COMobject = ActiveDOC.Получить();
Лист = COMobject.WorkSheets(1);
Лист.Cells(2,4).Value = СокрЛП(ВхСтрокаКонтрагент.Контрагент.Код);
Лист.Cells(3,4).Value = СокрЛП(ВхСтрокаКонтрагент.Контрагент.Наименование);
Лист.Cells(4,4).Value = СокрЛП(ВхСтрокаКонтрагент.Контрагент.Адрес);
//COMobject.Application.Visible = 1;
COMobject.Windows(1).Visible = 1;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВариантыИсполнения.Владелец КАК Номенклатура,
| ВариантыИсполнения.Ссылка КАК ВИ
|ИЗ
| Справочник.ВариантыИсполнения КАК ВариантыИсполнения
|ГДЕ
| ВариантыИсполнения.ПометкаУдаления = ЛОЖЬ
| И ВариантыИсполнения.Владелец.ПометкаУдаления = ЛОЖЬ
| И ВариантыИсполнения.Владелец В ИЕРАРХИИ(&Номенклатура)
| И ВариантыИсполнения.Активность
| И ВариантыИсполнения.Владелец.Активность
| И ВариантыИсполнения.ТипВИ = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовИсполнения.Стандартный)
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ,
| ВИ";
Запрос.УстановитьПараметр("Номенклатура", НоменклатураИерархия.ВыгрузитьЗначения());
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
_й=9;
//Док=Новый ТабличныйДокумент;
// Док.НачатьАвтогруппировкуСтрок();
// Пока ВыборкаНоменклатура.Следующий() Цикл
// Если ВыборкаНоменклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
// Область = ОбластьГруппаИерархия;
// Иначе
// Область = ОбластьГруппа;
// КонецЕсли;
//
// Область.Параметры.Заполнить(ВыборкаГруппа);
// Док.Вывести(Область,ВыборкаНоменклатура.Уровень());
//
// ВыборкаСтрока = ВыборкаНоменклатура.Выбрать();
//
// Пока ВыборкаСтрока.Следующий()Цикл
// ОбластьСтрока.Параметры.Заполнить(ВыборкаСтрока);
// Док.Вывести(ОбластьСтрока,ВыборкаСтрока.Уровень(),,Ложь);
// КонецЦикла;
//КонецЦикла;
//
//Док.ЗакончитьАвтогруппировкуСтрок();
Пока ВыборкаНоменклатура.Следующий() Цикл
ВывестиСтроку(ВыборкаНоменклатура,_й,Лист);
КонецЦикла;
COMobject.SaveAs(КаталогШаблонов+"\"+РегистрыСведений.ВнешниеКоды.ПолучитьВнешнийКодПоСсылке(ВхСтрокаКонтрагент.Контрагент,"МебельМосква")+"_ШаблонЗаказа.xlsx");
// Выйти из Excel.
COMobject.Application.Quit();
КонецПроцедуры
Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист)
Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = СокрЛП(ВхВыборка.Номенклатура.Код);
ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
ВхЛист.Cells(Итератор,5).Value = "";
ВхЛист.Cells(Итератор,6).Value = "";
ВхЛист.Cells(Итератор,2).Font.Bold = 1;
ВхЛист.Cells(Итератор,3).Font.Bold = 1;
ВхЛист.Cells(Итератор,4).Font.Bold = 1;
ВхЛист.Cells(Итератор,5).Font.Bold = 1;
ВхЛист.Cells(Итератор,6).Font.Bold = 1;
Итератор = Итератор + 1;
ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаНоменклатура.Следующий() Тогда
ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
КонецЕсли;
Иначе
Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаНоменклатура.Следующий() Тогда
ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
КонецЕсли;
Иначе
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = _ШК;
ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
ВхЛист.Cells(Итератор,6).Value = "";
Итератор = Итератор + 1;
Пока ВхВыборка.Следующий() Цикл
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = _ШК;
ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
ВхЛист.Cells(Итератор,6).Value = "";
Итератор = Итератор + 1;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Всякие полезности
- Контроль себестоимости покупного товара и ценообразование в "1С:Управление торговлей 10.3»
- Формирование в УТ 10.3 прайс-листов с выгрузкой в Excel 2003 с картинками товара в примечаниях (пиктограммами)
- Обход по группировкам в запросе, соединение таблиц, параметры в запросе, выгрузка прайс-листа в Excel, PDF, Docx, TXT
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
помогите пожалуйста.... вот такой макет
Наверно надо все переделывать,чтобы добиться группировки. Надо чтоб все данные выводились сначала в табдок,а потом только записывались в excel. Может можно просто здесь как нибудь сделать?
Наверно надо все переделывать,чтобы добиться группировки. Надо чтоб все данные выводились сначала в табдок,а потом только записывались в excel. Может можно просто здесь как нибудь сделать?
Прикрепленные файлы:
В коде отлавливать. Добавить условие проверки. Вы же последовательно выводите строки. Запомнили номер первой строки, вывели первую группу, запомнили номер последней строки. Сгруппировали. Выводите дальше.
Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист)
номерстр =0;
Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда
номерстр =номерстр+1;
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = СокрЛП(ВхВыборка.Номенклатура.Код);
ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
ВхЛист.Cells(Итератор,5).Value = "";
ВхЛист.Cells(Итератор,6).Value = "";
ВхЛист.Cells(Итератор,2).Font.Bold = 1;
ВхЛист.Cells(Итератор,3).Font.Bold = 1;
ВхЛист.Cells(Итератор,4).Font.Bold = 1;
ВхЛист.Cells(Итератор,5).Font.Bold = 1;
ВхЛист.Cells(Итератор,6).Font.Bold = 1;
Итератор = Итератор + 1;
ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаНоменклатура.Следующий() Тогда
ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
КонецЕсли;
ВхЛист.Range(ВхЛист.Cells(номерстр,номерстр)).Select(); //Выделение
ВхЛист.Selection.Rows.Group(); //Группировка
Сообщить(номерстр);
Иначе
Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаНоменклатура.Следующий() Тогда
ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
КонецЕсли;
Иначе
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = _ШК;
ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
ВхЛист.Cells(Итератор,6).Value = "";
Итератор = Итератор + 1;
Пока ВхВыборка.Следующий() Цикл
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = _ШК;
ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
ВхЛист.Cells(Итератор,6).Value = "";
Итератор = Итератор + 1;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьВот так ?
Ошибка выходит:ВхЛист.Range(ВхЛист.Cells(номерстр,номерстр)).Select(); //Выделение
по причине:
Произошла исключительная ситуация (0x800a03ec)
(13)поправила немного код,но все равно
Поле объекта не обнаружено (Selection)
COMobject.Selection.Rows.Group(); //Группировка
Поле объекта не обнаружено (Selection)
COMobject.Selection.Rows.Group(); //Группировка
Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист,COMobject)
номерстр =0;
Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда
номерстр =номерстр+1;
ВхЛист.Cells(Итератор,2).Value = Строка(Итератор);
ВхЛист.Cells(Итератор,3).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Код));
ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
ВхЛист.Cells(Итератор,5).Value = "";
ВхЛист.Cells(Итератор,6).Value = "";
ВхЛист.Cells(Итератор,2).Font.Bold = 1;
ВхЛист.Cells(Итератор,3).Font.Bold = 1;
ВхЛист.Cells(Итератор,4).Font.Bold = 1;
ВхЛист.Cells(Итератор,5).Font.Bold = 1;
ВхЛист.Cells(Итератор,6).Font.Bold = 1;
Итератор = Итератор + 1;
ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаНоменклатура.Следующий() Тогда
ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист,COMobject);
КонецЕсли;
ВхЛист.Range(ВхЛист.Cells(номерстр,2), ВхЛист.Cells(номерстр,2)).Select(); //Выделение
COMobject.Selection.Rows.Group(); //Группировка
Сообщить(номерстр);
Иначе
Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаНоменклатура.Следующий() Тогда
ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист,COMobject);
КонецЕсли;
Иначе
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = _ШК;
ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
ВхЛист.Cells(Итератор,5).Value = Строка(СокрЛП(ВхВыборка.ВИ.Наименование));
ВхЛист.Cells(Итератор,6).Value = "";
Итератор = Итератор + 1;
Пока ВхВыборка.Следующий() Цикл
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
ВхЛист.Cells(Итератор,2).Value = Итератор;
ВхЛист.Cells(Итератор,3).Value = _ШК;
ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
ВхЛист.Cells(Итератор,5).Value = Строка(СокрЛП(ВхВыборка.ВИ.Наименование));
ВхЛист.Cells(Итератор,6).Value = "";
Итератор = Итератор + 1;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот