Имя: Пароль:
1C
1C 7.7
v7: Заполнить реквизит диалога
0 gugolovski
 
17.04.19
05:25
В форме есть некие реквизиты диалога.
Например: поле1, поле2, итп.

При открытии формы из "списка значения" получаю данные для заполнения этих полей. Как связать полученные данные к реквизитам формы?
1 Ясный перец
 
17.04.19
05:35
Присвоение не работает?
2 gugolovski
 
17.04.19
06:44
(1) работает. если напишу
поле1 = "значение_полученноеизСЗ"; но тогда надо перечислять все реквизиты формы.

А хотелось бы наоборот. Устроить перебор списка значения. Получить пары идентификатор_поля и значение. Найти по идентификатору реквизит и присвоить значение.
3 SiAl-chel
 
17.04.19
06:48
(2) В семерке нет такой коллекции реквизитов формы из "коробки". Можно использовать ВК Формекс, там есть такая возможность.
4 Mikeware
 
17.04.19
06:51
(2) шаблон?
Ну или выполняемыйМодуль.
Реквизиты формы можно получить формекслм
5 dk
 
17.04.19
07:56
через formex:

Процедура глВосстановитьВсеАтрибутыФормы(Форма, СЗ, Таблицы = 0) Экспорт
    
    Перем спНужныеВидыАтрибутов, ФормаРасш, Сч, Атрибут, Зн, флОшибкаЧтенияНастроек;
    
    Если ПустоеЗначение(Форма) = 1 Тогда
        Сообщить("Не передали форму");
        Возврат;
    КонецЕсли;
    
    Если ПустоеЗначение(СЗ) = 1 Тогда
        Сообщить("Не передали параметры");
        Возврат;
    КонецЕсли;
    
    спНужныеВидыАтрибутов = СоздатьОбъект("СписокЗначений");
    спНужныеВидыАтрибутов.ДобавитьЗначение(2);        //2  - 1CEDIT (Поле ввода)
    спНужныеВидыАтрибутов.ДобавитьЗначение(11);        //11 - LISTBOX (Список)
    спНужныеВидыАтрибутов.ДобавитьЗначение(12);        //12 - CHECKBOX (Флажок)
    спНужныеВидыАтрибутов.ДобавитьЗначение(13);        //13 - RADIO (Переключатель)
    спНужныеВидыАтрибутов.ДобавитьЗначение(14);        //14 - COMBOBOX (Поле со списком)
    
    Если Таблицы = 1 Тогда
        спНужныеВидыАтрибутов.ДобавитьЗначение(15);    //15 - TABLE (Таблица)
    КонецЕсли;
    
    ФормаРасш = СоздатьОбъект("РасширениеФормы");
    ФормаРасш.УстановитьФорму(Форма);
    
    флОшибкаЧтенияНастроек = 0;
    
    Для Сч = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
        
        Атрибут = ФормаРасш.ПолучитьАтрибут(Сч);
        
        Если ПустоеЗначение(Атрибут.Идентификатор) = 1 Тогда
            Продолжить;
        КонецЕсли;
        
        Если спНужныеВидыАтрибутов.Принадлежит(Атрибут.Тип) = 0 Тогда
            Продолжить;
        КонецЕсли;
        
        Зн = ЗначениеИзСтрокиВнутр(СЗ.Получить(Атрибут.Идентификатор));
        
        Если ТипЗначения(Зн) <> ТипЗначения(Атрибут.Значение) Тогда
            
            флОшибкаЧтенияНастроек = 1;
            Сообщить("Ошибка чтения настроек: " + Атрибут.Идентификатор);
            Продолжить;
            
        ИначеЕсли (ТипЗначения(Зн) = 11) ИЛИ (ТипЗначения(Зн) = 12) Тогда
            
            Если Зн.Вид() <> Атрибут.Значение.Вид() Тогда
                флОшибкаЧтенияНастроек = 1;
                Сообщить("Ошибка чтения настроек: " + Атрибут.Идентификатор);
                Продолжить;
            КонецЕсли;
            
        КонецЕсли;            
        
        Попытка
            Если (ТипЗначенияСтр(Зн) = "СписокЗначений") или ((ТипЗначенияСтр(Зн) = "ТаблицаЗначений") и (Таблицы = 1)) Тогда
                Зн.Выгрузить(Атрибут.Значение);
            Иначе
                Атрибут.Значение = Зн;
            КонецЕсли;
        Исключение
            флОшибкаЧтенияНастроек = 1;
            Сообщить("Ошибка чтения настроек: " + Атрибут.Идентификатор);
            Продолжить;
        КонецПопытки;
        
        Попытка
            Если (Атрибут.Тип = 11) ИЛИ (Атрибут.Тип = 14) Тогда
                Зн = СЗ.Получить(Атрибут.Идентификатор+"_dk_ТекущаяСтрока");
                Атрибут.Значение.ТекущаяСтрока(Зн);
            КонецЕсли;
        Исключение
            флОшибкаЧтенияНастроек = 1;
            Сообщить("Ошибка чтения настроек: " + Атрибут.Идентификатор);
            Продолжить;
        КонецПопытки;
        
    КонецЦикла;
    
    Если флОшибкаЧтенияНастроек <> 0 Тогда
        глОшибкаВосстановленияНастроекФормы(Форма);
    КонецЕсли;
    
КонецПроцедуры    //ВосстановитьВсеАтрибутыФормы(Форма, СЗ)