Как очистить историю адресов доставки в заказе клиента 1С:Управление торговлей 11.5

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

При работе в конфигурации 1С:Управление торговлей 11.5 (а также в ERP и КА 2) многие пользователи и администраторы сталкиваются с проблемой «засорения» выпадающего списка в поле АдресДоставки — для решения этой проблемы есть улучшенный подбор в полях ввода 1С. Со временем там накапливаются устаревшие, ошибочные или разовые адреса, которые мешают оперативной работе менеджеров. Давайте разберем, как устроен этот механизм изнутри, почему стандартного справочника для этих адресов не существует и как программно или административно навести порядок в этом списке.

Анализируем механизм формирования списка адресов

Прежде всего, нам необходимо понять, что поле АдресДоставки в документе ЗаказКлиента — это не просто ссылка на какой-то справочник. Это строковый реквизит (вместе со связанным скрытым реквизитом для хранения координат и кодов ФИАС), который заполняется динамически. Рассмотрим ситуацию глазами программиста: при нажатии на кнопку выбора или начале ввода текста система не обращается к регистру сведений, она опрашивает саму историю документов.

Основная логика подбора (как и в случаях изменения данных табличных частей) сосредоточена в общем модуле ДоставкаСервер. Давайте проанализируем фрагмент кода, который отвечает за получение этих данных. Система собирает последние использованные адреса по конкретному партнеру или контрагенту.


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

    // Запрос к базе данных для получения ПЕРВЫХ 3 уникальных адресов
    ШаблонЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 3
                    |   ВЫБОР КОГДА Док.СпособДоставки В (&СпособыДоставкиДоМестаПередачи)
                    |       И &Перевозчик <> НЕОПРЕДЕЛЕНО
                    |       ТОГДА Док.АдресДоставкиПеревозчика
                    |       ИНАЧЕ Док.АдресДоставки
                    |   КОНЕЦ КАК АдресДоставки,
                    |   МАКСИМУМ(Док.Дата) КАК Дата
                    |ПОМЕСТИТЬ ВТ_ПоследниеАдреса
                    |ИЗ Документ.ЗаказКлиента КАК Док...";
КонецЕсли;

Как мы видим из кода, система ищет последние документы (Заказы, Реализации, Заявки на возврат), группирует их по адресу и выбирает самые свежие по дате. Именно поэтому просто «удалить» адрес из какого-то списка невозможно — его там нет, он извлекается прямо из ваших проведенных документов.

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

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

Разберем, какие объекты участвуют в формировании этого «облака» адресов:

  1. Документы-распоряжения: Заказы клиентов, Реализации товаров и услуг.
  2. Транспортные документы: Задания на перевозку, Поручения экспедитору (если включен функционал доставки).
  3. Регистры статистики: В некоторых версиях задействуется механизм ЗаполнениеОбъектовПоСтатистике (очистка и удаление записей регистров может потребоваться в специфических случаях), который анализирует частоту использования значений.

Способ 1: Очистка через исправление первоисточников (без программирования)

Поскольку адреса тянутся из последних документов, самый надежный способ убрать ошибочный адрес — это изменить его в тех самых документах, где он был указан. Выясним причину появления конкретного адреса и устраним её по шагам:

  1. Перейдем в список документов Заказы клиентов или Реализации товаров и услуг.
  2. Установим отбор по клиенту, у которого вылезает «лишний» адрес.
  3. С помощью поиска или фильтра найдем последние 3-5 документов, где в поле Адрес доставки указана ошибочная строка — в этом поможет инструмент поиска документов по контрагенту для 1С.
  4. Воспользуемся обработкой «Групповое изменение реквизитов» (НСИ и администрирование — Обслуживание — Корректировка данных) — для этого подойдёт универсальный инструмент для массового редактирования данных в 1С.
  5. В обработке выберем тип документа (например, Заказ клиента), добавим отбор по партнеру и по значению поля Адрес доставки.
  6. Заменим значение на корректное или просто очистим его. Важно: не забывайте, что вместе с текстовым полем АдресДоставки нужно корректировать и скрытое поле АдресДоставкиЗначенияПолей, иначе система может восстановить старую строку из XML-структуры.

Способ 2: Настройка контактной информации в карточке партнера

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

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

Способ 3: Программное решение (для разработчиков)

Если бизнес-логика требует, чтобы старые адреса никогда не подтягивались из документов, а выбирались только из карточки партнера, нам придется прибегнуть к расширению конфигурации. Рассмотрим, как можно модифицировать поведение системы.

Нам необходимо создать расширение и переопределить функцию в модуле ДоставкаСервер. Мы можем либо изменить количество выбираемых адресов (вместо ПЕРВЫЕ 3 поставить ПЕРВЫЕ 0), либо полностью подменить запрос.


&Вместо("ПоследниеРеквизитыДоставкиИзРаспоряжений")
Функция Мой_ПоследниеРеквизитыДоставкиИзРаспоряжений(ОбъектСсылка, ПолучательОтправитель = Неопределено, Перевозчик = Неопределено)
    // Возвращаем пустую таблицу значений, чтобы система не находила историю в документах
    ТаблицаРезультат = Новый ТаблицаЗначений;
    ТаблицаРезультат.Колонки.Добавить("АдресДоставки");
    ТаблицаРезультат.Колонки.Добавить("АдресДоставкиЗначенияПолей");
    // ... добавить остальные колонки согласно оригинальной функции
    
    Возврат ТаблицаРезультат;
КонецФункции

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

Подведем итоги

Мы выяснили, что «лишние» адреса в УТ 11.5 — это результат работы алгоритма сбора статистики по последним документам. Система стремится быть «умной» и предлагать то, что вы использовали совсем недавно. Если эта «умность» мешает:

Помните, что чистота базы данных начинается с регламентов ввода информации. Использование ФИАС и выбор адресов из заранее подготовленного списка в карточке партнера — лучший способ избежать проблем с «лишними» строками в будущем.

← На главную