В практике разработки на платформе 1С:Предприятие 8.3, особенно при работе с комплексными конфигурациями вроде «Бухгалтерия государственного учреждения» (БГУ), начинающие специалисты часто сталкиваются с ситуацией, когда форма элемента справочника выглядит информативно, но при попытке написать запрос к самому справочнику данные «исчезают». Рассмотрим, почему это происходит и как правильно извлечь нужную информацию.
Для начала разберем фундаментальное понятие. В системе 1С Ссылка — это уникальный идентификатор объекта (GUID), 32-символьная строка, которая однозначно указывает на конкретную запись в таблице справочника. Когда мы открываем форму и видим гиперссылку, при нажатии на которую открываются «списки договоров или операций», мы видим не содержимое самой ссылки, а результат работы механизмов отображения связанных данных.
Проанализируем ситуацию: в управляемых формах 1С 8.3 очень часто используются динамические списки. Это специальные объекты, которые выполняют запрос к базе данных в фоновом режиме и выводят результат на форму. Если в форме справочника СтатьиФинансированияЗарплата вы видите список документов или движений по регистрам, это означает, что форма настроена таким образом, чтобы показывать записи из других таблиц, где текущая статья выбрана в качестве аналитики (измерения).
Справочник СтатьиФинансированияЗарплата в конфигурации БГУ 2.0 является вспомогательным. Он служит «разрезом» учета для интеграции с зарплатными решениями (ЗУП или ЗКГУ). Сам справочник почти пуст — в нем есть только Код и Наименование. Те данные, которые вы хотите получить (договоры, суммы, операции), физически находятся в других местах:
ВзаиморасчетыПоЗаработнойПлате или НачисленияИУдержанияПоКонтрактам.ОтражениеЗарплатыВБухучете. Именно в его табличных частях хранятся связи между сотрудниками, статьями и суммами.Посмотрим на ситуацию глазами системы: когда вы «прокликиваете» ссылку, платформа открывает связанные отчеты или формы списков регистров, устанавливая автоматический фильтр по этой ссылке. Чтобы получить эти данные в своем запросе, нам нужно пойти по тому же пути.
Прежде чем писать запрос, выясним, откуда форма берет данные. Выполним следующие шаги:
СтатьиФинансированияЗарплата.Именно этот запрос нам и нужно использовать как основу для получения данных в собственном коде.
Допустим, мы выяснили, что данные о договорах и операциях хранятся в регистре накопления ВзаиморасчетыПоЗаработнойПлате. Чтобы получить информацию по конкретной статье финансирования (или по всем сразу), нам нужно обратиться не к справочнику, а к таблице регистра.
Рассмотрим пример запроса, который выберет все операции в разрезе статей финансирования:
ВЫБРАТЬ
Взаиморасчеты.СтатьяФинансирования КАК Статья,
Взаиморасчеты.Регистратор КАК ДокументОперации,
Взаиморасчеты.Сотрудник КАК Сотрудник,
Взаиморасчеты.СуммаВзаиморасчетов КАК Сумма
ИЗ
РегистрНакопления.ВзаиморасчетыПоЗаработнойПлате КАК Взаиморасчеты
ГДЕ
Взаиморасчеты.СтатьяФинансирования = &НужнаяСсылка
Если нам нужно получить данные по всем элементам справочника, но только те, по которым есть движения, мы можем использовать Левое соединение или просто выбрать данные из регистра, так как там уже содержатся ссылки на справочник.
Если ваша задача — получить итоговые суммы (остатки), которые вы видите на форме, лучше использовать виртуальные таблицы регистров накопления. Это значительно ускорит выполнение запроса. Проанализируем пример получения остатков по статьям:
ВЫБРАТЬ
ЗарплатаОстатки.СтатьяФинансирования.Наименование КАК НазваниеСтатьи,
ЗарплатаОстатки.СуммаВзаиморасчетовОстаток КАК ТекущийОстаток
ИЗ
РегистрНакопления.ВзаиморасчетыПоЗаработнойПлате.Остатки(&Период, ) КАК ЗарплатаОстатки
В этом примере мы обращаемся к Остатки — это виртуальная таблица, которую система рассчитывает автоматически. Обратите внимание, что мы получаем доступ к полям справочника (например, Наименование) через точку от измерения регистра. Это стандартный и эффективный механизм 1С.
Вы справедливо предположили, что данные могут поступать из обмена. В БГУ справочник СтатьиФинансированияЗарплата наполняется при синхронизации с ЗУП. Если вы видите элемент в справочнике, но запрос к регистру ничего не возвращает, проверьте следующее:
Отражение зарплаты в бухучете загружены, но не проведены, они не создали записей в регистрах. Запрос к регистру будет пустым.&Период) установлена позже даты совершения операций.ГДЕ слишком жесткие условия, отсекающие нужные строки.Подведем итог нашего анализа. Чтобы «достать» данные, скрытые за ссылкой в справочнике:
Такой подход позволит вам эффективно извлекать любую информацию, независимо от того, насколько глубоко она запрятана в архитектуре конфигурации.