Вторник, 23.04.2024, 12:16
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Основной » Проблемные ситуации » Не обновляется список временных таблиц (при наполнении менеджера временных таблиц программно)
Не обновляется список временных таблиц
nclockworkerДата: Вторник, 13.04.2021, 18:37 | Сообщение # 1
Генерал-майор
Группа: Пользователи
Сообщений: 437
Репутация: 342
Статус: Оффлайн

Есть код, который выполняется в "Перед выполнением запроса". В коде идет вызов общих модулей ERP и передается МенеджерВременныхТаблиц из мОбъектЗапроса в качестве параметра функции для принятия данных В частности мне нужно получить счета бухгалтерского учета по-умолчанию для формирования проводок.

В самом запросе идет обращение к временным таблицам, но не всем. После выполнения запроса список временных таблиц меньше чем должно быть, поэтому повторный вызов запроса приводит к тому, что выдается ошибка о существовании временной таблицы (она осталась в МВТ в неявном виде). Помогает только очистка временных таблицу через команду "Удалить временные таблицы".

Хотелось бы видеть список всех временных таблиц содержащихся в МВТ мОбъектЗапроса, даже тех, которые создаются не из запроса, а из кода.
 
tormozitДата: Вторник, 13.04.2021, 19:11 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6171
Репутация: 156
Статус: Оффлайн
Думаю ты сможешь сделать демонстрационный пример, чтобы я на нем удобно и наглядно воспроизвел проблему.
Подмена менеджера временных таблиц в обработчике "Перед выполнением" запроса, если такое имеет место в твоем случае, является незапланированной возможностью и потому не учитывалась при разработке инструмента.
 
nclockworkerДата: Вторник, 13.04.2021, 19:38 | Сообщение # 3
Генерал-майор
Группа: Пользователи
Сообщений: 437
Репутация: 342
Статус: Оффлайн
Подмены нет (хотя и пытался и там соответствующее сообщение имеется). Пример:


Код
Запрос = Новый Запрос("ВЫБРАТЬ 1 КАК Поле1 ПОМЕСТИТЬ ВтДанные2;ВЫБРАТЬ 2 КАК Поле2 ПОМЕСТИТЬ ВтДанные");
Запрос.МенеджерВременныхТаблиц = мОбъектЗапроса.МенеджерВременныхТаблиц;
Запрос.Выполнить();


Сам запрос:

Цитата
ВЫБРАТЬ
    *
ИЗ
    ВтДанные КАК Т
 
tormozitДата: Вторник, 13.04.2021, 20:10 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6171
Репутация: 156
Статус: Оффлайн
По отображению временных таблиц создал задачу https://www.hostedredmine.com/issues/925717 .

По ошибке же в твоем примере нужно сначала выполнять уничтожение временных таблиц, а потом их создание. Тогда ошибки не будет. Перекладывать это на консоль запросов кажется неоправданно.
 
nclockworkerДата: Вторник, 13.04.2021, 20:32 | Сообщение # 5
Генерал-майор
Группа: Пользователи
Сообщений: 437
Репутация: 342
Статус: Оффлайн
Я пробовал найти способ уничтожения неизвестных временных таблиц для перезаполнения, но ничего готового не нашел. По идее можно пройтись по списку временных таблиц МВТ и создать динамический пакет запросов, где перечислить конструкции "УНИЧТОЖИТЬ %ИияВременнойТаблицы%". Пока очищаю вручную через команду "Удалить временные таблицы". Если в ИР будет какой-то готовый экспортный метод доступный в "Перед выполнением запроса" было бы неплохо.
 
tormozitДата: Вторник, 13.04.2021, 22:24 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6171
Репутация: 156
Статус: Оффлайн
Передавать в обработчик форму консоли я не планирую. Это нарушит принцип изоляции контекста обработчика, благодаря которому консоль имеет достаточно большой контроль над последствиями работы обработчика.

Консоль запросов не может знать, какие временные таблицы добавит твой код, тем более что он не сам это делает, а вызывает еще большое дерево методов. Таким образом имеем динамический набор неизвестных действий, т.е. действия неизвестны да еще и каждый раз могут меняться. Поэтому консоль до вызова этого обработчика не сможет понять какие временные таблицы нужно уничтожить. Этим должен заниматься твой код/мозг.
Если же и для тебя эти действия являются динамическим набор неизвестных действий, то здесь остается только полный сбор менеджера временных таблиц - обойти коллекцию Таблицы менеджера временных таблиц, сгенерировать пакет запросов их уничтожения и выполнить его.
 
tormozitДата: Вторник, 13.04.2021, 23:06 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 6171
Репутация: 156
Статус: Оффлайн
Создал задачу https://www.hostedredmine.com/issues/925724
 
nclockworkerДата: Среда, 14.04.2021, 06:05 | Сообщение # 8
Генерал-майор
Группа: Пользователи
Сообщений: 437
Репутация: 342
Статус: Оффлайн
А полный список временных таблиц будет выводится? Основная проблема у меня в этом. Мне нужно видеть что за таблицы создались общими модулями ERP и что в них находится. Зачастую их имена предугадать невозможно, т.к. там есть таблицы с названиями типа "Остатки20210401", "Остатки20210301".
 
tormozitДата: Среда, 14.04.2021, 06:56 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 6171
Репутация: 156
Статус: Оффлайн
Цитата nclockworker ()
А полный список временных таблиц будет выводится?
Вроде же я уже отвечал тут
 
tormozitДата: Воскресенье, 18.04.2021, 23:59 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 6171
Репутация: 156
Статус: Оффлайн
Задачи выполнены в 5.88
 
Форум » Основной » Проблемные ситуации » Не обновляется список временных таблиц (при наполнении менеджера временных таблиц программно)
  • Страница 1 из 1
  • 1
Поиск: