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