Как программно добавить телефон контрагенту в конфигурации 1С:Розница

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

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

Анализ структуры хранения контактной информации

Прежде чем переходить к коду, разберем, где именно хранятся телефоны, адреса и электронная почта. В справочнике Контрагенты (а также в справочниках ФизическиеЛица, Организации и др.) предусмотрена табличная часть под названием КонтактнаяИнформация.

Многие начинающие разработчики совершают ошибку, заполняя только реквизит НомерТелефона. Однако для того, чтобы система "увидела" эту запись и корректно отобразила её в карточке контрагента на вкладке "Адреса и телефоны", необходимо заполнить целый ряд обязательных полей. Проанализируем основные реквизиты этой табличной части:

Прямое добавление записи в табличную часть

Рассмотрим пример кода, который позволяет добавить телефонный номер в объект контрагента. Этот метод подходит, когда у вас уже открыт объект для редактирования или вы создаете нового контрагента.


// Предположим, у нас есть ОбъектКонтрагента (тип СправочникОбъект.Контрагенты)
// и переменная СтроковыйНомер, содержащая телефон

НоваяСтрока = ОбъектКонтрагента.КонтактнаяИнформация.Добавить();
НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;

// Важно правильно определить Вид. Обычно это предопределенный элемент
НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;

// Заполняем номер и ОБЯЗАТЕЛЬНО представление
НоваяСтрока.НомерТелефона = СтроковыйНомер;
НоваяСтрока.Представление  = СтроковыйНомер;

// Для корректной работы поиска рекомендуется очистить номер от лишних символов
// (скобок, тире, пробелов) и записать в специальное поле
НоваяСтрока.НомерТелефонаБезКодов = СтрСоединить(СтрРазделить(СтроковыйНомер, "+-() ", Ложь), "");

ОбъектКонтрагента.Записать();

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

Использование механизмов БСП (Рекомендуемый способ)

В современных версиях "Розницы" реализована мощная подсистема управления контактной информацией. Использование прямого обращения к табличной части — не самый гибкий путь, так как структура хранения может включать в себя XML-сериализованные данные в поле ЗначенияПолей. Чтобы не формировать этот XML вручную, правильно будет использовать программный интерфейс БСП.

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


// Ссылка на контрагента, которому добавляем номер
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИННИзФайла);

Если Не СсылкаНаКонтрагента.Пустая() Тогда
    
    Объект = СсылкаНаКонтрагента.ПолучитьОбъект();
    ВидТелефона = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
    
    // Подготовим структуру с данными
    ДанныеКИ = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(СтроковыйНомер, ВидТелефона);
    
    // Метод добавит или обновит информацию в табличной части объекта
    УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Объект, ДанныеКИ, ВидТелефона, Перечисления.ТипыКонтактнойИнформации.Телефон);
    
    Объект.Записать();
    
КонецЕсли;

Важные нюансы при работе с контактной информацией

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

  1. Проверка на дубли: Прежде чем использовать метод Добавить(), выясним, нет ли уже у этого контрагента телефона такого же вида. Если в настройках вида КИ не стоит флаг "Разрешить ввод нескольких записей", то добавление новой строки может привести к тому, что старая информация будет скрыта или возникнет конфликт при записи.
  2. Поле "ЗначенияПолей": В этом поле хранится структурированная информация (код страны, код города, добавочный номер). Если вы заполняете телефон просто строкой, при открытии формы редактирования номера (где поля разделены), пользователь может увидеть пустые поля, хотя в строке "Представление" номер будет. Использование функций модуля УправлениеКонтактнойИнформацией позволяет избежать этой проблемы, так как они автоматически парсят строку и заполняют структуру.
  3. Нормализация номера: Для работы таких сервисов, как SMS-рассылки или интеграция с облачными АТС, крайне важно приводить номер к единому формату (например, +7XXXXXXXXXX). Выясним, есть ли в вашей конфигурации маски ввода, и старайтесь программно очищать входящие строки от мусора.

Таким образом, мы проанализировали два основных подхода к добавлению телефона контрагенту в конфигурации 1С:Розница. Использование прямого заполнения ТЧ КонтактнаяИнформация допустимо для простых задач, при условии обязательного заполнения реквизита Представление. Однако для обеспечения целостности данных и корректной работы всех механизмов платформы, рекомендуется применять методы общего модуля УправлениеКонтактнойИнформацией.

← На главную