При разработке конфигураций для учета книг в библиотеке часто возникает задача классификации действий пользователя. В системе могут существовать разные документы: Выдача книги, Продление книги, Потеря книги и Возврат книги. Однако для формирования итогового отчета нам необходимо свести все эти данные в одну таблицу и в отдельной колонке Тип операции наглядно отобразить название совершенного действия. Рассмотрим подробно несколько способов реализации этой задачи: от простого объединения данных до профессионального архитектурного подхода.
Как было предложено в обсуждении, наиболее простым решением с точки зрения построения отчета является создание одного универсального документа вместо четырех разных. Это избавляет от необходимости «собирать» отчет по кусочкам из разных таблиц базы данных.
Разберем этот метод по шагам:
Перечисление с именем ВидыОперацийБиблиотеки.Выдача, Возврат, Продление, Потеря.ОперацияСКнигой) создадим реквизит ВидОперации с типом ссылки на наше перечисление.Теперь в Системе компоновки данных (СКД) нам достаточно просто выбрать реквизит ВидОперации. Система автоматически выведет строковое представление перечисления в колонку отчета. Это самый быстрый путь, если логика работы всех четырех операций схожа (везде указывается читатель, книга и дата).
Если специфика учета требует наличия разных документов (например, документ ПотеряКниги должен списывать книгу из остатков и начислять штраф, а Продление — только менять дату), то мы не можем объединить их в один объект. В этом случае проанализируем, как составить запрос для отчета.
В конструкторе запроса мы можем использовать оператор ОБЪЕДИНИТЬ ВСЕ. В каждой части запроса мы вручную создадим текстовое поле, которое будет идентифицировать тип операции.
Пример структуры запроса:
ВЫБРАТЬ
ВыдачаКниги.Читатель КАК ФИО,
"Выдача книги" КАК ТипОперации,
ВыдачаКниги.Книга КАК НазваниеКниги
ИЗ
Документ.ВыдачаКниги КАК ВыдачаКниги
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВозвратКниги.Читатель,
"Возврат книги",
ВозвратКниги.Книга
ИЗ
Документ.ВозвратКниги КАК ВозвратКниги
Важный момент: при использовании такого подхода следите за тем, чтобы типы данных во всех объединяемых полях совпадали. Этот метод позволяет гибко управлять тем, что именно будет написано в колонке, независимо от имен самих документов в конфигураторе.
Выясним ситуацию, когда документов много, и мы не хотим прописывать названия вручную в запросе. В Системе компоновки данных (СКД) существуют мощные инструменты для работы с типами объектов. Мы можем использовать вычисляемое поле или выражение в ресурсах.
Разберем, как применить функцию ТипЗначения. В настройках набора данных СКД для поля со ссылкой на документ можно прописать выражение представления:
Представление(ТипЗнч(Ссылка))
Это позволит платформе 1С автоматически взять Синоним документа из метаданных. Если вы измените синоним документа «ВыдачаКниги» на «Выдача литературы», отчет автоматически подтянет новое название без изменения программного кода.
Проанализируем профессиональный подход. В крупных системах отчеты крайне редко строятся напрямую по документам. Для обеспечения высокой скорости работы и точности данных используются Регистры накопления или Регистры сведений.
Рассмотрим схему реализации через регистр накопления КнигиНаРуках:
ВыдачаКниги в регистр делается запись с видом движения Приход.ВозвратКниги — Расход.ВидДвиженияДокумента.В самом отчете мы будем обращаться к виртуальной таблице КнигиНаРуках.Обороты. Посмотрим на преимущества этого метода:
Подведем итог нашему анализу. Если ваша курсовая работа предполагает простую логику, то вариант с одним документом и перечислением (Способ 1) — самый эффективный. Он минимизирует количество объектов в базе и упрощает программирование.
Если же вы хотите продемонстрировать глубокие знания платформы 1С, рекомендуем реализовать учет через Регистр накопления. Это покажет понимание основных принципов проектирования систем на базе 1С:Предприятие. В этом случае тип операции в отчете будет браться либо из реквизита регистра, либо через стандартное поле Регистратор.Тип.
Полезный совет: Для улучшения визуального восприятия отчета в СКД можно использовать Условное оформление. Например, можно настроить так, чтобы строка с типом операции «Потеря книги» автоматически подсвечивалась красным цветом. Это делается на закладке «Настройки» в СКД, в разделе «Условное оформление».