При работе в конфигурации 1С:Бухгалтерия предприятия 2.0 технические специалисты часто сталкиваются с ситуацией, когда необходимо изменить аналитику на конкретном счете. Одной из самых загадочных проблем является блокировка модификации счета МЦ.04 («Инвентарь и хозяйственные принадлежности в эксплуатации»). Программист видит, что кнопки удаления или замены субконто в форме плана счетов отображаются серыми (недоступными), хотя программная проверка в отладчике может показывать, что свойство Доступность установлено в значение Истина.
В этой статье мы подробно разберем причины такого поведения системы, проанализируем механизмы защиты данных и выясним, как правильно вносить изменения в план счетов, не нарушая логику программы.
Первое, на что нам стоит обратить внимание — это статус счета МЦ.04. В системе 1С все элементы плана счетов делятся на две категории: созданные пользователем в режиме «Предприятие» и предопределенные, созданные разработчиком в «Конфигураторе».
Предопределенные счета имеют особый статус. Платформа 1С жестко защищает их структуру, так как на них завязаны программные алгоритмы в модулях документов, отчетов и при закрытии месяца. Рассмотрим основные правила работы с ними:
Проанализируем ситуацию с точки зрения кода. Почему в отладчике кнопка кажется доступной, а на экране — нет? Рассмотрим механизм отрисовки формы в обычных приложениях (на которых построена БП 2.0).
Когда мы открываем форму счета, срабатывает процедура ПриОткрытии. В ней разработчики часто прописывают программную доступность элементов. Однако для планов счетов и планов видов характеристик платформа применяет системные ограничения уже после выполнения кода на языке 1С. Если строка в табличной части соответствует предопределенному значению, платформа на уровне ядра блокирует элементы управления для этой строки, чтобы предотвратить разрушение целостности метаданных.
Также стоит проверить специализированные механизмы конфигурации. В БП 2.0 существует массив или функция, определяющая список запрещенных к редактированию счетов. Проанализируем модуль объекта плана счетов Хозрасчетный. Найдем там функцию или переменную, отвечающую за список исключений:
// Примерный поиск в модуле объекта плана счетов
Функция ПолучитьСписокЗапрещенныхСчетов()
Список = Новый Массив;
Список.Добавить(ПланыСчетов.Хозрасчетный.МЦ04);
// ... добавление других критически важных счетов
Возврат Список;
КонецФункции
Если счет находится в таком списке, форма будет принудительно ограничивать любые действия пользователя, даже если стандартные права доступа позволяют редактирование.
Важно понимать, почему именно счет МЦ.04 так защищен. Рассмотрим, как он используется в документах:
МЦ.04. Код документа жестко рассчитывает на то, что первым субконто будет Номенклатура, вторым — Партия (если ведется партионный учет), а третьим — Физ. лицо.Если нам удастся программно «взломать» структуру и заменить, например, Физ. лицо на другое субконто, все типовые документы перестанут проводиться или будут выдавать ошибки выполнения (Runtime Error), так как они не найдут ожидаемых измерений в регистре. Это критически опасная операция для работающей базы.
Если стандартный набор субконто категорически не подходит для ваших целей, рассмотрим безопасные варианты решения задачи.
Вместо изменения предопределенного счета МЦ.04, мы можем создать новый подчиненный счет, например, МЦ.04.01.
МЦ.04.Если вам нужно добавить аналитику только для отчетности (например, «Место хранения» или «Проект»), не обязательно менять план счетов. Рассмотрим механизм дополнительных сведений:
Используйте справочник НазначениеИспользования или Номенклатура, добавив туда дополнительные реквизиты. Это позволит строить отчеты в разрезе нужных данных, сохранив при этом типовую логику проведения документов по счету МЦ.04. При необходимости можно воспользоваться инструкцией по подключению механизма дополнительных реквизитов к справочникам.
Если вам жизненно необходимо добавить четвертое или пятое субконто (при условии, что платформа это позволяет), это можно сделать кнопкой «Добавить», которая остается активной.
Важный момент: Новое субконто не должно заменять существующие. Оно может только дополнять их. Помните, что максимальное количество субконто в типовой БП 2.0 обычно ограничено тремя. Чтобы увеличить это число, потребуются изменения в Конфигураторе на уровне свойств Плана счетов Хозрасчетный, что повлечет за собой необходимость значительной переработки всей системы.
Вернемся к вопросу автора о том, почему Доступность = Истина, а кнопка серая. В платформе 1С существует понятие «Состояние видимости и доступности», которое вычисляется динамически.
Проанализируем работу метода ТолькоПросмотр для всей формы или конкретного списка. Если для элемента списка (строки субконто) установлено свойство предопределенности, платформа игнорирует программные установки Доступность для кнопок удаления, так как это действие запрещено на уровне прав доступа к метаданным. Проверить это можно, попытавшись выполнить удаление программно:
Попытка
СчетОбъект = ПланыСчетов.Хозрасчетный.МЦ04.ПолучитьОбъект();
СчетОбъект.ВидыСубконто.Удалить(0); // Попытка удалить первое субконто
СчетОбъект.Записать();
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
С большой долей вероятности система выдаст ошибку нарушения прав доступа или запрета изменения предопределенных данных. Таким образом, «серая кнопка» — это лишь визуальное отражение глубокого системного запрета платформы на модификацию ядра конфигурации в пользовательском режиме.