Профессиональное развитие специалиста 1С не ограничено только изучением “нового”. Не забываем про не изученное “старое” :) В сегодняшней подборке вопросов вспомним про физические таблицы оборотов у регистра накопления и разберем, как программно свернуть и развернуть узлы дерева динамического списка.
Вопрос №1: В каком случае создается физическая таблица оборотов _AccumRgTnXXX для регистра накопления?
Ответ
Рассмотрим для примера остаточный регистр накопления ТоварыНаСкладах. Так как это остаточный регистр, то в базе этот регистр будет храниться в виде двух таблиц: основная таблица (с именем, например, _AccumRg102) и итоговая таблица (с именем, например, _AccumRgT106). Как видите, для этого регистра в базе нет таблицы с именем _AccumRgTnXXX, потому что это остаточный, а не оборотный регистр. Тем не менее, в запросе и для остаточного регистра накопления можно использовать виртуальную таблицу Обороты, просто она будет по-другому получать данные из базы, ведь “готовая” итоговая таблица оборотов в таком случае отсутствует.
Если же для примера рассмотреть оборотный регистр накопления Продажи, то в базе он будет храниться в виде двух таблиц: основная таблица (с именем, например, _AccumRg95) и итоговая таблица оборотов (с именем, например, _AccumRgTn125).
Уточняющий вопрос
Ответ
Здесь правильнее рассматривать каждый запрос по отдельности, смотреть, в какой запрос к СУБД платформа его трансформирует. А затем сравнивать получившиеся результаты. Да, у остаточного регистра в базе нет таблицы, хранящей обороты, но это не обязательно говорит, что запрос будет всегда выполняться медленно. Для проверки можно использовать консоль запросов с сайта ИТС, в ней есть возможность увидеть план запроса, то есть увидеть, какой запрос передается СУБД, какие таблицы в нем используются.
P.S.
Понимать, как работают запросы и уметь их строить - обязательный навык для всех, кто дорабатывает и внедряет 1С.
После курса Вы сможете:
- Строить сложные запросы с несколькими источниками данных
- Уверенно задействовать вложенные запросы и временные таблицы
- Использовать встроенный язык для обработки результатов запроса
- Учитывать особенности соединений и объединений нескольких таблиц.
- Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.
Вопрос №2: Как программно свернуть или развернуть узлы дерева для динамического списка?
Ответ
В БСП в общем модуле СтандартныеПодсистемыКлиент есть готовая процедура РазвернутьУзлыДерева, которая разворачивает узлы дерева на форме. В процедуре используется метод Развернуть таблицы формы. По аналогии можно использовать метод Свернуть для сворачивания дерева.
Уточняющий вопрос
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтаФорма, “Список”, “*” , Истина);
Ошибка:
{ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(861)}: Метод объекта не обнаружен (ПолучитьЭлементы) Узлы = Форма[ИмяЭлементаФормы].ПолучитьЭлементы();
Ответ
Предполагаю, что дело в типах данных. В комментарии перед процедурой есть комментарий:
ИмяЭлементаФормы – Строка – имя элемента с таблицей формы (деревом значений) и связанного с ней реквизита формы (должны совпадать).
В вашем случае получается, что Список – это не дерево значений. Поэтому данный метод и не работает. Значит, идентификатором строки динамического списка будет ссылка справочника, который является основной таблицей списка. Можно попробовать выбрать программно все значения группировок и передать их в метод Развернуть:
МассивГрупп = ...; //выбираем все группы из справочника Для Каждого ТекущаяГруппа Из МассивГрупп Цикл Элементы.Список.Развернуть(ТекущаяГруппа, Истина); КонецЦикла;
То есть программно выполняем действия по последовательному разворачиванию всех групп из справочника.
Профессиональная разработка отчетов в 1С 8.3 на СКД.