Администрация сайта
Формирование бюджетных отчетов нарастающим итогом
1С:ERP Управление предприятием 2 (2.2.2.212)
1С:Предприятие 8.3 (8.3.11.2954)
Задача:
Необходимо настроить вид бюджета и сформировать бюджетный отчет с отражением фактических данных прошлого аналогичного периода, плановых и фактических данных за текущий год нарастающим итогом. Необходимо сравнить Факт прошлого года с января по март, с планом и фактом текущего года с января по март. При этом в отчете так же должны присутствовать данные Плана на год и Факт предыдущего года (полностью за год).
Для решения данной задачи в операнде бюджета по отражению факта за прошлый год необходимо указать период бюджета от начальной границы бюджетного отчета до границы фактических данных (при формировании бюджетного отчета границу фактических данных в бюджете указать текущей датой) и смещение 1 год.
Указанные настройки срабатывают некорректно, граница фактических данных не учитывается.
Ошибка зарегистрирована под номером 00-00143701.
Временное решение:
1. Очистить записи регистра сведений "Кэш вспомогательных данных вида бюджета"
2. Заменить текст метода БюджетнаяОтчетностьРасчетКэшаСервер.ВыражениеГраницыПериодаИсточникаДанных() на:
Функция ВыражениеГраницыПериодаИсточникаДанных(ТипИсточника, ИмяПоля, ЭлементОтчета, СтруктураКолонок, КэшРеквизитов)
ДопРеквизиты = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов;
ПериодСмещения = ФинансоваяОтчетностьСервер.ЗначениеДополнительногоРеквизита(
ЭлементОтчета,
ДопРеквизиты.ПериодСмещения,
КэшРеквизитов);
Если ЗначениеЗаполнено(ПериодСмещения) Тогда
ПериодичностьСмещения = ФинансоваяОтчетностьСервер.ЗначениеДополнительногоРеквизита(
ЭлементОтчета,
ДопРеквизиты.ПериодичностьСмещения,
КэшРеквизитов);
Если Не ЗначениеЗаполнено(ПериодичностьСмещения) Тогда
ПериодичностьСмещения = Неопределено;
КонецЕсли;
Иначе
ПериодСмещения = Неопределено;
КонецЕсли;
Если ТипИсточника = Перечисления.ТипыИсточниковДанныхБюджетирования.Нефинансовый Тогда
Формула = "&" + ИмяПоля;
Иначе
Формула = ?(ИмяПоля = "НачалоПериода", "НижняяГраница", "ВерхняяГраница") + "Данных";
Формула = ФинансоваяОтчетностьСервер.ЗначениеДополнительногоРеквизита(
ЭлементОтчета,
ДопРеквизиты[Формула],
КэшРеквизитов);
Формула = НРег(Формула); // Подготовка формулы к поиску, чувствительному к регистру
ЭтоГраницаФактическихДанных = СтрНайти(Формула, НРег("[Граница факт.данных]"));
Формула = СтрЗаменить(Формула, НРег("[Начало периода данных]"), "&НачалоПериода");
Формула = СтрЗаменить(Формула, НРег("[Конец периода данных]"), "&КонецПериода");
Формула = СтрЗаменить(Формула, НРег("[Граница факт.данных]"), "&ГраницаФактДанных");
//для сопоставимости формул удалим вспомогательные пользовательские символы
Формула = СтрЗаменить(Формула, " ", "");
Формула = СтрЗаменить(Формула, Символы.ПС, "");
Формула = СтрЗаменить(Формула, Символы.Таб, "");
КонецЕсли;
Если ЗначениеЗаполнено(ПериодСмещения) И ЗначениеЗаполнено(ПериодичностьСмещения) Тогда
ЗнакСмещения = "-";
Формула = "ДОБАВИТЬКДАТЕ(" + Формула + ", ";
Формула = Формула + ПериодичностьСмещения + ", " + ЗнакСмещения;
Формула = Формула + ПериодСмещения + ")";
КонецЕсли;
Если ИмяПоля = "КонецПериода" Тогда
Если Не ЗначениеЗаполнено(ПериодичностьСмещения) Тогда
ПериодПриведениеКОкончанию = "День";
Иначе
ПериодПриведениеКОкончанию = ПериодичностьСмещения;
КонецЕсли;
Если ЭтоГраницаФактическихДанных Тогда
ПериодПриведениеКОкончанию = "День";
КонецЕсли;
Формула = "КОНЕЦПЕРИОДА(" + Формула + ", " + ПериодПриведениеКОкончанию + ")";
КонецЕсли;
Возврат Формула;
КонецФункции