1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "Базы данных и администрирование", создана пользователем ich13, 13 авг 2010.

Статус темы:
Закрыта.
  1. ich13

    ich13 Гость

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

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

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

    puh14 Well-Known Member

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

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

    ich13 Гость

    Репутация:
    0
    Найлло

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

    Репутация:
    0
    :)
     
  6. ich13

    ich13 Гость

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



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

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

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


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

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

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

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

    ich13 Гость

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

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

    ich13 Гость

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

    Репутация:
    0
    ich13
    Процедуры "ПередЗаписью" и "ПриЗаписи" номенклатуры смотрел? Там есть то самое обращение к "ссылка"?
     
  11. ich13

    ich13 Гость

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

    Репутация:
    0
    ich13
    Пожалуйста :)
     
Статус темы:
Закрыта.

Поделиться этой страницей