Консоль запросов для УФ с возможностью передачи готовой ТЗ в качестве параметра

11.07.16

Разработка - Инструментарий разработчика

Небольшая статья о том, как передать готовую таблицу значений в качестве параметра запроса в консоли запросов.

Приветствую всех! 

Долго думал, стоит ли описывать данную тему, и наконец-то решился.  Возможно, это пригодится кому-то в дальнейшем.

Консоль запросов быстро вошла в инструментарий практически любого программиста 1С. Многие к основному ее функционалу добавили множество  различных  и полезных плюшек для упрощения отладки запросов и оптимизации обработки результатов.

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

Наверно, каждый когда- либо писал такого рода запрос 

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ*
| ПОМЕСТИТЬ ВнешняяТЗ
| ИЗ &ТЗ КАК ТЗ";
....
Запрос.УстановитьПараметр ("ТЗ",ТЗ);

Вопрос - а как же отладить запросы с помощью консоли запросов, которые строятся на основании данных этого запроса ?

В типовой консоли запросов (на обычных формах) , без дополнительных манипуляций с обработкой в конфигураторе, тип ТаблицаЗначений не был доступен по умолчанию, но с появлением консоли запросов на управляемых формах стало возможным передавать ТаблицуЗначений в качестве параметра, предварительно ее описав и заполнив необходимыми данными. 

Теперь стало легче отлаживать запросы, и это плюс, но, как говорится, за удовольствие надо платить,  и плата в данном случае - ручное заполнение таблицы нужными данными. А этих данных может быть очень много.

А мы - программисты, народ ленивый и руками работать не любим. Поговорка  "Лень - двигатель прогресса" это как раз про нас, поэтому необходимо найти способ облегчить себе труд. И, как оказалось, решение лежит на поверхности - передать готовую и заполненную таблицу через ВременноеХранилище. И делается это все в несколько строчек кода. 

Сразу уточню, что все дальнешие действия будут происходить с Консоль запросов (из папки RequestConsoleManaged) с диска ИТС.

Открываем данную консоль в конфигураторе и добавляем новый реквизит "АдресВременногоХранилища" (в принципе, данный реквизит можно и не добавлять, а добавить реквизит формы) .

Далее открываем форму "ТаблицаЗначений" на форму выносим добавленный реквизит и добавляем команду с вызовом сервера. Вот сам код команды:

&НаКлиенте 
Процедура ПолучитьТЗИзВременногоХранилища(Команда) 
   ПолучитьТЗИзВременногоХранилищаНаСервере(); 
КонецПроцедуры 

&НаСервере 
Процедура ПолучитьТЗИзВременногоХранилищаНаСервере() 

  Если ЭтоАдресВременногоХранилища(Объект.АдресВременногоХранилища)Тогда 

       ТЗ = ПолучитьИзВременногоХранилища(Объект.АдресВременногоХранилища); 

          Если ТипЗнч(ТЗ) <> Тип("ТаблицаЗначений") тогда 
               Возврат; 
          КонецЕсли; 

       ТЗНастройки = НастройкиТаблицыЗначений.Выгрузить(); 

       Для каждого Колонка ИЗ ТЗ.Колонки Цикл 
            НовСтрока = ТЗНастройки.Добавить(); 
            НовСтрока.НаименованиеКолонки = Колонка.Имя; 
            НовСтрока.ТипКолонки = Колонка.ТипЗначения; 

            СообщениеСистемы = ""; 
            ИнициализацияКолонкиВТЗСервер("",Колонка.Имя,Колонка.ТипЗначения,СообщениеСистемы); 
      КонецЦикла; 
  
      НастройкиТаблицыЗначений.Загрузить(ТЗНастройки); 
      ТаблицаЗначенийПараметр.Загрузить(ТЗ);
 
  КонецЕсли; 

КонецПроцедуры 

Как видите, код простой и в комментариях не нуждается.  Процедура "ИнициализироватьКолонкиВТЗСервер" уже определена в модуле формы , поэтому описывать ее здесь не имеет смысла. 

Вот в принципе и все. Осталось поместить нужную ТаблицуЗначений во ВременнойХранилище  и получив адрес, загрузить ее в качестве параметра в Консоль Запросов. 

Так же стоит отметить недостатки данного подхода. 

1) Медленная работа Консоли Запросов  при работе с ТЗ в качестве параметра

2) Неоходимость дописания обработок для помещения нужных таблиц во временное хранилище. 

 

Вот пример, как это работает. 

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

В данной обработке я добавил страницу "Отладка" , где указываю нужную таблицу и загружаю ее во временное хранилище 

Далее в консоли добавляю параметр с типом ТаблицаЗначений , перехожу в редактирование таблицы и в поле адрес временного хранилища вставлю полученный ранее адрес и нажимаю кнопку "получить ТЗ из временного хранилища" 

В результате у нас сформировалась описание таблицы и загрузилась сама таблица. Осталось только выполнить сам запрос

 

Консоль запросов Загрузить ТЗ в консоль запросов

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119904    656    389    

701

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7003    20    6    

37

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    3242    10    1    

31

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 руб.

14.01.2013    177339    1070    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99202    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17909    6    8    

38

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27945    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23486    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7132 11.07.16 23:53 Сейчас в теме
Интересно, в обычных формах такое возможно?
2. vadim1011985 99 12.07.16 00:14 Сейчас в теме
Не знаю , но думаю что в принципе возможно , надо только иметь возможность указать тип параметра Таблица значений. В стандартно консоли он не доступен , но думаю что никто не мешает его добавить . Вроде я даже видел тут консоль на обычных формах с расширенным типом значений параметров. Можно посмотреть как реализовано на УФ и попробовать перенести данный механизм на обычные формы
3. tormozit 7132 12.07.16 07:26 Сейчас в теме
Дай ссылку на такую консоль. Очень интересно.
4. vadim1011985 99 12.07.16 09:13 Сейчас в теме
5. tormozit 7132 12.07.16 09:27 Сейчас в теме
Почему же ты тогда пишешь
В консоли запросов (на обычных формах) нельзя было пердавать параметр с типом ТаблицаЗначений
? Получается, что можно все таки.
6. vadim1011985 99 12.07.16 10:30 Сейчас в теме
(5) tormozit, Согласен , добавить в обычную консоль тип Таблица Значений можно. Просто в написании я подразумевал стандартную консоль запросов где тип Таблица Значений не доступен по умолчанию . Сегодня поправлю этот момент в статье
7. AlexO 135 19.02.21 01:37 Сейчас в теме
(5) Надо тогда и всю обвязку писать для "Тип ТаблицаЗначений" - формы для ТЗ, вывод, поля.
8. crog 28.11.23 10:33 Сейчас в теме
Не понятно, как во время сеанса, например, обработка табличной части документа, работать с консолью запросов?

Т.е., например, в форме объекта, после формирования ТЗ, ставится код:
АдресВХ = ПоместитьВоВременноеХранилище(Запрос.Выполнить().Выгрузить());

после получения адреса временного хранилища ставим точку останова. Копируем код и...? В режиме приложения не будет возможности работать с консолью запросов.
Оставьте свое сообщение