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