Как правильно организовать хранение контактной информации (адреса, нескольких телефонов, email) в справочнике 1С?

Программист 1С v8.3 (Управляемые формы) Сфера услуг, туризм и социальный сектор
← На главную

Когда мы сталкиваемся с задачей хранения разнообразной контактной информации, такой как несколько городских и мобильных телефонов, адреса и электронные почты для каждого элемента справочника в 1С, стандартные реквизиты справочника быстро становятся неэффективными. Они позволяют нам хранить лишь одно значение для каждого поля, что сильно ограничивает гибкость. Например, если нам нужно записать три городских телефона для одного учебного заведения, создание трех отдельных реквизитов вроде «ТелефонГородской1», «ТелефонГородской2», «ТелефонГородской3» является негибким и неудобным решением. Мы не сможем легко добавить четвертый телефон без изменения структуры конфигурации, и такой подход не масштабируется.

Давайте вместе разберем, как эффективно и гибко организовать хранение такой информации. Наиболее мощным и рекомендуемым подходом в 1С для решения подобных задач является использование табличных частей справочника. Этот метод позволяет нам хранить произвольное количество контактных данных для каждого элемента справочника, обеспечивая высокую степень гибкости и масштабируемости, что особенно важно в условиях, когда мы работаем без Библиотеки Стандартных Подсистем (БСП), как это было в вашем случае.

Использование табличной части для контактной информации

Табличная часть предоставляет нам возможность привязать к каждому элементу справочника (например, к каждому «Учебному Заведению») целый список связанных записей. Каждая такая запись в табличной части будет представлять собой отдельный элемент контактной информации. Это решение значительно превосходит попытки использовать множественные реквизиты, поскольку оно динамически адаптируется к любому количеству телефонов, адресов или email-адресов.

Структура табличной части: разрабатываем гибкую модель данных

Чтобы наша табличная часть была максимально универсальной и понятной, мы должны продумать ее структуру. Предлагаем следующий набор реквизитов для нашей табличной части, которую мы можем назвать, например, «КонтактнаяИнформация»:

  1. ТипКонтактнойИнформации (Перечисление)

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

    • Назначение: Определить, к какому основному типу относится данная запись (например, "Телефон", "Email", "Адрес", "WhatsApp" и т.д.).
    • Как создать: В конфигураторе, в ветке «Перечисления», создадим новое перечисление. Назовем его, например, ТипыКонтактнойИнформации.
    • Значения перечисления:
      • Телефон
      • Email
      • Адрес
      • WhatsApp
      • Telegram
      • Skype
      • Факс
      • И любые другие типы, которые могут потребоваться.
    
    // Пример создания перечисления в конфигураторе:
    // В ветке "Перечисления" создаем новое перечисление "ТипыКонтактнойИнформации".
    // Добавляем значения:
    // - Телефон
    // - Email
    // - Адрес
    // - WhatsApp
    // - Telegram
    // - Skype
    // - Факс
    
  2. ВидКонтактнойИнформации (Справочник "ВидыКонтактнойИнформации")

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

    • Назначение: Детализировать тип. Например, для Телефон можно указать Городской, Мобильный, Рабочий, Домашний. Для Адреса — Юридический, Фактический, Почтовый.
    • Как создать: Создадим новый справочник в конфигураторе, назовем его ВидыКонтактнойИнформации. Достаточно будет одного реквизита "Наименование" для хранения названия вида.
    • Пример заполнения справочника ВидыКонтактнойИнформации:
      • Для типа "Телефон": Городской, Мобильный, Рабочий, Домашний, Факс.
      • Для типа "Адрес": Юридический, Фактический, Почтовый.
      • Для типа "Email": Рабочий, Личный, Для рассылок.
  3. Представление (Строка)

    Это поле будет хранить само значение контактной информации.

    • Назначение: Хранение фактического значения: номер телефона, email-адрес, полный текст адреса.
    • Тип: Строка. Рекомендуем установить неограниченную длину для максимальной гибкости, так как адреса могут быть очень длинными.
  4. Комментарий (Строка)

    Опциональное поле для добавления дополнительной информации, которая не вписывается в основные категории.

    • Назначение: Дополнительные пояснения, например, "Телефон секретаря", "Email отдела маркетинга", "Адрес центрального офиса".
    • Тип: Строка, например, длиной 150 символов.
  5. Основной (Булево)

    Флажок, который позволяет нам отметить одно из значений как приоритетное.

    • Назначение: Отметить одно из значений как основное, если это необходимо (например, основной рабочий телефон, основной email для связи).
    • Тип: Булево (Истина/Ложь).

Запись нескольких номеров и адресов: каждый элемент — отдельная строка

Критически важно понимать, что каждое отдельное контактное значение (один городской телефон, один мобильный телефон, один email или один адрес) должно занимать отдельную строку в нашей табличной части. Это позволяет нам удобно работать с каждым номером или адресом индивидуально, фильтровать, сортировать и использовать их в отчетах.

Давайте рассмотрим, как мы можем записать несколько городских телефонов, мобильный телефон, WhatsApp и email для одного учебного заведения:

  1. Городской телефон 1:
    • ТипКонтактнойИнформации: Телефон
    • ВидКонтактнойИнформации: Городской
    • Представление: "+7 (495) 123-45-67"
    • Комментарий: "Приемная комиссия"
    • Основной: Истина (если это основной городской)
  2. Городской телефон 2:
    • ТипКонтактнойИнформации: Телефон
    • ВидКонтактнойИнформации: Городской
    • Представление: "+7 (495) 765-43-21"
    • Комментарий: "Бухгалтерия"
    • Основной: Ложь
  3. Мобильный телефон:
    • ТипКонтактнойИнформации: Телефон
    • ВидКонтактнойИнформации: Мобильный
    • Представление: "+7 (926) 987-65-43"
    • Комментарий: "Телефон директора"
    • Основной: Истина
  4. WhatsApp:
    • ТипКонтактнойИнформации: WhatsApp
    • ВидКонтактнойИнформации: Мобильный (или можно создать отдельный вид "WhatsApp")
    • Представление: "+7 (926) 987-65-43"
    • Комментарий: "Для срочной связи"
    • Основной: Ложь
  5. Email-адрес:
    • ТипКонтактнойИнформации: Email
    • ВидКонтактнойИнформации: Рабочий
    • Представление: "info@uchebka.ru"
    • Комментарий: "Основной email"
    • Основной: Истина

Таким образом, мы видим, что каждое контактное значение занимает отдельную строку, что позволяет нам хранить их в любом количестве и с любой детализацией.

Формат телефонных номеров: единообразие и удобство

Что касается формата телефонных номеров, то в 1С нет строгого принудительного формата для строковых полей. Мы сами должны позаботиться о единообразии и правильности ввода данных.

Вот несколько рекомендаций, которые мы можем применить:

  1. Хранение: Всегда храним номера в поле Представление табличной части как простую строку.
  2. Единообразие ввода: Для обеспечения единообразия и удобства вы можете использовать маски ввода на форме элемента справочника. Это позволит пользователям вводить номера в определенном формате (например, "+7 (XXX) XXX-XX-XX"), а платформа сама будет форматировать ввод.
  3. Программная проверка: На стороне кода (например, при записи элемента справочника) мы можем программно проверять формат введенного номера. Для этого часто используются регулярные выражения, которые позволяют проверить соответствие номера российскому или международному формату. Это помогает предотвратить ввод некорректных данных.
  4. Универсальный формат для обработки: В случае, если номера будут использоваться для автоматических звонков или отправки сообщений, полезно хранить их в универсальном международном формате (например, +79261234567 без разделителей) или же иметь функцию, которая преобразует пользовательский формат в такой универсальный формат для дальнейшей обработки. На форме же мы можем отображать номер в более удобном для чтения виде, используя форматирование.

Отображение адресов: от простой строки до детальной структуры

Адреса, аналогично телефонам и email, также прекрасно вписываются в нашу модель табличной части. Мы можем хранить их как отдельные записи.

  1. Простой способ:

    Создадим отдельную строку в табличной части для адреса. Например:

    • ТипКонтактнойИнформации: Адрес
    • ВидКонтактнойИнформации: Юридический (или Фактический, Почтовый)
    • Представление: "123456, г. Москва, ул. Примерная, д. 1, офис 100"
    • Комментарий: "Основной юридический адрес"
    • Основной: Истина

    Полный адрес будет храниться в поле Представление как одна строка.

  2. Более сложный подход (без БСП):

    Если нам требуется более детальная работа с адресами (например, разбор на индекс, город, улицу, дом для интеграции с картографическими сервисами или специализированными отчетами), мы можем:

    • Добавить дополнительные реквизиты в табличную часть: Вместо одного поля Представление для адреса, мы могли бы добавить в табличную часть такие реквизиты, как Индекс (Строка), Город (Строка), Улица (Строка), Дом (Строка), КвартираОфис (Строка). Это сделает табличную часть более громоздкой, но даст детальную структуру.
    • Создать отдельный справочник "Адреса": Более продвинутый подход — создать отдельный справочник Адреса со всеми детальными полями (Индекс, Город, Улица и т.д.) и затем ссылаться на элементы этого справочника из нашей табличной части КонтактнаяИнформация. В этом случае, в табличной части вместо поля Представление у нас будет реквизит СсылкаНаАдрес с типом СправочникСсылка.Адреса. Этот метод требует больше усилий для реализации, но обеспечивает максимальную гибкость и повторное использование адресов. Для учебных целей часто достаточно первого, более простого способа.

    Поскольку мы работаем без БСП, использовать готовые адресные классификаторы и подсистемы ввода адресов из коробки мы не сможем. Все придется реализовывать вручную.

Реализация без БСП: самостоятельное создание объектов конфигурации

Как мы уже выяснили из вашей ситуации, Библиотека Стандартных Подсистем (БСП) для учебных целей может быть недоступна. Это означает, что все вышеописанные механизмы — создание перечислений, справочников, табличных частей и настройка форм — мы будем реализовывать самостоятельно, используя только средства самой платформы 1С:Предприятие. Это отличная возможность для нас глубже изучить работу конфигуратора!

Давайте пошагово рассмотрим, как мы будем создавать эти объекты:

  1. Откройте конфигуратор: Запустите 1С:Предприятие в режиме «Конфигуратор».
  2. Найдите ваш справочник: В дереве конфигурации найдите справочник «Учебные Заведения», который вы создали.
  3. Создайте новое перечисление ТипыКонтактнойИнформации:
    • В ветке «Перечисления» дерева конфигурации создайте новое перечисление.
    • Назовите его ТипыКонтактнойИнформации.
    • На вкладке «Данные» добавьте необходимые значения: Телефон, Email, Адрес, WhatsApp, Telegram, Skype и т.д.
  4. Создайте новый справочник ВидыКонтактнойИнформации:
    • В ветке «Справочники» дерева конфигурации создайте новый справочник.
    • Назовите его ВидыКонтактнойИнформации.
    • На вкладке «Данные» убедитесь, что есть стандартный реквизит «Наименование», он нам будет нужен для хранения названия вида (например, «Городской», «Мобильный», «Юридический» и т.д.).
  5. Добавьте новую табличную часть в справочник «Учебные Заведения»:
    • Откройте свойства вашего справочника «Учебные Заведения».
    • На вкладке «Данные» найдите раздел «Табличные части» и добавьте новую табличную часть.
    • Назовите ее, например, КонтактнаяИнформация.
  6. Добавьте реквизиты в созданную табличную часть КонтактнаяИнформация:
    • Разверните созданную табличную часть КонтактнаяИнформация в дереве конфигурации.
    • Щелкните правой кнопкой мыши по ветке «Реквизиты» и добавьте новые реквизиты:
      • ТипКонтактнойИнформации: Тип данных — ПеречислениеСсылка.ТипыКонтактнойИнформации.
      • ВидКонтактнойИнформации: Тип данных — СправочникСсылка.ВидыКонтактнойИнформации.
      • Представление: Тип данных — Строка (рекомендуется неограниченная длина).
      • Комментарий: Тип данных — Строка (например, длиной 150).
      • Основной: Тип данных — Булево.
  7. Настройте форму справочника для отображения табличной части:
    • В свойствах справочника «Учебные Заведения» перейдите на вкладку «Формы».
    • Создайте новую форму элемента (или откройте существующую).
    • На форме элемента справочника найдите нашу табличную часть КонтактнаяИнформация (она появится в списке элементов формы, обычно в группе «Элементы данных»).
    • Перетащите ее на форму в нужное место, например, на отдельную страницу формы или в группу.
    • Настройте колонки табличной части на форме, чтобы отображались все необходимые реквизиты (Тип, Вид, Представление, Комментарий, Основной).

Пример кода (концептуальный): создание реквизитов табличной части

Вот как будет выглядеть структура реквизитов в конфигураторе, которую мы с вами создадим:


// В конфигураторе, в справочнике "УчебныеЗаведения",
// мы добавляем новую табличную часть с именем "КонтактнаяИнформация".

// Далее, в этой табличной части "КонтактнаяИнформация",
// мы добавляем следующие реквизиты:

// 1. Имя: ТипКонтактнойИнформации
//    Тип: ПеречислениеСсылка.ТипыКонтактнойИнформации
//    (Ссылка на наше перечисление, которое мы создали)

// 2. Имя: ВидКонтактнойИнформации
//    Тип: СправочникСсылка.ВидыКонтактнойИнформации
//    (Ссылка на наш справочник видов контактной информации)

// 3. Имя: Представление
//    Тип: Строка
//    Длина: 0 (Неограниченная длина, для максимальной гибкости)

// 4. Имя: Комментарий
//    Тип: Строка
//    Длина: 150 (Достаточно для коротких комментариев)

// 5. Имя: Основной
//    Тип: Булево
//    (Флажок для отметки основного контакта)

После всех этих шагов, мы обновим конфигурацию базы данных (через меню «Конфигурация» → «Обновить конфигурацию базы данных»). Теперь, при открытии элемента справочника «Учебные Заведения» в пользовательском режиме, мы увидим нашу табличную часть, куда сможем добавлять любое количество строк с различной контактной информацией.

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

← На главную