сейчас полный код такой:
Код 1C v 8.2 УП
Function ПолучитьГруппуНоменклатуры(наименование,отказ)
ГруппаТоваров = Справочники.Номенклатура.НайтиПоНаименованию(наименование);
if ГруппаТоваров = Справочники.Номенклатура.ПустаяСсылка() or not ГруппаТоваров.ЭтоГруппа then
отказ = True;
EndIf;
return ГруппаТоваров;
EndFunction
//----------------------------------------------------------------------------
Function ПолучитьСклад(Отказ = False)
Stock = Справочники.Склады.НайтиПоНаименованию("Основной склад");
if Stock = Справочники.Склады.ПустаяСсылка() then
Отказ = TRUE;
EndIf;
return Stock;
EndFunction
//---------------------------------------------------------------------------
procedure log_errors(ErrorString,path="D:\root\Price.xls")
TextLog = new TextWriter();
TextLog.Open(trimAll(path)+"V8updateError.log", , ,TRUE);
TextLog.WriteLine(string(CurrentDate()) + "," + string(ErrorString));
TextLog.Close();
endprocedure
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
Procedure ExportPrice(path = "D:\root\Price.xls") export
var xlWBATWorksheet;
xlWBATWorksheet = -4167;
Отказ = False;
Склад = ПолучитьСклад(Отказ);
Group1 = ПолучитьГруппуНоменклатуры("1. Библиотеки, SAN и RAID-системы.",Отказ);
Group2 = ПолучитьГруппуНоменклатуры("2. Компоненты компьютерных систем",Отказ);
Group3 = ПолучитьГруппуНоменклатуры("3. Устройства и носители информации",Отказ);
Group4 = ПолучитьГруппуНоменклатуры("4. Компьютеры, серверы и терминалы.",Отказ);
Group5 = ПолучитьГруппуНоменклатуры("5. Оборудование SCSI, SATA, SAS",Отказ);
Group6 = ПолучитьГруппуНоменклатуры("6. Сетевое оборудование",Отказ);
Group7 = ПолучитьГруппуНоменклатуры("7. Программное обеспечение и услуги.",Отказ);
Group8 = ПолучитьГруппуНоменклатуры("8. Распродажа.",Отказ);
If Отказ then
log_errors("ошибка при выборе склада (Основной склад). Выгрузка остановлена",path);
return;
endIf;
Запрос = new Запрос();
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("Группа1",Group1);
Запрос.УстановитьПараметр("Группа2",Group2);
Запрос.УстановитьПараметр("Группа3",Group3);
Запрос.УстановитьПараметр("Группа4",Group4);
Запрос.УстановитьПараметр("Группа5",Group5);
Запрос.УстановитьПараметр("Группа6",Group6);
Запрос.УстановитьПараметр("Группа7",Group7);
Запрос.УстановитьПараметр("Группа8",Group8);
Запрос.Текст = "ВЫБРАТЬ
| NOME.Code,
| NOME.ParentCode,
| NOME.Groupflag,
| NOME.Description,
| NOME.FullDescr,
| ЦеныНоме.Цена1 КАК OptPrice,
| ЦеныНоме.Цена2 КАК MOptPrice,
| ЦеныНоме.Цена3 КАК RoznPrice,
| ВЫБОР
| КОГДА ПартииТоваровНаСкладахОстатки.КолОст > 0 ТОГДА ""СКЛАД""
| ИНАЧЕ ""ЗАКАЗ""
| КОНЕЦ КАК Numb,
| NOME.Ссылка КАК НоменклатураСсылка
|ПОМЕСТИТЬ Выборка
|ИЗ
| (ВЫБРАТЬ
| Номе.Ссылка КАК Ссылка,
| Номе.Код КАК Code,
| Номе.Родитель.Код КАК ParentCode,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ КАК Groupflag,
| Номе.Наименование КАК Description,
| Номе.Комментарий КАК FullDescr
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа1)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа2)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа3)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа4)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа5)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа6)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа7)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Номе.Ссылка,
| Номе.Код,
| Номе.Родитель.Код,
| ВЫБОР
| КОГДА Номе.ЭтоГруппа
| ТОГДА ""1""
| ИНАЧЕ ""0""
| КОНЕЦ,
| Номе.Наименование,
| Номе.Комментарий
| ИЗ
| Справочник.Номенклатура КАК Номе
| ГДЕ
| (Номе.НеВключатьВпрайс = 0
| ИЛИ Номе.ЭтоГруппа = ИСТИНА)
| И Номе.Ссылка В ИЕРАРХИИ(&Группа8)) КАК NOME
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СУММА(ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = ""00002""
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ) КАК Цена1,
| СУММА(ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = ""00003""
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ) КАК Цена2,
| СУММА(ВЫБОР
| КОГДА ЦеныНоменклатурыСрезПоследних.ТипЦен.Код = ""00004""
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ) КАК Цена3,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Товар
| ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| ,
| ТипЦен.Код = ""00002""
| ИЛИ ТипЦен.Код = ""00003""
| ИЛИ ТипЦен.Код = ""00004"") КАК ЦеныНоменклатурыСрезПоследних
|
| СГРУППИРОВАТЬ ПО
| ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК ЦеныНоме
| ПО NOME.Ссылка = ЦеныНоме.Товар
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СУММА(ПТНСОстатки.КоличествоОстаток) КАК КолОст,
| ПТНСОстатки.Номенклатура КАК НоменклатураСсылка
| ИЗ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, Склад = &Склад) КАК ПТНСОстатки
|
| СГРУППИРОВАТЬ ПО
| ПТНСОстатки.Номенклатура) КАК ПартииТоваровНаСкладахОстатки
| ПО NOME.Ссылка = ПартииТоваровНаСкладахОстатки.НоменклатураСсылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Выборка.Code,
| Выборка.ParentCode,
| Выборка.Groupflag КАК Groupflag,
| Выборка.Description,
| Выборка.FullDescr,
| Выборка.OptPrice,
| Выборка.MOptPrice,
| Выборка.RoznPrice,
| Выборка.Numb,
| Выборка.НоменклатураСсылка КАК НоменклатураСсылка
|ИЗ
| Выборка КАК Выборка
|
|УПОРЯДОЧИТЬ ПО
| НоменклатураСсылка ИЕРАРХИЯ,
| Выборка.НоменклатураСсылка.Родитель ИЕРАРХИЯ,
| Выборка.НоменклатураСсылка.Код,
| Groupflag";
counter = 0;
Try
excel = new COMОбъект("Excel.Application");
Except
log_errors("ошибка при создании Excel документа. Выгрузка остановлена",path);
return;
EndTry;
try
ЗапросПрайс = Запрос.Выполнить().Выгрузить();
except
log_errors(ОписаниеОшибки(),path);
return;
endTry;
Try
excel.Application.DisplayAlerts = False;
excel.Application.Workbooks.Add(xlWBATWorksheet);
eBook = excel.Workbooks.Item(excel.Workbooks.Count);
eSheet = EBook.ActiveSheet;
//Группировка прайса///////////////////////////////////
// Excel.ActiveSheet.Rows("3:305").Group();
// Excel.ActiveSheet.Rows("307:1259").Group();
// Excel.ActiveSheet.Rows("1261:1402").Group();
// Excel.ActiveSheet.Rows("1404:1833").Group();
// Excel.ActiveSheet.Rows("1835:2085").Group();
// Excel.ActiveSheet.Rows("2087:2107").Group();
// Excel.ActiveSheet.Rows("2109:2287").Group();
// Excel.ActiveSheet.Rows("2289:2366").Group();
///////////////////////////////////////////////////////////
eSheet.Columns(2).ColumnWidth = 100; // Ширина колонки 2
//Шапка в прайсе///////////////////////////////////////////////////
eSheet.Cells(1,1).Value = "Код";
eSheet.Cells(1,1).Font.Size = 14;
eSheet.Cells(1,1).Font.Bold = 1;
eSheet.Cells(1,2).Value = "Наименование";
eSheet.Cells(1,2).Font.Size = 14;
eSheet.Cells(1,2).Font.Bold = 1;
eSheet.Cells(1,3).Value = "Цена";
eSheet.Cells(1,3).Font.Size = 14;
eSheet.Cells(1,3).Font.Bold = 1;
eSheet.Cells(1,4).Value = "Кол-во";
eSheet.Cells(1,4).Font.Size = 14;
eSheet.Cells(1,4).Font.Bold = 1;
////////////////////////////////////////////////////////////////////
Для каждого СтрокаПрайс Из ЗапросПрайс Цикл
eSheet.Cells(counter+2,1).Value = СтрокаПрайс.Code;
// eSheet.Cells(counter+1,1).Value = СтрокаПрайс.ParentCode;
// eSheet.Cells(counter+2,5).Value = СтрокаПрайс.Groupflag;
eSheet.Cells(counter+2,2).Value = СтрокаПрайс.Description;
//eSheet.Cells(counter+1,5).Value = СтрокаПрайс.FullDescr;
// eSheet.Cells(counter+2,3).Value = СтрокаПрайс.OptPrice;
// eSheet.Cells(counter+1,7).Value = СтрокаПрайс.MOptPrice;
eSheet.Cells(counter+2,3).Value = СтрокаПрайс.RoznPrice;
eSheet.Cells(counter+2,4).Value = СтрокаПрайс.Numb;
if СтрокаПрайс.Groupflag <> 1 then
counter = counter + 1;
endif;
КонецЦикла;
eBook.SaveAs ((path), -4143); //сохранение по пути прописанной в переменной path в формате Excel 2003
//eBook.SaveCopyAs (trimAll(string(path)));
log_errors("Выгрузка окончена. Выгружено " + String(counter) + " номенклатурных позиций ",path);
Except
log_errors(ОписаниеОшибки(),path);
excel.Quit();
EndTry;
excel.Quit();
EndProcedure