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