При работе образовательных и научных учреждений часто возникает необходимость передавать данные плана финансово-хозяйственной деятельности (ПФХД) в автоматизированную систему управления Министерства науки и высшего образования (АСУ ПФХД). Разберем, как устроена эта интеграция, какие есть варианты решения задачи и как правильно реализовать программную выгрузку данных в формате XML из 1С:БГУ.
В типовой конфигурации «1С:Бухгалтерия государственного учреждения 8» редакции 1.0 встроенного механизма прямой интеграции с порталом АСУ ПФХД не предусмотрено. Поэтому учреждения выбирают один из следующих путей:
Выясним, где в информационной базе хранятся необходимые сведения. Для формирования показателей исполнения и утвержденных плановых назначений используются:
ОборотыПоБюджетам (или документы плановых назначений). Данный регистр содержит аналитику по статьям, кодам бюджетной классификации (КВР, КОСГУ), источникам финансового обеспечения (КФО) и суммам.Спецификация обмена АСУ ПФХД накладывает строгие требования к структуре и валидности загружаемых XML-файлов. Проанализируем ключевые моменты, несоблюдение которых вызывает отказ загрузки на портале:
xs:sequence. Если узлы в XML сформированы не в том порядке, который задан схемой, валидатор отклонит документ целиком. Формировать XML конкатенацией строк («склеиванием текста») крайне не рекомендуется.150000.00).Новый УникальныйИдентификатор(). Однако при выгрузке изменений к ранее утвержденному плану крайне важно сохранять исходные идентификаторы строк, иначе система создаст дублирующие позиции вместо обновления.Наиболее надежный программный способ выгрузки — использование встроенного механизма ФабрикаXDTO или объекта ЗаписьXML. Использование XDTO позволяет гарантировать правильную типизацию данных и соблюдение последовательности тегов.
Рассмотрим пример программного формирования структуры XML через ЗаписьXML с контролем форматов данных:
ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
ЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки, ПараметрыЗаписи);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("ПланФХД");
ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", "1.0");
// Выборка плановых назначений из регистра
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Обороты.КФО КАК КФО,
| Обороты.КВР КАК КВР,
| Обороты.КОСГУ КАК КОСГУ,
| Обороты.СуммаОборот КАК Сумма
|ИЗ
| РегистрНакопления.ОборотыПоБюджетам.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Обороты";
Запрос.УстановитьПараметр("НачалоПериода", НачалоГода(ПериодПланирования));
Запрос.УстановитьПараметр("КонецПериода", КонецГода(ПериодПланирования));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("СтрокаПлана");
// Генерация идентификатора строки
ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор());
ЗаписьXML.ЗаписатьЭлемент("ИД", ИдентификаторСтроки);
ЗаписьXML.ЗаписатьЭлемент("КФО", СокрЛП(Выборка.КФО));
ЗаписьXML.ЗаписатьЭлемент("КВР", СокрЛП(Выборка.КВР));
ЗаписьXML.ЗаписатьЭлемент("КОСГУ", СокрЛП(Выборка.КОСГУ));
// Форматирование числа: 2 знака после запятой, без разделителя групп
СтрокаСуммы = Формат(Выборка.Сумма, "ЧДЦ=2; ЧРД=.; ЧГ=0");
ЗаписьXML.ЗаписатьЭлемент("Сумма", СтрокаСуммы);
ЗаписьXML.ЗаписатьКонецЭлемента(); // СтрокаПлана
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); // ПланФХД
ЗаписьXML.Закрыть();
Разберем по шагам, как выстроить удобный процесс регулярного взаимодействия с системой:
РегламентныеЗадания выгрузка и отправка данных будут запускаться по расписанию в нерабочее время, фиксируя результат в регистре сведений.