Имя: Пароль:
1C
 
загрузка данных из эксель в справочник
,
0 fdgd98
 
12.03.15
14:24
всем привет! пытаюсь написать обработку которая будет записывать из эксель в документ и справочник, столкнулся с проблемой..


есть документ "приходная-накладная" у нее есть тч с "наименование" с типом справочникссылка на справочник "номенклатура". Записываю данные из ячейки в справочник "номенклатура" если их там нет....записываем(записывается хорошо). потом пытаюсь записать данные из ячейки в тч документа...не записывает....в тч остаюстся вместо содержимых ячеек пустые поля...подскажите куда копать?

Ex = Новый COMObject("Excel.Application");
   Ex.Workbooks.Open(Объект.ИмяФайла);
   Ex.Visible = 1;    
   ТекЛист=Ex.WorkSheets(1);
  
   Для Ячейка = 12 по 300 цикл
       Если НЕ  ТекЛист.Cells(Ячейка,1).Value  = Неопределено тогда
  
           Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию((Формат((ТекЛист.Cells(Ячейка,1).Value),"ЧГ=0")), ИСТИНА);  
           Если  Номенклатура.Пустая() или Номенклатура.ПометкаУдаления = Истина тогда
                 Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
                 Номенклатура.Наименование = Формат((ТекЛист.Cells(Ячейка,1).Value),"ЧГ=0");
                 Номенклатура.Родитель =Справочники.Номенклатура.НайтиПоНаименованию(объект.СправочникНоменклатура);
                 Номенклатура.Записать();
                
                 ДокументПриходная = Объект.ТабилчнаяЧасть.ПолучитьОбъект();
                 НовСтрока = ДокументПриходная.Приходная.Добавить();
                 НовСтрока.Наименование = Номенклатура;
                 ДокументПриходная.Записать();
      
           иначе
              
           конецесли;    
       конецесли;
   конеццикла;
1 fisher
 
12.03.15
14:26
НовСтрока.Наименование = Номенклатура.Ссылка;
2 Garykom
 
гуру
12.03.15
14:27
(0) когда то писал для 7-ки? и вот это что то помню...что то слышал пытаемся в 8-ку?
3 Управление торговлей
 
12.03.15
14:28
"ТабилчнаяЧасть"
как у тебя вообще работает что-то?
4 Garykom
 
гуру
12.03.15
14:29
(1) не прокатит там грамматические ошибки в коде

не считая программных и алгоритмических...

ЗЫ ищем номенклатуру по наименованию затем если нету или пометка удаления создаем новую (с тем же наименованием если пометка удаления?)

а если нашли и пометки нету ничего писать не надо да?
5 fisher
 
12.03.15
14:30
Всё когда-нибудь происходит впервые. И редко сразу хорошо :)

Читать данные из Excel, кстати, в разы проще и быстрее через ADO. Если xlsx то вообще напрямую парсить можно. Будет кроссплатформенно.
6 gorakh
 
12.03.15
14:33
(0) Обратись на инфостарт, там таких обработок куча на любые вкусы.
7 fdgd98
 
12.03.15
14:35
(6) сам хочу написать
8 fdgd98
 
12.03.15
16:13
написал обработку, но проблема второй столбец из эксель записывается в документ снизу от первого....почему так ?

на скрине понятнее

https://cloud.mail.ru/public/b555b32bc4be/парсер.jpg
9 fdgd98
 
12.03.15
16:13
Функция Получаем()
   ДокументПриходная = Объект.ТабличнаяЧасть.ПолучитьОбъект();
       
    
   Ex = Новый COMObject("Excel.Application");
   Ex.Workbooks.Open(Объект.ИмяФайла);
   Ex.Visible = 1;    
   ТекЛист=Ex.WorkSheets(1);
  
   Для Ячейка = 11 по 5000 цикл
       Если НЕ  ТекЛист.Cells(Ячейка,1).Value  = Неопределено тогда
          
          
           Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию((Формат((ТекЛист.Cells(Ячейка,1).Value),"ЧГ=0")), ИСТИНА);  
           Если  Номенклатура.Пустая() или Номенклатура.ПометкаУдаления = Истина тогда
                 НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
                 НоменклатураОбъект .Наименование = Формат((ТекЛист.Cells(Ячейка,1).Value),"ЧГ=0");
                 НоменклатураОбъект .Родитель =Справочники.Номенклатура.НайтиПоНаименованию(объект.СправочникНоменклатура);
                 НоменклатураОбъект .Записать();
                
                 //ДокументПриходная = Объект.ТабличнаяЧасть.ПолучитьОбъект();
                 НовСтрока = ДокументПриходная.Приходная.Добавить();
                 НовСтрока.Наименование = НоменклатураОбъект.Ссылка;
                 //ДокументПриходная.Записать();
           иначе
                НоменклатураОбъект1 = Номенклатура.Ссылка.ПолучитьОбъект();
                //ДокументПриходная = Объект.ТабличнаяЧасть.ПолучитьОбъект();
                НовСтрока = ДокументПриходная.Приходная.Добавить();
                НовСтрока.Наименование = НоменклатураОбъект1.Ссылка;
                //ДокументПриходная.Записать();
                
           конецесли;
          //ДокументПриходная.Записать();
            
       конецесли;
   конеццикла;
  
  
    Для Ячейка = 11 по 5000 цикл
       Если НЕ  ТекЛист.Cells(Ячейка,8).Value  = Неопределено тогда
                 НовСтрока = ДокументПриходная.Приходная.Добавить();
                 НовСтрока.Количество = ТекЛист.Cells(Ячейка,8).Value;
                 //ДокументПриходная.Записать();    
       конецесли;
   конеццикла;
  
      ДокументПриходная.Записать();


     возврат истина;
КонецФункции
10 Ligor
 
12.03.15
16:15
Объедени все в 1 цикл
11 fdgd98
 
12.03.15
16:24
(10) щас попробую
12 fdgd98
 
12.03.15
16:31
(10) объединил щас даже количество не записывается...
13 anatoly
 
12.03.15
16:33
(1) номенклатура у него итак ссылка.
а вот какого типа наименование в строке - это вопрос...
14 fdgd98
 
12.03.15
16:35
(13) справочникссылка
15 fdgd98
 
12.03.15
16:38
блин
два раза потому что строку в тч добавлял для разных ячеек
16 fdgd98
 
12.03.15
16:49
проблема решена
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой