Имя: Пароль:
1C
 
Обновление Контактной информации для не записанных
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/ Плохо что логика БСП КИ не разжевана в документации.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.