Имя: Пароль:
1C
1С v8
Загрузка из эксель.
🠗 (Волшебник 16.07.2018 16:10)
,
0 progaoff
 
16.07.18
14:30
Добрый день, пытаюсь загрузить из экселя список документов, получаю ошибку поле номер не уникально.

ксель = Новый COMОбъект("Excel.Application");
    Книга = Эксель.WorkBooks.Open(ИмяФайла);
    Лист = Книга.WorkSheets(1);
    ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
    
    МассивДанных = Новый Массив;
        
    ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
    
    Для Сч = 2 по ВсегоСтрок Цикл
        
        //Создаем структуру для текущей строки
        Строка = Новый Структура;
        Для Сч2 = 1 по ВсегоКолонок Цикл
             Строка.Вставить("Колонка"+Строка(Сч2),Лист.Cells(Сч,Сч2).Value);
        КонецЦикла;
        
        МассивДанных.Добавить(Строка);
        КонецЦикла;
        Номер              = СокрЛП(Лист.Cells(Сч2, 2).Value);
        ДатаДок              = СокрЛП(Лист.Cells(Сч2, 3).Value);
        Сумма              = СокрЛП(Лист.Cells(Сч2, 4).Value);
        Организация          = СокрЛП(Лист.Cells(Сч2, 9).Value);
        КассаККМ          = СокрЛП(Лист.Cells(Сч2, 5).Value);
           RegExp = Новый COMОбъект("VBScript.RegExp");
           RegExp.IgnoreCase = Истина; //Игнорировать регистр
           RegExp.Global = Истина; //Поиск всех вхождений шаблона
           RegExp.MultiLine = Истина; //Многострочный режим
           RegExp.Pattern = "[^0-9]"; // отбор только чисел
             ДатаДокументаИсправленная = RegExp.Replace(ДатаДок,"");
           Год = Прав(ДатаДокументаИсправленная,4);
           Месяц = Сред(ДатаДокументаИсправленная,3,2);
           День  = Лев(ДатаДокументаИсправленная,2);
           ДатаВерная = Год+Месяц+День;
           ДатаДокумента  = Дата(ДатаВерная);
        
        
        
        

    Для Каждого Элемент Из МассивДанных Цикл
        ПКО=Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();      
        ПКО.ХозяйственнаяОперация  = Перечисления.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзКассыККМ;
        ПКО.Номер    = Элемент.Колонка2;
        ПКО.Дата     = ДатаДокумента;
        ПКО.Касса    = Справочники.Кассы.НайтиПоНаименованию(КассаККМ);
        ПКО.КассаККМ = Справочники.КассыККМ.НайтиПоНаименованию(КассаККМ);
        ПКО.Организация = Справочники.Организации.НайтиПоНаименованию(Организация);
        
        ПКО.СуммаДокумента = Сумма;
        ПКО.Записать();
    КонецЦикла;
Вот код, не пойму что не правильно, ведь должен обходить все элементы.
1 Волшебник
 
16.07.18
14:31
Такой номер уже есть в базе.
2 Волшебник
 
16.07.18
14:32
или вызывай ОбновитьНумерациюОбъектов()
3 Timon1405
 
16.07.18
14:33
(2) СП: Данный метод разрешено вызывать только администратору системы.
4 progaoff
 
16.07.18
14:37
(1) такое впечатление, что пытается записать один и тот же элемент.
5 progaoff
 
16.07.18
14:38
(1) текст ошибки понятен, только документов нет ни единого
6 1Сергей
 
16.07.18
14:41
(5) смотри дубли в файле
7 progaoff
 
16.07.18
14:42
(6) нет там дублей, проверил уже
8 1Сергей
 
16.07.18
14:44
(7) тогда пользуйся отладкой
9 butterbean
 
16.07.18
14:47
(0) зачем эта возня с COMОбъект? Давно уже ТабличныйДокумент умеет открывать и читать Excel, даже на разных листах
10 Timon1405
 
16.07.18
14:51
Дикая дичь. код явно копипаста откуда-от
//ДатаВерная = Год+Месяц+День; - полный бред
ДатаДокумента  = Дата(Год,День,Месяц);
вызывать регэксп в цикле тоже не нужно
11 progaoff
 
16.07.18
15:00
(10) Он не в цикле как раз.
12 Ювелир
 
16.07.18
15:07
(0) и хде у тебя " Для Сч = 2 по ВсегоСтрок Цикл" Закрвается этот цикл?
13 Ювелир
 
16.07.18
15:08
(0) а номер и прочие реквизиты без цикла и один раз рассчитываются? Ну круто, че.
14 Ювелир
 
16.07.18
15:16
(0) а нет, тут чудесатее номер не номер,
"
       Строка = Новый Структура;
       Для Сч2 = 1 по ВсегоКолонок Цикл
             Строка.Вставить("Колонка"+Строка(Сч2),Лист.Cells(Сч,Сч2).Value);
        КонецЦикла;
"

д.б.
Строка.Вставить("Колонка"+Сч2,Лист.Cells(Сч,Сч2).Value);

А то у тебя  нет колонка2
15 Ювелир
 
16.07.18
15:20
(0) фраза в цикле не правильная, "Колонка" + Сч2, а не "Колонка" + Строка(сч2)
16 progaoff
 
16.07.18
15:37
(13) Да уже допер)
17 Ювелир
 
16.07.18
15:51
Мои поздравления ! ;)))
18 progaoff
 
16.07.18
16:08
(17) Спасибо))