1с как посмотреть временную таблицу в запросе
Перейти к содержимому

1с как посмотреть временную таблицу в запросе

  • автор:

1С 8.3 Просмотр данных временных таблиц запроса — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С

Перейти в раздел примеры кода 1С 8.3:

Пример №1: Получить содержимое временных таблиц запросов в 1С 8.3:

&НаСервере
Функция ПросмотрДанныхВременныхТаблицЗапроса_1 ( Запрос , НомерВременнойТаблицы ) // НомерВременнойТаблицы с 0

Возврат Запрос . МенеджерВременныхТаблиц . Таблицы [ НомерВременнойТаблицы ]. ПолучитьДанные (). Выгрузить ();
//Возвращает таблицу значений с данными временной таблицы

Пример №2: Получить содержимое временных таблиц запросов в 1С 8.3:

&НаСервере
Функция ПросмотрДанныхВременныхТаблицЗапроса_2 ( Запрос , НомерВременнойТаблицы ) // НомерВременнойТаблицы с 0

Возврат Запрос . ВыполнитьПакетСПромежуточнымиДанными ()[ НомерВременнойТаблицы ]. Выгрузить ();
//Возвращает таблицу значений с данными временной таблицы

Пример №3: Получить содержимое временных таблиц запросов в 1С 8.3:

&НаСервере
Функция ПросмотрДанныхВременныхТаблицЗапроса_3 ( Запрос , НаименованиеВременнойТаблицы ) // по имени ВТ

Возврат Запрос . МенеджерВременныхТаблиц . Таблицы . Найти ( НаименованиеВременнойТаблицы ). ПолучитьДанные (). Выгрузить ();
//Возвращает таблицу значений с данными временной таблицы

Получить данные временной таблицы

  • При добавлении данной функции в общий модуль, позволяет быстро и без внесения изменений в код получать данные из временных таблиц в запросе. Используется в случае, если МенеджерВременныхТаблиц = Неопределенно. Доступна с версии 8.3.8

    //Функция возвращает содержимое временной таблицы в запросе по индексу // // Параметры: // Запрос - Запрос - исполняемый запрос // ИндексПакета - Число – индекс временной таблицы // // Возвращаемое значение: // - Таблица значений - таблица значений с содержимым временной таблицы. // Функция ПолучитьДанныеВременнойТаблицы(Запрос, ИндексПакета) Экспорт Возврат Запрос.ВыполнитьПакетСПромежуточнымиДанными()[ИндексПакета].Выгрузить(); КонецФункции
    //Функция возвращает содержимое временной таблицы в запросе по индексу // // Параметры: // Запрос - Запрос - исполняемый запрос // ИндексПакета - Число – индекс временной таблицы // // Возвращаемое значение: // - Таблица значений - таблица значений с содержимым временной таблицы. // Функция ПолучитьДанныеВременнойТаблицы(Запрос, ИндексПакета) Экспорт Возврат Запрос.ВыполнитьПакетСПромежуточнымиДанными()[ИндексПакета].Выгрузить(); КонецФункции

    13 13 0 0 0 Скопировано.

    ред. 2 года назад

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

    1с как посмотреть временную таблицу в запросе

    Привет вам знатоки типовых конфигураций на БСП!
    Может кто знает, есть ли в служебных модулях функция, позволяющая посмотреть таблички из «МенеджерВременныхТаблиц» у запроса в отладке?

    А есть смысл разработчикам БСп создавать такую функцию?
    (0) В БСП не скажу, но в УТ11 есть
    ОбщегоНазначенияУТ.ПоказатьВременнуюТаблицу

    (1) а как вы тогда отлаживаете запросы в УТ11 например где в пакетном 20 шт временных таблиц? Просто устал каждый раз пихать в конфу которая на поддержке такое http://catalog.mista.ru/public/173803/

    (2) отлично, спасибо

    (4) + хотя УТ все равно все ломают а вот БП3 да еще и базовую как отладить. не нашел аналогичной функции . печаль

    (5) в БП3:
    УчетЗатрат.ВыгрузитьВременнуюТаблицу(МенеджерВременныхТаблиц, ИмяВременнойТаблицы)
    (6) ооо, спасибо и вам !
    (7) + ну и набравшись наглости спрошу о наличии такой функции в рознице 2.1 ? )))

    ПроведениеСервер.ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц,ИмяВременнойТаблицы, Комментарий = «») Экспорт

    (6) + о шикарно, там еще ОтладитьЗапрос(Запрос) есть который возвращает массив результата пакетного запроса. Печально что разработчики БСП не подумали о таких сервисных вещах (

    (10) спасибо !
    Вангую, что скоро опять все модули перекроят )))

    http://devtool1c.ucoz.ru/ прекрасно работает в толстом клиенте. у него есть функция ОТ(), которая позволяет запрос закинуть в консоль запросов (с заполненными параметрами) и покрутить, включая временные таблицы и т.п.

    (15) только в толстом?
    (15) В толстом клиенте это все не имеет уже смысла

    (16)(17) толстый клиент управляемые формы. галочка «разрешить обычные формы в управляемом приложении»

    (18) все равно менять конфу (
    (19) зато потом кайф
    (20) А типовые то работают в таком режиме?

    (21) да. проблемы именно в «толстых» формах иногда возникают, но обходятся. например при обработке результата запроса — надо открывать «консоль кода» и там ставить галочку «сервер», чтобы обработать результат по нормальному. еще интеллисенс глючит. Это все из-за того, что там все выполняется на клиенте, а у серверных модулей БСП предположение, что они юзаются из тонких форм со стороны сервера (и нет галки «вызов сервера»).

    Временные таблицы в запросе 1С – что это и зачем они нужны

    Временные таблицы в запросе 1С – это особые объекты системы управления базами данных (СУБД). Не стоит путать с таблицами значений, которые хранятся на 1С сервере. Они используются внутри 1С кода для повышения его производительности.
    Глобально, временные таблицы в системе 1С хранятся в оперативной памяти, либо на жёстком диске. А если рассматривать более локально, то создание и хранение временных таблиц происходит обычно внутри базы TempDB. Если углубиться в вопрос подробнее, то можно понять, что по стандартным настройкам временные таблицы в запросе 1С создаются внутри оперативной памяти, внутри буферного кэша. Однако, следует отметить, что есть исключение – это тот вариант, когда временная таблица в системе 1С имеет слишком большой размер, в таком случае – таблица будет записана на диск.
    Временные таблицы в запросе 1С создаются в памяти потому что чтение с оперативной памяти будет, в любом случае, быстрее, чем чтение с диска.
    Экспериментально проверим где будет создана временная таблица в системе 1С, для этого нужно внутри консоли прописать такой запрос:

    Внутри консоли прописываем запрос

    Далее нужно запустить трассировку SQL Profiler, с событием SQL:BatchComplited, и выполним внутри консоли запрос, результатом которого будет:

    Выполнение внутри консоли запрос 8.2, его результат

    Таким образом, увидим лишь внесение данных (заполнение) временной таблицы в запросе 1С, код создания отображён не будет.
    Для начала, определим откуда происходит считка сведений, для этого нужно знать считываются данные с диска или с памяти. Воспользуемся, чтобы это выяснить, показатель physical reads (данный показатель отвечает за количество чтений перед выполнением запроса, страницы по 8Кб). Далее создаём и читаем временную таблицу в системе 1С внутри Management Studio, чтобы узнать величину показателя.
    В новом запросе нужно прописать следующее по порядку:

    В новом запросе прописываем следующее

    Как только код выше будет выполнен, то во вкладке «Сообщения» будет текст такого вида:

    Вкладка «Сообщение»

    Наиболее важное из такого сообщения – это число физических чтений, которое равно 0, и число логических чтений, которое равно единице, — что означает, что сведения читались лишь из самой памяти.

    2. Как производить индексирование таблиц

    На экзамене 1С требуют проводить индексацию полей внутри временных таблиц в системе 1С, в обязательном порядке. В обычной работе также используют индексирование таблиц, так как она стала уже привычной, однако с ней запросы выполняются медленнее. Стоит отметить, что случаев, когда индексация не нужна гораздо больше, чем обратных, это связано, в первую очередь, с оптимизацией.
    Посмотрим, как на самом деле работает индексирование таблиц. Для начала, нужно создать новую временную таблицу в запросе 1С, которая будет иметь одно числовое поле со значениями от одного до одного миллиона. Это будет делаться через такой пакетный запрос:

    Пакетный запрос
    Запрос будет осуществлён примерно за 1.2 секунды. В трассировке SQL Profiler будет следующее:

    Tрассировка SQL Profiler

    Таблица будет создана за 1.1 секунды, а за 0.1 секунду будет произведено сканирование всей таблицы для возврата одной строки. Рассмотрим, что поменяется, если добавить индекс в таблицу ВТ_Числа.
    Запрос будет выполнен примерно за 6 секунд. Таблица будет создаваться за 5.3 секунды. А поиск по индексу будет проходить за 0.5 секунд, однако без индекса будет длиться 0.1 секунды. Преимуществом запроса с индексированием будет то, что он имеет меньшее количество логических чтений (2057, а не 2233).

    3. Удаление временных таблиц в конфигурации системы 1С

    Рассмотрим то, нужно ли удалять временные таблицы в конфигурации системы 1С, после того, как они были созданы. Это будет зависеть от того, каким способом создавалась таблица. Для случая, когда временная таблица в запросе 1С была задействована для одного пакетного запроса, то она будет существовать до выполнения пакетного запроса, то есть, менеджер временных таблиц создан скрыто. В таком случае, MS SQL создаст новую временную таблицу в системе 1С ЕРП, которая будет локальной, и она будет иметь одну решётку. По окончанию пакетного запроса, менеджер временных таблиц 1С будет закрыт и будет команда «Truncate table», — именно она удалит временную таблицу.
    В случае наличия индексации таблицы – сначала будет она удалена, а потом сама таблица.
    Если используется менеджер временных таблиц 1С, то лучше удалять таблицу при помощи команды «Уничтожить», или же при помощи метода МВТ.Закрыть(). Специалист компании «Кодерлайн» Айдар Фархутдинов

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

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