Имя: Пароль:
1C
1С v8
Запись Дополнительных реквизитов
0 sonGodv
 
25.06.15
20:47
Помогите решить задачу. Обнаружил в справочнике Номенклатура УТ11, табличную часть Дополнительные реквизиты. Решил вывести ее на форму с целью напрямую записывать туда значения доп.реквизитов. Но оказалось все не так просто).
Если добавить в табличную часть новую строку вручную, то при записи объекта она исчезает.
Нашел общий модуль УправлениеСвойствами и в нем процедуру, которая этим занимается. Но вот ломаю голову и никак не могу придумать как сделать так, чтобы добавленные строки сохранялись
Вот собственно сама процедура:

// Переносит значения свойств из реквизитов формы в табличную часть объекта.
//
// Параметры:
//  Форма        - УправляемаяФорма - уже настроена в процедуре ПриСозданииНаСервере.
//  Объект       - Неопределено - взять объект из реквизита формы "Объект".
//               - Объект - СправочникОбъект, ДокументОбъект, ..., ДанныеФормыСтруктура (по типу объекта).
//
Процедура ПеренестиЗначенияИзРеквизитовФормыВОбъект(Форма, Объект = Неопределено) Экспорт
    
    Если НЕ Форма.Свойства_ИспользоватьСвойства
     ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда
        
        Возврат;
    КонецЕсли;
    
    Если Объект = Неопределено Тогда
        ОписаниеОбъекта = Форма.Объект;
    Иначе
        ОписаниеОбъекта = Объект;
    КонецЕсли;
    
    СтарыеЗначения = ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить();
    ОписаниеОбъекта.ДополнительныеРеквизиты.Очистить();
    
    Для каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
        
        Значение = Форма[Строка.ИмяРеквизитаЗначение];
        
        Если Значение = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        
        Если Строка.ТипЗначения.Типы().Количество() = 1
           И (НЕ ЗначениеЗаполнено(Значение) Или Значение = Ложь) Тогда
            
            Продолжить;
        КонецЕсли;
        
        Если Строка.Удалено Тогда
            Если ЗначениеЗаполнено(Значение) Тогда
                ЗаполнитьЗначенияСвойств(
                    ОписаниеОбъекта.ДополнительныеРеквизиты.Добавить(),
                    СтарыеЗначения.Найти(Строка.Свойство, "Свойство"));
            КонецЕсли;
            Продолжить;
        КонецЕсли;
        
        НоваяСтрока = ОписаниеОбъекта.ДополнительныеРеквизиты.Добавить();
        НоваяСтрока.Свойство = Строка.Свойство;
        НоваяСтрока.Значение = Значение;
        
        // Поддержка строк неограниченной длины.
        ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку(
            Строка.ТипЗначения, Строка.МногострочноеПолеВвода);
        
        Если ИспользоватьНеограниченнуюСтроку Тогда
            НоваяСтрока.ТекстоваяСтрока = Значение;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры