Вход | Регистрация

1С:Предприятие ::

Метки: 

Загрузка из эксель.

↓ [Волшебник, 16.07.18 - 16:10]
Я
   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
или вызывай ОбновитьНумерациюОбъектов()
   Timon1405
 
3 - 16.07.18 - 14:33
(2) СП: Данный метод разрешено вызывать только администратору системы.
   progaoff
 
4 - 16.07.18 - 14:37
(1) такое впечатление, что пытается записать один и тот же элемент.
   progaoff
 
5 - 16.07.18 - 14:38
(1) текст ошибки понятен, только документов нет ни единого
   1Сергей
 
6 - 16.07.18 - 14:41
(5) смотри дубли в файле
   progaoff
 
7 - 16.07.18 - 14:42
(6) нет там дублей, проверил уже
   1Сергей
 
8 - 16.07.18 - 14:44
(7) тогда пользуйся отладкой
   butterbean
 
9 - 16.07.18 - 14:47
(0) зачем эта возня с COMОбъект? Давно уже ТабличныйДокумент умеет открывать и читать Excel, даже на разных листах
   Timon1405
 
10 - 16.07.18 - 14:51
Дикая дичь. код явно копипаста откуда-от
//ДатаВерная = Год+Месяц+День; - полный бред

ДатаДокумента  = Дата(Год,День,Месяц);
вызывать регэксп в цикле тоже не нужно
 
  Рекламное место пустует
   progaoff
 
11 - 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)
   progaoff
 
16 - 16.07.18 - 15:37
(13) Да уже допер)
   Ювелир
 
17 - 16.07.18 - 15:51
Мои поздравления ! ;)))
   progaoff
 
18 - 16.07.18 - 16:08
(17) Спасибо))


Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует