[ Разбор вопросов ] Про таблицу оборотов _AccumRgTn регистра накопления и программную работу с узлами дерева динамического списка

Профессиональное развитие специалиста 1С не ограничено только изучением “нового”.  Не забываем про не изученное “старое” :) В сегодняшней подборке вопросов вспомним про физические таблицы оборотов у регистра накопления и разберем, как программно свернуть и развернуть узлы дерева динамического списка.

 

Вопрос №1: В каком случае создается физическая таблица оборотов _AccumRgTnXXX для регистра накопления?

Вы пишете, что регистр накопления в базе данных может иметь таблицу _AccumRgTn, если регистр поддерживает обороты. Но регистр по умолчанию поддерживает обороты. Это ошибка у Вас формулировке или я не так понял? _AccumRgTn – таблица оборотов регистра накопления. Эта таблица создается, если регистр поддерживает обороты.

Ответ

Рассмотрим для примера остаточный регистр накопления ТоварыНаСкладах. Так как это остаточный регистр, то в базе этот регистр будет храниться в виде двух таблиц: основная таблица (с именем, например, _AccumRg102) и итоговая таблица (с именем, например, _AccumRgT106). Как видите, для этого регистра в базе нет таблицы с именем _AccumRgTnXXX, потому что это остаточный, а не оборотный регистр. Тем не менее, в запросе и для остаточного регистра накопления можно использовать виртуальную таблицу Обороты, просто она будет по-другому получать данные из базы, ведь “готовая” итоговая таблица оборотов в таком случае отсутствует.

Если же для примера рассмотреть оборотный регистр накопления Продажи, то в базе он будет храниться в виде двух таблиц: основная таблица (с именем, например, _AccumRg95) и итоговая таблица оборотов (с именем, например, _AccumRgTn125).

Уточняющий вопрос

Понял! Подскажите, по скольку остаточный регистр получает остатки и обороты из итоговой таблицы (_AccumRgT), значит ли это, что получение оборотов будет занимать больше времени, нежели из таблицы оборотов (AccumRgTn) оборотного регистра?

Ответ

Здесь правильнее рассматривать каждый запрос по отдельности, смотреть, в какой запрос к СУБД платформа его трансформирует. А затем сравнивать получившиеся результаты. Да, у остаточного регистра в базе нет таблицы, хранящей обороты, но это не обязательно говорит, что запрос будет всегда выполняться медленно. Для проверки можно использовать консоль запросов с сайта ИТС, в ней есть возможность увидеть план запроса, то есть увидеть, какой запрос передается СУБД, какие таблицы в нем используются.

P.S.

Понимать, как работают запросы и уметь их строить - обязательный навык для всех, кто дорабатывает и внедряет 1С.

После курса Вы сможете:

  • Строить сложные запросы с несколькими источниками данных
  • Уверенно задействовать вложенные запросы и временные таблицы
  • Использовать встроенный язык для обработки результатов запроса
  • Учитывать особенности соединений и объединений нескольких таблиц.
  • Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.
Программа, стоимость, условия и регистрация в группу: «Запросы в 1С 8.3, Базовый курс (с нуля до уровня Специалист по платформе)» Для всех, кто внедряет и дорабатывает 1С.

 

Вопрос №2: Как программно свернуть или развернуть узлы дерева для динамического списка?

Как мне программно (не нажимая на пиктограмму корня) развернуть/свернуть дерево динамического списка, которое группируется при помощи компоновщика настроек?

Ответ

В БСП в общем модуле СтандартныеПодсистемыКлиент есть готовая процедура РазвернутьУзлыДерева, которая разворачивает узлы дерева на форме. В процедуре используется метод Развернуть таблицы формы. По аналогии можно использовать метод Свернуть для сворачивания дерева.

Уточняющий вопрос

Благодарю за информацию, но не работает. Пишу так:

СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, “Список”,*, Истина);

Ошибка:

{ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(861)}: Метод объекта не обнаружен (ПолучитьЭлементы)
Узлы = Форма[ИмяЭлементаФормы].ПолучитьЭлементы();

Ответ

Предполагаю, что дело в типах данных. В комментарии перед процедурой есть комментарий:

ИмяЭлементаФормы – Строка – имя элемента с таблицей формы (деревом значений) и связанного с ней реквизита формы (должны совпадать).

В вашем случае получается, что Список – это не дерево значений. Поэтому данный метод и не работает. Значит, идентификатором строки динамического списка будет ссылка справочника, который является основной таблицей списка. Можно попробовать выбрать программно все значения группировок и передать их в метод Развернуть:

МассивГрупп = ...;  //выбираем все группы из справочника
Для Каждого ТекущаяГруппа Из МассивГрупп Цикл
 Элементы.Список.Развернуть(ТекущаяГруппа, Истина);
КонецЦикла;

То есть программно выполняем действия по последовательному разворачиванию всех групп из справочника.

Это пример разобранного вопроса из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД.

Описание курса и примеры видео

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.