Формирование бюджетных отчетов нарастающим итогом

Формирование бюджетных отчетов нарастающим итогом

1С:ERP Управление предприятием 2 (2.2.2.212)

1С:Предприятие 8.3 (8.3.11.2954)

Задача:

Необходимо настроить вид бюджета и сформировать бюджетный отчет с отражением фактических данных прошлого аналогичного периода,  плановых и фактических данных за текущий год нарастающим итогом. Необходимо сравнить Факт прошлого года с января по март, с планом и фактом текущего года с января по март. При этом в отчете так же должны присутствовать данные Плана на год и Факт предыдущего года (полностью за год).

Для решения данной задачи в операнде бюджета по отражению факта за прошлый год необходимо указать период бюджета от начальной границы бюджетного отчета до границы фактических данных (при формировании бюджетного отчета границу фактических данных в бюджете указать текущей датой) и смещение 1 год.

Указанные настройки срабатывают некорректно, граница фактических данных не учитывается.

Ошибка зарегистрирована под номером 00-00143701.

Временное решение:

1. Очистить записи регистра сведений "Кэш вспомогательных данных вида бюджета"

2. Заменить текст метода БюджетнаяОтчетностьРасчетКэшаСервер.ВыражениеГраницыПериодаИсточникаДанных() на:

Функция ВыражениеГраницыПериодаИсточникаДанных(ТипИсточника, ИмяПоля, ЭлементОтчета, СтруктураКолонок, КэшРеквизитов)

ДопРеквизиты = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов;

ПериодСмещения = ФинансоваяОтчетностьСервер.ЗначениеДополнительногоРеквизита(
ЭлементОтчета, 
ДопРеквизиты.ПериодСмещения,
КэшРеквизитов);

Если ЗначениеЗаполнено(ПериодСмещения) Тогда
ПериодичностьСмещения = ФинансоваяОтчетностьСервер.ЗначениеДополнительногоРеквизита(
ЭлементОтчета, 
ДопРеквизиты.ПериодичностьСмещения,
КэшРеквизитов);
Если Не ЗначениеЗаполнено(ПериодичностьСмещения) Тогда
ПериодичностьСмещения = Неопределено;
КонецЕсли;
Иначе
ПериодСмещения = Неопределено;
КонецЕсли;

Если ТипИсточника = Перечисления.ТипыИсточниковДанныхБюджетирования.Нефинансовый Тогда
Формула = "&" + ИмяПоля;
Иначе

Формула = ?(ИмяПоля = "НачалоПериода", "НижняяГраница", "ВерхняяГраница") + "Данных";
Формула = ФинансоваяОтчетностьСервер.ЗначениеДополнительногоРеквизита(
ЭлементОтчета, 
ДопРеквизиты[Формула],
КэшРеквизитов);

Формула = НРег(Формула); // Подготовка формулы к поиску, чувствительному к регистру

ЭтоГраницаФактическихДанных = СтрНайти(Формула, НРег("[Граница факт.данных]"));

Формула = СтрЗаменить(Формула, НРег("[Начало периода данных]"), "&НачалоПериода");
Формула = СтрЗаменить(Формула, НРег("[Конец периода данных]"), "&КонецПериода");
Формула = СтрЗаменить(Формула, НРег("[Граница факт.данных]"), "&ГраницаФактДанных");

//для сопоставимости формул удалим вспомогательные пользовательские символы
Формула = СтрЗаменить(Формула, " ", "");
Формула = СтрЗаменить(Формула, Символы.ПС, "");
Формула = СтрЗаменить(Формула, Символы.Таб, "");

КонецЕсли;

Если ЗначениеЗаполнено(ПериодСмещения) И ЗначениеЗаполнено(ПериодичностьСмещения) Тогда

ЗнакСмещения = "-";

Формула = "ДОБАВИТЬКДАТЕ(" + Формула + ", ";
Формула = Формула + ПериодичностьСмещения + ", " + ЗнакСмещения;
Формула = Формула + ПериодСмещения + ")";

КонецЕсли;

Если ИмяПоля = "КонецПериода" Тогда
Если Не ЗначениеЗаполнено(ПериодичностьСмещения) Тогда
ПериодПриведениеКОкончанию = "День";
Иначе
ПериодПриведениеКОкончанию = ПериодичностьСмещения;
КонецЕсли;
Если ЭтоГраницаФактическихДанных Тогда
ПериодПриведениеКОкончанию = "День";
КонецЕсли;
Формула = "КОНЕЦПЕРИОДА(" + Формула + ", " + ПериодПриведениеКОкончанию + ")";
КонецЕсли;

Возврат Формула;

КонецФункции
 

Категория статьи: 
Возможно Вам будет интересно: