Как реализовать отметки (галочки) в отчете СКД без внесения изменений в конфигурацию?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто в работе программиста 1С возникают ситуации, когда бизнес-задача требует интерактивности отчета — например, возможности «отметить» некоторые строки номенклатуры прямо в выводе СКД. Однако, если политика компании запрещает внесение любых изменений в конфигурацию, включая использование Расширений, классический путь добавления реквизита в Табличную часть документа закрыт. Давайте разберем, как подойти к решению этой задачи, учитывая ограничения и возможности платформы.

Анализ проблемы и возможные стратегии

Первым делом проанализируем ситуацию: отчет, созданный на базе СКД, по своей природе является средством отображения данных. Если мы не можем изменить структуру данных (объекты Метаданных), нам необходимо найти «внешнее» хранилище для состояний наших «галочек».

Рассмотрим основные подходы, которые можно применить, не затрагивая конфигурацию:

  1. Дипломатический подход: Если задача по-настоящему важна, самым надежным способом будет обоснование использования Расширений. Это штатный механизм 1С, который позволяет добавлять дополнительные реквизиты к объектам (например, к документу ЗаказПокупателя) без прямого изменения основной конфигурации. Это «чистое» решение, которое легко поддерживать.
  2. Использование дополнительных реквизитов (если поддерживается): Во многих типовых конфигурациях существует механизм Дополнительные реквизиты и сведения. Если ваша конфигурация поддерживает этот функционал, рекомендуем воспользоваться им. Вам не придется менять код, достаточно настроить через пользовательский интерфейс дополнительные свойства для справочника или документа.
  3. Внешнее хранилище данных (независимый регистр сведений): Если вы имеете право создавать новые объекты, но не имеете права менять старые, создание РегистраСведений — идеальный вариант. Это позволит сохранять состояние отметки для связки «Пользователь + Документ + Номенклатура».

Реализация с использованием внешнего регистра сведений

Если руководство разрешило создание новых объектов, РегистрСведений станет вашим лучшим помощником. Рассмотрим шаги по реализации:

  1. Создаем непериодический, независимый РегистрСведений.
  2. В качестве измерений добавляем ДокументСсылка.ЗаказПокупателя, СправочникСсылка.Номенклатура и Пользователь (или используем ПараметрыСеанса).
  3. В качестве ресурса добавляем Булево — это и будет наша «галочка».
  4. В СКД добавляем данный регистр в набор данных и связываем его с основным запросом по левому соединению.

Чтобы обеспечить интерактивность, вам потребуется создать Форму отчета, так как стандартная форма СКД не позволяет легко обрабатывать нажатия в ячейках. В модуле формы мы будем обрабатывать событие ПриАктивизацииЯчейки или Выбор, чтобы при клике записывать данные в регистр и обновлять отчет.

Альтернатива: Использование внешних файлов

Если создание объектов в базе строго запрещено, можно реализовать хранение данных в формате JSON. Это позволит отказаться от ручной работы с Excel.

Разберем логику работы такого решения:

Шаг 1. Создание формы: Создаем внешнюю обработку или отчет с формой, где будет размещен ТабличныйДокумент. Выводим результат СКД в этот табличный документ.

Шаг 2. Запись отметок: При нажатии на ячейку (событие Выбор) будем собирать список отмеченных позиций. Используем объект ЗаписьJSON для сохранения списка в локальный файл или файл на сервере.


// Пример логики сохранения отметок в JSON
МассивОтметок = Новый Массив;
// ... (заполнение массива ссылками на номенклатуру)
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл("C:\Temp\marks.json");
ЗаписатьJSON(ЗаписьJSON, МассивОтметок);
ЗаписьJSON.Закрыть();

Шаг 3. Загрузка отметок: При открытии отчета выполняем обратное действие: считываем JSON и через временную таблицу загружаем данные в СКД для отображения текущего состояния.

Почему дипломатия — лучший инструмент?

Как показывает практика, попытки «обмануть» систему и хранить важные бизнес-данные во внешних файлах или временных параметрах часто ведут к потере данных, сбоям при обновлении или сложностям с доступом для других пользователей. Если работодатель настаивает на автоматизации, но ограничивает инструменты, лучшая стратегия — показать стоимость «ручной работы» (Excel-отчетов) в часах и сравнить её со стоимостью внедрения Расширения.

Помните, что кастомизация через расширения — это современный стандарт работы с 1С, который минимизирует риски при обновлении системы. Если вы сможете убедить руководство в безопасности и прозрачности этого подхода, вы избавите себя от написания сложных и ненадежных «костылей».

Итоги

Мы рассмотрели несколько путей решения задачи: от наиболее архитектурно верного (Расширения или Дополнительные реквизиты) до вынужденных методов (РегистрСведений или внешние файлы). Анализируйте возможности вашей конфигурации и выбирайте путь, который обеспечит стабильность данных и удобство конечного пользователя.

← На главную