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