Почему в заказе клиента отображается Соглашение вместо Договора в 1С:КА 2.4 и как это исправить

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

При переходе на новые редакции программных продуктов 1С (например, при миграции с 1С:Комплексная автоматизация 1.1 на 1С:Комплексная автоматизация 2.4) пользователи и администраторы часто сталкиваются с необъяснимым поведением интерфейса. Типичный пример: в настройках системы использование соглашений с клиентами отключено, а ведение договоров — включено. Тем не менее в документе Заказ клиента поле Договор упорно не желает появляться, зато вовсю красуется реквизит Соглашение.

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

Выясняем причину: архитектура функциональных опций и кэширование

Для начала проанализируем ситуацию с технической точки зрения. В современных конфигурациях фирмы 1С, построенных на единой ERP-платформе (КА 2.4, ERP 2, УТ 11), видимость, доступность и обязательность заполнения полей на формах документов жестко завязаны на механизм Функциональных опций (ФО).

Каждая такая опция связана с определенным объектом метаданных — чаще всего с константой. Например:

В целях оптимизации быстродействия и снижения нагрузки на сервер базы данных платформа «1С:Предприятие 8» кэширует значения функциональных опций в рамках текущего сеанса пользователя. При интерактивном изменении настроек через стандартные панели администрирования система автоматически выполняет сброс этого кэша и принудительно обновляет интерфейс. Однако при автоматическом переносе данных все происходит иначе.

Когда данные загружаются из старой базы (КА 1.1) с помощью правил конвертации (XML), значения констант записываются в базу данных «напрямую» как объекты данных, минуя интерфейсные формы настроек. В этот момент встроенные обработчики бизнес-логики Библиотеки стандартных подсистем (БСП) не срабатывают, сигнал об изменении настроек не отправляется, и платформа продолжает использовать старый, «залипший» кэш функциональных опций. В результате пользователи видят форму документа, сгенерированную по старым правилам.

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


Способ 1. Интерактивный перевыбор значения константы

Рассмотрим самый простой и быстрый способ решения проблемы, который помог автору темы на форуме. Для этого нам понадобится запустить систему под пользователем с полными правами и использовать режим «Все функции» (в более новых версиях платформы этот режим называется «Функции для технического специалиста»).

Выполним следующие шаги:

  1. Откроем главное меню программы и перейдем в раздел Функции для технического специалиста (или Все функции).
  2. В открывшемся дереве объектов раскроем ветку Константы.
  3. Найдем константу Использовать соглашения с клиентами (в конфигурации имя объекта может выглядеть как ИспользоватьСоглашенияСКлиентами).
  4. Откроем форму константы. Даже если там уже установлено значение «Ложь» (снят флажок или переключатель стоит в положении «Не использовать»), нам необходимо выполнить интерактивное действие.
  5. Изменим значение (например, установим флажок), нажмем кнопку Записать, затем вернем значение в исходное состояние («Не использовать») и снова нажмем Записать.
  6. Аналогичную операцию проведем для константы, отвечающей за использование договоров (ИспользоватьДоговорыСКлиентами).

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


Способ 2. Программное обновление интерфейса

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

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


// Сброс кэша функциональных опций и принудительное обновление интерфейса
ОбновитьИнтерфейс();

Если нам необходимо обновить параметры работы программы глобально для всех пользователей через вызов стандартных процедур БСП, мы можем выполнить следующий метод на стороне сервера:


// Принудительное обновление параметров работы программы в рамках БСП
ПараметрыРаботыПрограммы.ОбновитьПараметрыРаботыПрограммы();

Выполнение этих инструкций заставит систему перечитать актуальные значения всех констант напрямую из базы данных и перестроить формы документов в соответствии с реальными настройками.


Способ 3. Запуск регламентного задания БСП

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

Выполним следующие действия:

  1. Перейдем в раздел НСИ и администрирование -> Обслуживание.
  2. Откроем подраздел Регламентные операции и перейдем по ссылке Регламентные и фоновые задания.
  3. Найдем в списке задание с наименованием Фоновое обновление параметров работы программы (или аналогичное системное задание обновления параметров).
  4. Нажмем кнопку Выполнить сейчас на панели управления.

После успешного завершения выполнения фонового задания рекомендуется перезапустить сеанс работы с программой (перезайти в 1С).


Сопутствующая проблема: дублирование единиц измерения после переноса

В процессе обсуждения на форуме была затронута еще одна классическая сложность перехода с КА 1.1 на КА 2.4 — появление дублей в справочниках, в частности, в единицах измерения. Выясним, почему это происходит и как с этим бороться.

В старых редакциях (КА 1.1) и новых (КА 2.4) принципиально отличается архитектура хранения единиц измерения и их связь с классификатором ОКЕИ:

При переносе документов и остатков через XML-правила единицы измерения могут переноситься по ссылкам из разных источников. Это приводит к тому, что в новой базе создаются дублирующие записи (например, несколько элементов «шт» или «кг» с одинаковым кодом, но разными внутренними идентификаторами UUID).

Для устранения этой проблемы обязательно выполним процедуру поиска и удаления дублей после завершения переноса данных:

  1. Перейдем в раздел НСИ и администрирование -> Обслуживание -> Корректировка данных.
  2. Откроем инструмент Поиск и удаление дублей.
  3. В качестве области поиска выберем справочник единиц измерения или упаковок номенклатуры.
  4. Зададим критерии сравнения (например, совпадение по наименованию и коду ОКЕИ).
  5. Выполним поиск, выберем правильный (оригинальный) элемент в качестве основного, а дублирующие элементы объединим. Система автоматически заменит все ссылки в проведенных документах и регистрах сведений.

Резюме

Мы подробно рассмотрели особенности работы платформы 1С с функциональными опциями и выяснили, что «исчезновение» договоров и «зависание» соглашений на формах документов после миграции данных — это следствие кэширования интерфейса. Для решения этой проблемы достаточно интерактивно перезаписать управляющую константу в режиме «Все функции», выполнить программный метод ОбновитьИнтерфейс() или запустить регламентное обновление параметров БСП. Не забывайте также проводить аудит нормативно-справочной информации на предмет дублей после завершения любых процедур конвертации данных.

← На главную