|
|
Обновление Контактной информации для не записанных
Черников, Prog_man, Мультук, lubitelxml, Хряк, KJlag, Михаил Козлов, Fish, dimasad, 2mugik, Dzenn, Kigo_Kigo, RVN, Timon1405, НоваяВолна, DimR_71, elka302, Гипервизор, RomanYS, Александр111, SleepyHead, A_G, denk32, vyaz
| ☑ |
|
0
dimasad
11.11.25
✎
17:41
|
Конфа ДО2.1, свой справочник с пристегнутым к нему механизмом КИ (по скрепным правилам БСП).
Задача: исходя из выбранного Контрагента на форме справочника, перенести соответствующие значения КИ контрагента в соответствующие поля КИ своего справочника (естественно Виды КИ и обязательные наборы - разные).
Пример:
&НаКлиенте
Процедура ПеречитатьВсе()
ОбновитьОтображениеДанных();
Прочитать();
КонецПроцедуры
&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
ЮрАдресИзКонтрагента = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Объект.Контрагент.Ссылка,
Справочники.ВидыКонтактнойИнформации.ЮридическийАдресКонтрагента,
ТекущаяДата(),
Ложь);
ОбъектКИ = РеквизитФормыВЗначение("Объект");
ЮрАдресОбъекта = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ОбъектКИ,
Справочники.ВидыКонтактнойИнформации.АЭС_Анк_ЮридическийАдрес,
ТекущаяДата(),
Ложь);
Если ЗначениеЗаполнено(ЮрАдресИзКонтрагента[0].Представление) Тогда
//Здесь тупо меняем на значения из ТЗ КИ Контрагента
ЮрАдресОбъекта[0].Значение = ЮрАдресИзКонтрагента[0].Значение;
ЮрАдресОбъекта[0].Представление = ЮрАдресИзКонтрагента[0].Представление;
ЮрАдресОбъекта[0].ЗначенияПолей = ЮрАдресИзКонтрагента[0].ЗначенияПолей;
УправлениеКонтактнойИнформацией.УстановитьКонтактнуюИнформациюОбъекта(ОбъектКИ, ЮрАдресОбъекта, Истина);
КонецЕсли;
ОбъектКИ.Записать(); // вот без этой херни обновить данные на форме не получается ни при каких условиях
ЗначениеВРеквизитФормы(ОбъектКИ,"Объект");
КонецПроцедуры
Вопрос бывалым: каким образом программно поменять КИ, обновить его на форме при этом не записывать сам объект???
|
|
|
1
formista2000
11.11.25
✎
17:50
|
УстановитьСсылкуНового(), ПолучитьСсылкуНового() и всё такое...
|
|
|
2
dimasad
11.11.25
✎
17:53
|
(1) Не поможет... все методы из УправлениеКонтактнойИнформацией которые работают с ссылкой - записывают объект владелеца КИ...
А мне надо все без записи сделать - чисто на форме
|
|
|
3
Garykom
гуру
11.11.25
✎
17:56
|
КИ хранится внутри ТЧ
Работай напрямую без БСП
|
|
|
4
dimasad
11.11.25
✎
18:01
|
(3) В том то и прикол, что после метода УстановитьКонтактнуюИнформациюОбъекта(ОбъектКИ, ЮрАдресОбъекта, Истина)
- в объекте уже изменена ТЧ с КИ. Вопрос как на форме эту байду обновить?
ps/ ОбновитьОтображениеДанных(); и Прочитать(); не помогает...
|
|
|
5
dimasad
11.11.25
✎
18:03
|
объекты на форме, связанные с КИ генеряться же динамически по средствам механизма БСП КИ
|
|
|
6
Garykom
гуру
11.11.25
✎
18:07
|
Хрен его знает, придется повторять код из БСП
Сначала удалив лишние элементы на форме
|
|
|
7
dimasad
12.11.25
✎
12:14
|
Вопрос решили с помощью коллективного мозгового штурма с коллегой.
Оказывается методы КИ типа ОбновитьКонтактнуюИнформацию - работают не с Объектом и никак не с ТЧ Объекта. а только с "ДанныеФормыЭлементКоллекции" (правда там набор рекв-в немного отличается от типовой ТЗ отдаваемой стандартными методами БСП КИ).
Сделали так:
Для Каждого ИмяКонтактнойИнформации из ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл
Если ИмяКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.Анк_ЮридическийАдрес Тогда
Если ЮрАдресИзКонтрагента.Количество() > 0 Тогда
ИмяКонтактнойИнформации.Значение = ЮрАдресИзКонтрагента[0].Значение;
ИмяКонтактнойИнформации.Представление = ЮрАдресИзКонтрагента[0].Представление;
ИмяКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
КонецЕсли;
ИначеЕсли ИмяКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.Анк_ФактическийАдрес Тогда
///
ИначеЕсли ИмяКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.Анк_Телефон Тогда
///
ИначеЕсли ИмяКонтактнойИнформации.Вид = Справочники.ВидыКонтактнойИнформации.Анк_Email Тогда
///
КонецЦикла;
УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект,
Новый Структура("Перечитать,ИмяЭлементаДляРазмещения",Истина,"ГруппаКонтактнаяИнформация"));
По сути перебираем нужные нам элементы коллекции и меняем значения. А вот метод "ОбновитьКонтактнуюИнформацию" - как раз и меняет ТЗ Объекта в соответствии с данными коллекции. Короче изначально подход был не верен.
Всем спасибо кто откликнулся.
PS/ Плохо что логика БСП КИ не разжевана в документации.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший