ОБСУЖДЕНИЕ

ЭлементСправочника.Записать()

11 ответов 7 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
После обновления базы при записи программно создаваего элемента справочника стала возникать "ошибка при выполнении обработчика Справочник.Номенклатура значение не является значением объектного типа (ссылка)". Проверил типы, параметры реквизитов справочника и значения которые им присваеваются - все как до обновления, но возникает ошибка. Подскажите пожалуйста что еще может быть? всю голову сломал. Заренее большое спасибо!

СпрНомТек = Справочники.Номенклатура.СоздатьЭлемент();
СпрНомТек.Код = Код;
СпрНомТек.Наименование = Наименование;
СпрНомТек.НаименованиеПолное = Наименование;
СпрНомТек.Артикул = Код;
СпрНомТек.ВидНоменклатуры = буЗаполнитьВидНоменклатуры( ТипДокумента, ТипНовогоДокумента );
СпрНомТек.БазоваяЕдиницаИзмерения = ЗаполнитьЕдИзмИзКласс();
СпрНомТек.Записать();
 
ich13
а можно привести именно ту часть кода, в которой ошибка?
Обработчика "Справочник.Номенклатура" в предоставленном коде нет :)
 
Это значит, что какая-то процедура использует ссылочное значение вновь создаваемого элемента, которого нет пока новый элемент не записан. Так как у Вас функции всего две -
СпрНомТек.ВидНоменклатуры = буЗаполнитьВидНоменклатуры( ТипДокумента, ТипНовогоДокумента );
СпрНомТек.БазоваяЕдиницаИзмерения = ЗаполнитьЕдИзмИзКласс();

То скорее всего это одна из них (наиболее вероятна вторая). Попробуте СпрНомТек.Записать(); дополнительно поставить перед этими функциями. Либо ошибка вообще в другой строчке.
 
Найлло

Ошибки нет. Название менеджера справочника(или как-то так) СправочникМенеджер.ХХХ, а во встроенном языке Справочники.ХХХ.
 
puh14
Поставить записать() после СпрНомТек.ВидНоменклатуры и СпрНомТек.БазоваяЕдиницаИзмерения я в отчаянной попытке найти ошибку уже пробывал, на что система резонно пишет что перед записью элемента данные реквизиты необходимо заполнить.
И значения и тип данных которые возвращают функции точно такие же как в работающей базе до обновления,а обращения к ссылке тоже нет.



на всякий случай:

Функция буЗаполнитьВидНоменклатуры( ТипДокумента, ТипНовогоДокумента )
Перем СпрЕдИзм, СпрЕдИзмШт;
//----------------------------------------
Если ( ТипДокумента = "Реализация" ) ИЛИ ( ТипДокумента = "ПоступлениеТМЦ" ) Тогда
ВидНомНаименование = "Товар";
ИначеЕсли ( ТипДокумента = "УслугиДоставки" ) Тогда
ВидНомНаименование = "Услуга";
КонецЕсли;
СпрВидыНом = Справочники.ВидыНоменклатуры;
СпрВидыНомТек = СпрВидыНом.НайтиПоНаименованию( ВидНомНаименование );
Если ( СпрВидыНомТек.Пустая() ) Тогда
ВызватьИсключение( "В справочние ВидыНоменклатуры не найден элемент с наименованием `" + ВидНомНаименование + "`" );
КонецЕсли;

Возврат СпрВидыНомТек;
КонецФункции


Функция ЗаполнитьЕдИзмИзКласс()
Перем СпрЕдИзм, СпрЕдИзмШт;
//----------------------------------------
СпрКлЕдИзм = Справочники.КлассификаторЕдиницИзмерения;
СпрКлЕдИзмШт = СпрКлЕдИзм.НайтиПоНаименованию( "шт" );
Если ( СпрКлЕдИзмШт.Пустая() ) Тогда
ВызватьИсключение( "В справочние КлассификаторЕдиницИзмеренич не найден элемент с наименованием `шт`" );
КонецЕсли;

Возврат СпрКлЕдИзмШт;
КонецФункции
 
ich13
напиши текст именно той процедуры, в которой происходит ошибка "значение не является значением объектного типа (ссылка)"

А вообще поиск по наименованию это мове тон ИМХО.
 
Найлло,
ошибка возникает на строке СпрНомТек.Записать() (см. мое первое сообщение );

Причем сравнив в отадчике свойства СпрНомТек в не обновленной и обновленной базах я вижу одно и тоже. Дважды проверял.
 
Полный тескт ошибки:
ОбщийМодуль.ХХХ: Ошибка при вызове метода контекста(Записать): Ошибка при выполнении обработчика -'Справочник.Номенклатура(114): Значение не является значением объектного типа (ССылка)'
 
ich13
Процедуры "ПередЗаписью" и "ПриЗаписи" номенклатуры смотрел? Там есть то самое обращение к "ссылка"?
 
Большое спасибо брашишка! в "ПередЗаписью" было дело. Спасибо еще раз! удачных выходных
 
ich13
Пожалуйста :)
 
Статус
Закрыто для дальнейших ответов.