Имя: Пароль:
1C
1С v8
Диалог выбора каталога
0 Baumgartlinger
 
07.02.19
17:54
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытия.Каталог = "";
    ДиалогОткрытия.МножественныйВыбор = Ложь;
    ДиалогОткрытия.Заголовок = "Выберите каталог";
    
    Если ДиалогОткрытия.Выбрать() Тогда
        ПутьККаталогу = ДиалогОткрытия.Каталог;
    КонецЕсли;
    
    Для каждого строка из Табл Цикл
        об = строка.документ.получитьобъект();
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |   ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
        |   ПоступлениеТоваровУслугТовары.Номенклатура,
        |   ПоступлениеТоваровУслугТовары.Количество,
        |   ПоступлениеТоваровУслугТовары.Номенклатура.ЗовнішнійID КАК ЗовнішнійID,
        |   ПоступлениеТоваровУслугТовары.Цена,
        |   ПоступлениеТоваровУслугТовары.Сумма,
        |   ПоступлениеТоваровУслугТовары.СтавкаНДС,
        |   ПоступлениеТоваровУслугТовары.СуммаНДС,
        |   ПоступлениеТоваровУслугТовары.Ссылка.Контрагент,
        |   ПоступлениеТоваровУслугТовары.Ссылка.Контрагент.КодПоЕДРПОУ КАК ЕДРПОУПост,
        |   ПоступлениеТоваровУслугТовары.Ссылка.Организация,
        |   ПоступлениеТоваровУслугТовары.Склад КАК Склад,
        |   ПоступлениеТоваровУслугТовары.Склад.Наименование КАК СкладНаим,
        |   ПоступлениеТоваровУслугТовары.Склад.Код КАК СкладКод,
        |   КодыОрганизацииСрезПоследних.КодПоЕДРПОУ КАК ЕДРПОУ
        |ИЗ
        |   Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КодыОрганизации.СрезПоследних КАК КодыОрганизацииСрезПоследних
        |       ПО ПоступлениеТоваровУслугТовары.Ссылка.Организация = КодыОрганизацииСрезПоследних.Организация
        |ГДЕ
        |   ПоступлениеТоваровУслугТовары.Ссылка=&Док
        |
        |УПОРЯДОЧИТЬ ПО
        |   Ссылка";
        запрос.УстановитьПараметр("Док",строка.документ);
        ТЗ = Запрос.Выполнить().Выгрузить();
        //Если "Товары" пустые - отбой
        Если ТЗ.Количество() = 0 Тогда
            Сообщить("Нет актуальных данных для выгрузки!");
            Продолжить;
        КонецЕсли;
        //Если есть что-то в "Товары" - работаем
        
        Если истина Тогда
            //Если уже выгружено в xls - идем дальше по списку
            Если строка.ВыгруженоВПрофит = Истина Тогда
                Продолжить;
            КонецЕсли;
            //Иначе производим выгрузку в xls
            строка.ВыгруженоВПрофит = Истина;

            об.ВыгруженоВПрофит = Истина;
            об.записать();
            Попытка
                Excel = Новый COMОбъект("Excel.Application");
            Исключение
                Сообщить(ОписаниеОшибки());
                Возврат;
            КонецПопытки;
            Попытка
                Книга = Excel.WorkBooks.Add();
                Лист = Книга.WorkSheets(1);
                Лист.Name = "Выгрузка данных";
                //шапка
                Лист.Cells(1, 1).Value          = "Дата";
                Лист.Cells(1, 2).Value          = "ЕДРПОУ Поставщика";
                Лист.Cells(1, 3).Value          = "ЕДРПОУ";        
                Лист.Cells(1, 4).Value          = "Склад";
                Лист.Cells(1, 5).Value          = "Вид склада";
                Лист.Cells(1, 6).Value          = "Код склада";
                //товары
                Лист.Cells(4, 1).Value          = "Номенклатура";
                Лист.Cells(4, 2).Value          = "Зовнішній ID";
                Лист.Cells(4, 3).Value          = "Количество";
                Лист.Cells(4, 4).Value          = "Цена";
                Лист.Cells(4, 5).Value      = "Сумма";
                Лист.Cells(4, 6).Value      = "Ставка НДС";
                //выгружаем
                СчетчикСтрок = 5;
                Для Каждого ТекСтрока Из ТЗ Цикл
                    Лист.Cells(2, 1).Value          = ТекСтрока.Ссылка.Дата;
                    Лист.Cells(2, 2).Value          = ТекСтрока.ЕДРПОУПост;            
                    Лист.Cells(2, 3).Value          = ТекСтрока.ЕДРПОУ;
                    Лист.Cells(2, 4).Value          = ТекСтрока.СкладНаим;
                    Лист.Cells(2, 5).Value          = Строка(ТекСтрока.Склад.ВидСклада);
                    Лист.Cells(2, 6).Value          = ТекСтрока.СкладКод;  
                    Лист.Cells(СчетчикСтрок, 1).Value           = Строка(ТекСтрока.Номенклатура);
                    Лист.Cells(СчетчикСтрок, 2).Value           = ТекСтрока.ЗовнішнійID;
                    Лист.Cells(СчетчикСтрок, 3).Value           = ТекСтрока.Количество;
                    Лист.Cells(СчетчикСтрок, 4).Value           = ТекСтрока.Цена;
                    Лист.Cells(СчетчикСтрок, 5).Value           = ТекСтрока.Сумма;
                    Лист.Cells(СчетчикСтрок, 6).Value           = Строка(ТекСтрока.СтавкаНДС);
                    СчетчикСтрок = СчетчикСтрок + 1;
                КонецЦикла;
            Исключение          
                Excel.Quit();
                Сообщить(ОписаниеОшибки());
                Возврат;
            КонецПопытки;
            
            
            путь = ПутьККаталогу;
            ИмяФайла = "ПН-" + ТекСтрока.Ссылка.Номер +"-"+ Формат( ТекСтрока.Ссылка.Дата, "ДФ=yyyy-MM-dd")  + ".xls";
            ФайлДанных = путь + "\" + ИмяФайла;
            Попытка
                Книга.SaveAs(ФайлДанных);
                Сообщить("Файл " + ИмяФайла + " успешно сохранен");
            Исключение
                Сообщить(ОписаниеОшибки() + " Файл не сохранен!");
                Возврат;
            КонецПопытки;
            
            Попытка        
                Excel.Quit();
            Исключение          
                Сообщить(ОписаниеОшибки());
                Возврат;
            КонецПопытки;
      
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Добрый день!

не понимаю в какой участок поместить открытие окна выбора каталога, так чтобы оно открывалось лишь когда оно не будет удовлетворять это условие:
Если ТЗ.Количество() = 0 Тогда
            Продолжить;
        КонецЕсли;

так как оно в цикле, и вызываться будет столько раз, сколько и записей у меня
1 Baumgartlinger
 
07.02.19
17:54
код свернулся весь
2 Mort
 
07.02.19
17:59
переделай под один запрос и вопросы отпадут.
AdBlock убивает бесплатный контент. 1Сергей