Имя: Пароль:
1C
1С v8
УТ 10.3 Автоматически заполнять значение свойства элемента номенклатуры
0 jaycyrb
 
08.10.14
14:56
Добрый день.
Мне нужно сделать так, чтобы при сохранении товара в номенклатуре автоматически заполнялось свойство "Производитель", если оно не заполнено. Это именно свойство с выбором значения из списка.
Заполняться оно должно тем же значением, что и реквизит "ОсновнойПоставщик".

Сделал так: в модуле формы в начале процедуры ПослеЗаписи() добавил следующее:

//Проверяем, заполнено ли свойство "Производитель"
    Запрос = Новый Запрос("ВЫБРАТЬ
|    ЗначенияСвойствОбъектов.Свойство.Наименование,
|    ЗначенияСвойствОбъектов.Значение.Наименование,ЗначенияСвойствОбъектов.Объект.Код
|ИЗ
|    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
|    ЗначенияСвойствОбъектов.Свойство.Наименование = &Производитель
|    И ЗначенияСвойствОбъектов.Объект.Код = &Код");
                                                            
Запрос.УстановитьПараметр("Код",ЭтотОбъект.Код);
Запрос.УстановитьПараметр("Производитель","Производитель");
КоличСтр = Запрос.Выполнить().Выбрать().Количество();
    Если КоличСтр=0 Тогда //Если свойство "Производитель" не заполнено, тогда заполняем его из поля "Основной поставщик"
    Если Не ЗначениеЗаполнено(ЭтотОбъект.ОсновнойПоставщик) Тогда
    Предупреждение("Ошибка: не заполнено свойство 'Основной поставщик'");
    Иначе
    Значение = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект, Свойство", Ссылка,         ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Производитель"))).Значение;    
    СпрЗначСвОб  = Справочники.ЗначенияСвойствОбъектов;    
    свПроизводитель = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Производитель");
    
    Запрос = Новый Запрос("ВЫБРАТЬ
    | ЗначСв.Ссылка,ЗначСв.Код,
    | ЗначСв.Наименование
    | ИЗ
    | Справочник.ЗначенияСвойствОбъектов КАК ЗначСв
    | ГДЕ
    | ЗначСв.Наименование = &Наименование");
    Запрос.УстановитьПараметр("Наименование",ЭтотОбъект.ОсновнойПоставщик.Наименование);
    
    Выборка1 = Запрос.Выполнить().Выбрать();
    Если Выборка1.Количество() > 0 Тогда
    Выборка1.Следующий();
    НовЗапись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    НовЗапись.Объект   = ЭтотОбъект.Ссылка;
    НовЗапись.Свойство = свПроизводитель;    
    НовЗапись.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоКоду(Выборка1.Код);
    Сообщить("Свойство 'Производитель' будет заполнено автоматически из реквизита 'Основной поставщик'");
    Попытка
    НовЗапись.Записать(Истина);
    Исключение
     Предупреждение("Не удалось записать значения свойств:" + Символы.ПС + ОписаниеОшибки());
    КонецПопытки;
Иначе Сообщить("Внимание! Значение "+ЭтотОбъект.ОсновнойПоставщик.Наименование+" не найдено в списке производителей. Свойство 'Производитель' не заполнено.");    
КонецЕсли;
КонецЕсли;
КонецЕсли;

Этот код работает, если работа ведется в файл-серверном варианте. Если же база данных находится на сервере 1С Предприятие, то свойство "Производитель" не заполняется. При этом не выводится никаких ошибок.
Я предполагаю, что не работает команда НовЗапись.Записать(Истина); , но не знаю как исправить это.
Пожалуйста, помогите. Опыта в 1С-программировании не имею, а задачу решить надо.