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