Как добавить колонку со штрихкодами в отчет «Оборотно-сальдовая ведомость по счету»

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» часто возникает необходимость дополнить стандартные бухгалтерские отчеты аналитической информацией, которая не хранится напрямую в реквизитах субконто. Типичный пример — вывод штрихкодов номенклатуры в отчете ОборотноСальдоваяВедомостьПоСчету (ОСВ по счету), например, по 41 счету. Рассмотрим подробно, как реализовать эту задачу наиболее корректным способом, избегая проблем с обновлением конфигурации и дублированием строк.

Анализ проблемы и выбор метода реализации

Стандартный отчет ОСВ по счету построен на базе Системы компоновки данных (СКД). Штрихкоды в БП 3.0 хранятся в независимом регистре сведений ШтрихкодыНоменклатуры. Прямое добавление этого регистра в запрос СКВ через ЛЕВОЕ СОЕДИНЕНИЕ может привести к серьезной ошибке: если у одной позиции номенклатуры зарегистрировано несколько штрихкодов, строки в бухгалтерском отчете начнут дублироваться, что исказит итоговые суммы (сальдо и обороты).

Разберем три пути реализации:

  1. Создание внешнего отчета: Сложный путь, так как типовые отчеты БП 3.0 жестко завязаны на общие модули и менеджеры объектов. При попытке сделать отчет внешним вы столкнетесь с массой ошибок обращения к методам, которые ожидают контекст встроенного объекта.
  2. Изменение типовой конфигурации: Не рекомендуется, так как это усложнит процесс обновления программы.
  3. Использование расширения: Оптимальный вариант. Мы заимствуем только схему компоновки данных и вносим в нее изменения, сохраняя типовую логику конфигурации.

Шаг 1. Подготовка расширения и заимствование объектов

Проанализируем необходимые объекты. Нам потребуется создать расширение и добавить в него отчет ОборотноСальдоваяВедомостьПоСчету. Также необходимо заимствовать саму Основную схему компоновки данных этого отчета.

Важно помнить, что в ОСВ по счету данные собираются динамически. Чтобы наше поле стало доступным пользователю в настройках, нам нужно внедрить его в структуру СКД.

Шаг 2. Модификация запроса в СКД

Рассмотрим, как изменить запрос, чтобы получить данные из регистра штрихкодов. Откроем конструктор запроса в СКД расширения. Нам нужно добавить левое соединение с регистром ШтрихкодыНоменклатуры. Однако, чтобы избежать упомянутых дублей, мы не будем выводить штрихкод прямой связью в основном наборе данных, если планируем использовать его как полноценное поле группировки.

Выясним причину, по которой простое соединение не всегда эффективно: в СКД для ОСВ используется несколько наборов данных и сложные вложенные схемы. Лучшим решением будет использование Вычисляемого поля, которое будет собирать все штрихкоды номенклатуры в одну строку через запятую.

Шаг 3. Создание функции для сбора штрихкодов

Для того чтобы в одной ячейке отчета вывести все штрихкоды, создадим в расширении новый общий модуль (например, рш_РаботаСОтчетами) с флагом Сервер и Вызов сервера. В нем напишем экспортную функцию:


Функция ПолучитьШтрихкодыСтрокой(НоменклатураСсылка) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
        |ИЗ
        |	РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
        |ГДЕ
        |	ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура";
    
    Запрос.УстановитьПараметр("Номенклатура", НоменклатураСсылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Результат = "";
    Пока Выборка.Следующий() Цикл
        Результат = Результат + ?(ЗначениеЗаполнено(Результат), ", ", "") + Выборка.Штрихкод;
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

Шаг 4. Настройка вычисляемого поля в СКД

Теперь вернемся в схему компоновки данных отчета в расширении. Перейдем на закладку Вычисляемые поля и добавим новое поле:

Важно: В ОСВ по счету Субконто1, Субконто2 и т.д. являются составными типами. Чтобы функция работала корректно, в выражении можно добавить проверку типа:

Выбор Когда Субконто1 ССЫЛКА Справочник.Номенклатура Тогда рш_РаботаСОтчетами.ПолучитьШтрихкодыСтрокой(Субконто1) Иначе "" Конец

Шаг 5. Вывод поля в пользовательские настройки

Проанализируем, как сделать так, чтобы поле появилось в отчете. Для этого в СКД на закладке Настройки (вкладка Выбранные поля) наше новое поле Штрихкоды должно быть доступно для выбора.

Чтобы пользователь мог самостоятельно включать и выключать это поле, выполним следующие действия:

  1. Зайдем в настройки отчета в режиме 1С:Предприятие.
  2. Нажмем кнопку Показать настройки.
  3. Перейдем на закладку Дополнительные поля.
  4. Нажмем Добавить и найдем в списке наше поле Штрихкоды.
  5. Укажем размещение — В отдельной колонке.

Альтернативный вариант: Использование характеристик (если применимо)

В некоторых случаях, если проект подразумевает использование характеристик или дополнительных сведений, можно пойти путем настройки Дополнительных сведений для справочника Номенклатура. Типовой отчет ОСВ по счету умеет автоматически «подтягивать» дополнительные сведения в список доступных полей без программирования в СКД. Однако для штрихкодов это потребует настройки синхронизации данных между регистром и сведениями, что не всегда оправдано.

Резюме

Мы рассмотрели наиболее стабильный метод добавления колонки в типовой отчет ОборотноСальдоваяВедомостьПоСчету. Использование вычисляемого поля в расширении совместно с серверной функцией позволяет:

Помните, что при работе с СКД в типовых решениях важно проверять, не переопределяется ли схема программно в процедурах ПриКомпоновкеРезультата или ПриПодготовкеСхемыКомпоновкиДанных. Если ваше поле не появляется, проверьте настройки Ограничение поля на закладке Наборы данных.

← На главную