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