В процессе ведения клиентской базы в современных конфигурациях 1С, таких как Управление торговлей 11 (УТ 11), ERP Управление предприятием 2 или Комплексная автоматизация 2, часто возникает необходимость дисциплинировать пользователей. Одной из самых частых задач является запрет записи или проведения карточки клиента (партнера), если в ней не заполнены важные контактные данные — например, номер телефона или адрес электронной почты. Рассмотрим подробно, как реализовать этот механизм с помощью стандартных средств и разберем технические нюансы работы подсистемы «Контактная информация».
Прежде чем приступать к доработке кода или написанию расширений, проанализируем возможности типового функционала. В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), предусмотрен встроенный механизм контроля заполнения. Выполним следующие шаги:
После установки этой «галки» система автоматически начнет контролировать наличие данных в соответствующих полях при попытке записать карточку клиента. Поле на форме будет подчеркнуто красной пунктирной линией, что является стандартом платформы 1С:Предприятие 8.3.
Если стандартной настройки недостаточно или требуется реализовать более сложную логику (например, делать поле обязательным только для определенного сегмента клиентов), мы можем воспользоваться программными механизмами. Разберем, как это работает на уровне кода.
Механизм проверки контактной информации обычно сосредоточен в общем модуле УправлениеКонтактнойИнформацией. При записи объекта система вызывает метод проверки заполнения. Если нам нужно вмешаться в этот процесс, мы можем использовать процедуру ОбработкаПроверкиЗаполнения в модуле объекта (например, справочника Контрагенты или Партнеры).
Рассмотрим пример кода, который проверяет наличие телефона перед записью:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Проверим, заполнен ли телефон в табличной части КонтактнаяИнформация
Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл
Если СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера Тогда
Если ПустаяСтрока(СтрокаКИ.Представление) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Необходимо заполнить телефон партнера!";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важно помнить, что в современных конфигурациях контактная информация может храниться как в табличной части самого объекта, так и в отдельном регистре сведений. Проанализируем, где именно хранятся данные в вашей версии конфигурации, прежде чем писать запрос.
Выясним причину, по которой стандартная настройка может не срабатывать. Система 1С использует сложную иерархию вызовов при проверке КИ (контактной информации). Основная логика заложена в событии ПередЗаписью. Если в коде конфигурации или в расширении этот механизм был изменен, стандартная проверка может игнорироваться.
Также стоит учитывать параметр ОбменДанными.Загрузка. Если данные загружаются программно (например, через обработку «Загрузка данных из Excel»), то проверки на обязательность полей, установленные в интерфейсе, как правило, отключаются, чтобы не блокировать импорт данных. Если вы хотите, чтобы проверка работала всегда, ее нужно выносить за рамки условия Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли;.
Иногда требуется, чтобы адрес был обязателен для юридических лиц, но оставался необязательным для физических. В последних версиях БСП это настраивается через «Состав групп» в справочнике Виды контактной информации. Мы можем создать разные виды контактной информации для разных типов контрагентов и настроить их обязательность независимо друг от друга.
Установка флага Обязательное заполнение влияет только на новые или изменяемые записи. Посмотрим на ситуацию: в базе уже есть 10 000 клиентов без телефонов. Система не выдаст ошибку, пока пользователь не откроет карточку старого клиента и не нажмет кнопку «Записать». Для исправления старых данных рекомендуется:
Проанализируем поведение формы. При установке признака обязательности, 1С не просто выдает ошибку при записи, но и помогает пользователю визуально. Поле выделяется, а при попытке записи без данных курсор автоматически позиционируется на незаполненном поле. Это значительно сокращает время на исправление ошибок ввода.
Если вы кастомизировали форму объекта и добавили свои элементы для отображения контактной информации, убедитесь, что в процедуре ОбработкаПроверкиЗаполненияНаСервере в модуле формы вызывается стандартный обработчик проверки КИ. В противном случае визуальная индикация может работать некорректно.
Помимо того, что поле должно быть заполнено, часто требуется, чтобы данные в нем были уникальными (например, нельзя регистрировать двух клиентов на один номер телефона). Это настраивается в тех же настройках Видов контактной информации. Сочетание обязательности и проверки на уникальность позволяет поддерживать чистоту клиентской базы на высоком уровне, предотвращая создание дублей и «мусорных» записей.
Подводя итог, можно сказать, что в 90% случаев для решения задачи достаточно включить одну стандартную настройку в справочнике Виды контактной информации. Программное вмешательство требуется только для реализации исключительной бизнес-логики.