Как программно получить КФО непроведенного документа в 1С:БГУ 2.0

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет
← На главную

В конфигурации «1С:Бухгалтерия государственного учреждения 2.0» (БГУ 2.0) разработчики часто сталкиваются с задачей получения кода финансового обеспечения (КФО) из документа. Если документ еще не проведен, получить КФО из движений регистра бухгалтерии невозможно. При этом обращение к реквизиту шапки Ссылка.КФО выдаст ошибку, так как такого реквизита у большинства документов БГУ 2.0 попросту нет.

Рассмотрим подробно архитектуру хранения параметров бухгалтерской операции и разберем проверенные способы получения КФО для непроведенного документа.

Архитектурные особенности хранения КФО в БГУ 2.0

Проанализируем, где именно сохраняются данные о КФО в зависимости от документа и настройки типовой операции:

  1. В служебных параметрах операции: Если КФО задается на закладке «Бух. операция» для всего документа в целом, данные записываются в служебную табличную часть ПараметрыОперации (или дополнительный регистр сведений ЗначенияДополнительныхРеквизитовОпераций).
  2. В табличных частях документа: В документах поступления (например, «Поступление МЗ», «Услуги сторонних организаций», «Покупка ОС») КФО часто указывается построчно непосредственно в табличной части (например, МатериальныеЗапасы или Услуги).
  3. В контексте формы: До момента записи документа выбранный КФО находится исключительно в данных формы и еще не записан в базу данных.

Способ 1. Использование программного интерфейса подсистемы «Бухгалтерские операции»

Наиболее универсальным и штатным решением для записанного (но непроведенного) документа является использование процедур и функций общего модуля УправлениеБухгалтерскимиОперациями. Данный модуль возвращает структуру параметров выбранной типовой операции, в которую входит и КФО.

Посмотрим на пример вызова функции:


СтруктураПараметров = УправлениеБухгалтерскимиОперациями.ПолучитьЗначенияПараметровОперации(СсылкаДокумента);
Если СтруктураПараметров.Свойство("КФО") Тогда
    ЗначениеКФО = СтруктураПараметров.КФО;
КонецЕсли;

Этот метод удобен тем, что разработчику не нужно вручную искать нужный параметр в табличных частях объекта — подсистема сама возвращает актуальные значения реквизитов операции.

Способ 2. Чтение из табличной части «ПараметрыОперации»

Если необходимо получить значение непосредственно из объекта документа без обращения к методам общего модуля, проанализируем табличную часть ПараметрыОперации. В ней хранятся настройки, заполненные на закладке «Бух. операция».

Пример получения значения через выборку из табличной части:


Отбор = Новый Структура("ИмяПараметра", "КФО");
НайденныеСтроки = ДокументОбъект.ПараметрыОперации.НайтиСтроки(Отбор);

Если НайденныеСтроки.Количество() > 0 Тогда
    ЗначениеКФО = НайденныеСтроки[0].Значение;
КонецЕсли;

Способ 3. Получение КФО из табличной части документа

В документах, где КФО указывается для каждой строки номенклатуры или услуги отдельно, получить единое значение из параметров операции может быть невозможно. В этом случае считывание выполняется из первой или конкретной строки табличной части документа.

Разберем пример для документа «Поступление МЗ»:


Если ДокументОбъект.МатериальныеЗапасы.Количество() > 0 Тогда
    ЗначениеКФО = ДокументОбъект.МатериальныеЗапасы[0].КФО;
КонецЕсли;

Важные нюансы и ограничения

  1. Документ не записан (контекст формы): Если ссылка на документ еще не создана (Ссылка.Пустая()), функции общего модуля не смогут прочитать данные из базы. В таком случае получение значений должно выполняться непосредственно из реквизитов формы на клиенте или сервере формы (через Объект.ПараметрыОперации или строки табличной части).
  2. Многострочные документы: Если в документе разрешено узасывать разные КФО в разных строках табличной части, у объекта нет понятия «единый КФО». В таких ситуациях необходимо обходить все строки табличной части и собирать массив используемых КФО.
  3. Смена типовой операции: При изменении типовой операции пользователем на форме состав параметров сбрасывается, поэтому считывать значение КФО следует только после окончательного выбора операции и сохранения документа.
← На главную