Как посмотреть результат запроса 1с в отладчике
Сразу оговорюсь, эта статья не про отладку больших пакетных запросов. На эту тему есть много хороших статей, например эта или эта.
Эта статья именно про удобный просмотр содержимого большого пакетного запроса в режиме отладки. Когда нужно видеть, что получилось в одной ВТ, что в другой, в третьей, потом опять вернуться в первую, ну в общем, вы понимаете, о чем я. Работать с запросами, содержащими большое количество временных таблиц, приходится очень часто. Например в механизмах расчета зарплаты в ЗУП, в подборе видов запасов или расчете себестоимости в ЕРП или УТ и во многих других.
Статья очень короткая, и, наверно, не заслуживает того, чтобы быть размещенной на INFOSTART . Но мне просто очень понравилась совсем незначительная доработка, которая позволила экономить много времени. По этому, спешу поделиться.
И так, ближе к делу.
Не для кого не секрет, что начиная с платформы 1С 8.3.8 появился очень удобный механизм для просмотра результата выполнения пакетного запроса.
Во-первых , у объекта встроенного языка «Запрос» появился новый метод «ВыполнитьПакетСПромежуточнымиДанными», который позволяет получить результат с промежуточными результатами временных таблиц:
Напомню, существующий ранее метод «ВыполнитьПакет» возвращает в результате выполнения только данные о количестве строк временных таблиц.
Во-вторых , у объекта встроенного языка «МенеджерВременныхТаблиц» появилось новое свойство «Таблицы», которое содержит коллекцию временных таблиц хранящуюся в менеджере:
Для каждой временной таблицы можно выполнить метод «ПолучитьДанные», который содержит результат запроса этой таблицы. Затем можно выгрузить данные в таблицу значений. Полный синтаксис ниже:
В результате, можно получить данные каждой таблицы менеджера ВТ в виде таблицы значений:
Пользоваться объектом «МенеджерВременныхТаблиц» более удобно, так как можно посмотреть все таблицы, сформированные для менеджера. Таблицы могут формироваться отдельно, в разных процедурах. Также можно увидеть имена временных таблиц в свойстве таблицы менеджера «ПолноеИмя». Это очень помогает при большом их количестве.
Все это, без условно, очень удобно. Раньше для этих же целей приходилось использовать специальные процедуры общих модулей «ПоказатьВременнуюТаблицу» для просмотра содержимого пакетного запроса или изворачиваться, как описано здесь. Теперь всего этого делать не нужно.
Все бы хорошо, но есть один нюанс. Если временных таблиц много, а часто их бывает действительно много, очень не удобно постоянно возвращаться в отладчике к списку таблиц менеджера ВТ, чтобы посмотреть номер интересующей таблицы:
А потом подставлять этот номер в выражение:
Хотелось бы быстро перемещаться между таблицами менеджера и просматривать их содержимое.
Такая возможность есть. Для этого нужно разместить экспортную функцию с очень простым кодом в любом серверном общем модуле. Если конфигурация на замке, можно добавить расширение.
Код функции следующий:
Данная функция создает структуру, в которую добавляет все временный таблицы менеджера ВТ. Ключ структуры – имя таблицы, значение – данные этой таблицы, выгруженные в таблицу значений.
Теперь в режиме отладки, в форме расчета выражения можно вставить следующую строку:
Если менеджер ВТ называется по другому, соответственно, нужно изменить имя переменной.
В результате мы получаем структуру с данными, которую можно удобно и быстро просматривать:
Согласитесь, это значительно удобнее, чем запоминать номера таблиц и получать отдельно данные для каждой таблицы.
Расширение с общим модулем и приведенной в статье экспортной функцией можно скачать ниже.
Расширение можно использовать для любой конфигурации 1С, работающей в режиме совместимости 8.3.12.
Другие мои статьи из серии «практика программирования»:
Это очередная статья из цикла «Первые шаги в разработке на 1С». Она продолжает тему предыдущей статьи, посвященной особенностям работы в конфигураторе.
В этом материале мы рассмотрим специальный инструмент, облегчающий разработку и отладку программного кода на платформе «1С:Предприятие», который получил название Отладчик. Изучив статью, вы узнаете:
- Для чего нужен отладчик и как им пользоваться?
- Что такое точки останова, как и зачем их ставить?
- Как пошагово выполнять программный код и зачем это нужно?
- Где смотреть значения своих переменных, а также вычислять значения выражений?
- Для чего нужен стек вызова и как его посмотреть?
- Как остановить выполнение программного кода по ошибке?
Применимость
В статье рассматривается платформа 1C версии 8.3.4.365. Текущая актуальная версия платформы содержит более богатые механизмы отладки, однако это не делает представленную информацию устаревшей, т.к. все описанные в статье механизмы и приемы отладки остались прежними.
Использование отладчика в системе «1С:Предприятие 8»
Отладчик – это специальный инструмент Конфигуратора, который позволяет анализировать работу программного кода. В приведенной статье рассматриваются некоторые возможности отладчика, которые чаще всего используются разработчиками.
Для анализа программного кода с помощью отладчика используется специальный инструмент, который называется точка останова.
Точка останова – место остановки работы системы в программном коде, отмеченное специальным маркером (Рис. 1).
Рис. 1. Точка останова
При срабатывании точки останова становится возможным пошаговое выполнение программного кода и анализ значений переменных.
Установка точек останова
Установка точки останова на определенной строке программного кода осуществляется двойным щелчком левой кнопки мыши в левой области программного модуля, которая выделена серым цветом.
Также возможна установка точки останова командой Точка останова на панели инструментов конфигуратора или кнопкой F9. Снятие существующей точки останова производится аналогичным образом.
Для установки точки останова на конец процедуры или функции необходимо устанавливать точку останова на ключевом слове КонецПроцедуры или КонецФункции.
Точку останова можно временно отключить, не удаляя ее из программного кода. Для выключения точки останова выполнить команду Отключить точку останова на панели инструментов или нажать сочетание клавиш Ctrl+Shift+F9.
Для просмотра всех точек останова нужно выполнить команду главного меню Отладка – Список точек останова или нажать сочетание клавиш Alt+F9. В открывшей форме Точки останова можно временно отключать или удалять точки останова (Рис. 2).
Рис. 2. Список точек останова
Для удаления всех точек останова нужно выполнить команду главного меню конфигуратора Отладка – Убрать все точки останова.
Точка останова с условием
Точка останова с условием необходима для остановки выполнения программного кода при срабатывании определенного условия.
Для установки точки останова с условием нужно выполнить команду главного меню конфигуратора Отладка – Точка остановка с условием. Откроется форма Условие останова. В поле ввода нужно ввести необходимое условие (например, значение какой-либо переменной в программном коде) и нажать кнопку ОК (Рис. 3).
После запуска системы в режиме отладки точка останова сработает, когда будет выполнено условие останова. Убедиться в этом можно с помощью формы Табло (Рис. 3). Работа с формой Табло будет рассмотрена ниже.
Рис. 3. Установка точки останова с условием и результат ее обработки
Для того чтобы начать отлаживать программный код необходимо установить точки останова и запустить приложение в режиме отладки. Для запуска отладки нужно выполнить команду главного меню конфигуратора Отладка – Начать отладку (F5).
После запуска приложения в отладочном режиме необходимо обеспечить срабатывание точки останова. Здесь возможны разные сценарии. Например, точка останова установлена в модуле формы документа в стандартном обработчике события ПриОткрытии (). В этом случае точка останова сработает в момент открытия формы любого документа в пользовательском режиме.
Точка останова может быть установлена в произвольной процедуре или функции, которую создал разработчик. В этом случае точка останова сработает после вызова этой процедуры или функции из определенной строки программного кода.
После того как сработала точка останова система останавливает выполнение программного кода и становится возможным использование различных функций отладчика, таких как: пошаговое выполнение программного кода, использование формы Табло и т.д.
Пошаговое выполнение программного кода
Для пошагового выполнения программного кода используются команды, которые доступны в главном меню конфигуратора в меню Отладка. Для этих команд удобно использовать горячие клавиши.
Шагнуть в (F11). Если следующий оператор программного кода выполняет вызов проце-дуры или функции, то осуществляется ее пошаговое выполнение, иначе – выполняется следующий оператор.
Шагнуть через (F10). Если следующий оператор программного кода выполняет вызов процедуры или функции, то осуществляется ее выполнение полностью без входа внутрь. Затем выполняется следующий оператор.
Идти до курсора (Shift+F10). Осуществляется выполнение операторов от текущей выпол-няемой строки до строки программного кода, где расположен курсор.
Использование форм Табло и Выражение
Для просмотра значений переменных и вычисления значений выражений во время оста-новки программного кода предназначены формы Табло и Выражение.
Форма Табло вызывается командой главного меню конфигуратора Отладка – Табло или сочетанием клавиш Ctrl+Alt+W. В табло можно записать значения каких-либо переменных и анализировать, как они изменяются в процессе выполнения программного кода.
У табло доступны четыре закладки. По умолчанию закладки выключены. Для включения закладок в форме Табло нужно вызвать контекстное меню и установить флаг Закладки (Рис. 4).
Для вычисления значений выражений в момент остановки программного кода используется форма Выражение. Для открытия этой формы используется команда главного меню конфигуратора Отладка – Вычислить выражение или сочетание клавиш Shift+F9 (Рис. 5).
В поле Выражение вводится выражение на встроенном языке. Значение выражения можно получить нажав кнопку Рассчитать. В поле Результат выводится значение выражения. Выражение можно отобразить в табло нажав кнопку Включить в табло.
Для просмотра значений коллекции (например, таблицы значений, списка значений, массива) можно использовать команду Показать значение в отдельном окне или клавишу F2.
Просмотр стека вызовов
Стек вызовов – форма, которая позволяет отслеживать взаимные вызовы процедур и функций в процессе исполнения программного кода. Стек вызовов отображается командой главного меню конфигуратора Отладка – Стек вызовов или сочетанием клавиш Ctrl+Alt+C. Из формы Стек вызовов можно перейти к соответствующей процедуре или функции (Рис. 6).
Рис. 6. Стек вызовов
Остановка программного кода по ошибке
В процессе выполнения программного кода могут возникать ошибки, приводящие к аварийной остановке приложения. Для настройки возможности остановки программного кода на строке, в которой возникла ошибка, используется форма Остановка по ошибке.
Для открытия формы нужно выполнить команду главного меню конфигуратора Отладка – Остановка по ошибке.
В форме нужно установить флаг Остановка по ошибке и запустить приложение в режиме отладки. Выполнение программного кода будет остановлено на строке, в которой возникла ошибка (Рис. 7).
Как показывает практика без отладчика поиск ошибок в программном кода занимает длительное время. Поэтому освоению отладчика нужно уделить особое внимание.
Как было упомянуто выше, механизм отладки был существенным образом расширен в последующих редакциях платформы. Для тех, кто хочет ознакомиться с подробным описанием этих нововведений, рекомендуем прочитать соответствующий материал в блоге самих разработчиков платформы.
В заключение отметим, что конфигуратор – это полноценная и до недавнего времени единственная среда разработки приложений на платформе «1С:Предприятие 8». Он обладает очень богатым функционалом, призванным помочь разработчику в решении его ежедневных задач.
В редакции 8.3 в конфигураторе добавилось много мелких полезностей для разработчика. И в следующей статье мы с ними обязательно познакомимся.
Зачастую в работе возникает ситуация, когда запрос в 1С по каким-то причинам работает медленно, но анализ текста запроса не говорит нам о каких-либо проблемах.
В таком случае приходится изучать эту проблему на более низком уровне. Для этого нам нужно посмотреть текcт SQL-запроса и план запроса. Для этого можно использовать SQL Profiler.
SQL Profiler – предназначение
SQL Profiler – это программа, входящая в MS SQL Server, которая предназначена для просмотра всех событий, которые происходят в SQL-сервере. Иначе говоря, она нужна для записи трассировки.
В каких случаях данный инструмент может быть полезен 1С программисту? Прежде всего, можно получить текст запроса на языке SQL и посмотреть его план. Это также можно сделать и в технологическом журнале (ТЖ), но план запроса в ТЖ получается не таким удобным и требует наличия некоторых навыков и умений. К тому же в профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что является более удобным.
Также профайлер позволяет узнать:
- запросы длиннее определенного времени
- запросы к определенной таблице
- ожидания на блокировках
- таймауты
- взаимоблокировки и т. д.
Анализ запросов с помощью SQL Profiler
Зачастую Profiler применяется именно для анализа запросов. И при этом нужно анализировать не все исполняемые запросы, а то, как определенный запрос на языке 1С транслируется в SQL, и обращать внимание на его план выполнения.
В частности, это бывает необходимо, чтобы понять, почему запрос выполняется медленно. Или при построении большого и сложного запроса необходимо удостовериться, что запрос на языке SQL не содержит соединений с подзапросом.
Для отслеживания запроса в трассировке выполняем следующие шаги:
1. Запускаем SQL Profiler: Пуск — Все программы — Microsoft SQL Server 2008 R2 — Средства обеспечения производительности — SQLProfiler.
2. Создаем новую трассировку: Файл – Создать трассировку (Ctrl+N).
3. Указываем сервер СУБД, на котором находится наша база данных и нажимаем Соединить:
Нам ничто не мешает выполнять трассировку сервера СУБД, находящегося на любом другом компьютере.
4. В появившемся окне Свойства трассировки переключаемся на закладку Выбор событий:
5. Далее нужно указать события и их свойства, которые мы хотим видеть в трассировке.
Так как нам нужны запросы и планы запросов, то необходимо включить соответствующие события. Для показа полного списка свойств и событий включаем флаги Показать все события и Показать все столбцы. Теперь необходимо выбрать только события, приведенные на рисунке ниже, остальные же – требуется отключить:
Описание этих событий:
- ShowplanStatisticsProfile– текстовый план выполнения запроса
- ShowplanXMLStatisticsProfile– графический план выполнения запроса
- RPC:Completed– текст запроса, если он выполняется как процедура (если выполняется запрос 1С с параметрами)
- SQL:BatchCompleted– текст запроса, если он выполняется как обычный запрос (если выполнялся запрос 1С без параметров)
6. На этом этапе необходима настройка фильтра для выбранных событий. Если фильтр не установлен, то мы будем видеть запросы для всех БД, расположенных на данном сервере СУБД. По кнопке Фильтры столбцов устанавливаем фильтр по имени базы данных:
Теперь мы видим в трассировке только запросы к БД «TestBase_8_2».
Также можно поставить фильтр и по другим полям, наиболее интересные из них:
- Duration (длительность)
- TextData (обычно это текст запроса)
- RowCounts (количество строк, возвращаемых запросом)
Допустим, нам необходимо «отловить» все запросы к таблице «_InfoRg4312» длительностью более 3-х секунд в базе данных «TestBase_8_2». Для этого необходимо:
a) Установить фильтр по базе данных (см. выше)
b) Установить фильтр по длительности (устанавливается в миллисекундах):
c) Установить фильтр по тексту запроса:
Для задания фильтра по тексту запроса используем маску. В случае необходимости отслеживать запросы, которые обращаются к нескольким таблицам, создается несколько элементов в разделе «Похоже на». Наложенные условия фильтров работают совместно.
7. Теперь запускаем трассировку с помощью кнопки Запустить в окне Свойства трассировки и наблюдаем события, попадающие под установленные фильтры, отображение которых было настроено.
Кнопки командной панели служат для управления трассировкой:
- Ластик – очищает окно трассировки
- Пуск – запускает трассировку
- Пауза – ставит трассировку на паузу, при нажатии на Пуск трассировка возобновляется
- Стоп – останавливает трассировку
8. Окно трассировки состоит из двух частей. В верхней части находятся события и их свойства, в нижней – информация, зависящая от типа событий. Для нашего примера здесь будет отображаться либо текст запроса, либо его план.
9. Запустим на выполнение запрос в консоли запросов 1С и посмотрим, как он отразится в профайлере:
По поведению трассировки видно, что запросов в итоге получилось несколько, и только один из них нам интересен. Остальные запросы – служебные.
10. Свойства событий дают возможность оценить:
- сколько секунд выполнялся запрос (Duration)
- сколько было логических чтений (Reads)
- сколько строк запрос вернул в результате (RowCounts) и т.д.
В нашем случае запрос выполнялся 2 миллисекунды, сделал 4 логических чтения и вернул 1 строку.
11. Если взглянуть на одно событие выше, то можно увидеть план запроса в графическом виде:
Из плана видно, что поиск осуществляется по индексу по цене, этот план нельзя назвать идеальным, так как индекс не является покрывающим, поля код и наименование получаются с помощью KeyLookup, что отнимает 50% времени.
Используя контекстное меню, полученный графический план запроса возможно сохранить в отдельный файл с расширением *.SQLPlan и открыть его в профайлере на другом компьютере или с помощью программы SQL Sentry Plan Explorer, которая является более продвинутой.
12. Если подняться еще выше, то мы увидим тот же план запроса, но уже в текстовом виде. Именно этот план отображается в ТЖ, ЦУП и прочих средствах контроля производительности 1С.
13. Через меню Файл – Сохранить как можно сохранить всю трассировку в различные форматы:
- В формат самого профайлера, то есть с расширением *.trc
- В формат xml
- Сделать из трассировки шаблон (См. следующий пункт)
- Cохранить полученную трассировку в виде таблицы базы данных. Это весьма удобный способ, когда, к примеру, нужно найти самый медленный запрос в трассировке или отфильтровать запросы по какому-либо параметру.
Используем меню Файл – Сохранить как – Таблица трассировки – Выбираем сервер СУБД и подключаемся к нему.
Затем выбираем базу данных на указанном сервере, указываем имя таблицы, куда будет сохранена трассировка. Можно использовать существующую таблицу, или дать ей новое имя, и тогда эта таблица будет создана автоматически.
Теперь возможно строить запросы любой сложности к нашей таблице: к примеру, искать наиболее долго выполняющиеся запросы.
Также нужно помнить, что Duration сохраняется в таблицу в миллионных долях секунды, и при выводе результата нужно переводить значение в миллисекунды. Также в таблице присутствует столбец RowNumber, показывающий номер данной строки в трассировке.
14. При частом использовании профайлера для анализа запросов постоянная настройка нужных событий и фильтров будет постоянно отнимать у вас много времени.
В данном случае нам помогут шаблоны трассировок, где мы настраиваем нужные нам фильтры и порядок колонок, а далее просто используем уже имеющийся шаблон при создании новой трассировки.
Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон:
На первой закладке указываем тип сервера, имя шаблона и при необходимости ставим флаг для использования данного шаблона по умолчанию.
На второй закладке делаем выбор нужных событий и осуществляем настройку фильтров (как было показано выше).
Дополнительно рекомендуется выполнить настройку порядка столбцов в трассировке, что экономит время при последующем анализе запросов. Удобным представляется следующий порядок:
При создании новой трассировки можем указать нужный шаблон, и тогда на второй закладке все фильтры и события заполнятся автоматически по созданному шаблону.
PDF-версия статьи для участников группы ВКонтакте
Статья в PDF-формате
Станьте экспертом по оптимизации 1С, изучив наш курс«Ускорение и оптимизация систем на 1С:Предприятие 8.3 (2016). Подготовка на 1С:Эксперт по технологическим вопросам»
35 учебных часов, подготовка к 1С:Эксперт, правильная настройка серверной части, оптимизация кода, мониторинг загруженности оборудования и прочие взрослые вещи.
Комментарии / обсуждение (9):
Имя индекса отображается одинаково и в MS SQL и в обработке структура хранения метаданных и начинается с 1.
После выполнения запроса с созданием временной таблицы ставим точку останова и открываем для просмотра объект Запрос (Shift+F9).
Меняем Текст запроса на "Выбрать * ИЗ ", где - это имя временной таблицы, которую необходимо просмотреть (в моём случае это ВТСотрудникиДляПечатиТрудовыхДоговоров).
Далее в диалоговом окне "Выражение" пишем "Запрос.Выполнить().Выгрузить()" (без кавычек) и жмем Рассчитать - получаем таблицу значений с данными временной таблицы.
Для просмотра содержимого таблицы значений нужно выделить саму таблицу и нажать F2.
Вот и всё! Надеюсь, кому-нибудь пригодится:)
Специальные предложения
Где индекс это порядковый номер временной таблицы
aegoncharov; officeRebot; pilotfitz; user820492; Romario_; user1485342; AskezaMax; nnnnnndfge; _1c_coder; jun-ko; user1593228; ErshKUS; eLeMeNtaLe; Andrei_Ivanov; surr; mpvrus21; Antonov.AV; igor_L; user602678_maxipunchik; 24rus; vshish; shtinalex; TigerAdmin; user717534; NO_FEAR; Ovkay; Roman_Go; pro100; mos_apit; lolozhiga; Tash.B; user721122; jafariuse; Zwek; zoikins; JohnConnor; shapoval; adhocprog; doda666; FatPanzer; TeMochkiN; abkam; Jeka44; Nefrit88; oleganatolievich; SirStefan; Dizel; Лис Р; Andy_NTG; Kazaams; fokses; CratosX; user_2010; VooDOOPRo; user1145086; vyak13; KolBbl4; DrinkMaster; armeec; Matveev_VS; stepani4; eeeio; CepeLLlka; link_l; ResetAtreides; Batman; Dima_; Dimeron; vita8383; chembulatov76; Wersia; Ulfhedhinn; Darlok; kuzyara; korppinen; monopolij; user811769; dablack; fvr2000; EVKash; Painted; cdromscsi; wowik; Sevt_RND; m_aster; MarinaLed; Wilka; TaTaPuH-Magic; asoft-is; APTEM_SLV; FarhadIlyazov; BruSeV; Meson; bforce; ProgrammistC; manlak; suepifanov; mike1970; Danila-Master; veretennikoff; gucci76; Krio2; Brawler; PetrPan; Ziggurat; abadonna83; kuntashov; zarankony; Artem-B; artfa; vvr908; PVG_73; antz; stoptime; DmitrySinichnikov; AlexGroovy; LeXXuS_ju; andron77777; elvira17; fxmike; rpgshnik; HAMMER_59; rusmil; madonov; SerVer1C; Shaldryn; kiruha; vladismi; Art1387; A_Max; user705522_constantin_h; CyberCerber; + 132 – ОтветитьЗапрос.МенеджерВременныхТаблиц.Таблицы.Найти(<Имя временной таблицы>).ПолучитьДанные().Выгрузить()
Индекс временной таблицы может меняться, а вот имя никогда.
aegoncharov; user1485342; 13KrAs; Alister; Andrei_Ivanov; mpvrus21; realEvgenius; A1ex_2; TigerAdmin; consplus_pavlov; yuri_an; tormozit; shalupov61; Tash.B; user721122; AnddnA; maxst22; mikl79; shapoval; adhocprog; FatPanzer; oleganatolievich; bohdan-k; hcooh; CratosX; Alien_RS_Forever; schslava; elizarovs; tiro; armeec; Aspire1C; stepani4; eeeio; Wersia; Painted; wowik; user705522_constantin_h; romankoav; spezc; manlak; mike1970; Danila-Master; brr; Krio2; abadonna83; fxmike; kiruha; + 47 – Ответить(5) Как угодно, все зависит от ситуации. Мне проще посмотреть Запрос.МенеджерВременныхТаблиц.Таблицы и посмотреть индекс. Это удобство.
ВыполнитьПакетСПромежуточнымиДанными() - когда хочется посмотреть все таблицы и проанализировать. Все находится перед глазами. Особенно хорошо, когда временных таблиц не много, иначе все равно приходится копаться в них. В таком случае в табло отладки интересующие таблицы удобнее вставить.
Запрос.МенеджерВременныхТаблиц.Таблицы.Найти(<Имя временной таблицы>).ПолучитьДанные().Выгрузить() - когда видишь текст запроса, видишь имя таблицы, а индекс понять сложно.
Своя функция в общем модуле или метод автора - Если 8.2 и ранние 8.3, то метод автора или своя процедура в общем модуле. С появлением расширений в 8.3.6 можно обойтись экспортной функцией в обработке.
Хорошо знать инструменты и использовать их в нужный момент.
P.S. Лично я не догадывался, что можно хитрить с текстом запроса. Буду использовать в других случаях.
(5) Как угодно, все зависит от ситуации. Мне проще посмотреть Запрос.МенеджерВременныхТаблиц.Таблицы и посмотреть индекс. Это удобство.
ВыполнитьПакетСПромежуточнымиДанными() - когда хочется посмотреть все таблицы и проанализировать. Все находится перед глазами. Особенно хорошо, когда временных таблиц не много, иначе все равно приходится копаться в них. В таком случае в табло отладки интересующие таблицы удобнее вставить.
Запрос.МенеджерВременныхТаблиц.Таблицы.Найти().ПолучитьДанные().Выгрузить() - когда видишь текст запроса, видишь имя таблицы, а индекс понять сложно.
Своя функция в общем модуле или метод автора - Если 8.2 и ранние 8.3, то метод автора или своя процедура в общем модуле. С появлением расширений в 8.3.6 можно обойтись экспортной функцией в обработке.
Хорошо знать инструменты и использовать их в нужный момент.
P.S. Лично я не догадывался, что можно хитрить с текстом запроса. Буду использовать в других случаях.
Только сейса понял если у вас Запрос.МенеджерВременныхТаблиц = неопределено, тогда вам подойдет только ВыполнитьПакетСПромежуточнымиДанными() . Законспектировал
Читайте также: