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