Имя: Пароль:
1C
1С v8
Импорт данных из Excel в Регистр сведений (переодический)
0 skaylanz23
 
01.05.18
18:01
Есть такая обработка которая считывает данные из excel записывает их во временную таблицу значения и потом от туда в регистр сведений (периодический). В результате записывается только одна запись (строка) в регистр а нужно чтобы записывались все записи из временной таблицы куда помещены данные из excel.

Вопрос: как можно доработать код чтобы записывались все записи из ТЗ? Заранее спасибо!

&НаСервере
Функция ИмпортИзExcelНаСервере()
    
    Если ПустаяСтрока(ИмяФайла) Тогда
        Сообщить("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
    КонецЕсли;
    
    Попытка
        ExcelПриложение = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    КонецПопытки;
    
    Попытка
        ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
    Исключение
        Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    КонецПопытки;
    
    Попытка
        Excel = ExcelФайл.Sheets(1);
        xlCellTypeLastCell = 11;
        ExcelПоследняяСтрока = Excel.Cells.SpecialCells(xlCellTypeLastCell).Row;
        ExcelПоследняяКолонка = Excel.Cells.SpecialCells(xlCellTypeLastCell).Column;
    Исключение
        Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
        ExcelПриложение.Quit();
    КонецПопытки;
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Очистить();    
    ТЗ.Колонки.Добавить("Код");
    ТЗ.Колонки.Добавить("Фамилия");
    ТЗ.Колонки.Добавить("Имя");
    ТЗ.Колонки.Добавить("Страна");
    ТЗ.Колонки.Добавить("Вопрос_1");
    ТЗ.Колонки.Добавить("Он");
    ТЗ.Колонки.Добавить("Оно");
    ТЗ.Колонки.Добавить("Она");
    ТЗ.Колонки.Добавить("Другое");
        
    Для Строка = 3 По ExcelПоследняяСтрока Цикл
        
        Стр = ТЗ.Добавить();
        
        Стр.Код       = СокрЛП(Excel.Cells(Строка,1).Value);
        Стр.Фамилия   = СокрЛП(Excel.Cells(Строка,2).Value);
        Стр.Имя       = СокрЛП(Excel.Cells(Строка,3).Value);
        Стр.Страна    = СокрЛП(Excel.Cells(Строка,4).Value);        
        Стр.Вопрос_1  = СокрЛП(Excel.Cells(Строка,5).Value);                  
        Стр.Он        = СокрЛП(Excel.Cells(Строка,6).Value);    
        Стр.Оно       = СокрЛП(Excel.Cells(Строка,7).Value);    
        Стр.Она       = СокрЛП(Excel.Cells(Строка,8).Value);      
        Стр.Другое    = СокрЛП(Excel.Cells(Строка,9).Value);
        
    КонецЦикла;
    
    ExcelПриложение.Quit();
            
    Для Каждого  СтрокаТаблицы Из ТЗ Цикл
       НаборДанных = РегистрыСведений.Проба.СоздатьНаборЗаписей();    
       Проба = НаборДанных.Добавить();
       Проба.Код = СтрокаТаблицы.Код;
       Проба.Фамилия = СтрокаТаблицы.Фамилия;
       //...
       НаборДанных.Записать();  
    КонецЕсли;  
    
КонецФункции
1 mexanik_96
 
01.05.18
18:02
НаборДанных.Записать(Ложь);
2 Cyberhawk
 
01.05.18
18:02
Измерений что ли нет у регистра сведений?
3 mexanik_96
 
01.05.18
18:03
без измерений вроде нельзя рс создать, так что хоть одно то есть
4 Cyberhawk
 
01.05.18
18:03
(3) Ошибаешься
5 mexanik_96
 
01.05.18
18:04
сорян, с ресурсами перепутал
6 Cyberhawk
 
01.05.18
18:04
Если у регистра измерений нет, то добавь одно, пиши в него строку-идентификатор операции загрузки, УИД генери каждый раз после генерации ТЗ
7 skaylanz23
 
01.05.18
18:05
Есть два измерения: партнер и мероприятие.
8 Cyberhawk
 
01.05.18
18:05
К самим данным в регистре даже стеснябсь спрашивать, что там...

    ТЗ.Колонки.Добавить("Он");
    ТЗ.Колонки.Добавить("Оно");
    ТЗ.Колонки.Добавить("Она");
    ТЗ.Колонки.Добавить("Другое");
9 Cyberhawk
 
01.05.18
18:05
(7) Ну так по комбинации период+партнер+мероприятие не может быть больше одной записи в регистре, вот и думай
10 mexanik_96
 
01.05.18
18:07
(8) а где они?
11 mistеr
 
01.05.18
19:45
(0) Все записи 1С не умеет. Точнее умеет, но нам не разрешает. Чтобы не напортили чего.

Так что записывай по одной строке в цикле.
12 Cyberhawk
 
01.05.18
22:35
(10) Хз, это у него в коде
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс