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