Как исправить отображение вкладки «Адреса и телефоны» контрагента в 1С:Бухгалтерия предприятия 2.0 после обмена?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Приветствуем всех практикующих специалистов и администраторов систем 1С! Сегодня мы разберем классическую проблему, с которой часто сталкиваются пользователи при настройке синхронизации данных между конфигурациями 1С:Бухгалтерия предприятия 2.0 (БП 2.0) и 1С:Управление торговлей 10.3 (УТ 10.3). Проблема заключается в том, что после очередного сеанса обмена вкладка «Адреса и телефоны» в карточке контрагента полностью ломает свой привычный интерфейс: поля дублируются, меняются местами, пропадают стандартные кнопки выбора адресов, а сама форма приобретает хаотичный вид.

Давайте подробно проанализируем ситуацию, выясним глубинную техническую причину этого сбоя и разберем по шагам, как вернуть форме стандартный вид и предотвратить повторение проблемы в будущем.


Почему ломается интерфейс вкладки «Адреса и телефоны»?

Для начала давайте разберемся, как устроена работа с контактной информацией в 1С на платформе обычных форм. В конфигурации БП 2.0 вкладка «Адреса и телефоны» строится динамически. Программа обращается к справочнику ВидыКонтактнойИнформации, находит там предопределенную группу «Контактная информация справочника "Контрагенты"» и выводит на форму элементы, которые находятся внутри этой группы.

В штатном режиме система ожидает увидеть там только строго определенные системные элементы (например, «Юридический адрес контрагента», «Фактический адрес контрагента», «Телефон контрагента»). Под эти элементы в кодовой логике формы прописаны специальные обработчики (кнопки открытия адресного классификатора КЛАДР/ФИАС, проверки заполнения и т.д.).

Сбой происходит из-за следующих факторов при обмене данными:

  1. Различие уникальных идентификаторов (GUID): Предопределенные элементы в базах БП 2.0 и УТ 10.3 часто имеют разные внутренние GUID (особенно если базы создавались независимо или обновлялись по разным веткам). Из-за этого механизм обмена не понимает, что «Юридический адрес» в УТ и «Юридический адрес» в БП — это один и тот же элемент.
  2. Создание «непредопределенных» дубликатов: При обмене система создает в базе БП новые элементы в справочнике ВидыКонтактнойИнформации с такими же наименованиями, но они уже не являются системными (предопределенными). Визуально в справочнике они выглядят одинаково, но у оригинальных элементов иконка снабжена желтым кружком с синим ромбиком, а у дублей — это обычная иконка папки или элемента.
  3. Хаос на форме: Так как новые дубли создаются внутри группы «Контактная информация справочника "Контрагенты"», БП 2.0 пытается автоматически вывести их на форму контрагента. Места на форме под «нестандартные» элементы не зарезервировано, разметка «съезжает», а функции работы с адресами перестают корректно отрабатывать.
  4. Потеря связи с регистром: Сами адреса контрагентов начинают записываться в регистр сведений КонтактнаяИнформация под ссылкой на вновь созданные дубликаты, а не под оригинальные предопределенные виды. Как результат — адреса перестают выводиться в печатные формы документов (акты, накладные, счета).

Пошаговое решение по исправлению интерфейса карточки контрагента

Чтобы вернуть вкладке «Адреса и телефоны» стандартный вид, нам необходимо выполнить аккуратную замену дублирующих элементов и очистить справочник от лишних записей. Разберем этот процесс по шагам.

Шаг 1. Диагностика справочника «Виды контактной информации»

Прежде всего перейдем в меню Операции -> Справочники -> Виды контактной информации. Раскроем группу «Контактная информация справочника "Контрагенты"». Проанализируем список элементов на наличие дублей. Вы увидите пары одинаковых названий, например, два «Юридических адреса». Тот элемент, у которого пиктограмма без синего ромбика — это дубликат, созданный обменом, который нам и мешает.

Шаг 2. Замена ссылок в базе данных

Мы не можем просто взять и удалить дублирующиеся элементы, так как на них уже ссылаются конкретные записи по контрагентам в регистре сведений КонтактнаяИнформация. Прямое удаление приведет к битым ссылкам («Объект не найден»). Нам нужно перенаправить все ссылки с дубля на правильный предопределенный элемент.

Для этого воспользуемся стандартной обработкой «Поиск и замена значений» (ее можно взять с диска ИТС или использовать встроенный механизм «Поиск и замена дублирующих элементов»):

  1. В поле «Что заменять» (заменяемое значение) выбираем созданный обменом дубликат из справочника Виды контактной информации (тот, что без синего значка предопределенного элемента).
  2. В поле «На что заменять» (заменяющее значение) выбираем оригинальный предопределенный элемент БП 2.0.
  3. Нажимаем кнопку «Найти ссылки», чтобы убедиться, в каких объектах используется дубль.
  4. Выполняем команду «Выполнить замену». Обработка автоматически найдет все записи регистра сведений по всем контрагентам и заменит ссылку на верный вид контактной информации.

Повторим эту процедуру для всех обнаруженных дубликатов (фактический адрес, телефон, факс и т.д.).

Шаг 3. Программный способ слияния дублей (альтернатива для разработчиков)

Если контрагентов и дублирующихся видов контактной информации слишком много, операцию по замене в регистре можно выполнить с помощью короткого скрипта. Рассмотрим пример программного переноса записей в регистре сведений:


// Процедура для программного переноса записей регистра на правильный вид КИ
Процедура ОбъединитьДублиВидовКонтактнойИнформации(ПравильныйВид, ДубльВид) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	КонтактнаяИнформация.Объект КАК Объект,
        |	КонтактнаяИнформация.Тип КАК Тип,
        |	КонтактнаяИнформация.Вид КАК Вид
        |ИЗ
        |	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |ГДЕ
        |	КонтактнаяИнформация.Вид = &ДубльВид";
    
    Запрос.УстановитьПараметр("ДубльВид", ДубльВид);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        // Считываем существующую запись для замены ключа
        НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Объект.Установить(Выборка.Объект);
        НаборЗаписей.Отбор.Тип.Установить(Выборка.Тип);
        НаборЗаписей.Отбор.Вид.Установить(Выборка.Вид);
        НаборЗаписей.Прочитать();
        
        Если НаборЗаписей.Количество() > 0 Тогда
            Для Каждого Запись Из НаборЗаписей Цикл
                Запись.Вид = ПравильныйВид;
            КонецЦикла;
            Попытка
                НаборЗаписей.Записать();
            Исключение
                Сообщить("Не удалось обновить запись для объекта: " + Выборка.Объект + ". Ошибка: " + ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Шаг 4. Удаление ненужных элементов справочника

После того как все ссылки в регистре перенаправлены на правильные элементы, возвращаемся в справочник Виды контактной информации. Помечаем дубликаты на удаление. Теперь они свободны от ссылок, и мы можем окончательно стереть их из базы данных через меню Операции -> Удаление помеченных объектов. Как только дубли будут удалены, интерфейс карточки контрагента мгновенно примет свой первоначальный, чистый и удобный вид.


Профилактика: как не допустить появления дублей при следующем обмене?

Если мы ограничимся только чисткой базы, при первом же последующем сеансе автоматического обмена данными с УТ 10.3 дублирующие элементы снова запишутся в справочник БП 2.0, и проблема вернется. Нам нужно устранить источник появления дублей.

Способ А. Исключение справочника из плана обмена

Поскольку виды контактной информации — это практически неизменяемые системные настройки баз данных, их нет никакой практической необходимости постоянно гонять через синхронизацию. Рекомендуем полностью отключить регистрацию изменений для справочника ВидыКонтактнойИнформации:

  1. Откроем узел плана обмена с УТ 10.3 в режиме «1С:Предприятие».
  2. Перейдем в настройки регистрации объектов обмена.
  3. Найдем в списке метаданных справочник Виды контактной информации, вызовем контекстное меню и выберем опцию «Отключить регистрацию изменений» (или снимем флажок автоматической регистрации в правилах).

Способ Б. Корректировка Правил Конвертации Объектов (ПКО)

Если вам все же необходимо передавать новые виды контактной информации, настроим правила сопоставления в программе «Конвертация данных 2.0» (КД 2):

  1. Откроем действующие правила обмена между УТ 10.3 и БП 2.0 в конфигураторе КД 2.
  2. Перейдем в ПКО для справочника ВидыКонтактнойИнформации.
  3. По умолчанию там может стоять поиск объектов по внутреннему идентификатору (GUID). Изменим логику сопоставления. Отметим галочками поиск по полям «Наименование» и «Родитель» (Группа).
  4. Для предопределенных элементов обязательно включим настройку «Сопоставлять по полям предопределенных данных».
  5. Сохраним правила обмена и загрузим их обратно в настройки синхронизации в базах данных.

Выполнив эти настройки, мы раз и навсегда решим проблему дублирования данных. Система научится корректно сопоставлять элементы при обмене, а форма «Адреса и телефоны» в 1С:Бухгалтерии 2.0 будет радовать пользователей своей стабильной работой и правильным интерфейсом!

← На главную