Часто в работе программиста 1С возникают ситуации, когда бизнес-задача требует интерактивности отчета — например, возможности «отметить» некоторые строки номенклатуры прямо в выводе СКД. Однако, если политика компании запрещает внесение любых изменений в конфигурацию, включая использование Расширений, классический путь добавления реквизита в Табличную часть документа закрыт. Давайте разберем, как подойти к решению этой задачи, учитывая ограничения и возможности платформы.
Первым делом проанализируем ситуацию: отчет, созданный на базе СКД, по своей природе является средством отображения данных. Если мы не можем изменить структуру данных (объекты Метаданных), нам необходимо найти «внешнее» хранилище для состояний наших «галочек».
Рассмотрим основные подходы, которые можно применить, не затрагивая конфигурацию:
Расширений. Это штатный механизм 1С, который позволяет добавлять дополнительные реквизиты к объектам (например, к документу ЗаказПокупателя) без прямого изменения основной конфигурации. Это «чистое» решение, которое легко поддерживать.Дополнительные реквизиты и сведения. Если ваша конфигурация поддерживает этот функционал, рекомендуем воспользоваться им. Вам не придется менять код, достаточно настроить через пользовательский интерфейс дополнительные свойства для справочника или документа.РегистраСведений — идеальный вариант. Это позволит сохранять состояние отметки для связки «Пользователь + Документ + Номенклатура».Если руководство разрешило создание новых объектов, РегистрСведений станет вашим лучшим помощником. Рассмотрим шаги по реализации:
РегистрСведений.ДокументСсылка.ЗаказПокупателя, СправочникСсылка.Номенклатура и Пользователь (или используем ПараметрыСеанса).Булево — это и будет наша «галочка».СКД добавляем данный регистр в набор данных и связываем его с основным запросом по левому соединению.Чтобы обеспечить интерактивность, вам потребуется создать Форму отчета, так как стандартная форма СКД не позволяет легко обрабатывать нажатия в ячейках. В модуле формы мы будем обрабатывать событие ПриАктивизацииЯчейки или Выбор, чтобы при клике записывать данные в регистр и обновлять отчет.
Если создание объектов в базе строго запрещено, можно реализовать хранение данных в формате JSON. Это позволит отказаться от ручной работы с Excel.
Разберем логику работы такого решения:
Шаг 1. Создание формы: Создаем внешнюю обработку или отчет с формой, где будет размещен ТабличныйДокумент. Выводим результат СКД в этот табличный документ.
Шаг 2. Запись отметок: При нажатии на ячейку (событие Выбор) будем собирать список отмеченных позиций. Используем объект ЗаписьJSON для сохранения списка в локальный файл или файл на сервере.
// Пример логики сохранения отметок в JSON
МассивОтметок = Новый Массив;
// ... (заполнение массива ссылками на номенклатуру)
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл("C:\Temp\marks.json");
ЗаписатьJSON(ЗаписьJSON, МассивОтметок);
ЗаписьJSON.Закрыть();
Шаг 3. Загрузка отметок: При открытии отчета выполняем обратное действие: считываем JSON и через временную таблицу загружаем данные в СКД для отображения текущего состояния.
Как показывает практика, попытки «обмануть» систему и хранить важные бизнес-данные во внешних файлах или временных параметрах часто ведут к потере данных, сбоям при обновлении или сложностям с доступом для других пользователей. Если работодатель настаивает на автоматизации, но ограничивает инструменты, лучшая стратегия — показать стоимость «ручной работы» (Excel-отчетов) в часах и сравнить её со стоимостью внедрения Расширения.
Помните, что кастомизация через расширения — это современный стандарт работы с 1С, который минимизирует риски при обновлении системы. Если вы сможете убедить руководство в безопасности и прозрачности этого подхода, вы избавите себя от написания сложных и ненадежных «костылей».
Мы рассмотрели несколько путей решения задачи: от наиболее архитектурно верного (Расширения или Дополнительные реквизиты) до вынужденных методов (РегистрСведений или внешние файлы). Анализируйте возможности вашей конфигурации и выбирайте путь, который обеспечит стабильность данных и удобство конечного пользователя.