Имя: Пароль:
1C
1С v8
Не добавляются на форму доп. реквизиты
0 wms
 
25.01.19
17:56
1С:Предприятие 8.3 (8.3.13.1644)
1С:ERP Управление строительной организацией 2.4 (2.4.6.188)
Выполняется команда:
1)Сначала получаю форму
Форма = ПолучитьФорму("Справочник.ДоговорыМеждуОрганизациями.ФормаОбъекта");

2) заполняю все ее реквизиты в т.ч. доп. реквизиты

3) открываю Форма.Открыть();

дело в том что доп. реквизиты добавляются на форму до процедуры открытия, т.е. в момент получения формы обрабатываются серверные методы ПриСозданииНаСервере() и т.п.

перед выполнением п.3 делал
Форма.прочитать();
Форма.ОбновитьОтображениеДанных();
не помогло
1 wms
 
25.01.19
17:58
в п.2 доп. реквизиты нормально все добавляются т.е. в Форма.Объект.ДополнительныеРеквизиты они есть, но на форме не отображаются
2 singlych
 
25.01.19
18:39
"Форма.прочитать();"
Мм, должно было сработать. Отладчик останавливается в ПриЧтенииНаСервере() формы?
Свойства точно из нужного набора заполняешь?
КопироватьДанныеФормы заюзай.
3 wms
 
25.01.19
19:26
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    Форма = ПолучитьФорму("Справочник.ДоговорыМеждуОрганизациями.ФормаОбъекта");
    ивсДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
    Создали=Ложь;
    ДоговорСОрганизацией=Неопределено;
    ивсЗаполнитьДоговорНаСервере(ивсДанныеФормы,ПараметрыВыполненияКоманды.Источник.Объект.Ссылка,Создали,ДоговорСОрганизацией); // Заполняем справочник на сервере
    Если Создали Тогда
        КопироватьДанныеФормы(ивсДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
        Форма.прочитать(); //не помогает т.к. сразу форма открывается в ПриОткрытии, а доп. реквизиты добавляются на форму ПриСозданииНаСервере()
        //Форма.ОбновитьОтображениеДанных();
        //УправлениеСвойствами_ЗаполнитьДополнительныеРеквизитыВФорме(Форма,Форма.Объект);
        Форма.Открыть();     //- тут   Форма.Объект.ДополнительныеРеквизиты.количество()=4, но на форме доп. реквизитов НЕТ!!!
    иначеесли ДоговорСОрганизацией<>Неопределено тогда    
        ОткрытьФорму("Справочник.ДоговорыМеждуОрганизациями.ФормаОбъекта", Новый Структура("Ключ", ДоговорСОрганизацией));
    КонецЕсли;
КонецПроцедуры
4 wms
 
25.01.19
19:27
(2) см. код выше
Форма.прочитать();//не помогает т.к. сразу форма открывается в ПриОткрытии, а доп. реквизиты добавляются на форму

"КопироватьДанныеФормы заюзай." использую
5 singlych
 
25.01.19
21:58
ПриСоздании должно отработать при ПолучитьФорму(). А, ну да, ПриЧтении же не работает, тк объект новый. Вот реквизиты и не заполняются. Есть вариант заполнять не допреквизиты в объекте, а в реквизитах формы, созданных для их отображения в модуле управления свойствами. У формы должен быть реквизит ОписаниеСвойств или как-то так - это ДанныеФормыКоллекция, там в колонках есть ссылки на свойства и имена реквизитов формы вида ДополнительныйРеквизитЗначение<гуид набора><гуид свойства>, их заполняй. А в ТЧ допреквизитов объекта оно само попадет при записи документа.
6 wms
 
26.01.19
10:27
(5) да, через форму и сделал заполнение доп. реквизитов. костыль, но по другому видимо никак.
Написал Процедуру
&НаКлиенте
Процедура УправлениеСвойствами_ЗаполнитьДополнительныеРеквизитыВФорме(Форма,Объект)
    Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
    Если ЗначениеЗаполнено(Список) Тогда
        Для каждого Стр Из Объект.ДополнительныеРеквизиты Цикл
            НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", стр.Свойство));
            Если НайденныеСтроки.Количество() > 0 Тогда
                ИмяДопРеквНаФорме=НайденныеСтроки[0].ИмяРеквизитаЗначение;        
                Форма[ИмяДопРеквНаФорме]=стр.Значение;
            КонецЕсли;         
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

И вызываю ее перед открытием
        УправлениеСвойствами_ЗаполнитьДополнительныеРеквизитыВФорме(Форма,Форма.Объект);
Форма.Открыть();
7 wms
 
26.01.19
10:33
мне вот еще момент не понятен. Пытался дозаполнить доп. реквизиты через типовую процедуру
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(Форма)
но ее на клиенте нельзя вызвать т.к. общий модуль "УправлениеСвойствами" стоит галка только сервер. и в нее никак нельзя передать Форма

Но, эта же процедура вызывается из модуля формы справочника
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

и в неЁ уже передается форма и не ругается
и в ней доп. реквизиты выводятся на форму.
8 singlych
 
26.01.19
12:28
(7) Потому что форму нельзя передать с клиента на сервер. Но можно с клиента на клиент и с сервера на сервер.