Имя: Пароль:
1C
1С v8
Не корректно работает выгрузка в Excel
0 Alex70
 
07.08.18
04:42
Всем привет! На форме есть кнопку "Выгрузить в Excel" по нажатию на которую открывается окно для выбора пути сохранения файла, после пользователь выбирает путь и вводит имя файла, жмет ОК после чего необходимо выгрузить структуру в Excel, документ формируется согласно макету созданному в 1С, но данные не загружает в ЕКСЕЛ. Тестировал запрос с помощью обработки "Консоль отчетов" все выводится. Что делаю не так подскажите?
________________________________________________________________
Процедура КоманднаяПанельТоварыВыгрузитьДеревоСпецификаций(Кнопка = Неопределено, ПутьКФайлу = "", Спецификация = Неопределено)
    
    Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
        ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
        ДиалогВыбораФайла.Заголовок = "Задайте имя файла выгрузки";
        
        ДиалогВыбораФайла.Фильтр = "Формат выгрузки(*.xls)|*.xls|Лист Excel 2007 (*.xlsx)|*.xlsx";
        Если ДиалогВыбораФайла.Выбрать() Тогда
            ПолеИмениФайла = ДиалогВыбораФайла.ПолноеИмяФайла;
        КонецЕсли;
        
        Если НЕ ЗначениеЗаполнено(ПолеИмениФайла) Тогда
            Возврат;    
        КонецЕсли;        
    Иначе
        ПолеИмениФайла = ПутьКФайлу;
    КонецЕсли;
// Получаем текущую строку
    ТекСтрока = ЭлементыФормы.Товары.ТекущаяСтрока;
    
    ТекущаяНоменклатура = ТекСтрока.Номенклатура;
    
    //ТекущееКоличество = ТекСтрока.Итого;    
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("МакетДереваСпецификаций");
    
    ОбластьШапкаОсновное = Макет.ПолучитьОбласть("Шапка|Основное");
    ОбластьШапкаКолонка = Макет.ПолучитьОбласть("Шапка|Колонка");

    ТабличныйДокумент.Вывести(ОбластьШапкаОсновное);
    ТабличныйДокумент.Присоединить(ОбластьШапкаКолонка);
    
    ОбходДереваСпецификаций(Макет, ТабличныйДокумент, 0, Спецификация = Неопределено, ТекущаяНоменклатура);
    
    Если Прав(ПолеИмениФайла,3) = "xls" Тогда
        ТабличныйДокумент.Записать(ПолеИмениФайла,ТипФайлаТабличногоДокумента.XLS);
    Иначе
        ТабличныйДокумент.Записать(ПолеИмениФайла,ТипФайлаТабличногоДокумента.XLSX);
    КонецЕсли;

    Книга = Неопределено;
    Попытка
        олеЕксель = новый COMОбъект("Excel.Application");
        Книга = олеЕксель.Workbooks.Open(ПолеИмениФайла);
        Книга.Application.DisplayAlerts = False;
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
Книга.Save();    
    
    Книга.Application.Quit();
    
КонецПроцедуры
_________________________________________________________________
Процедура ОбходДереваСпецификаций(Макет, ТабличныйДокумент, Уровень, Спецификация = Неопределено, ТекущаяНоменклатура)
                
    // Определяем спецификацию поумолчанию
    Если Спецификация = Неопределено Тогда
        СпецификацияОбхода = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(ТекущаяНоменклатура,,ТекущаяДата());  // Узел.Номенклатура
    Иначе
        СпецификацияОбхода = Спецификация;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(СпецификацияОбхода) Тогда
        Возврат;
    КонецЕсли;
    
    ЗапросПодборКомплектующих = Новый Запрос;
    ЗапросПодборКомплектующих.Текст = "ВЫБРАТЬ
                                      |    СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура,
                                      |    СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.Артикул,
                                      |    СпецификацииНоменклатурыИсходныеКомплектующие.Количество,
                                      |    СпецификацииНоменклатурыИсходныеКомплектующие.НомерСтроки
                                      |ИЗ
                                      |    Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
                                      |ГДЕ
                                      |    СпецификацииНоменклатурыИсходныеКомплектующие.Спецификация = &Спецификация";
                                      
    ЗапросПодборКомплектующих.УстановитьПараметр("Спецификация", СпецификацияОбхода);
    
    ВыборкаПодборКомплектующих = ЗапросПодборКомплектующих.Выполнить().Выбрать();
    
    Пока ВыборкаПодборКомплектующих.Следующий() Цикл

    Если Уровень = 0 Тогда
            ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка|ОсновноеСтрока");
            ОбластьСтрокаКолонка = Макет.ПолучитьОбласть("Строка|КолонкаСтрока");
        ИначеЕсли Уровень > 6 Тогда
            ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка7|ОсновноеСтрока7");
            ОбластьСтрокаКолонка = Макет.ПолучитьОбласть("Строка7|КолонкаСтрока7");
        Иначе
            ОбластьСтрокаОсновное = Макет.ПолучитьОбласть("Строка"+Уровень+"|ОсновноеСтрока"+Уровень);
            ОбластьСтрокаКолонка = Макет.ПолучитьОбласть("Строка"+Уровень+"|КолонкаСтрока"+Уровень);
        КонецЕсли;
ОбластьСтрокаОсновное.Параметры.Номер = ВыборкаПодборКомплектующих.НомерСтроки;
        ОбластьСтрокаОсновное.Параметры.Наименование = ВыборкаПодборКомплектующих.Номенклатура;
        ОбластьСтрокаОсновное.Параметры.Артикул = ВыборкаПодборКомплектующих.Номенклатура.Артикул;
        
        ТабличныйДокумент.Вывести(ОбластьСтрокаОсновное);
                    
        ОбластьСтрокаКолонка.Параметры.Количество = ВыборкаПодборКомплектующих.Количество;// Строка.Количество; //* Узел.Количество;
        ТабличныйДокумент.Присоединить(ОбластьСтрокаКолонка);
                    
        ТабличныйДокумент.Показать();
        
        //Если ВыборкаПодборКомплектующих.Строки.Количество() > 0 Тогда
        //    
        //    ТабличныйДокумент.НачатьГруппуСтрок();
        //    
        //КонецЕсли;
            
        ОбходДереваСпецификаций(Макет, ТабличныйДокумент, Уровень + 1, Спецификация = Неопределено, ТекущаяНоменклатура);
        
        //Если ВыборкаПодборКомплектующих.Строки.Количество() > 0 Тогда
        //    
        //    ТабличныйДокумент.ЗакончитьГруппуСтрок();
        //    
        //КонецЕсли;
                
    КонецЦикла;
    
КонецПроцедуры
1 hhhh
 
07.08.18
23:36
(0) чего-то записываешь файл и тут же через наносекунду уже читаешь. Дай хоть ему время записаться.