Имя: Пароль:
1C
1C 7.7
v7: Программное добавление элемента справочника
0 vhrss
 
21.01.12
19:09
Хочу програмно добавить элемент в справочник "номенклатура", среди атрибутов которого присутствует "БазоваяЕдиница" - элемент справочника "Единицы", который подчинен "Номенклатуре".

Код:

ПерГр=СоздатьОбъект("Справочник.Номенклатура");
ПерГр.НайтиПоКоду("00001057");
ВыбНоменклатура=СоздатьОбъект("Справочник.Номенклатура");
ВыбНоменклатура.НайтиПоКоду("00004601");
ВремНаим="Журнал №1";
НовНомен=СоздатьОбъект("Справочник.Номенклатура");
НовНомен.Новый();
НовНомен.Наименование=ВремНаим;
НовНомен.Родитель=ПерГр.ТекущийЭлемент();
НовНомен.ПолнНаименование=ВремНаим;
НовНомен.Записать();
Если НовНомен.НайтиПоНаименованию(ВремНаим,0,1)=1 Тогда
СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
СпрОКЕИ=СоздатьОбъект("Справочник.ОКЕИ");
СпрОКЕИ.НайтиПоКоду("796");
СпрЕдиницы.ИспользоватьВладельца(НовНомен.ТекущийЭлемент());
СпрЕдиницы.Новый();
СпрЕдиницы.Владелец=НовНомен.ТекущийЭлемент();
СпрЕдиницы.Наименование = РеквЕдиница.Наименование;
СпрЕдиницы.Коэффициент = 1;
СпрЕдиницы.ОКЕИ = СпрОКЕИ.ТекущийЭлемент();
СпрЕдиницы.Записать();
КонецЕсли;
НовНомен.УстановитьАтрибут("БазоваяЕдиница", СпрЕдиницы.ТекущийЭлемент());

Сразу после этого я для отладки пишу следующий кусок кода:

Если НовНомен.БазоваяЕдиница.Владелец<>НовНомен Тогда
Предупреждение("Не совпадает базовая!");
КонецЕсли;

И при тестировании мне выдается это самое "Не совпадает базовая", почему? Хотя при отладке к этому моменту в переменной НовНомен.БазоваяЕдиница.Владелец лежит значение "Журнал №1", которое также лежит и в НовНомен.

Проблема не только в непрохождении данной проверки, а также и в дальнейшем, когда когда я пользуюсь этим элементом номенклатуры, оказывается что владелец базовой цены не совпадает с ней самой.

Заранее благодарен за ответы.
1 vhrss
 
21.01.12
19:12
Прошу прощения: эта тема относится к V 7.7 - в названии опечатка
2 Tarlich
 
21.01.12
19:16
а после
НовНомен.УстановитьАтрибут("БазоваяЕдиница", СпрЕдиницы.ТекущийЭлемент());

НовНомен.Записать(); //на до же

а почему не
НовНомен.БазоваяЕдиница=БазоваяЕдиница.ссылка; // или БазоваяЕдиница.ТекущийЭлемент() ; //если 7.7

НовНомен.Записать();
3 Tarlich
 
21.01.12
19:32
Вроде так



ПерГр=СоздатьОбъект("Справочник.Номенклатура");  //группа
ПерГр.НайтиПоКоду("00001057");


НовНомен=СоздатьОбъект("Справочник.Номенклатура");
НовНомен.ИспользоватьРодителя(ПерГр);
НовНомен.Новый();
НовНомен.Наименование="Журнал №1";
НовНомен.ПолнНаименование="Журнал №1";
НовНомен.Записать();
СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
СпрЕдиницы.ИспользоватьВладельца(НовНомен.ТекущийЭлемент());
СпрЕдиницы.Новый();
СпрОКЕИ=СоздатьОбъект("Справочник.ОКЕИ");
СпрОКЕИ.НайтиПоКоду("796");

СпрЕдиницы.Коэффициент = 1;
СпрЕдиницы.ОКЕИ = СпрОКЕИ.ТекущийЭлемент();
СпрЕдиницы.Наименование = СпрОКЕИ.Наименование;
СпрЕдиницы.Записать();

НовНомен.БазоваяЕдиница=СпрЕдиницы.ТекущийЭлемент();
НовНомен.Записать();
4 vhrss
 
22.01.12
11:32
Пробовал. Результат тот же.
5 vhrss
 
22.01.12
11:51
НовНомен.Записать() - забыл лишь сдесь - на форуме, в реальном коде - был.

Извращаться с "УстановитьАтрибут" начал как раз после того, как не сработало с "=СпрЕдиницы.ТекущийЭлемент()"
6 vhrss
 
22.01.12
11:52
*здесь
7 Rie
 
22.01.12
11:54
(0) А ты напиши

Если НовНомен.БазоваяЕдиница.Владелец<>НовНомен.ТекущийЭлемент() Тогда
Предупреждение("Не совпадает базовая!");
КонецЕсли;

и жизнь сразу станет легче.
8 Rie
 
22.01.12
11:56
+(7) (Ты сравнивал ссылку с объектом. В 7-ке между ними тоже есть разница).
9 vhrss
 
22.01.12
12:46
Понял. Заработало. Спасибо

Не тольтко в этой проверке но и ниже одной из переменных я присвоил "=НовНомен;", отчего и полезла ошибка несоответствия владельцев с невозможностью добавить так созданную номенклатуру в документ.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший