• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы ich13
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

ich13

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

СпрНомТек = Справочники.Номенклатура.СоздатьЭлемент();
СпрНомТек.Код = Код;
СпрНомТек.Наименование = Наименование;
СпрНомТек.НаименованиеПолное = Наименование;
СпрНомТек.Артикул = Код;
СпрНомТек.ВидНоменклатуры = буЗаполнитьВидНоменклатуры( ТипДокумента, ТипНовогоДокумента );
СпрНомТек.БазоваяЕдиницаИзмерения = ЗаполнитьЕдИзмИзКласс();
СпрНомТек.Записать();
 
G

Guest

ich13
а можно привести именно ту часть кода, в которой ошибка?
Обработчика "Справочник.Номенклатура" в предоставленном коде нет :)
 
P

puh14

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

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

ich13

Найлло

Ошибки нет. Название менеджера справочника(или как-то так) СправочникМенеджер.ХХХ, а во встроенном языке Справочники.ХХХ.
 
I

ich13

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



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

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

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


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

Возврат СпрКлЕдИзмШт;
КонецФункции
 
G

Guest

ich13
напиши текст именно той процедуры, в которой происходит ошибка "значение не является значением объектного типа (ссылка)"

А вообще поиск по наименованию это мове тон ИМХО.
 
I

ich13

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

Причем сравнив в отадчике свойства СпрНомТек в не обновленной и обновленной базах я вижу одно и тоже. Дважды проверял.
 
I

ich13

Полный тескт ошибки:
ОбщийМодуль.ХХХ: Ошибка при вызове метода контекста(Записать): Ошибка при выполнении обработчика -'Справочник.Номенклатура(114): Значение не является значением объектного типа (ССылка)'
 
G

Guest

ich13
Процедуры "ПередЗаписью" и "ПриЗаписи" номенклатуры смотрел? Там есть то самое обращение к "ссылка"?
 
I

ich13

Большое спасибо брашишка! в "ПередЗаписью" было дело. Спасибо еще раз! удачных выходных
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!