Имя: Пароль:
1C
1С v8
Простановка родителя в справочнике Номенклатура
,
0 Саша80
 
13.12.12
07:47
Ситауция- есь файл Эксель, сотосит из двух колонок. Первая-группа справочника, вторая-элемент справочника. СО второй колонки подгрузил элементы в справочник, потом руками создал группы справочника на основании колонки 1. Пытаюсь програмно проставить родителя в элементах справочника, половина проставляется половина нет. в чем может быть дело?

   сч=0;
   Ексель     = Новый  COMОбъект("Excel.Application") ;
   ФайлЕксель = Ексель.Workbooks.Open(ПутьКФайлу);
   
   Для н = НомерСтрокиНачало По НомерСтрокиКонец Цикл
       
       Родит= Ексель.Sheets(НомерЛиста).Cells(н,1).Value;
       Наим = Ексель.Sheets(НомерЛиста).Cells(н,2).Value;
       
   
   сп=справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Наим)).ПолучитьОбъект();
   Если сп.Родитель.Пустая() тогда
   сп.Родитель=Справочники.Номенклатура.НайтиПоНаименованию(Родит,истина);
       
   сп.Записать();
       КонецЕсли;

   КОнецЦИкла;
   Ексель.Application.Quit();
1 shuhard
 
13.12.12
07:48
(0) копрокод
2 Саша80
 
13.12.12
07:50
чего?
3 Галахад
 
гуру
13.12.12
07:51
(0) Ответ очевиден, дело в том что не находят.
4 Sammo
 
13.12.12
07:52
Точно находит? Смотри возвращаемое значение НайтиПоНаименованию, если не нашел - что будет происходить?
5 Саша80
 
13.12.12
07:56
хм..сейчас проверю...
6 perec1982
 
13.12.12
08:01
Ответ очевиден. Учитесь пользоваться обработкой "ЗагрузкаДанныхИзТабличногоДокумента.epf"
7 perec1982
 
13.12.12
08:02
Она сделает Все очень красиво, при правильном ее использовании.
8 Саша80
 
13.12.12
08:10
проверяю вот так

   Ексель     = Новый  COMОбъект("Excel.Application") ;
   ФайлЕксель = Ексель.Workbooks.Open(ПутьКФайлу);
   
   Для н = НомерСтрокиНачало По НомерСтрокиКонец Цикл
       
       Родит= Ексель.Sheets(НомерЛиста).Cells(н,1).Value;
       Наим = Ексель.Sheets(НомерЛиста).Cells(н,2).Value;
       НаимИзм = Ексель.Sheets(НомерЛиста).Cells(н,3).Value;
   
   сп=справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Наим)).ПолучитьОбъект();
   сп.Родитель=Справочники.Номенклатура.НайтиПоНаименованию(Родит,истина);
   //сп.ЕдиницаХраненияОстатков=справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(НаимИзм);
   //сп.ЕдиницаДляОтчетов=справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(НаимИзм);
   Сообщить(""+сч+"/"+сп+"/"+Наим+"/"+Родит+"/"+сп.Родитель.Наименование);
   сп.Записать();
       сч=сч+1;
       ЭлементыФормы.Надпись10.Заголовок=сч;
   КОнецЦИкла;
   Ексель.Application.Quit();


все нормально все находит
9 Галахад
 
гуру
13.12.12
08:14
Если Справочники.Номенклатура.НайтиПоНаименованию(Родит,истина) = Справочники.Номенклатура.ПустаяСсылка() Тогда
Сообщить("Нифига не нашел");
КонецЕсли;
10 Саша80
 
13.12.12
08:53
нет, обработка обработала но результат тот же...
11 Саша80
 
13.12.12
08:55
(9)-вижу...спасибо сейчас подправлю
12 Саша80
 
13.12.12
09:05
нет, все равно.....не находит почему то
13 Галахад
 
гуру
13.12.12
09:06
Так находит или не находит?
14 salvator
 
13.12.12
09:08
Я б еще СокрЛП() использовал. Так, на всякий случай...
15 Serg_1960
 
13.12.12
09:09
Сорри, но озыученные алгоритмы - плохие алгоритмы. Не надо так писать :( Во-первых - нет проверки результата поиска по наименованию. Во-вторых - не понятно что делать, если найдено наименование, но родитель - другой.

В третьих: это неправильно, если в справочнике есть позиции с одинаковым наименованием.

И далее: изменением родителя у найденной позиции - тоже вызывает вопросы.

Короче - см.(1)
16 Саша80
 
13.12.12
09:20
(15)-хм...может ты и прав, нужно при загрузке проверять наличие такого же наименования...сейчас попробую
17 salvator
 
13.12.12
09:28
(16) А по коду искать, не?
18 Саша80
 
13.12.12
09:30
блин...точно)))))