Имя: Пароль:
1C
1С v8
программно заполнить поле адреса на форме контрагента
0 shds
 
16.10.12
16:51
как программно заполнить поле адреса на форме нового контрагента.
(типовая Бух 2.0)

ФормаНового =Справочники.Контрагенты.ПолучитьФормуНовогоЭлемента("ФормаЭлемента",ЭтаФорма);
       
ФормаНового.Наименование= "Рога и копыта";
ФормаНового.ЭлементыФормы.ПолеКИ1.Значение = "мой адрес, не дом и не улица";

ФормаНового.ОткрытьМодально(); // тут пользователь смотрит, корректирует и сохраняет, либо отказывается
НовыйЭлементСсылка = ФормаНового.Ссылка;
Если НовыйЭлементСсылка <> Справочники.Контрагенты.ПустаяСсылка() Тогда
   Сообщить("создан контрагент "+НовыйЭлементСсылка);
Иначе
   Сообщить("контрагент не создан.");
КонецЕсли;    


проблема в том, что в обработчике формы справочника "приоткрытии" заполненное значение поля адреса (ПолеКИ1) очищается, и заполняется на основании данных регистра сведений, который в настоящий момент пуст,- элемент то новый (и не факт что будут пользователем сохранен).

единственный путь пока нашел, - отключение обработчика с выполнением всех действий у себя в обработке, но... как то не нравится решение.

может есть вариант?
1 YF
 
16.10.12
16:52
(0) Сначала открыть форму, потом заполнить и все это программно ..
2 DrHiHi
 
16.10.12
16:54
может будет легче записать в регистр сведений "контактная информация" адрес??
3 YF
 
16.10.12
16:55
(2) Он не знает еще будут ли записывать элемент справочника
4 shds
 
16.10.12
16:56
>>Сначала открыть форму,
хотелось бы модально

>>может будет легче записать в регистр сведений
а "объект" кто, элемента то не существует, да и не факт что пользователь его запишет
5 hhhh
 
16.10.12
17:00
(4) пишите в комментарий, там места дофига, можете хоть 50 адресов записать.
6 DrHiHi
 
16.10.12
17:17
(4) не ленись, а посмотри в типовом механизме как все реализовано и от туда вытащи
7 shds
 
17.10.12
11:05
в общем, победил )
с переопределением я был трав, только чуть мимо.


код:

ФормаНового = Справочники.Контрагенты.ПолучитьФормуНовогоЭлемента(,ЭтаФорма);
       
//заполнение реквизитов
ФормаНового.Наименование = "Рога и копыта";
ФормаНового.Комментарий = "загружен";
       
//переопределим обработчика "ПередОткрытием" и самостоятельно обработаем
       ФормаНового.УстановитьДействие("ПередОткрытием", Неопределено );
ФормаНового.НаборКонтактнойИнформации = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
ФормаНового.НаборКонтактнойИнформации.Отбор.Объект.Установить(ФормаНового.Ссылка);

НоваяСтрока = ФормаНового.НаборКонтактнойИнформации.Добавить();
НоваяСтрока.Объект = ФормаНового.ЭтотОбъект;
НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
НоваяСтрока.Представление = "Фактический адрес, дом, улица ";
НоваяСтрока.Комментарий = "Комментарий Фактический";

НоваяСтрока = ФормаНового.НаборКонтактнойИнформации.Добавить();
НоваяСтрока.Объект = ФормаНового.ЭтотОбъект;
НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
НоваяСтрока.Представление = "Юридический адрес, дом, улица ";
НоваяСтрока.Комментарий = "Комментарий Юридический";
//конец (переопределим обработчика "ПередОткрытием" и самомстоятельно обработаем)

ФормаНового.ОткрытьМодально();
НовыйЭлементСсылка = ФормаНового.Ссылка;
Если НовыйЭлементСсылка <> Справочники.Контрагенты.ПустаяСсылка() Тогда
   Сообщить("создан контрагент "+НовыйЭлементСсылка);
Иначе
   Сообщить("контрагент не создан.");
КонецЕсли;  


есть замечания?