Имя: Пароль:
1C
1С v8
прочитать эксель в цикле
0 1с_lvl_памперс
 
15.05.20
11:05
Гружу из экселя в БП док ОперацияБух. и все хорошо грузится но создается кол-во документов по количеству строк в файле. Головой понимаю, что надо обойти записи файла в цикле.. прикрутил цикл но рез-т один и тот же: либо кол док-в = кол строк в файле, либо 1 док с последней записью экселя. памагити. Код ниже.
1 1с_lvl_памперс
 
15.05.20
11:05
ПутьКФайлу = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
    ДвоичныеДанные.Записать(ПутьКФайлу);
    
    Выбфайл = Новый Файл(ПутьКФайлу);
    
    Если Не ВыбФайл.Существует() Тогда
        Сообщить("Файл не существует:  " + ПутьКФайлу);
        Возврат;
    КонецЕсли;
        
    м = Новый Массив;
    
    Попытка
        ExcelПриложение = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат;
    КонецПопытки;
    
    Файл = ПутьКФайлу;

    Попытка
        ExcelФайл = ExcelПриложение.WorkBooks.Open(Файл);
    Исключение
        Сообщить("Ошибка при открытии/чтении файла " + Файл + "." + Символы.ПС + ОписаниеОшибки() + Символы.ПС + "Возможно не верно указано имя листа.", СтатусСообщения.Внимание);
    КонецПопытки;
    
    СпрНом = Справочники.Номенклатура;
    ExcelЛист = ExcelФайл.Sheets(1);
    НомСтроки1 = 1;
    КолСтрок = ExcelЛист.Cells(1, 1).SpecialCells(11).Row;
    
    Стр = 2;
    
    
    Опер     = Документы.ОперацияБух.СоздатьДокумент();
    Опер.Дата = КонецДня(ТекущаяДата());
    Опер.Организация =  Справочники.Организации.НайтиПоКоду("БП-000001");  
    Опер.Содержание = "Пример программного создания документа 'ОперацияБух'";
    Опер.Движения.Хозрасчетный.Записывать = Истина;
    Для Сч = 2 По КолСтрок цикл
    НовПроводка = Опер.Движения.Хозрасчетный.Добавить();
    НовПроводка.Активность = Истина;
            
            НовПроводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
            НашлиНоменклатуру = СпрНом.НайтиПоНаименованию(СокрЛП(ExcelЛист.Cells(Стр,6 ).Value));
            Если (НашлиНоменклатуру = Неопределено) или (СокрЛП(НашлиНоменклатуру) = "") Тогда
                Сообщить("Номенклатура с кодом " + СокрЛП(ExcelЛист.Cells(Стр,6 ).Value) +" наименование " + СокрЛП(ExcelЛист.Cells(Стр,6 ).Value) + " не найдена");
            КонецЕсли;    
            НовПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = Справочники.Номенклатура.НайтиПоНаименованию(НашлиНоменклатуру);
            НовПроводка.ПодразделениеДт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("БП-000001");
            
            НовПроводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("000");
            Сумма = ExcelЛист.Cells(Стр,11 ).Value * ExcelЛист.Cells(Стр,10 ).Value;
            НовПроводка.Сумма              = Сумма;
            //НовПроводка.КоличествоКт       = ExcelЛист.Cells(Стр,11 ).Value;
            НовПроводка.КоличествоДт       = ExcelЛист.Cells(Стр,11 ).Value;
            НовПроводка.СуммаНУДт             = Сумма;
            //НовПроводка.СуммаНУКт             = Сумма;
            //НовПроводка.Содержание         = "Пересортица " + НашлиНоменклатуру;
            Опер.СуммаОперации = Опер.СуммаОперации + Сумма;
            
            Опер.Записать(РежимЗаписиДокумента.Запись);
            Сообщить(Опер);  
        Стр = Стр + 1;
        //КонецЦикла;
    КонецЦикла;
        
    //Сообщить("Создана "+Содерж);
2 Ray Zexter
 
15.05.20
11:07
Опер = Документы.ОперацияБух.СоздатьДокумент(); и Опер.Записать(РежимЗаписиДокумента.Запись); - выкинь из цикла
3 1с_lvl_памперс
 
15.05.20
11:07
(2) пробую..
4 1с_lvl_памперс
 
15.05.20
11:10
Спасибо, все получилось!
5 1с_lvl_памперс
 
15.05.20
11:19
как закрыть тему?