Имя: Пароль:
1C
1C 7.7
v7: Проблема при импорте данных из Excel
0 ahetaton
 
15.08.11
16:14
Торговля и склад 7.7.
Добавил вот такую процедуру:

 Excel = СоздатьОбъект("Excel.Application");  
 Excel.Workbooks.Open("C:\test.xls");
 Книга = Excel.ActiveWorkbook;

 Строк = Excel.Cells.CurrentRegion.Rows.Count;
 Для х = 1 По Строк Цикл

         Конт.НоваяСтрока();
     Конт.Номенклатура = СокрЛП(Строка(Excel.Cells(х, 1).Value));
     Конт.Количество   = Число(Excel.Cells(х, 2).Value);
     Конт.Цена         = Число(Excel.Cells(х, 3).Value);
     
 Конеццикла;
 
 Excel.Workbooks.Close();

Пробую импортировать данные в документ "Поступление ТМЦ". В документе создается нужное количество строк, проставляется цена и количество товара. Только поле "номенклатура" остается пустым. Почему? (Четко проверял - номенклатура с таким наименованием, буква в букву, в базе существует.)
Что делаю не так?
1 Rie
 
15.08.11
16:16
(0) Потому что номенклатура и её наименование - две больших разницы.
2 ahetaton
 
15.08.11
16:17
Т.е. туда надо вставлять код номенклатуры?
3 Rie
 
15.08.11
16:17
(2) Номенклатура и код номенклатуры - тоже две больших разницы.
Туда надо вставить элемент справочника Номенклатура (то бишь ссылку на него).
4 ahetaton
 
15.08.11
16:17
Я буду только счастлив, если это так :)
5 ahetaton
 
15.08.11
16:18
>Туда надо вставить элемент справочника Номенклатура (то бишь ссылку на него).

О, а вот этого не понял. Как это?
6 ДенисЧ
 
15.08.11
16:20
ном = создатьОбъект("Справочник.Номенклатура");
ном.НайтиПоНаименованию(СокрЛП(Строка(Excel.Cells(х, 1).Value)));
Конт.Номенклатура = ном.ТекущийЭлемент();
7 Rie
 
15.08.11
16:20
(5) А это
спрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
Если спрНоменклатура.НайтиПоНаименованию(Строка(Excel.Cells(х, 1).Value))=1 Тогда
  Конт.Номенклатура = спрНоменклатура.ТекущийЭлемент();
КонецЕсли;
8 ahetaton
 
15.08.11
16:22
Спасибо, сейчас попробую.
9 ahetaton
 
15.08.11
16:24
А, еще вопрос, а можно тогда уж искать в справочнике не по наименованию, а по коду или по артикулу? Это было бы намного удобнее...
10 hunter76
 
15.08.11
16:25
если по артикулу - то для этого реквизита в конфигураторе должен стоять флаг "Сортировка"
11 Rie
 
15.08.11
16:26
(9) Ищи по коду (НайтиПоКоду). Если по артикулу - НайтиПоРеквизиту (но при этом у реквизита должен стоять флажок "Сортировка").
12 ahetaton
 
15.08.11
16:36
Странно, пока попробовал по наименованию - оно опять не вставилось. Сделал чтобы для каждой строчки выдавалось сообщение со значением ТекущийЭлемент() - выдается пустое значение.
13 hunter76
 
15.08.11
16:37
а если:
спрНоменклатура.НайтиПоНаименованию(СокрЛП(Excel.Cells(х, 1).Value),0,0);
?
14 Rie
 
15.08.11
16:38
(12) Не нашлось, видимо. Попробуй вместо Строка(Excel.Cells(x,1).Value) использовать Excel.Cells(x,1).Text.
Ну и заодно проверь - а что именно считывается из этой ячейки Excel. Может, там только издали похоже на наименование?
15 ahetaton
 
15.08.11
16:47
Нет, там точное наименование. Я сейчас попробовал с артикулом, НайтиПоРеквизиту (флажок в справочнике стоит), тоже не вставляется.
Что именно считывается из этой ячейки Excel я проверял msgbox'ом ("Предупреждение" в 1С).

Сейчас попробую Excel.Cells(x,1).Text
16 ahetaton
 
15.08.11
17:04
Вах! По коду вставилось!

С Excel.Cells(x,1).Text не получилось, ошибка выдавалась.

Странно, что не вставляется по наименованию или артикулу, мне-то нужно бы именно по артикулу.
17 Злопчинский
 
15.08.11
17:48
(16) вывести в отладочное сообщение строку получаемую для наименования или артикула из экселя перед тем как это пихать в програмный код поиска - религия не позволяет?
18 ahetaton
 
15.08.11
17:59
(17) Я писал об этом выше. Строку, получаемую для наименования, я порверял в самую первую очередь. Только выводил не в отладочное сообщение (это я не умею), а то, что в VB называется msgbox (message box). Сообщение выдавалось именно с наименованием.
19 ahetaton
 
15.08.11
18:20
Я тормознул. По артикулу тоже вставляется. Просто я первый раз выбрал те товары, у которых в 1С не проставлены артикулы.
А по наименованию все равно не вставляется, хотя мне это и не   особо нужно.