В практике разработчика 1С часто возникает ситуация, когда бизнес-заказчик (например, главный бухгалтер) требует внедрения специфического учета, не предусмотренного типовым функционалом. Типичный пример — необходимость проставлять "флажки" или дополнительные метки непосредственно в строках табличной части документа Реализация товаров и услуг (РТУ). Основная сложность здесь заключается не в самом добавлении поля, а в сохранении возможности легкого обновления конфигурации, особенно такой массивной, как Управление производственным предприятием 1.3 (УПП).
Рассмотрим несколько эффективных способов решения этой задачи: от классического изменения метаданных до продвинутых методов программного управления формой и использования внешних хранилищ данных.
Проанализируем самый очевидный и простой в реализации путь. Мы можем добавить новый реквизит в нужную табличную часть документа (например, Товары или Услуги) непосредственно в конфигураторе.
Преимущества:
Риски и нюансы:
Основной риск — потеря данных при неквалифицированном обновлении. Если при очередном релизе конфигурации разработчик выберет режим "Заместить" вместо "Объединить" для объекта РТУ, добавленный реквизит исчезнет вместе со всеми накопленными данными. Чтобы минимизировать этот риск, необходимо строго соблюдать правила ведения истории изменений и всегда использовать режим сравнения/объединения с приоритетом основной конфигурации для пользовательских объектов.
Если мы хотим оставить структуру документа нетронутой, разберем вариант хранения аналитики в отдельном регистре сведений. В этом случае в регистре создается запись, связывающая документ и его строку с нужным значением (флажком).
Однако здесь мы сталкиваемся с проблемой: как однозначно идентифицировать строку? Номер строки в 1С — величина непостоянная, он меняется при сортировке или удалении позиций. Для решения этой задачи в профессиональной разработке используется КлючСтроки.
Разберем алгоритм реализации:
ДополнительнаяАналитикаНоменклатуры) с измерениями ДокументСсылка и КлючСтроки (тип Число или УникальныйИдентификатор) и ресурсом Флажок (тип Булево).КлючСтроки, который заполняется один раз при создании строки и не меняется.Этот метод позволяет практически не менять модуль объекта, сосредоточив всю логику во внешних обработчиках.
Чтобы избежать "разрисовывания" типовой формы в конфигураторе, что часто приводит к конфликтам при обновлении (когда 1С меняет дизайн или состав реквизитов), проанализируем метод программного добавления элементов. Мы можем добавить колонку в табличное поле в процедуре ПриОткрытии формы документа.
Посмотрим на пример кода, который можно вынести в общий модуль, чтобы в самой форме осталась лишь одна строка вызова:
Процедура ДобавитьКолонкуСАналитикой(ФормаДокумента) Экспорт
ТабличноеПоле = ФормаДокумента.ЭлементыФормы.Услуги;
НоваяКолонка = ТабличноеПоле.Колонки.Вставить(0, "МеткаБухгалтера");
НоваяКолонка.Данные = ""; // Колонка не привязана к реквизиту напрямую
НоваяКолонка.УстановитьТекстШапки("Ок");
НоваяКолонка.ДанныеФлажка = "ФлажокПроставлен"; // Имя в данных строки
НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
КонецПроцедуры
Для отображения данных нам потребуется обработчик ПриВыводеСтроки. Выясним, как это работает: программа при отрисовке каждой строки обращается к нашему коду, где мы можем считать значение из регистра или временной таблицы и установить состояние флажка.
Процедура УслугиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Получаем данные из соответствия или закэшированного регистра
Если ДанныеСтроки.МеткаПроставлена Тогда
ОформлениеСтроки.Ячейки.МеткаБухгалтера.ОтображатьФлажок = Истина;
ОформлениеСтроки.Ячейки.МеткаБухгалтера.Флажок = Истина;
КонецЕсли;
КонецПроцедуры
В конфигурации УПП 1.3 существует типовой механизм Свойства и Категории (План видов характеристик СвойстваОбъектов). Рассмотрим подробнее, как его можно применить.
Обычно свойства привязываются к документу в целом. Однако, если задача позволяет, мы можем создать свойство "Требует особого внимания" для всего документа РТУ. Бухгалтер сможет устанавливать этот признак на специальной вкладке "Свойства" или через кнопку на панели инструментов. Это полностью исключает изменение кода, так как механизм является типовым. Отчеты по свойствам также можно строить с помощью консоли отчетов или типового отчета "Список/кросс-таблица".
Если ваша база УПП 1.3 работает на платформе 8.3.6 и выше, мы рекомендуем обратить внимание на Расширения конфигурации. Это самый современный и безопасный способ доработки.
Проанализируем последовательность действий:
&После или &Вместо).При таком подходе основная конфигурация остается на "замке" (типовой), что позволяет обновлять её в автоматическом режиме. Все ваши изменения хранятся отдельно, но для пользователя они выглядят как единая система.
Выясним, какой метод лучше выбрать в конкретной ситуации:
Помните, что при реализации любого способа важно предусмотреть обработку записи данных. Если вы используете внешние регистры, не забудьте про подписку на событие ПриЗаписи или ОбработкаПроведения, чтобы синхронизировать данные регистра с состоянием документа. Также обратите внимание на права доступа: новые объекты (регистры или реквизиты) должны быть доступны пользователям через соответствующие роли.