как обратиться к плану счетов программно 1с
Регистры бухгалтерии. Виртуальная таблица остатков
Еще одна таблица
Также мы коснемся некоторых вопросов производительности таких запросов и сформируем общие рекомендации по их использованию.
Все данные для публикации получены с помощью инструментов:
На практике виртуальная таблица остатков используются очень часто. В той же типовой конфигурации «Бухгалтерия предприятия 3.0» ее использование можно встретить в таких отчетах как:
В общем, эта виртуальная таблица используется очень часто как в отчетах бухгалтерского учета, так и в алгоритмах. Итак, поехали дальше!
Просто получаем остатки
Как и в предыдущих публикациях, здесь мы видим один маленький запрос 1С, но очень большой SQL-запрос к базе данных.
Текст сформированного SQL-запроса очень большой, но принцип работы его очень простой:
В тексте самого запроса оставил комментарии, чтобы проще было разобраться. Подобные запросы работают максимально эффективно как из-за рассчитанных итогов, так и из-за относительно небольшого размета таблицы «ИтогиПоСчетам». Даже если информационная система функционирует несколько лет, в этой таблице редко бывает больше миллиона записей, но не всегда конечно. Ранее мы уже рассматривали вопрос с итогами и пример проблем обслуживания таблиц итогов:
Но давайте усложним текст запроса и рассмотрим что сделает платформа.
Остатки на период
SQL-запрос в результате стал еще больше, т.к. платформа 1С получает данные не только из таблиц итогов «ИтогиПоСчетам», но и из основных таблиц регистра.
Причина, почему в запросе теперь есть получение данных очень простая: итоги рассчитываются по месяцам. Если мы получаем остаток на дату, отличную от начала месяца, то для периода, который не учитывается в рассчитанных итогах, нужно рассчитать данные по основным таблицам регистра.
Тот же принцип работает и для регистра накопления. Подробнее эту тему мы рассматривали в публикации Регистры накопления. Виртуальные таблицы. Часть №2: «Остатки» и «Остатки и обороты».
Вот какие шаги выполняются при получении данных в этом случае:
Этот запрос уже значительно «тяжелее» для выполнения, т.к. платформе 1С приходится «заглянуть» в основные таблицы регистра. Даже с учетом отборов по счету и организации данных для обработки может быть очень много. Отбор может быть просто неселективным и на уровне СУБД будет выполнено сканирование таблицы.
Таким образом, получение остатков может быть очень тяжелой операцией. Если это приходится делать часто и нужна высокая производительность при выполнении запросов, то настало время задуматься о регистрах накопления.
Добавим немного субконто
Пойдем дальше и добавим в наш запрос аналитику субконто и ресурс «Количество». В примере делал отбор по счету с 2 субконто, поэтому и в запросе выведено только два поля.
В этот раз пример усложнился еще сильнее, ведь для хранения аналитики субконто платформа 1С использует отдельную таблицу значений субконто и отдельные таблицы итогов (их мы рассматривали в прошлых публикациях). В этот раз генерируется не один, а серия запросов. Сначала подготавливаем служебные данные.
Сначала выполняется получение служебных данных:
Когда все данные подготовлены просыпается мафия формируем основной запрос.
Регистр бухгалтерии
Регистры бухгалтерии — это прикладные объекты конфигурации. Они используются в механизме бухгалтерского учета и позволяют вести многоуровневый и многомерный аналитический учет, учет по нескольким планам счетов, опциональное ведение количественного, суммового и валютного учета по отдельным разрезам аналитики и т. д.
Структура
По своему виду регистр бухгалтерии напоминает регистр накопления: он может иметь набор измерений, в разрезе которых накапливаются числовые значения ресурсов. Также он может содержать набор реквизитов для хранения дополнительной информации, связанной с записями регистра:
Регистр бухгалтерии связывается с одним из используемых планов счетов, и хранит бухгалтерские итоги в соответствии с его структурой. Информация в регистре бухгалтерии хранится в виде записей, структура которых строится системой динамически, в зависимости от настроек различных элементов учета, выполненной при редактировании плана счетов. Например, запись может содержать поля для ввода корреспондирующих счетов, сумм, субконто, количества, вида валюты и суммы в валюте:
Регистр бухгалтерии может работать в двух режимах: с поддержкой корреспонденции и без. В случае если выбран режим с поддержкой корреспонденции, будет задействован механизм двойной записи и каждая запись регистра будет содержать обязательные поля СчетДт (счет дебета) и СчетКт (счет кредита). Если же регистр не поддерживает корреспонденцию, каждая запись регистра будет содержать только одно поле — Счет:
Связь с регистратором
Поскольку записи регистра бухгалтерии отражают те или иные хозяйственные операции, выполняемые на предприятии, каждая из них связана с документом, — регистратором, номером строки этого документа, и датой — периодом. Состав документов, которые могут создавать записи в регистре бухгалтерии, задается разработчиком в процессе создания прикладного решения:
Конструктор движений
Алгоритмы, по которым формируются записи в регистре, описываются средствами встроенного языка в процедурах соответствующих документов. Система содержит конструктор движений, который помогает разработчику создавать алгоритмы проведения документа. Подробнее…
Уникальность записей
Система обеспечивает контроль уникальности записей, хранящихся в регистре бухгалтерии. Благодаря этому в регистре бухгалтерии не может находиться двух записей, относящихся к одной и той же строке одного и того же документа.
Форма списка
Для того чтобы пользователь мог просматривать данные, содержащиеся в регистре бухгалтерии, система поддерживает форму представления регистра бухгалтерии — форму списка. Она позволяет выполнять сортировку и отбор отображаемой информации по нескольким критериям:
Система может автоматически генерировать эту форму. Наряду с этим разработчик имеет возможность создать собственные формы, которые система будет использовать вместо формы по умолчанию, в том числе и форму набора записей, которая позволяет добавлять, изменять и удалять записи регистра бухгалтерии.
1С 8.3 Регистры бухгалтерии
&НаСервере
Процедура ЧтениеБухгалтерскихПроводокСозначениямиСубконтоНаСервере ()
// За получение бухгалтерских проводок вместе с их аналитикой (субконто)
// отвечает виртуальная таблица ДвиженияССубконто,
// У неё есть параметры:
// 1. Начало периода
// 2. Конец периода
// 3. Условие
// 4. Порядок (влияет только на отбор первых)
// 5. Первые (отбор перых N записей)
// Процедура используется, если не требуется изменять найденные проводки
&НаСервере
Процедура ЧтениеБухгалтерскихПроводокДокументаЗапросомНаСервере ()
&НаСервере
Процедура ПолучениеОборотовМеждуБухгалтерскимиСчетамиНаСервере ()
// За получение оборотов между счётом и корреспондирующим счётом за произвольный период с заданной периодичностью
// в различных разрезах аналитики отвечает виртуальная таблица Обороты, у неё есть следующие параметры:
// 1. Начало периода
// 2. Конец периода
// 3. Периодичность (например, Период, Запись, Год, Месяц. )
// 4. Условие счета (например, Счет = &ВыбСчет)
// 5. Субконто (список видов субконто, влияет на доступность и смысл Субконто1, Субконто2.
// которыми можно оперировать в запросе).
// 6. Условие (например, Субконто1 = &ВыбСклад)
// 7. Условие корсчета (аналогично условию счёта)
// 8. КорСубконто (аналогично субконто)
Обращение к регистру бухгалтерии в расширении
(0) Неверным.
Это в конфигураторе тебе из расширения могут быть недоступны какие-то объекты метаданных.
При работе конфигурации с расширением расширение «увидит» все объекты метаданных основной конфигурации.
Так что не надо поласкать мозг с дублированием всех объектов, которые выступают в качестве типа значения ПВХ ВидыСубконто.
Если проблема только в том, чтобы всё работало в конструкторе запроса (чтобы конструктор видел объекты и таблицы основной конфигурации), то пишите текст запроса (запускайте конструктор запроса) не в расширении, а, например, в модуле внешней обработки или в любом модуле любого объекта основной конфигурации. А потом полученный текст вставите в ваше расширение.
Полный перечень как сформировать? Добавил многое, но возможно что то упустил.
(5) (6) Вы бредите.
Если бы всё было так как вы говорите, то расширения дублировали бы основную конфигурацию. А это не нужно.
В расширение помещаются только те объекты, которые необходимо расширить.
Мне не нужно его видеть. Я не собираюсь расширять справочник Контрагенты.
Достаточно, чтобы расширение увидело этот справочник. А оно увидит его В МОМЕНТ ИСПОЛНЕНИЯ.
Пока ведётся работа с расширением в конфигураторе, вполне нормально, что расширение не видит объекты основной конфигурации (вернее это не совсем нормально, но это вопрос к писателям конфигуратора).
Запрос проще некуда:
Запрос выше был скорее тестовым, на него сильно не заморачивался, важно было понять как с регистром работать.
А так вот запрос, который выдает остатки по позиции в разрезе склада и без счетов:
Правда скорость работы оставляет желать лучшего. Эти условия из где в условия самого регистра запихнуть не получится, а это бы сильно ускорило выполнение.
Вечером проверю (19) отпишусь о результате.
(21) Да. С запросом немного не так. Я бы переделал через Выразить и отбор по номенклатуре счету в параметрах виртуальной таблицы
Регистр бухгалтерии в 1С 8.3
Регистр бухгалтерии
По своей структуре регистр бухгалтерии напоминает регистр накопления, поэтому в данной статье будут рассмотрены только те свойства, которые характерны только для регистра бухгалтерии.
Как правило регистр бухгалтерии всегда связан с планом счетов. План счетов указывается на закладке Основные. Один регистр бухгалтерии может быть связан только с одним планом счетов, в свою очередь план счетов может быть связан с несколькими регистрами бухгалтерии:
В одном регистре бухгалтерии хранятся данные по всем счетам бухгалтерского учета. Если сейчас добавить один ресурс Сумма, указать хотя бы один регистратор и сохранить конфигурацию базы данных, то в базе данных будет создана следующая таблица:
Период | Регистратор | Номер строки | Активность | Счет | Вид движения | Сумма |
---|
Колонка Счет добавляется автоматически, если была указана связь с планом счетов. В колонке Вид движения могут храниться два значения: Дебет или Кредит.
Можно сказать, что регистр бухгалтерии это регистр накопления, у которого есть предопределенное измерение Счет, а в поле Вид движения вместо Приход и Расход хранится Дебет и Кредит.
Если установить на закладке Основные флаг Корреспонденция:
То вместо колонок Счет и Вид движения будут созданы колонки СчетДт и СчетКт:
Период | Регистратор | Номер строки | Активность | СчетДт | СчетКт | Сумма |
---|
Так как в России применяется схема бухгалтерского учета с двумя корреспондирующими счетами, то как правило регистр бухгалтерии создается именно с флагом Корреспонденция. Также это позволяет анализировать обороты между счетами.
Также как и с регистрами накопления, каждое новое измерение, ресурс или реквизит регистра бухгалтерии добавляет в таблицу новую колонку.
Таблица итогов
Для каждого регистра бухгалтерии создается таблица итогов, в которой хранятся и остатки и обороты. Состав колонок таблицы следующий:
Период | Счет | Сумма Остаток | Сумма Оборот | Сумма ОборотДт | Сумма ОборотКт |
---|
Принцип хранения итогов такой же, как и для регистра накопления. В колонке Период будет начало месяца, в колонке Остаток — остаток на начало месяца, в колонках с оборотами — обороты за этот месяц, причем отдельно хранится дебетовый оборот, кредитовый оборот и итоговый оборот.
Для примера добавим документ Приходная накладная со следующими реквизитами:
А также в обработке проведения добавим код для формирования движений по регистру бухгалтерии:
Проведем один документ:
В результате в таблицу движений будет добавлена строка:
Период | Регистратор | Номер строки | Активность | СчетДт | СчетКт | Сумма |
---|---|---|---|---|---|---|
17.07.2021 | Приход №1 | 1 | Истина | 41.01 | 60 | 200 |
В таблице итогов появятся две строки для текущих итогов:
Период | Счет | Сумма Остаток | Сумма Оборот | Сумма ОборотДт | Сумма ОборотКт |
---|---|---|---|---|---|
01.11.3999 | 41.01 | 200 | 0 | 0 | 0 |
01.11.3999 | 60 | -200 | 0 | 0 | 0 |
Для текущих итогов хранятся только остатки. Остаток считается как оборот по дебету минус оборот по кредиту по всем записям регистра, независимо от вида счета (активный, пассивный или активный-пассивный).
Чтобы появились промежуточные итоги нужно установить период рассчитанных итогов в обработке Управление итогами. Установим 31.08.2021, чтобы были рассчитаны итоги для остатков на конец июля:
После этого в таблицу итогов будут добавлены еще четыре строки:
Период | Счет | Сумма Остаток | Сумма Оборот | Сумма ОборотДт | Сумма ОборотКт |
---|---|---|---|---|---|
01.07.2021 | 41.01 | 0 | 200 | 200 | 0 |
01.07.2021 | 60 | 0 | -200 | 0 | 200 |
01.08.2021 | 41.01 | 200 | 0 | 0 | 0 |
01.08.2021 | 60 | -200 | 0 | 0 | 0 |
01.11.3999 | 41.01 | 200 | 0 | 0 | 0 |
01.11.3999 | 60 | -200 | 0 | 0 | 0 |
Колонка Оборот считается как ОборотДт минус ОборотКт за один месяц.
В одной строке хранится оборот за месяц, а также начальный остаток на конец предыдущего месяца. Если сейчас провести еще одну приходную накладную в августе:
То в строку с периодом 01.08.2021, где раньше хранились только остатки будут добавлены обороты за август:
Период | Счет | Остаток | Оборот | ОборотДт | ОборотКт |
---|---|---|---|---|---|
01.07.2021 | 41.01 | 0 | 200 | 200 | 0 |
01.07.2021 | 60 | 0 | -200 | 0 | 200 |
01.08.2021 | 41.01 | 200 | 100 | 100 | 0 |
01.08.2021 | 60 | -200 | -100 | 0 | 100 |
01.11.3999 | 41.01 | 300 | 0 | 0 | 0 |
01.11.3999 | 60 | -300 | 0 | 0 | 0 |
Добавление нового измерения в регистр бухгалтерии автоматически добавляет новую колонку в таблицу итогов. Если добавить новый ресурс, то будет добавлено сразу четыре колонки:
Обороты между счетами
Если у регистра бухгалтерии был установлен флаг Корреспондеция, то для него будет создана еще одна таблица итогов — Обороты между счетами. Состав колонок следующий:
Период | СчетДт | СчетКт | Сумма |
---|
В поле Период хранится начало месяца, в полях СчетДт и СчетКт ссылки на план счетов, в поле Сумма — сумма проводки. Для примера выше таблица будет заполнена следующим образом:
Период | СчетДт | СчетКт | Сумма |
---|---|---|---|
01.07.2021 | 41.01 | 60 | 200 |
01.08.2021 | 41.01 | 60 | 100 |
У регистров бухгалтерии без флага Корреспондеция такой таблицы нет.
Добавление нового измерения или ресурса в регистр бухгалтерии автоматически добавляет новую колонку в таблицу оборотов между счетами.
Признак Балансовый
В свойствах ресурса есть признак Балансовый:
По умолчанию данный флаг установлен и для ресурса добавляется одна колонка в таблицу, которая одновременно изменяет сумму и по дебету и по кредиту.
Для регистра бухгалтерии без поддержки корреспонденции признак Балансовый включает контроль двойной записи, то есть общая сумма по данному ресурсу по дебету и по кредиту в рамках одного регистратора должна совпадать. Контроль выполняется при записи в регистр, в случае несовпадения будет выброшено исключение «Запись не верна! Нарушен баланс»:
Если снять флаг Балансовый, то контроль двойной записи не будет выполняться:
Для регистра с поддержкой корреспонденции при снятом флаге Балансовый для одного ресурса в таблице движений будет создано два поля: для дебета и для кредита. Например, добавим в регистр ресурс Количество и снимем флаг Балансовый:
В таблицу движений будет добавлено сразу два поля: КоличествоДт и КоличествоКт.
Период | Регистратор | Номер строки | Активность | СчетДт | СчетКт | Сумма | КоличествоДт | КоличествоКт |
---|
Теперь можно записывать разное значение количества для счета дебета и счета кредита: