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