При разработке и сопровождении конфигураций 1С разработчики часто сталкиваются с задачей сохранения нескольких контактных данных одного типа для одного контрагента — например, двух и более фактических адресов или нескольких рабочих телефонов. Рассмотрим архитектурные особенности хранения контактной информации, разберем ограничения стандартного регистра сведений и изучим современные подходы к решению этой задачи.
Проанализируем структуру классического регистра сведений КонтактнаяИнформация, применяемого в ранних версиях программ (например, «1С:Бухгалтерия 1.6 / 2.0», «1С:Управление производственным предприятием 1.3», «1С:Управление торговлей 10.3»). Ключевыми измерениями этого регистра являются:
Объект — ссылка на справочник (Контрагенты, Организации, ФизическиеЛица).Тип — перечисление (Адрес, Телефон, АдресЭлектроннойПочты и др.).Вид — ссылка на справочник ВидыКонтактнойИнформации.Так как уникальность записей в регистре определяется комбинацией его измерений, попытка записать второй номер телефона с тем же Объектом, Типом и Видом приводит к ошибке неуникальности записи либо к автоматической перезаписи ранее введенного значения. Рассмотрим возможные варианты решения этой проблемы.
Разберем базовый и наиболее безопасный способ для типовых конфигураций на обычных формах, не требующий внесения изменений в структуру метаданных. Вместо попытки записать несколько значений под одним видом создаются отдельные элементы справочника ВидыКонтактнойИнформации.
Посмотрим на практическую реализацию этого подхода:
ВидыКонтактнойИнформации для группы «Контрагенты» создаются уточняющие виды: Основной телефон, Дополнительный телефон, Корпоративный мобильный телефон, Телефон бухгалтерии.Преимущество: Полная совместимость с типовыми механизмами конфигурации, печатными формами и регламентированными отчетами без доработки конфигурации.
Ограничение: Количество полей жестко фиксировано списком созданных видов контактной информации.
Во многих типовых конфигурациях (например, «Управление производственным предприятием», «Комплексная автоматизация 1.1», «Управление торговлей 10.3») предусмотрен подчиненный справочник КонтактныеЛицаКонтрагентов. Проанализируем правильную организацию хранения:
Контрагенты.КонтактныеЛицаКонтрагентов, где измерением Объект выступает ссылка на конкретное контактное лицо.Рассмотрим, как данная задача решена в актуальных конфигурациях на управляемых формах («1С:Бухгалтерия 3.0», «1С:ERP Управление предприятием», «1С:Комплексная автоматизация 2», «1С:Управление торговлей 11»). В современных версиях разработчики платформенных библиотек отказались от независимого регистра сведений в пользу встроенных табличных частей.
Разберем ключевые особенности современной модели:
КонтактнаяИнформация целевых справочников (Контрагенты, Организации, ФизическиеЛица).ВидыКонтактнойИнформации реализована опция Разрешить ввод нескольких значений. При установке этого флага пользователь может добавлять неограниченное количество строк с одним и тем же видом (например, несколько телефонных номеров или адресов электронной почты).НомерТелефона, НомерТелефонаБезКодов, Город, Страна), а также реквизит ЗначенияПолей со структурой данных в формате XML или JSON, что упрощает интеграцию с внешними сервисами, телефонией и CRM.Если в нетиповой или устаревшей конфигурации требуется хранить произвольный динамический список контактов без изменения логики типового регистра сведений, оптимальным решением является создание собственного справочника. Разберем по шагам создание такой структуры:
ДополнительныеКонтактыКонтрагентов.СправочникСсылка.Контрагенты.ВидСвязи (телефон, email, мессенджер), Значение (строка), Комментарий, Основной (булево).Важное предупреждение: Попытка модифицировать типовой регистр сведений КонтактнаяИнформация путем добавления нового числового измерения (для нумерации дублей) приводит к сбоям в типовых модулях работы с контактной информацией. Стандартные процедуры чтения и записи наборов записей рассчитаны на строго фиксированный состав измерений, поэтому модификация типового регистра крайне не рекомендуется.