Какой механизм используется для хранения значений субконто
Все данные об объектах учета распределяются по соответствующим бухгалтерским счетам. Некоторые из счетов, в свою очередь подразделяются на субсчета, что дает дополнительную возможность для проведения анализа. Однако во многих случаях разделения только на счета и субсчета бывает недостаточно.
Например, к счету 10 «Материалы» могут быть открыты субсчета: «Основные материалы», «Вспомогательные материалы», «Инструмент» и т.д. Но на крупных предприятиях каждая из этих групп может содержать тысячи и даже десятки тысяч позиций, находиться на разных складах и т.п.
Для того, чтобы можно было провести более глубокий анализ данных по тому или иному счету, и используются субконто. Можно сказать, что это самый «нижний» аналитический уровень в иерархии: счет – субсчет – субконто.
Виды субконто
Эти виды зависят от того, по какому счету требуется детализация. В бухгалтерских программах они содержатся в специальных справочниках, откуда их можно выбирать при настройке счетов.
Как правило, для счета (субсчета) предусматривается открытие не более 3-4 субконто. В большинстве случаев этого достаточно.
Например, для всех субсчетов счета 10 «Материалы» обычно используют следующие субконто:
- Склад.
- Материально-ответственное лицо.
- Номенклатура.
Несколько уровней аналитики по субконто нужны не всегда, это зависит от специфики тех объектов учета, информация о которых содержится на счете. Например, для счета 70 «Расчеты по оплате труда» используют два субконто:
- Работники.
- Виды начислений.
Некоторые субконто могут использоваться для группы счетов, например, «Работники» для счетов 70,71,73 или «Контрагенты» для счетов 60,62,76.
Другие же могут быть отнесены только к конкретному счету, например, «Направления использования прибыли» – только к счету 84.
Анализ субконто
Использование субконто позволяет получить максимально полную детализацию информации, содержащейся на счете.
Например, если речь идет о материалах, то можно увидеть их движение в разрезе складов или по материально-ответственным лицам.
Информацию по счетам, показывающим состояние расчетов (60, 62, 76) можно разделить по контрагентам и далее по договорам и отгрузочным документам.
Для получения данных в том или ином разрезе нужно выбрать в настройках соответствующее субконто.
Кроме того, с использованием субконто можно получить информацию о каком-либо объекте, содержащуюся на всех счетах. Например, контрагент является для предприятия и поставщиком, и покупателем. Выбрав его в настройках отчета, можно собрать данные со всех счетов, где отражаются операции по этому контрагенту и показать сводную информацию о состоянии расчетов.
Вывод
Субконто в бухгалтерских программах используется для детализации информации, содержащейся на счетах. Их использование существенно упрощает анализ данных, содержащихся в информационной базе
Объект 1С «Планы счетов»
Объект 1С «Планы счетов» — это прикладные объекты конфигурации, каждый из которых позволяет описать совокупность синтетических счетов, предназначенных для группировки информации о хозяйственной деятельности предприятия.
Путем настройки плана счетов организуется требуемая система учета; на план счетов ссылается регистр бухгалтерии.
Количество планов счетов в конфигурации не ограничено. Как правило, основной план счетов используется для бухгалтерского учета, а если требуется учет по иным стандартам (управленческий, МСФО и т.д.), то подключаются дополнительные планы счетов.
Счета в план могут быть добавлены как в конфигураторе (предопределенные), так и в пользовательском режиме.
План счетов может быть организован иерархично, ограничений по числу уровней вложенности нет.
Предопределенные планы счетов
Типовые решения, в состав которых входит подсистема бухгалтерского учета, поставляются с предопределенным планом счетов.

Как и любые предопределенные данные, эти счета можно отредактировать (добавить дополнительные счета) в режиме 1С:Предприятие, но нельзя удалить совсем.
Особенности работы с предопределенным планом счетов:
- В режиме конфигураторау предопределенного счета разработчик может изменить имя, порядок, код, наименование.


- «Имя» (с пустым — сохранить не даст);
- «Вид»;
- «Забалансовый» (флаг по умолчанию установлен «ЛОЖЬ»).
Структура объектов 1С «Планы счетов»
- каждый план счетов может включать необходимое количество счетов первого уровня;
- к каждому счету может быть открыто нужное количество субсчетов;
- каждый субсчет может иметь свои субсчета, и т.д.
Количество уровней вложенности субсчетов в системе 1С:Предприятие 8 не ограничено.
Создание и редактирование счетов может выполняться:
- разработчиком (предопределенные счета);
- пользователем, в процессе работы с прикладным решением ( пользователь не может удалять счета, созданные разработчиком ).
По любому счету или субсчету возможно ведение аналитического учета. При создании и редактировании плана счетов требуемому счету или субсчету можно поставить в соответствие необходимое количество субконто — объектов аналитического учета.
Для того чтобы иметь возможность указания субконто для счетов, план счетов связывается с планом видов характеристик, в котором описаны виды субконто, применяемые для этого плана счетов.
Для каждого счета можно задать:
- несколько признаков учета (например, количественный и валютный);
- несколько признаков учета субконто (например, суммовой, количественный, валютный), которые позволяют установить признак использования того или иного вида субконто при формировании предопределенных счетов.
Также с каждым счетом и субсчетом может быть связан ряд дополнительной информации, которая хранится в реквизитах (например, это может быть признак, запрещающий использовать счет в проводках).
МЕХАНИЗМ СУБКОНТО
Субконто— это любой объект, по которому ведется аналитический учет, причем необязательно в количественном выражении (основные средства, нематериальные активы, малоценные и быстроизнашивающиеся предметы, материалы, организации, подотчетные лица, договоры, бюджеты). Вид субконто — это множество однотипных субконто, выбранных по определенным критериям. Например, менеджер по продажам ООО «Добро» Коваленко А. Н. — это субконто, а «Сотрудники» вид субконто.
В информационной базе, не заполненной проводками, еще нет ни одного субконто. Разработчик не может угадать заранее, с какими организациями предприятие будет вести дела, каким у него будет состав сотрудников и т. п. Но виды субконто заранее настроить можно. В типовую конфигурацию «1С: Бухгалтерии» внесены 45 видов субконто. Хранятся они в плане видов характеристик «Виды субконто хозрасчетные» (см. рис. 1.5.1) (меню «Операции — Планы видов характеристик»). Перечисленные виды субконто можно дополнить новыми.
Похожие публикации:
- Какие функции реализуют операторы freqs feedback
- Какое максимальное количество субконто предусмотрено для счета
- Какое число будет записано в ячейку b2 после ввода формул
- Какой высоты нужен шрифт в пунктах чтобы текст был расположен на листе формата а3 так же как на а4
Что такое субконто?

Термин «субконто» не слишком уж часто встречается в теории бухучёта и мало кому знаком из бухгалтеров, не использующих в профессиональной деятельности компьютерные программы учёта. Многие бухгалтера недооценивают этот элемент программы «1С:Бухгалтерия», тем не менее, данный инструмент в некоторых случаях может принести весьма ощутимую пользу.
Это понятие было придумано компанией «1С» и ею же оно было внедрено в одноимённую программу, используемую в бухгалтерском учёте, для того, чтобы обеспечить добавочный срез аналитического характера. В программе «1С:Бухгалтерия» присутствует объект «Справочник», субконто является составляющей этого элемента. Используя субконто, пользователь может вносить, хранить и получать определённую информацию, представляя её в виде иерархического списка.
Некоторые особенности
Максимально доступно разъяснить сущность данного термина, сравнивая его с субсчетами. Главным методом наглядного отражения различных операций считается бухгалтерская проводка. Она подразумевает возможность описания любого действия при помощи дебета и кредита.
Например, если касса пополняется средствами с расчётного счёта, бухгалтером выполняется проводка Д 50.01 К 51. Эта проведённая комбинация объясняет, что из банковского учреждения финансовые средства попали на счёт организации. Слишком подробную информацию об этом, тем не менее, вряд ли удастся увидеть.
Раньше для выполнения детального анализа бухгалтеру было необходимо указывать субсчета на основании требуемых параметров (к примеру, с какого из счетов деньги были отправлены и в которую из касс они впоследствии попали). В конечном итоге, бухгалтерская книга после этого приобретала чересчур внушительный объём.
В настоящее время, применяя специальные программы, можно все требуемые признаки сосредоточить в отдельном справочнике. Подобный инструмент и называется субконто. В данном случае пользователи получают возможность вместо субсчетов использовать специальный справочник, определяя соответствующие характеристики для каждой проводки.
Составляющие части субконто
Каждый пользователь заполняет этот справочник на собственное усмотрение. В будущем, в процессе формирования проводок используемая программа сама будет вносить необходимые изменения в статьи расходов, указываемые бухгалтером.
В случае необходимости пользователь сможет за пару секунд отобразить на мониторе всю требуемую аналитику конкретного счёта. Для этого в программе необходимо выбрать вкладку под названием «Анализ субконто». Эта вкладка внешне похожа на ведомость, отражающую остатки и обороты всех номенклатурных позиций. Такая подборка позволяет получить более подробную информацию о всех передвижениях по нашим счетам, которые составляют итоговые результаты деятельности предприятия.
Любой справочник легко настроить в соответствии с требуемыми нами параметрами – в целом можно выполнять трёхуровневую аналитику. В программе «1С:Бухгалтерия» каждому из счётов предоставлена возможность иметь не более 3 субконто. При этом могут встречаться счета, не имеющие субконто вообще. Это зависит от того, что различным счетам необходима разная степень детализации учёта. В редких случаях получается анализировать и свыше 3 уровней, но при этом программа начинает заметно зависать.

Где применяется субконто
Данный удобный инструмент применяется для анализа различных счетов. Разумнее пользоваться этим элементом программы «1С:Бухгалтерия» для проводок, в процессе анализа которых необходимо обозначить конечные показатели для каждого отдельного объекта. В большинстве случаев, пользователи программы выполняют подобную аналитику по наиболее популярным счетам. Довольно просто осуществлять учёт по проводкам, которые связаны со счетами разных видов.
Значение субконто
Данные аналитические счета помогают существенно оптимизировать процесс аналитики и совмещать её с иными определёнными функциями. Например, проводя аналитику счёта 41.01, бухгалтер сможет дополнительно осуществлять контроль над заведующим складом. Это становится возможным, благодаря тому, что справочник предоставляет данные о номенклатуре соответствующей продукции и о том, какое количество единиц товара находится на складах.
Преимущества использования отчёта «Анализ субконто»
- Помогает увидеть все остатки и обороты по нашим счетам, анализ которых необходимо провести с учётом вида, указанного пользователем в соответствующем аналоговом окне, где настраиваются параметры вывода отчёта;
- Очень удобно при осуществлении аналитического учёта одинакового вида сразу на нескольких счетах;
- Используется для выверки расчётов при осуществлении операциях, связанных с бартером либо при встречных поставках продукции;
- Можно использовать с целью выверки взаиморасчётов со своими контрагентами, при этом по каждому можно будет посмотреть, как дебиторскую, так и кредиторскую задолженность.
Использование материалов сайта разрешено только при условии размещения активной ссылки на источник.
Что такое субконто и есть ли такое понятие в бухгалтерии

В одной из предыдущих статей мы с вами рассмотрели понятие плана счетов бухгалтерского учета. В том числе выяснили, что бывают так называемые аналитические счета, наряду с субсчетами применяемые для ещё большей детализации ведения учета.
В процессе обучения работе в программе 1С Бухгалтерия у пользователей (в том числе и у бухгалтеров с солидным стажем) часто возникает вопрос: Что такое субконто? Давайте выясним, что же это такое.
Понятие субконто не встречается в теории бухгалтерского учета. Все дело в том, что этот термин был придуман в фирме 1С. Поскольку 1С Бухгалтерия является самой распространённой программой для ведения бухгалтерского учета на территории России, то понятие субконто теперь известно практически всем пользователям программы.
Все особенности ведения учёта подробно рассмотрены в нашем специальном видеокурсе по конфигурации 1С:Бухгалтерия 8.3, включающем в себя 240 практических уроков (сквозная задача) продолжительностью 42 часа. Курс предназначен для освоения программы с самых основ и до сдачи отчётов.
Общие сведения о субконто
Субконто — это аналитические счета. Вот, собственно, и всё! Так что если в 1С Бухгалтерии вам встретится данное понятие (а оно обязательно встретиться), то следует иметь ввиду, что в этом месте программы речь идёт об «аналитике», т.е. уточнении. Например, вы указали в документе контрагента. В таком случае ещё потребуется указать конкретный договор с данным контрагентом.
Ниже приведён фрагмент плана счетов из 1С Бухгалтерии 8. На картинке видно, что число аналитических счетов (субконто) у разных синтетических (номерных) счетов может различаться.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
В 1С Бухгалтерии у счета может быть не более трех субконто. Не более — значит есть счета, у которых субконто нет вообще! Особенного тут ничего нет, просто разным счетам требуется разная степень детализации учета. Примеры счетов без субконто: 84.01, 82, 000.
Самих видов субконто достаточно много. Некоторые из них можно видеть на рисунке ниже.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
Особенности работы с субконто в 1С Бухгалтерии
Теперь давайте посмотрим, как не наделать ошибок при работе с субконто в 1С Бухгалтерии. Для начала приведу простой пример документа, в котором требуется указывать значения субконто. Документ типа Ручная операция приведён на скриншоте ниже.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
На рисунке видно, что у всех указанных в проводках счетах есть только одно субконто. Кстати говоря, в 1С Бухгалтерии там, где требуется указывать субконто, они часто могут обозначаться как Субконто 1,Субконто 2, Субконто 3. Такое, как правило, имеет место в табличных частях, вроде той, что показана на рисунке выше.
А вот ещё пример заполнения субконто. На этот раз это одна из вкладок Авансового отчета.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
Здесь также указано только Субконто 1.
Иногда требуется указывать не само значение субконто, а вид субконто. То есть, например, не конкретного контрагента, а тип субконто «Контрагенты». На скриншоте ниже приведёт фрагмент отчета Анализ субконто. Поскольку программа сама не знает о каком конкретно субконто хочет получить информацию пользователь 1С Бухгалтерии, то требуется указать этот параметр.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
В данном примере указаны два вида субконто: Номенклатура и Склады (просто вид, а не конкретные значения).
Поля субконто в документах
Отдельно стоит сказать про заполнение значений субконто в документах. Причем я имею ввиду не табличные их части, как в примерах выше, а обычные поля. Разница лишь в том, что в данном случае вовсе не написано, что это субконто — поле как поле. Пример из задачи моего учебного курса 1С Бухгалтерии 8 приведён ниже.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
Конечно, с первого взгляда никак не узнать, что это те самые поля субконто. Однако если взглянуть на План счетов, то все становится понятно.
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
![]()
[нажмите на картинку для увеличения]
Справка: как сохранять фото с сайтов
Важно запомнить: Указанные значения субконто используются при проведении документа, поэтому не следует оставлять такие поля пустыми (за исключением особых случаев).
Подведём итоги
В программе 1С Бухгалтерия Субконто — это аналитические счета. Не забывайте заполнять их поля в документах и отчетах!
Уникальная метка публикации: F2A1A93E-872A-5A60-65BC-F38ADFD29567
Источник: //artemvm.info/information/uchebnye-stati/1s-predpriyatie/chto-takoe-subkonto/
Регистры бухгалтерии. Настройки, субконто и движения с субконто
В одной из предыдущих статей «Регистры бухгалтерии. Общая информация» была рассмотрена общая информация о внутреннем устройстве регистров бухгалтерии. Мы кратко рассмотрели основные таблицы на стороне базы данных, их назначение и некоторые особенности.
Настало время остановиться на каждой из виртуальных таблиц подробнее, рассмотрев их назначение и примеры использования более детально, а также влияние настроек самого регистра на его хранение в базе данных.

Начнем с основной таблицы регистра, а после перейдем к двум таблицам: «Субконто» и «Движения с субконто». На этот раз все примеры будем делать на регистре бухгалтерии «Хозрасчетный» из типовой конфигурации «Бухгалтерия предприятия 3». Схему этого регистра Вы можете видеть выше.

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

Самыми важными настройками, с которых начинается создание нового регистра бухгалтерии в конфигурации, являются опции «Корреспонденция» и «План счетов».
План счетов фактически похож по своей структуре на обычный справочник за исключением нескольких дополнительных настроек:
- Признаки учета
- Признаки учета субконто
- Настройка состава субконто
- Некоторые другие предопределенные поля.
Сам по себе план счетов почти не влияет на структуру таблиц регистра бухгалтерии. Вместо этого он влияет КАК будет платформа 1С записывать проводки в регистр в зависимости от того какие счета в проводке установлены. Вот так выглядит план счетов в дереве метаданных.
На стороне базы данных план счетов состоит из основной таблицы и таблицы с составом субконто (состав субконто можно назвать табличной частью в каком-то смысле). Кроме этого могут быть дополнительные таблицы для каждой добавленной табличной части, но в типовой бухгалтерии их нет, поэтому рассматривать их не будем.
Основная таблица плана счетов
Ничего особенного в основной таблице плана счетов нет. В дереве метаданных у плана счетов есть два раздела: признаки учета и признаки учета субконто. Признаки учета — это фактически обычные реквизиты, по крайней мере так они добавлены в таблицу на стороне базы данных.

Есть несколько особых полей:
- Вид — вид счета (активный, пассивный или активно/пассивный).
- Забалансовый
Но не смотря на все это, по структуре основной таблицы этот объект очень похож на обычный справочник.
Таблица состава видов субконто плана счетов
У любого плана счетов есть предопределенная табличная часть — это «Виды субконто», в которой для каждого счета указывается какие субконто для этого счета в проводках будут использоваться.

Какие поля находятся в этой таблице зависит от признаков учета субконто. Есть всегда присутствующие поля:
- Вид субконто — план видов характеристик, в котором хранится состав всех возможных видов аналитик в составе счетов. Ничего особенного в этом объекте нет, только список элементов и тип доступных значений для каждого из них.
- Только обороты — опция, которая определяет нужно ли сопоставлять дебетовые и кредитовые обороты и контролировать остатки по счету. Подробнее еще коснемся этой настройки.
Остальные поля — это признаки учета субконто, влияющие на то как будут записываться показатели аналитики по субконто в проводки и другие служебные таблицы регистра бухгалтерии. Об этом еще будет идти речь ниже.
Другой важной настройкой является опция «Корреспонденция», которая включает поддержку корреспонденции счетов при записи проводок в регистре. Что это значит? Смотрите разницу в структуре регистра с включенной и выключенной настройкой.
Основная таблица
Вся разница заключается в том, что отсутствуют счета ДТ и КТ, а следовательно и аналитика не разделена на ДТ и КТ (измерения, ресурсы).

Вы можете заметить, что для некоторых измерений и ресурсов нет разделения на ДТ и КТ несмотря на то, что регистр с поддержкой корреспонденции. Например. это измерение «Организация», ресурс «Сумма». Так происходит, потому что у этих полей установлена настройка «Балансовый» (см. самое первое изображение выше). Для измерений это означает, что для каждого значения будет вестись отдельный баланс, а для ресурсов — по ним будет вестись двойная запись (итог по ДТ будет равен итогу по КТ). Далее мы на практике посмотрим, как это влияет на запись проводок.
Таблица значений субконто
В таблицах значений субконто только одно отличие — наличие флага корреспонденции «_CORRESPOND» (вид движения).

Этот флаг определяет сторону проводки (ДТ или КТ), но если нет корреспонденции, то и флаг такой не нужен.
В остальном все как обычно.
Итоги между счетами
Тут все просто. Если у регистра бухгалтерии нет поддержки корреспонденции, то таблицы итогов между счетами тоже нет. Просто в ней нет смысла 🙂
В остальных таблицах разницы в структуре хранения нет.
На практике редко можно встретить регистры бухгалтерии без поддержки корреспонденции. Знаете такие решения? Будет интересно увидеть комментарии по этому поводу.
Таким образом, настройки плана счетов почти не влияют на структуру таблиц регистра бухгалтерии, но влияют как будут формироваться проводки в регистре и использоваться служебные таблицы итогов и др. Но план счетов все же может повлиять на структуру регистра с помощью настройки «Максимальное количество субконто», от которого зависит создаваемое количество таблиц итогов по субконто. Все же помнят, что фирма «1С» не рекомендует добавлять больше 3 субконто, вот сегодня мы и посмотрим на что там эти настройки влияют. В типовых конфигурациях обычно установлено как раз три субконто и общий состав таблиц всегда похож.
Стандартный состав таблиц регистров бухгалтерии в типовых конфигурациях
Так как макс. количество субконто равно 3, то и таблиц итогов с субконто тоже 3.

Ранее мы уже рассматривали таблицы регистра бухгалтерии в общем плане. Вы можете посмотреть информацию здесь.
Что касается корреспонденции, то обычно она всегда включена и влияет на возможность создавать проводки с корреспонденцией счетов (ДТ-КТ), поэтому влияние на структуру таблиц базы данных значительное. В статье мы не будет подробно рассматривать работу платформы 1С с регистром бухгалтерии без поддержки корреспонденции, т.к. случай этот достаточно особый. Тем более изучив этот материал у Вас практически не останется вопросов как платформа работает с регистром без корреспонденции, т.к. принципы остаются те же.
Перейдем непосредственно к регистру бухгалтерии и рассмотрим работу платформы с ним. Поехали!
Немного примеров
Итак, какие настройки есть теперь понятно. Для наглядности рассмотрим пример, чтобы понимать, как они влияют на формирование проводок. Весь пример сделан на демобазе «Бухгалтерия предприятия 3». Вот такие таблицы имеет регистр.
Все таблицы регистра бухгалтерии
Описание структуры всех таблиц регистра бухгалтерии, на котором демонстрируются все примеры.
Основная таблица

Значения субконто

Итоги по счетам с субконто 1

Итоги по счетам с субконто 2

Итоги по счетам с субконто 3

Итоги по счетам

Итоги между счетами

Эта информация может пригодиться для изучения примеров. Не сворачивайте спойлеры :).
Возьмем одну из самых распространенных операций — отражение реализации услуг в виде проводки ДТ 62.01 — КТ 90.01.2. Под спойлером полная информация о проводке.
Описание проводки ДТ 62.01 — КТ 90.01.2
Так выглядит проводка по реализации услуг, формируемой документом «Реализация товаров и услуг».

Дебетовый счет 62.01 «Расчеты с покупателями и заказчиками» является активным, имеет 3 субконто с учетом остатков на них и с указанием сумм, а также участвует в учете по подразделениям и налоговом учете.

Кредитовый счет 90.01.2 «Выручка по отдельным видам деятельности с особым порядком налогообложения» является пассивным. Также участвует в учете по подразделениям и налоговому учету. Но в отличии от предыдущего счета используется для учета также и количественных показателей и имеет только оборотные виды субконто.

Как же такая проводка будет отражена в таблицах регистра бухгалтерии?
Рассмотрим, что делает платформа 1С при записи подобной проводки в базу данных. Начнем с основной таблицы и таблицы значений субконто.
Основная таблица
Тут все просто. В таблице представлены данные сразу в двух видах: как это бы выглядело в режиме 1С:Предприятие , а также как это фактически хранится в базе данных . Поскольку данных очень много, то разобьем на несколько частей.
Основные поля
Первая часть — это основные поля, в т.ч. счета ДТ и КТ. В этом случае все логично — в проводке участвуют счета 62.01 и 90.01.2. Запись на указанный период, активность, регистратор также на месте.
| Период | Регистратор (тип ссылки) | Регистратор | НомерСтроки | Активность | СчетДт | СчетКт |
| _Period | _RecorderTRef | _RecorderRRef | _LineNo | _Active | _AccountDtRRef | _AccountCtRRef |
| 12.01.4020 14:37 | Документ.ПоступлениеТоваровУслуг | Реализация (акт, накладная) 1С01-000001 от 12.01.2020 14:37:21 | 2 | Да | 62.01 | 90.01.2 |
| 12.01.4020 14:37 | 0x00000153 | 0x80C9000C296F186A11EA351F217FC483 | 2 | 0x01 | 0x9AE320D5E1503F5A4C3421B79A621088 | 0xBC5B3E89474F08304BC96363D66286FA |
Далее посмотрим, что у нас записалось в измерения.
Измерения
| Организация | ВалютаДт | ВалютаКт | ПодразделениеДт | ПодразделениеКт |
| _Fld787RRef | _Fld788DtRRef | _Fld788СtRRef | _Fld789DtRRef | _Fld789CtRRef |
| Иванов И. И. ИП | NULL | NULL | Основное подразделение | Основное подразделение |
| 0x80C9000C296F186A11EA351E654C18D5 | NULL | NULL | 0x80C9000C296F186A11EA351EA8E231EF | 0x80C9000C296F186A11EA351EA8E231EF |
У регистра бухгалтерии 3 измерения — «Организация», «Валюта» и «Подразделение», но откуда столько полей взялось?
Для измерения «Организация» в настройках указана опция «Балансовый» (см. изображение в самом начале публикации). Это значит, что оно используется для свода общего баланса и всегда участвует в проводках как со стороны ДТ, так и со стороны КТ. Причем значение как со стороны ДТ, так и со стороны КТ всегда одинаковое в рамках одной записи. Все это нужно для того, чтобы вести по этому измерению отдельный баланс. А если значение одинаковое для каждой стороны проводки, то зачем его хранить и для КТ, и для ДТ. Именно поэтому измерение «Организация» представлена только одним полем на стороне базы данных.
Для измерений «Валюта» и «Подразделение» все намного интереснее. Во-первых, это НЕ балансовые измерения, а значит их значения в рамках проводки могут отличаться на стороне ДТ и КТ. Как эти значения будут заполняться и будут ли зависит от настроек счета. Помните мы говорили про признаки учета счета (НЕ субконто!). Именно они и влияют на заполнение измерений. В свойстве измерения «Валюта» установлен признак учета «Валютный» из плана счетов «Хозрасчетный». В измерении «Подразделение» установлен признак учета «Учет по подразделением».
Для счета 62.01 (Расчеты с покупателями и заказчиками) установлен признак вида учета по подразделениям, а по валюте учет отключен. Соответственно, по валюте всегда подставляется NULL (именно NULL, а не пустая ссылка). Подразделение же заполняется как на стороне КТ, так и на стороне ДТ. Такая же ситуация со счетом 90.01.2 в КТ.
Итог: признаки учета счета влияют на то, как будут заполнены измерения в проводке и будут ли они вообще заполняться. Опция «Балансовый» влияет на необходимость отдельного отражения измерения по ДТ и КТ.
Ресурсы
У ресурсов похожая ситуация.
| Сумма | ВалютнаяСуммаДт | ВалютнаяСуммаКт | КоличествоДт | КоличествоКт | СуммаНУДт | СуммаНУКт | СуммаПРДт | СуммаПРКт | СуммаВРДт | СуммаВРКт |
| _Fld790 | _Fld791Dt | _Fld791Ct | _Fld792Dt | _Fld792Ct | _Fld793Dt | _Fld793Ct | _Fld794Dt | _Fld794Ct | _Fld795Dt | _Fld795Ct |
| 1000.00 | NULL | NULL | NULL | 1.000 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| 1000.00 | NULL | NULL | NULL | 1.000 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
Для ресурса «Сумма» признак учета не указан (есть признак учета субконто, но об этом позже), а также включена опция «Балансовый». Это значит, что сумма должна быть заполнена в любой проводке (это может быть любое числовое значение, в том числе 0, главное чтоб не NULL), а также одно значение как для ДТ, так и для КТ, то есть ситуация аналогичная измерению «Организация» и поэтому данные сохраняются в одно поле. В нашем случае записано число 1000. С этим все просто.
Далее идет ресурс «Валютная сумма», который на стороне базы разбит на «ВалютнаяСуммаДт» и «ВалютнаяСуммаКт», т.к. ресурс не балансовый. У этого ресурса есть признак учета «Валютный». Соответственно, если по счету суммы в валюте хранить не нужно, то значения будут подставляться в виде NULL (ситуация схожа с измерением «Валюта» выше). Для счета 62.01 и 90.01.2 валютного учета нет, поэтому и подставлены значения NULL.
Измерение «Количество» заполнено только по КТ. Думаю, Вы уже догадались почему. У ресурса «Количество» в регистре указан признак учета «Количественный». В корреспонденции 62.01 — 90.01.2 только у счета в КТ включен количественный признак учета. Поэтому в ДТ значения заполнены NULL, а в КТ подставлены числовые значения.
Все остальные ресурсы «СуммаНУ*» с включенным признаком учета «Налоговый учет». У обоих счетов в проводке этот признак учета включен, поэтому значения сумм везде указаны. Да, они заполнены значением 0, но если бы признака налогового учета в счетах не было, то везде стояли бы значения NULL.
Итого: признак учета счета влияет не только на измерения, но и на ресурсы примерно с той же логикой.
Реквизиты
Самой простой частью основной таблицы регистра бухгалтерии являются реквизиты. Они не имеют ни признака балансовый, ни признаков учета. Это просто справочная информация к записям.
| НеКорректироватьСтоимостьАвтоматически | ОбластьДанныхОсновныеДанные | ХешДт | ХешКт | |
| _Fld796 | _Fld797 | _Fld774 | _EDHashDt | _EDHashCt |
| Реализация услуг | ЛОЖЬ | 0 | -684660258 | 940842167 |
| Реализация услуг | 0x00 | 0 | -684660258 | 940842167 |
Интересным здесь только являются поля хешей по ДТ и КТ, но это уже другая история.
Значения субконто
У счета может быть произвольное количество субконто (до 3 в типовых конфигурациях. Макс. количество настраивается в плане счетов) и разные значения для каждого из них. Чтобы произвольный состав аналитики сохранить, платформа 1С использует таблицу значений субконто.
| Регистратор | НомерСтроки | Корреспонденция | Вид | Значение (вид значения) | Значение (тип ссылки) | Значение | ОбластьДанныхОсновныеДанные |
| _RecorderRRef | _LineNo | _Correspond | _KindRRef | _Value_TYPE | _Value_RTRef | _Value_RRRef | _Fld774 |
| <> | 2 | Да | Ссылка | Справочник.НоменклатурныеГруппы | Услуги | 0 | |
| <> | 2 | 1 | 0xB5BEC72D2C1AC9714487AECE7C698FE5 | 0x08 | 0x00000057 | 0x80C9000C296F186A11EA351F5CD30272 | 0 |
| <> | 2 | Да | Ссылка | Справочник.Номенклатура | Консультирование | 0 | |
| <> | 2 | 1 | 0xA2D9EF0AD9924E764E73FB1C43E874EE | 0x08 | 0x00000055 | 0x80C9000C296F186A11EA351F17CB5AEF | 0 |
| <> | 2 | Нет | Ссылка | Документ.РеализацияТоваровУслуг | Реализация (акт, накладная) 1С01-000001 от 12.01.2020 14:37:21 | 0 | |
| <> | 2 | 0 | 0xB9AD275B22748F774090CC1696EFD0C7 | 0x08 | 0x00000153 | 0x80C9000C296F186A11EA351F217FC483 | 0 |
| <> | 2 | Нет | Ссылка | Справочник.ДоговорыКонтрагентов | Без договора | 0 | |
| <> | 2 | 0 | 0x9EFEA4E4FE5213194AAACF4480D1631B | 0x08 | 0x00000038 | 0x80C9000C296F186A11EA351F3DCF9DB1 | 0 |
| <> | 2 | Нет | Ссылка | Справочник.Контрагенты | Тестовый контрагент | 0 | |
| <> | 2 | 0 | 0x93E0BC525FC3DBE048D4A86FAC901067 | 0x08 | 0x0000004C | 0x80C9000C296F186A11EA351EFD80CCD3 | 0 |
Регистратор тот же, поэтому убрал его из таблицы для экономия места.
Поле «Корреспонденция» определяет к какой стороне проводки относится аналитика: 0 означает к ДТ, 1 означает к КТ. Фактически это поле «ВидДвижения» в таблице «Субконто» регистра. Другое поле «Вид» хранит ссылку на элемент плана видов характеристик «Виды субконто хозрасчетные», ведь в конце концов нужно знать не только значение субконто, но и его вид.
Поля вида «_Value_*» хранят непосредственно значение субконто:
- _Value_TYPE — это вид значения (строка, булево, дата, число, ссылка и др.)
- _Value_RTRef — это тип ссылки.
- _Value_RRef — это значение ссылки.
У счета 62.01 — 3 субконто, а у 90.01.2 — два субконто. В итоге в таблицу было добавлено 5 записей.
Признаки учета счета и признаки учета субконто не влияют на данные в этой таблице, т.к. фактически никаких числовых показателей в ней не сохраняется.
С базовыми таблицами разобрались, теперь посмотрим на таблицы итогов субконто.
Итоги по счетам с субконто 1
Информация о структуре таблицы была дана выше.
В рамках примера добавить нечего, т.к. счета, участвующие в проводке, имеют 2 и 3 субконто. То есть записей в таблице итогов по 1 субконто сформировано не будет.
Итоги по счетам с субконто 2
В проводке счет 90.01.2 как раз с двумя субконто, поэтому именно по нему данные попадут в таблицу итогов. Также обратите внимание на то, что по всем субконто этого счета стоит опция «Только обороты». Это важно, она влияет на формирование записей таблицы итогов субконто и это будет показано.
Итак, эта проводка сформировала две записи в таблице итогов по 2 субконто. Первая часть записи — это измерения (без значений субконто):
| Счет | Период | Организация | Валюта | Подразделение |
| _AccountRRef | _Period | _Fld787RRef | _Fld788RRef | _Fld789RRef |
| 90.01.2 | 01.01.4020 0:00:00 | Иванов И. И. ИП | NULL | Основное подразделение |
| 0xBC5B3E89474F08304BC96363D66286FA | 01.01.4020 0:00:00 | 0x80C9000C296F186A11EA351E654C18D5 | NULL | 0x80C9000C296F186A11EA351EA8E231EF |
| 90.01.2 | 01.01.4020 0:00:00 | Иванов И. И. ИП | NULL | Основное подразделение |
| 0xBC5B3E89474F08304BC96363D66286FA | 01.01.4020 0:00:00 | 0x80C9000C296F186A11EA351E654C18D5 | NULL | 0x80C9000C296F186A11EA351EA8E231EF |
Выглядит так, как будто это дублирующиеся записи, т.к. значения основных измерений одинаковые. Заполнение валюты и подразделения подчиняются тем же правилам, что и для самого счета: если признак учета по подразделению или валюте используется, то и соответствующие измерения будут заполнены. В нашем случае для счета 90.01.2 валютный учет не используется, а учет по подразделениям включен. Что касается заполнения значений субконто, то вот эта часть для наших записей.
| Значение (вид значения) | Значение (тип ссылки) | Значение | Значение (вид значения) | Значение (тип ссылки) | Значение |
| _Value1_TYPE | _Value1_RTRef | _Value1_RRRef | _Value2_TYPE | _Value2_RTRef | _Value2_RRRef |
| NULL | NULL | NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL | NULL | NULL |
| Ссылка | Справочник.НоменклатурныеГруппы | Услуги | Ссылка | Справочник.Номенклатура | Консультирование |
| 0x08 | 0x00000057 | 0x80C9000C296F186A11EA351F5CD30272 | 0x08 | 0x00000055 | 0x80C9000C296F186A11EA351F17CB5AEF |
Тут мы видим, что первая запись не содержит информации о значениях субконто, а вторая наоборот. Все дело в том, что первая запись без значений субконто — это общий оборот по счету, который конкретные значения аналитики не учитывает. Вторая запись — это итоговые записи по оборотам в ДТ и КТ. Вот непосредственно значения итогов для этих записей (из таблицы убраны суммы налогового учета, а также служебные поля разделителей).
| Сумма | Сумма ОборотДт | Сумма ОборотКт | Сумма Оборот | Валютная Сумма | ВалютнаяСумма ОборотДт | ВалютнаяСумма ОборотКт | ВалютнаяСумма Оборот | Количество | Количество ОборотДт | Количество ОборотКт | Количество Оборот |
| _Fld790 | _TurnoverDt801 | _TurnoverCt802 | _Turnover803 | _Fld791 | _TurnoverDt804 | _TurnoverCt805 | _Turnover806 | _Fld792 | _TurnoverDt807 | _TurnoverCt808 | _Turnover809 |
| 0.00 | NULL | NULL | -1000.00 | NULL | NULL | NULL | NULL | 0.000 | NULL | NULL | -1.000 |
| 0.00 | NULL | NULL | -1000.00 | NULL | NULL | NULL | NULL | 0.000 | NULL | NULL | -1.000 |
| NULL | 0.00 | 1000.00 | NULL | NULL | NULL | NULL | NULL | NULL | 0.000 | 1.000 | NULL |
| NULL | 0.00 | 1000.00 | NULL | NULL | NULL | NULL | NULL | NULL | 0.000 | 1.000 | NULL |
Таким образом, для счета 90.01.2 в таблице итогов было создано две записи:
- Запись с общим оборотом для тех видов субконто, по которым установлена опция «Только обороты». Поскольку у счета для всех видов субконто установлено «Только обороты», то в этой записи для всех видов субконто установлено значение NULL.
- Запись с итоговыми оборотами по ДТ и КТ с учетом всех значений субконто. В ней присутствует только итоговые обороты по ДТ и КТ. Сохранение общего оборота отключено (см. пункт 1).
- По этому счету установлен признак количественного учета, а также и для всех субконто установлен признак количественного учета субконто. Поэтому во всех записях также имеются итоги по количеству, которые сформированы по тем же правилам, что и записи по сумме.
- Если у счета 2 субконто, то по нему итоги учитываются в таблице итогов с 2 субконто (очевидно :))
- Если счет в ДТ, то показатели итогов учитываются в дебете. Если счет в КТ, то показатели итогов учитываются в кредите.
- Общая запись итога по обороту появляется в том случае, если в счете есть виды субконто с опцией «Только обороты». При этом общее значение рассчитывается как ДТ — КТ.
- Вид счета (активный / пассивный / активно-пассивный) фактически не влияет на то как данные будут хранится в таблице итогов. Он влияет лишь на то как платформа 1С будет эти данные получать и интерпретировать при формировании запроса виртуальными таблицами регистра бухгалтерии, но это уже выходит за рамки публикации.
Но давайте посмотрим, что же творится в таблице итогов с 3 субконто.
Итоги по счетам с субконто 3
В примере использовался счет 62.01 с тремя субконто. Разумеется, для него будет использоваться таблица с тремя субконто. Вот какие записи проводок появились в ней в части основных измерений.
| Счет | Период | Организация | Валюта | Подразделение |
| _AccountRRef | _Period | _Fld787RRef | _Fld788RRef | _Fld789RRef |
| 62.01 | 01.01.4020 0:00:00 | Иванов И. И. ИП | NULL | Основное подразделение |
| 0x9AE320D5E1503F5A4C3421B79A621088 | 01.01.4020 0:00:00 | 0x80C9000C296F186A11EA351E654C18D5 | NULL | 0x80C9000C296F186A11EA351EA8E231EF |
Мы видим, что добавлена только одна запись. А что же в ней на счет значений субконто.
Субконто 1
| Значение (вид значения) | Значение (тип ссылки) | Значение |
| _Value1_TYPE | _Value1_RTRef | _Value1_RRRef |
| Ссылка | Справочник.Контрагенты | Тестовый контрагент |
| 0x08 | 0x0000004C | 0x80C9000C296F186A11EA351EFD80CCD3 |
Субконто 2
| Значение (вид значения) | Значение (тип ссылки) | Значение |
| _Value2_TYPE | _Value2_RTRef | _Value2_RRRef |
| Ссылка | Справочник.ДоговорыКонтрагентов | Без договора |
| 0x08 | 0x00000038 | 0x80C9000C296F186A11EA351F3DCF9DB1 |
Субконто 3
| Значение (вид значения) | Значение (тип ссылки) | Значение |
| _Value3_TYPE | _Value3_RTRef | _Value3_RRRef |
| Ссылка | Документ.РеализацияТоваровУслуг | Реализация (акт, накладная) 1С01-000001 от 12.01.2020 14:37:21 |
| 0x08 | 0x00000153 | 0x80C9000C296F186A11EA351F217FC483 |
Все значения субконто заполнены аналогично счету. Теперь посмотрим как заполнены итоговые значения показателей (из таблицы убраны суммы по налоговому учету и служебные поля разделителей).
| Сумма | Сумма ОборотДт | Сумма ОборотКт | Сумма Оборот | Валютная Сумма | ВалютнаяСумма ОборотДт | ВалютнаяСумма ОборотКт | ВалютнаяСумма Оборот | Количество | Количество ОборотДт | Количество ОборотКт | Количество Оборот |
| _Fld790 | _TurnoverDt801 | _TurnoverCt802 | _Turnover803 | _Fld791 | _TurnoverDt804 | _TurnoverCt805 | _Turnover806 | _Fld792 | _TurnoverDt807 | _TurnoverCt808 | _Turnover809 |
| 0.00 | 1000.00 | 0.00 | 1000.00 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 0.00 | 1000.00 | 0.00 | 1000.00 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
У счета 62.01 все виды субконто ведут учет остатков (опция «Только обороты» не включена), поэтому дополнительных записей итогов не создается как это было в предыдущем случае. Вместо этого формируется сразу и итоговое значение оборота по ДТ, т.к. счет стоит именно в этой части проводки и добавляется общая сумма оборота, рассчитанная как сумма оборота ДТ — сумма оборота КТ. В остальном правила формирования итоговых записей такие же, как и для таблицы итогов с двумя субконто.
Таким образом, логика работы таблицы итогов везде одинаковая вне зависимости от количества субконто. Опция «Только обороты» влияет на то, как платформа будет хранить итоги для видов субконто. Если она не включена, то итоговый остаток формируется в той же записи итогов, где хранятся данные по оборотам в ДТ и КТ.
Использование опции «Только обороты» позволит уменьшить объем данных в таблице итогов в тех случаях, когда нет смысла хранить остатки в разрезе значений субконто. С прикладной точки зрения эта настройка означает, что по субконто не будут разворачиваться остатки, а будут разворачиваться только обороты.
И в конце посмотрим, что у нас в таблицах итогов по счетам и между счетами.
Итоги между счетами
Таблица итогов между счетами хранит итоговые значения оборотов по месяцам. Ниже Вы можете видеть как эта таблица выглядит без терминов базы данных (они такие же как и в предыдущих описаниях) в части измерений.
| Период | СчетДт | СчетКт | Организация | ВалютаДт | ВалютаКт | ПодразделениеДт | ПодразделениеКт |
| 01.01.4020 0:00 | 62.01 | 90.01.2 | Иванов И. И. ИП | NULL | NULL | Основное подразделение | Основное подразделение |
То есть таблица итогов между счетами фактически хранит итоги в разрезе измерений регистра бухгалтерии с учетом признаков учета счета. Значения оборотов между счетами имеют следующий вид (без показателей налогового учета и служебных полей разделителей).
| Сумма | ВалютнаяСуммаДт | ВалютнаяСуммаКт | КоличествоДт | КоличествоКт |
| 1000.00 | NULL | NULL | NULL | 1.000 |
Итоговый оборот рассчитывается как общий оборот по ДТ — общий оборот по КТ. Итоги также учитывают признаки учета счета (валютный, по подразделениям, количественный) как и в предыдущих случаях.
Итоги по счетам
Последняя таблица для рассмотрения — это итоги по счетам. Эта таблица также содержит итоговые записи по измерениям регистра бухгалтерии по месяцам (как и остальные таблицы итогов). Вот часть таблицы с измерениями в терминах 1С:Предприятия.
| Счет | Период | Организация | Валюта | Подразделение |
| 62.01 | 01.01.4020 0:00 | Иванов И. И. ИП | NULL | Основное подразделение |
| 90.01.2 | 01.01.4020 0:00 | Иванов И. И. ИП | NULL | Основное подразделение |
Показатели итоговой таблицы следующие (показатели налогового учета и служебные поля исключены).
| Сумма | Сумма ОборотДт | Сумма ОборотКт | Сумма Оборот | Валютная Сумма | ВалютнаяСумма ОборотДт | ВалютнаяСумма ОборотКт | ВалютнаяСумма Оборот | Количество | Количество ОборотДт | Количество ОборотКт | Количество Оборот |
| 0.00 | 1000.00 | 0.00 | 1000.00 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 0.00 | 0.00 | 1000.00 | -1000.00 | NULL | NULL | NULL | NULL | 0.000 | 0.000 | 1.000 | -1.000 |
Как обычно, заполнение измерений и итоговых показателей подчиняется признакам учета счета. Все остальное работает также, как и в предыдущих случаях.
Это был длинный пример, но теперь Вы имеете представление как происходит запись в таблицы регистра бухгалтерии и как на это влияют настройки учета счета и субконто. Конечно, есть и другие случаи, но логика работы платформы 1С практически всегда сохраняется.
Например, даже если будет создана проводка с забалансовым счетом без корреспонденции, то все вышесказанное все равно остается актуальным. Ключевым отличием будет лишь то, что в таблицах итогов между счетами корреспондирующим счетом будет значение пустой ссылки. Все остальное то же самое.
Итого, можно перечислить основные принципы формирования проводок на стороне базы данных:
- Ресурсы и измерения с признаком «Балансовый» сохраняются одним полем без учета ДТ / КТ.
- Необходимость заполнения измерений и ресурсов по ДТ и КТ определяется признаками учета счета.
- Необходимость заполнения показателей по видам субконто определяется с признаками учета субконто в настройках счетов.
- Вид счета (активный / пассивный / активно-пассивный) фактически не влияет на способ хранения данных в базе данных. Эта настройка влияет на работу платформы 1С в части формирования запросов для получения данных в виртуальных таблицах.
- Опция «Только обороты» изменяет хранение общего оборота в таблицах итогов по субконто. Вместо хранения итога с учетом значений субконто, платформа 1С сохраняет этот итог только по тем измерениям, для которого «Только обороты» не используются. Если для всех субконто в счете эта настройка включена, то общий итог сохраняется без учета значений субконто.
- Не важно какой счет — балансовый или забалансовый. Принцип формирования записей в таблицах регистра сохраняется.
В будущих статьях мы подробнее остановимся на механизме итогов регистра бухгалтерии и раскроем некоторые нюансы его работы.
Большое примечание
Мы рассмотрели всего лишь один пример формирования записей проводок платформой 1С. Конечно, это не охватывает все возможные случаи работы с бухгалтерским регистром, но базовые вещи понять можно.
К тому же, по необходимости Вы сможете разобрать любую проводку тем же подходом, что и в публикации.
Теперь перейдем к запросам.
Запросы платформы
Рассмотрим, как платформа 1С формирует некоторые запросы к регистру бухгалтерии.
Движения и субконто
Таблица движений и таблица субконто — фактически это физические таблицы, и мы можем обращаться к ним для построения своих собственных запросов к регистру бухгалтерии.
Вот так они транслируются платформой 1С.
Таблица движений
Запрос на языке 1С.
ВЫБРАТЬ ПЕРВЫЕ 10 Хозрасчетный.Период КАК Период, Хозрасчетный.Регистратор КАК Регистратор, Хозрасчетный.НомерСтроки КАК НомерСтроки, Хозрасчетный.Активность КАК Активность, Хозрасчетный.СчетДт КАК СчетДт, Хозрасчетный.СчетКт КАК СчетКт, Хозрасчетный.Организация КАК Организация, Хозрасчетный.ВалютаДт КАК ВалютаДт, Хозрасчетный.ВалютаКт КАК ВалютаКт, Хозрасчетный.ПодразделениеДт КАК ПодразделениеДт, Хозрасчетный.ПодразделениеКт КАК ПодразделениеКт, Хозрасчетный.Сумма КАК Сумма, Хозрасчетный.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт, Хозрасчетный.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт, Хозрасчетный.КоличествоДт КАК КоличествоДт, Хозрасчетный.КоличествоКт КАК КоличествоКт ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный ГДЕ Хозрасчетный.Организация = &Организация
Очень похожим будет и запрос в терминах SQL.
SELECT TOP 10 T1._Period, -- Период T1._RecorderTRef, -- Тип регистратора T1._RecorderRRef, -- Регистратор T1._LineNo, -- Номер строки T1._Active, -- Активность T1._AccountDtRRef, -- Счет ДТ T1._AccountCtRRef, -- Счет КТ T1._Fld787RRef, -- Организация T1._Fld788DtRRef, -- Валюта ДТ T1._Fld788CtRRef, -- Валюта КТ T1._Fld789DtRRef, -- Подразделение ДТ T1._Fld789CtRRef, -- Подразделение КТ T1._Fld790, -- Сумма T1._Fld791Dt, -- Валютная сумма ДТ T1._Fld791Ct, -- Валютная сумма КТ T1._Fld792Dt, -- Количество ДТ T1._Fld792Ct -- Количество КТ FROM dbo._AccRg786 T1 -- РегистрБухгалтерии.Хозрасчетный WHERE ((T1._Fld774 = @P1)) -- Разделитель данных AND ((T1._Fld787RRef = @P2)) -- Организация
Практически запрос транслируется 1 в 1.
Таблица субконто
Как мы уже видели выше, у регистра бухгалтерии отдельно выделена таблица значений субконто. Запросы к ней делаются на языке 1С следующим образом.
ВЫБРАТЬ ХозрасчетныйСубконто.Период КАК Период, ХозрасчетныйСубконто.Регистратор КАК Регистратор, ХозрасчетныйСубконто.НомерСтроки КАК НомерСтроки, ХозрасчетныйСубконто.ВидДвижения КАК ВидДвижения, ХозрасчетныйСубконто.Вид КАК Вид, ХозрасчетныйСубконто.Значение КАК Значение ИЗ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто ГДЕ ХозрасчетныйСубконто.Регистратор = &Регистратор УПОРЯДОЧИТЬ ПО Регистратор, Период, НомерСтроки
На стороне базы данных платформа формирует такой SQL-запрос.
SELECT T1._Period, -- Период T1._RecorderTRef, -- Тип регистратора T1._RecorderRRef, -- Регистратор T1._Period, -- Период T1._LineNo, -- Номер строки T1._Correspond, -- Корреспонденция (ДТ или КТ) T1._KindRRef, -- Вид субконто T1._Value_TYPE, -- Вид значения субконто T1._Value_RTRef, -- Тип значения субконто T1._Value_RRRef -- Значение субконто FROM dbo._AccRgED823 T1 -- РегистрБухгалтерии.Хозрасчетный.Субконто WHERE ((T1._Fld774 = @P1)) -- Разделитель данных AND ((T1._RecorderTRef = 0x00000153 -- Тип регистратора AND T1._RecorderRRef = @P2)) -- Регистратор ORDER BY (T1._RecorderTRef), -- Тип регистратора (T1._RecorderRRef), -- Регистратор (T1._Period), -- Период (T1._LineNo) -- Номер строки
Как и с основной таблицей регистра, ничего особенного. Трансляция запроса 1С в SQL практически 1 в 1.
Ничего особенного и, на самом деле, редко используется, но пригодиться все же может.
Движения с субконто
Движения с субконто — это виртуальная таблица, с помощью которой Вы как раз и просматриваете движения документов по бухгалтерским регистрам. Ее можно использовать и для других целей. Таблица именно виртуальная несмотря на то, что фактически она собирает данные из двух физических таблиц, которые мы рассмотрели выше. Напишем простой запрос и увидим, что она не такая простая как кажется.
Движения с субконто
Простой запрос на языке 1С.
ВЫБРАТЬ ХозрасчетныйДвиженияССубконто.Период КАК Период, ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор, ХозрасчетныйДвиженияССубконто.НомерСтроки КАК НомерСтроки, ХозрасчетныйДвиженияССубконто.Активность КАК Активность, ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт, ХозрасчетныйДвиженияССубконто.СубконтоДт1 КАК СубконтоДт1, ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1 КАК ВидСубконтоДт1, ХозрасчетныйДвиженияССубконто.СубконтоДт2 КАК СубконтоДт2, ХозрасчетныйДвиженияССубконто.ВидСубконтоДт2 КАК ВидСубконтоДт2, ХозрасчетныйДвиженияССубконто.СубконтоДт3 КАК СубконтоДт3, ХозрасчетныйДвиженияССубконто.ВидСубконтоДт3 КАК ВидСубконтоДт3, ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт, ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК СубконтоКт1, ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1 КАК ВидСубконтоКт1, ХозрасчетныйДвиженияССубконто.СубконтоКт2 КАК СубконтоКт2, ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2 КАК ВидСубконтоКт2, ХозрасчетныйДвиженияССубконто.СубконтоКт3 КАК СубконтоКт3, ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3 КАК ВидСубконтоКт3, ХозрасчетныйДвиженияССубконто.Организация КАК Организация, ХозрасчетныйДвиженияССубконто.ВалютаДт КАК ВалютаДт, ХозрасчетныйДвиженияССубконто.ВалютаКт КАК ВалютаКт, ХозрасчетныйДвиженияССубконто.ПодразделениеДт КАК ПодразделениеДт, ХозрасчетныйДвиженияССубконто.ПодразделениеКт КАК ПодразделениеКт, ХозрасчетныйДвиженияССубконто.Сумма КАК Сумма, ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт, ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт, ХозрасчетныйДвиженияССубконто.КоличествоДт КАК КоличествоДт, ХозрасчетныйДвиженияССубконто.КоличествоКт КАК КоличествоКт, ХозрасчетныйДвиженияССубконто.Содержание КАК Содержание ИЗ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Организация = &Организация, Период, 100) КАК ХозрасчетныйДвиженияССубконто
И сложный запрос (точнее, серия запросов) на стороне базы данных.
-- Создаем временную таблицу для сохранения данных о значениях субконто SELECT 1 WHERE OBJECT_ID('tempdb..#tt7') IS NOT NULL CREATE TABLE #tt7 ( _Period DATETIME2(0), _RecorderTRef BINARY(4), _RecorderRRef BINARY(16), _LineNo NUMERIC(9, 0), _Active BINARY(1), _AccountDtRRef BINARY(16), _AccountCtRRef BINARY(16), _Fld787RRef BINARY(16), _Fld788DtRRef BINARY(16), _Fld788CtRRef BINARY(16), _Fld789DtRRef BINARY(16), _Fld789CtRRef BINARY(16), _Fld790 NUMERIC(15, 2), _Fld791Dt NUMERIC(15, 2), _Fld791Ct NUMERIC(15, 2), _Fld792Dt NUMERIC(15, 3), _Fld792Ct NUMERIC(15, 3), _Fld796 NVARCHAR(150) COLLATE DATABASE_DEFAULT, _ValueDt1_TYPE BINARY(1), _ValueDt1_RTRef BINARY(4), _ValueDt1_RRRef BINARY(16), _KindDt1RRef BINARY(16), _ValueDt2_TYPE BINARY(1), _ValueDt2_RTRef BINARY(4), _ValueDt2_RRRef BINARY(16), _KindDt2RRef BINARY(16), _ValueDt3_TYPE BINARY(1), _ValueDt3_RTRef BINARY(4), _ValueDt3_RRRef BINARY(16), _KindDt3RRef BINARY(16), _ValueCt1_TYPE BINARY(1), _ValueCt1_RTRef BINARY(4), _ValueCt1_RRRef BINARY(16), _KindCt1RRef BINARY(16), _ValueCt2_TYPE BINARY(1), _ValueCt2_RTRef BINARY(4), _ValueCt2_RRRef BINARY(16), _KindCt2RRef BINARY(16), _ValueCt3_TYPE BINARY(1), _ValueCt3_RTRef BINARY(4), _ValueCt3_RRRef BINARY(16), _KindCt3RRef BINARY(16) ) -- Создаем временную таблицу для сохранения списка регистраторов и номеров строк регистра exec sp_executesql N'INSERT INTO #tt3 WITH(TABLOCK) (_RecorderTRef, _RecorderRRef, _LineNo) SELECT TOP 100 T1._RecorderTRef, T1._RecorderRRef, T1._LineNo FROM dbo._AccRg786 T1 WHERE ((T1._Fld774 = @P1)) AND (((T1._Fld787RRef = @P2))) ORDER BY T1._Period',N'@P1 numeric(10),@P2 varbinary(16)',0,0x80C9000C296F186A11EA351E654C18D5 -- Переносим порцию данных по регистраторам из предыдущей таблицы INSERT INTO #tt4 WITH(TABLOCK) (_RecorderTRef, _RecorderRRef, _LineNo) SELECT T1.RecorderTRef, T1.RecorderRRef, T1.LineNo_ FROM (SELECT TOP 1000 T2._RecorderTRef AS RecorderTRef, T2._RecorderRRef AS RecorderRRef, T2._LineNo AS LineNo_ FROM #tt3 T2 WITH(NOLOCK) ORDER BY T2._RecorderTRef, T2._RecorderRRef, T2._LineNo) T1 -- Создаем временную таблицу для хранения данных результата запроса SELECT 1 WHERE OBJECT_ID('tempdb..#tt8') IS NOT NULL CREATE TABLE #tt8 ( _Period DATETIME2(0), _RecorderTRef BINARY(4), _RecorderRRef BINARY(16), _LineNo NUMERIC(9, 0), _Active BINARY(1), _AccountDtRRef BINARY(16), _AccountCtRRef BINARY(16), _Fld787RRef BINARY(16), _Fld788DtRRef BINARY(16), _Fld788CtRRef BINARY(16), _Fld789DtRRef BINARY(16), _Fld789CtRRef BINARY(16), _Fld790 NUMERIC(15, 2), _Fld791Dt NUMERIC(15, 2), _Fld791Ct NUMERIC(15, 2), _Fld792Dt NUMERIC(15, 3), _Fld792Ct NUMERIC(15, 3), _Fld796 NVARCHAR(150) COLLATE DATABASE_DEFAULT ) -- Получаем данные по порции регистраторов из основной таблицы exec sp_executesql N'INSERT INTO #tt8 WITH(TABLOCK) (_Period, _RecorderTRef, _RecorderRRef, _LineNo, _Active, _AccountDtRRef, _AccountCtRRef, _Fld787RRef, _Fld788DtRRef, _Fld788CtRRef, _Fld789DtRRef, _Fld789CtRRef, _Fld790, _Fld791Dt, _Fld791Ct, _Fld792Dt, _Fld792Ct, _Fld796) SELECT T2._Period, T2._RecorderTRef, T2._RecorderRRef, T2._LineNo, T2._Active, T2._AccountDtRRef, T2._AccountCtRRef, T2._Fld787RRef, T2._Fld788DtRRef, T2._Fld788CtRRef, T2._Fld789DtRRef, T2._Fld789CtRRef, T2._Fld790, T2._Fld791Dt, T2._Fld791Ct, T2._Fld792Dt, T2._Fld792Ct, T2._Fld796 FROM #tt4 T1 WITH(NOLOCK) INNER JOIN dbo._AccRg786 T2 ON T1._RecorderTRef = T2._RecorderTRef AND T1._RecorderRRef = T2._RecorderRRef AND T1._LineNo = T2._LineNo WHERE (T2._Fld774 = @P1)',N'@P1 numeric(10)',0 -- Получаем данные по порции регистраторов из таблицы значений субконто exec sp_executesql N'INSERT INTO #tt6 WITH(TABLOCK) (_RecorderTRef, _RecorderRRef, _LineNo, _KindRRef, _Value_TYPE, _Value_RTRef, _Value_RRRef, _Correspond, _AccEdKindLineNo) SELECT T2._RecorderTRef, T2._RecorderRRef, T2._LineNo, T2._KindRRef, T2._Value_TYPE, T2._Value_RTRef, T2._Value_RRRef, T2._Correspond, T3._LineNo FROM #tt8 T1 WITH(NOLOCK) INNER JOIN dbo._AccRgED823 T2 ON T1._RecorderTRef = T2._RecorderTRef AND T1._RecorderRRef = T2._RecorderRRef AND T1._LineNo = T2._LineNo INNER JOIN dbo._Acc22_ExtDim779 T3 ON CASE WHEN T2._Correspond = @P1 THEN T1._AccountDtRRef ELSE T1._AccountCtRRef END = T3._Acc22_IDRRef AND T2._KindRRef = T3._DimKindRRef WHERE ((T2._Fld774 = @P2)) AND (T3._Fld774 = @P3)',N'@P1 numeric(10),@P2 numeric(10),@P3 numeric(10)',0,0,0 -- Помещаем результат соединения данных из основной таблицы и значений субконто во временную таблицу exec sp_executesql N'INSERT INTO #tt7 WITH(TABLOCK) (_Period, _RecorderTRef, _RecorderRRef, _LineNo, _Active, _AccountDtRRef, _AccountCtRRef, _Fld787RRef, _Fld788DtRRef, _Fld788CtRRef, _Fld789DtRRef, _Fld789CtRRef, _Fld790, _Fld791Dt, _Fld791Ct, _Fld792Dt, _Fld792Ct, _Fld796, _ValueDt1_TYPE, _ValueDt1_RTRef, _ValueDt1_RRRef, _KindDt1RRef, _ValueDt2_TYPE, _ValueDt2_RTRef, _ValueDt2_RRRef, _KindDt2RRef, _ValueDt3_TYPE, _ValueDt3_RTRef, _ValueDt3_RRRef, _KindDt3RRef, _ValueCt1_TYPE, _ValueCt1_RTRef, _ValueCt1_RRRef, _KindCt1RRef, _ValueCt2_TYPE, _ValueCt2_RTRef, _ValueCt2_RRRef, _KindCt2RRef, _ValueCt3_TYPE, _ValueCt3_RTRef, _ValueCt3_RRRef, _KindCt3RRef) SELECT T1._Period, T1._RecorderTRef, T1._RecorderRRef, T1._LineNo, T1._Active, T1._AccountDtRRef, T1._AccountCtRRef, T1._Fld787RRef, T1._Fld788DtRRef, T1._Fld788CtRRef, T1._Fld789DtRRef, T1._Fld789CtRRef, T1._Fld790, T1._Fld791Dt, T1._Fld791Ct, T1._Fld792Dt, T1._Fld792Ct, T1._Fld796, (T5._Value_TYPE), (T5._Value_RTRef), (T5._Value_RRRef), (T5._KindRRef), (T6._Value_TYPE), (T6._Value_RTRef), (T6._Value_RRRef), (T6._KindRRef), (T7._Value_TYPE), (T7._Value_RTRef), (T7._Value_RRRef), (T7._KindRRef), (T2._Value_TYPE), (T2._Value_RTRef), (T2._Value_RRRef), (T2._KindRRef), (T3._Value_TYPE), (T3._Value_RTRef), (T3._Value_RRRef), (T3._KindRRef), (T4._Value_TYPE), (T4._Value_RTRef), (T4._Value_RRRef), (T4._KindRRef) FROM #tt8 T1 WITH(NOLOCK) LEFT OUTER JOIN #tt6 T2 WITH(NOLOCK) ON T1._RecorderTRef = T2._RecorderTRef AND T1._RecorderRRef = T2._RecorderRRef AND T1._LineNo = T2._LineNo AND T2._AccEdKindLineNo = @P1 AND T2._Correspond = @P2 LEFT OUTER JOIN #tt6 T3 WITH(NOLOCK) ON T1._RecorderTRef = T3._RecorderTRef AND T1._RecorderRRef = T3._RecorderRRef AND T1._LineNo = T3._LineNo AND T3._AccEdKindLineNo = @P3 AND T3._Correspond = @P4 LEFT OUTER JOIN #tt6 T4 WITH(NOLOCK) ON T1._RecorderTRef = T4._RecorderTRef AND T1._RecorderRRef = T4._RecorderRRef AND T1._LineNo = T4._LineNo AND T4._AccEdKindLineNo = @P5 AND T4._Correspond = @P6 LEFT OUTER JOIN #tt6 T5 WITH(NOLOCK) ON T1._RecorderTRef = T5._RecorderTRef AND T1._RecorderRRef = T5._RecorderRRef AND T1._LineNo = T5._LineNo AND T5._AccEdKindLineNo = @P7 AND T5._Correspond = @P8 LEFT OUTER JOIN #tt6 T6 WITH(NOLOCK) ON T1._RecorderTRef = T6._RecorderTRef AND T1._RecorderRRef = T6._RecorderRRef AND T1._LineNo = T6._LineNo AND T6._AccEdKindLineNo = @P9 AND T6._Correspond = @P10 LEFT OUTER JOIN #tt6 T7 WITH(NOLOCK) ON T1._RecorderTRef = T7._RecorderTRef AND T1._RecorderRRef = T7._RecorderRRef AND T1._LineNo = T7._LineNo AND T7._AccEdKindLineNo = @P11 AND T7._Correspond = @P12',N'@P1 numeric(10),@P2 numeric(10),@P3 numeric(10),@P4 numeric(10),@P5 numeric(10),@P6 numeric(10),@P7 numeric(10),@P8 numeric(10),@P9 numeric(10),@P10 numeric(10),@P11 numeric(10),@P12 numeric(10)',1,1,2,1,3,1,1,0,2,0,3,0 -- Проверяем есть ли еще данные по регистраторам для обработки SELECT TOP 1 T1._RecorderTRef, T1._RecorderRRef, T1._LineNo FROM #tt4 T1 WITH(NOLOCK) ORDER BY T1._RecorderTRef DESC, T1._RecorderRRef DESC, T1._LineNo DESC TRUNCATE TABLE #tt4 -- Получаем следующеую порцию регистраторов для обработки exec sp_executesql N'INSERT INTO #tt4 WITH(TABLOCK) (_RecorderTRef, _RecorderRRef, _LineNo) SELECT T1.RecorderTRef, T1.RecorderRRef, T1.LineNo_ FROM (SELECT TOP 1000 T2._RecorderTRef AS RecorderTRef, T2._RecorderRRef AS RecorderRRef, T2._LineNo AS LineNo_ FROM #tt3 T2 WITH(NOLOCK) WHERE (T2._RecorderTRef > 0x00000153 OR T2._RecorderTRef = 0x00000153 AND T2._RecorderRRef > @P1) OR T2._RecorderTRef = 0x00000153 AND T2._RecorderRRef = @P2 AND T2._LineNo > @P3 ORDER BY T2._RecorderTRef, T2._RecorderRRef, T2._LineNo) T1',N'@P1 varbinary(16),@P2 varbinary(16),@P3 numeric(10)',0x80C9000C296F186A11EA351F217FC483,0x80C9000C296F186A11EA351F217FC483,2 -- Так как данных больше для получения нет, то выводим результат SELECT T1.Period_, T1.RecorderTRef, T1.RecorderRRef, T1.LineNo_, T1.Active_, T1.AccountDtRRef, T1.ValueDt1_TYPE, T1.ValueDt1_RTRef, T1.ValueDt1_RRRef, T1.KindDt1RRef, T1.ValueDt2_TYPE, T1.ValueDt2_RTRef, T1.ValueDt2_RRRef, T1.KindDt2RRef, T1.ValueDt3_TYPE, T1.ValueDt3_RTRef, T1.ValueDt3_RRRef, T1.KindDt3RRef, T1.AccountCtRRef, T1.ValueCt1_TYPE, T1.ValueCt1_RTRef, T1.ValueCt1_RRRef, T1.KindCt1RRef, T1.ValueCt2_TYPE, T1.ValueCt2_RTRef, T1.ValueCt2_RRRef, T1.KindCt2RRef, T1.ValueCt3_TYPE, T1.ValueCt3_RTRef, T1.ValueCt3_RRRef, T1.KindCt3RRef, T1.Fld787RRef, T1.Fld788DtRRef, T1.Fld788CtRRef, T1.Fld789DtRRef, T1.Fld789CtRRef, T1.Fld790_, T1.Fld791Dt_, T1.Fld791Ct_, T1.Fld792Dt_, T1.Fld792Ct_, T1.Fld796_ FROM (SELECT T2._Period AS Period_, T2._RecorderTRef AS RecorderTRef, T2._RecorderRRef AS RecorderRRef, T2._LineNo AS LineNo_, T2._Active AS Active_, T2._AccountDtRRef AS AccountDtRRef, T2._AccountCtRRef AS AccountCtRRef, T2._Fld787RRef AS Fld787RRef, T2._Fld788DtRRef AS Fld788DtRRef, T2._Fld788CtRRef AS Fld788CtRRef, T2._Fld789DtRRef AS Fld789DtRRef, T2._Fld789CtRRef AS Fld789CtRRef, T2._Fld790 AS Fld790_, T2._Fld791Dt AS Fld791Dt_, T2._Fld791Ct AS Fld791Ct_, T2._Fld792Dt AS Fld792Dt_, T2._Fld792Ct AS Fld792Ct_, T2._Fld796 AS Fld796_, T2._ValueDt1_TYPE AS ValueDt1_TYPE, T2._ValueDt1_RTRef AS ValueDt1_RTRef, T2._ValueDt1_RRRef AS ValueDt1_RRRef, T2._KindDt1RRef AS KindDt1RRef, T2._ValueDt2_TYPE AS ValueDt2_TYPE, T2._ValueDt2_RTRef AS ValueDt2_RTRef, T2._ValueDt2_RRRef AS ValueDt2_RRRef, T2._KindDt2RRef AS KindDt2RRef, T2._ValueDt3_TYPE AS ValueDt3_TYPE, T2._ValueDt3_RTRef AS ValueDt3_RTRef, T2._ValueDt3_RRRef AS ValueDt3_RRRef, T2._KindDt3RRef AS KindDt3RRef, T2._ValueCt1_TYPE AS ValueCt1_TYPE, T2._ValueCt1_RTRef AS ValueCt1_RTRef, T2._ValueCt1_RRRef AS ValueCt1_RRRef, T2._KindCt1RRef AS KindCt1RRef, T2._ValueCt2_TYPE AS ValueCt2_TYPE, T2._ValueCt2_RTRef AS ValueCt2_RTRef, T2._ValueCt2_RRRef AS ValueCt2_RRRef, T2._KindCt2RRef AS KindCt2RRef, T2._ValueCt3_TYPE AS ValueCt3_TYPE, T2._ValueCt3_RTRef AS ValueCt3_RTRef, T2._ValueCt3_RRRef AS ValueCt3_RRRef, T2._KindCt3RRef AS KindCt3RRef FROM #tt7 T2 WITH(NOLOCK)) T1 -- Очищаем временные таблицы TRUNCATE TABLE #tt6 TRUNCATE TABLE #tt7 TRUNCATE TABLE #tt8 TRUNCATE TABLE #tt3 TRUNCATE TABLE #tt4
Таким образом, виртуальная таблица «Движения с субконто» не такая простая как кажется. Платформа 1С для нее формирует серию запросов для получения данных из основной таблицы и значений субконто порциями с отборами по регистраторам. Размер каждой порции — 1000 документов. Это сделано для стабильной работы этой виртуальной таблицы при обработке большого объема данных.
На практике не часто приходится использовать эту таблицу для получения данных. Но если все же нужно обратиться напрямую к движению регистра с обработкой данных порциями, то это не плохой вариант. Главное правильно указывать отборы, чтобы выборка работала с учетом индексов. Но рекомендую все же поискать альтернативы, если нужно использовать эти таблицы для отчетов. Может пора задуматься об использовании регистра накопления в таких случаях?
Запрос может быть очень тяжелым, поэтому используйте эту таблицу с умом.
Свой запрос движений с субконто
Полностью сэмулировать запрос движений с субконто средствами 1С мы не сможем, но простой аналог все же сделать можно.
Свой запрос движений с субконто
Это не идеальный вариант, но один из самых простых.
ВЫБРАТЬ ХозрасчетныйОсновная.Период КАК Период, ХозрасчетныйОсновная.Регистратор КАК Регистратор, ХозрасчетныйОсновная.НомерСтроки КАК НомерСтроки, ХозрасчетныйОсновная.Активность КАК Активность, ХозрасчетныйОсновная.СчетДт КАК СчетДт, ХозрасчетныйВидыСубконтоДт1.ВидСубконто КАК ВидСубконтоДт1, ХозрасчетныйВидыСубконтоДт2.ВидСубконто КАК ВидСубконтоДт2, ХозрасчетныйВидыСубконтоДт3.ВидСубконто КАК ВидСубконтоДт3, ХозрасчетныйОсновная.СчетКт КАК СчетКт, ХозрасчетныйВидыСубконтоКт1.ВидСубконто КАК ВидСубконтоКт1, ХозрасчетныйВидыСубконтоКт2.ВидСубконто КАК ВидСубконтоКт2, ХозрасчетныйВидыСубконтоКт3.ВидСубконто КАК ВидСубконтоКт3, ХозрасчетныйОсновная.Организация КАК Организация, ХозрасчетныйОсновная.ВалютаДт КАК ВалютаДт, ХозрасчетныйОсновная.ВалютаКт КАК ВалютаКт, ХозрасчетныйОсновная.ПодразделениеДт КАК ПодразделениеДт, ХозрасчетныйОсновная.ПодразделениеКт КАК ПодразделениеКт, ХозрасчетныйОсновная.Сумма КАК Сумма, ХозрасчетныйОсновная.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт, ХозрасчетныйОсновная.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт, ХозрасчетныйОсновная.КоличествоДт КАК КоличествоДт, ХозрасчетныйОсновная.КоличествоКт КАК КоличествоКт, ХозрасчетныйОсновная.СуммаНУДт КАК СуммаНУДт, ХозрасчетныйОсновная.СуммаНУКт КАК СуммаНУКт, ХозрасчетныйОсновная.СуммаПРДт КАК СуммаПРДт, ХозрасчетныйОсновная.СуммаПРКт КАК СуммаПРКт, ХозрасчетныйОсновная.СуммаВРДт КАК СуммаВРДт, ХозрасчетныйОсновная.СуммаВРКт КАК СуммаВРКт, ХозрасчетныйОсновная.Содержание КАК Содержание, ХозрасчетныйОсновная.НеКорректироватьСтоимостьАвтоматически КАК НеКорректироватьСтоимостьАвтоматически, ХозрасчетныйОсновная.МоментВремени КАК МоментВремени ПОМЕСТИТЬ ВТ_ОсновнаяТаблица ИЗ РегистрБухгалтерии.Хозрасчетный КАК ХозрасчетныйОсновная ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт1 ПО ХозрасчетныйОсновная.СчетДт = ХозрасчетныйВидыСубконтоДт1.Ссылка И (ХозрасчетныйВидыСубконтоДт1.НомерСтроки = 1) ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт1 ПО ХозрасчетныйОсновная.СчетКт = ХозрасчетныйВидыСубконтоКт1.Ссылка И (ХозрасчетныйВидыСубконтоКт1.НомерСтроки = 1) ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт2 ПО ХозрасчетныйОсновная.СчетДт = ХозрасчетныйВидыСубконтоДт2.Ссылка И (ХозрасчетныйВидыСубконтоДт2.НомерСтроки = 2) ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт2 ПО ХозрасчетныйОсновная.СчетКт = ХозрасчетныйВидыСубконтоКт2.Ссылка И (ХозрасчетныйВидыСубконтоКт2.НомерСтроки = 2) ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт3 ПО ХозрасчетныйОсновная.СчетДт = ХозрасчетныйВидыСубконтоДт3.Ссылка И (ХозрасчетныйВидыСубконтоДт3.НомерСтроки = 3) ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт3 ПО ХозрасчетныйОсновная.СчетКт = ХозрасчетныйВидыСубконтоКт3.Ссылка И (ХозрасчетныйВидыСубконтоКт3.НомерСтроки = 3) ГДЕ ХозрасчетныйОсновная.Организация = &Организация ИНДЕКСИРОВАТЬ ПО Регистратор, НомерСтроки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ОсновнаяТаблица.Период КАК Период, ВТ_ОсновнаяТаблица.Регистратор КАК Регистратор, ВТ_ОсновнаяТаблица.НомерСтроки КАК НомерСтроки, ВТ_ОсновнаяТаблица.Активность КАК Активность, ВТ_ОсновнаяТаблица.СчетДт КАК СчетДт, ХозрасчетныйСубконтоДт1.Значение КАК СубконтоДт1, ВТ_ОсновнаяТаблица.ВидСубконтоДт1 КАК ВидСубконтоДт1, ХозрасчетныйСубконтоДт2.Значение КАК СубконтоДт2, ВТ_ОсновнаяТаблица.ВидСубконтоДт2 КАК ВидСубконтоДт2, ХозрасчетныйСубконтоДт3.Значение КАК СубконтоДт3, ВТ_ОсновнаяТаблица.ВидСубконтоДт3 КАК ВидСубконтоДт3, ВТ_ОсновнаяТаблица.СчетКт КАК СчетКт, ХозрасчетныйСубконтоКт1.Значение КАК СубконтоКт1, ВТ_ОсновнаяТаблица.ВидСубконтоКт1 КАК ВидСубконтоКт1, ХозрасчетныйСубконтоКт2.Значение КАК СубконтоКт2, ВТ_ОсновнаяТаблица.ВидСубконтоКт2 КАК ВидСубконтоКт2, ХозрасчетныйСубконтоКт3.Значение КАК СубконтоКт3, ВТ_ОсновнаяТаблица.ВидСубконтоКт3 КАК ВидСубконтоКт3, ВТ_ОсновнаяТаблица.Организация КАК Организация, ВТ_ОсновнаяТаблица.ВалютаДт КАК ВалютаДт, ВТ_ОсновнаяТаблица.ВалютаКт КАК ВалютаКт, ВТ_ОсновнаяТаблица.ПодразделениеДт КАК ПодразделениеДт, ВТ_ОсновнаяТаблица.ПодразделениеКт КАК ПодразделениеКт, ВТ_ОсновнаяТаблица.Сумма КАК Сумма, ВТ_ОсновнаяТаблица.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт, ВТ_ОсновнаяТаблица.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт, ВТ_ОсновнаяТаблица.КоличествоДт КАК КоличествоДт, ВТ_ОсновнаяТаблица.КоличествоКт КАК КоличествоКт, ВТ_ОсновнаяТаблица.СуммаНУДт КАК СуммаНУДт, ВТ_ОсновнаяТаблица.СуммаНУКт КАК СуммаНУКт, ВТ_ОсновнаяТаблица.СуммаПРДт КАК СуммаПРДт, ВТ_ОсновнаяТаблица.СуммаПРКт КАК СуммаПРКт, ВТ_ОсновнаяТаблица.СуммаВРДт КАК СуммаВРДт, ВТ_ОсновнаяТаблица.СуммаВРКт КАК СуммаВРКт, ВТ_ОсновнаяТаблица.Содержание КАК Содержание, ВТ_ОсновнаяТаблица.НеКорректироватьСтоимостьАвтоматически КАК НеКорректироватьСтоимостьАвтоматически, ВТ_ОсновнаяТаблица.МоментВремени КАК МоментВремени ИЗ ВТ_ОсновнаяТаблица КАК ВТ_ОсновнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоДт1 ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоДт1.Регистратор И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоДт1.НомерСтроки И ВТ_ОсновнаяТаблица.ВидСубконтоДт1 = ХозрасчетныйСубконтоДт1.Вид И (ХозрасчетныйСубконтоДт1.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет)) ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоДт2 ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоДт2.Регистратор И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоДт2.НомерСтроки И ВТ_ОсновнаяТаблица.ВидСубконтоДт2 = ХозрасчетныйСубконтоДт2.Вид И (ХозрасчетныйСубконтоДт2.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет)) ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоДт3 ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоДт3.Регистратор И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоДт3.НомерСтроки И ВТ_ОсновнаяТаблица.ВидСубконтоДт3 = ХозрасчетныйСубконтоДт3.Вид И (ХозрасчетныйСубконтоДт3.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет)) ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоКт1 ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоКт1.Регистратор И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоКт1.НомерСтроки И ВТ_ОсновнаяТаблица.ВидСубконтоКт1 = ХозрасчетныйСубконтоКт1.Вид И (ХозрасчетныйСубконтоКт1.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит)) ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоКт2 ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоКт2.Регистратор И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоКт2.НомерСтроки И ВТ_ОсновнаяТаблица.ВидСубконтоКт2 = ХозрасчетныйСубконтоКт2.Вид И (ХозрасчетныйСубконтоКт2.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит)) ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоКт3 ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоКт3.Регистратор И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоКт3.НомерСтроки И ВТ_ОсновнаяТаблица.ВидСубконтоКт3 = ХозрасчетныйСубконтоКт3.Вид И (ХозрасчетныйСубконтоКт3.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит))
По необходимости запрос можно изменять в зависимости от задачи.
Не часто такое может понадобиться, но для экстремальных оптимизаций может пригодиться.
Вместо заключения
Мы рассмотрели основные настройки, влияющие на регистр бухгалтерии и формируемые в нем записи. Проанализировали работу платформы 1С с таблицами регистра и с получением данных из него.
- Транслятор запросов 1С
- Просмотр и анализ структуры базы данных (отчет на СКД)
- Помощник работы с идентификаторами
Это не простой для понимания материал. Чтобы понять его до конца — нужно экспериментировать, самому строить запросы и анализировать что находится на стороне базы данных. Поэтому пробуйте, делайте и не останавливайтесь :).
Это еще не все. Мы лишь приоткрыли небольшую занавесу (или ящик Пандоры?). В будущем рассмотрим как платформа 1С работает с таблицами итогов, почему могут разъезжаться итоги, коснемся индексов и производительности и другое.
А сейчас — всем доброго дня и вдохновения!
Авторские разработки
- Транслятор запросов 1С в SQL — инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.
- Помощник работы с идентификаторами объектов — инструмент для расширенного анализа идентификаторов объектов.
- Анализ производительности APDEX — отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.
- Путеводитель по истории релизов — отчет по истории выпуска релизов продуктов фирмы «1С» и анализа информации по обновлениям.
- Просмотр и анализ структуры базы данных (отчет на СКД) — отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.
- Просмотр и анализ журнала регистрации (отчет на СКД) — отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.
- Обозреватель криптографии — отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.
- Пакетная выгрузка / загрузка внешних отчетов и обработок — пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.
- Мастер полнотекстового поиска — набор инструментов для работы с полнотекстовым индексом платформы 1С. Стандартные и расширенные возможности.
- Командный интерпретатор для 1С — инструмент для выполнения команд CMD / PowerShell из 1С.
Другие ссылки
- Регистры бухгалтерии. Общая информация
- Регистры накопления. Структура хранения в базе данных
- Регистры накопления. Виртуальные таблицы. Часть №1: Обороты
- Регистры накопления. Виртуальные таблицы. Часть №2: «Остатки» и «Остатки и обороты»
- Регистры накопления. Агрегаты в оборотных регистрах
- Регистры сведений. За кулисами


















