Имя: Пароль:
1C
1С v8
Менеджер временных таблиц и конструктор запроса
0 tciban
 
15.10.20
14:34
Коллеги! Сделал менеджер временных таблиц, сделал запрос в конструкторе, описал в нем втшку сделал запрос. Второй раз не дает открыть в конструкторе! Говорит нет таких полей у вас! А я рассчитываю еще в 4 запросах использовать эту таблицу. Мне их как в конструкторе менять? Помогите тупому!!! Ну не может же быть, что бы все врукопашную!
1 ДенисЧ
 
15.10.20
14:45
А ты как делал?

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

По такой схеме? Тогда конструктор не увидит точно.
2 tciban
 
15.10.20
14:48
да, по такой именно. Неужели никак? Ну все же сталкивались такой проблемой, неужели все так плохо?
3 Mihasya
 
15.10.20
14:51
копи-пасте ))
4 tciban
 
15.10.20
14:52
От жеж блин!
5 tciban
 
15.10.20
14:54
Копипаста не канает. Суть дела - я получаю договоры с кучей условий в ГДЕ А потом из этой таблицы в разных запросах получаю всякое по разным ГДЕ, соединения делаю. Это обработка если что, не отчет. По разным кнопочкам разное делает
6 ДенисЧ
 
15.10.20
14:54
(2) Почему плохо? Ты предлагаешь в конфигуратор встроить противоестественный интеллект?
А вдруг текст запроса на вт будет лежать во внешнем файле? Откуда конструктор узнает, что там взбредёт в голову, не выполняя запроса?
7 tciban
 
15.10.20
14:57
(6) Ладно, ругать древние технологии 1С уже скучно. Просто конструктор запросов забывает описание временной таблицы. А мог бы где нибудь хранить Еж же всякие секции с фигурными скобками в запросах и т.п. Для этого ии не нужен
8 ДенисЧ
 
15.10.20
15:00
(7) Исчо раз. В тексте пишу
текстДокумент = Новый текстовыйДокумент;
текстДокумент.Прочитать(ПутьКФайлуКоторыйВвелПОльзователь);
Запрос.Текст = текстДокумент.ПолучитьТекст();
Запрос.Выполнить();

Что должен запомнить конструктор?
9 Жан Пердежон
 
15.10.20
15:02
(0) Причем тут конструктор, если ты вт в другом запросе создаешь? Или ты не в курсе про пакетные запросы?
10 mistеr
 
15.10.20
15:04
(0) Соедини 4 запроса в один пакетный запрос.
11 fisher
 
15.10.20
15:05
(2) Все плохо. Поэтому все изо всех сил стараются не использовать менеджеры временных таблиц.
(5) И зачем тебе тут менеджеры временных таблиц? Или ты это в толстом клиенте делаешь и держишь соединение с БД всю дорогу работы с обработкой?
12 tciban
 
15.10.20
15:07
(11) Ваще то да, в толстом клиенте :)
Запомоился, в обычных формах работаю.

Хотел ускорить работу обработки. просто то одно надо прорисовать в табличке, то другое. Но все на основе заранее отобранных договоров.
13 tciban
 
15.10.20
15:11
Кстати, все не так плохо. Открыть не дает только там где группировка и агрегатные функции. Если просто отбор по ГДЕ - все работает в конструкторе
14 fisher
 
15.10.20
15:15
(12) Ну, такое... Лучше вытаскивай отобранные договора на клиента и передавай их в каждый запрос вместо того, чтобы держать их во временной таблице и удерживать все это время соединение с БД.
Не миллионы же их там у тебя. Если реально очень много, то проще дублировать их отбор в каждом запросе. Да, некрасиво и накладные расходы. Но удержание временной таблицы на сервере - тоже такой себе костыль.
Исторически менеджеры временных таблиц появились до того, как появились пакетные запросы. Как только появились - использование менеджеров минимизировалось.
15 tciban
 
15.10.20
15:23
(14) отобранных договоров порядка 17 с половиной тыс. Получение их запросом - порядка 1200 мс в среднем. Повторять в каждом запросе - ну так себе. Была идея держать в ТЗ и грузить ее в каждый запрос в втшку, но интересно насколько это дольше использования менеджера временных таблиц?
16 Вафель
 
15.10.20
16:19
если хочешь через точку, то нужно выразить делать
17 fisher
 
15.10.20
16:30
(15) Неприятная ситуация. По возможности - избегайте этого :)
18 mistеr
 
15.10.20
16:44
(14) Я так и не понял, какие аргументы за то, чтобы таскать одни и те же данные с клиента на сервер и обратно много раз. Сплошные минусы.
19 fisher
 
15.10.20
17:05
(18) А держать временную таблицу на сервере БД пока открыта форма - сплошные плюсы?
20 tciban
 
16.10.20
07:49
(18) (19) Видимо лучшим выходом будет получить один раз и держать в памяти массив
21 vi0
 
16.10.20
08:01
(0)
вместо "ВЫБРАТЬ Первые 1 Ссылка ИЗ вт"
делай "ВЫБРАТЬ Первые 1 вт.Ссылка ИЗ вт"
22 TormozIT
 
гуру
23.10.20
22:53
Я в своей толстой консоли запросов убрал бесконечное удержание менеджера https://www.hostedredmine.com/issues/887410 . Внутри есть ссылка на предысторию (одну из). В итоге больше часа держать менеджер временных таблиц на продуктивном сервере по факту - плохо. Однако вразумительного объяснения этому даже разработчики платформы не дали, хотя рассказали, что делали тесты на эту тему и они подтверждают это мнение.
23 Ёпрст
 
23.10.20
23:09
(0)
втыкаешь типа того в каждый текст запроса


|ВЫБРАТЬ
|    ЗНАЧЕНИЕ(Справочник.Вася.ПустаяССылка) КАК Вася,
|    ЗНАЧЕНИЕ(Справочник.Федя.ПустаяССылка) КАК Федя,
|       0 Как Матрёна,
|       """" как Маша
|Поместить ТвояТабличка
|;

далее твой текст запроса. Усё, в конструкторе творишь, че надо, потом, через ТекстЗапроса=Сред(ТекстЗапроса,Стрнайти(ТекстЗапроса,";")+1);
имеешь свой текст..
Поля задаешь какие были в твоей таблике в менеджере.
24 Ёпрст
 
23.10.20
23:09
с нужными типами
25 Мимохожий Однако
 
24.10.20
07:56
Табличная часть в обработке не поможет?
26 ILM
 
гуру
24.10.20
11:36
А разве экспортную переменную объявить МВТ в обработке это плохо?

Текст модуля :

Перем МВТ Экспорт;
Перем ПервыйРаз Экспорт;


Процедура ЗаполнитьСписокДоговоров();

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

Функция2();
Функция3();
Функция4();
Процедуры1();
Процедуры2();
Процедуры3();

МВТ = новый МенеджерВременныхТаблиц;
ПервыйРаз = Истина;

ЗаполнитьСписокДоговоров();

==========

А потом везде используешь переменную МВТ и обращаешься в запросах к своей таблице ВТ, ну или как советуют сделай пакет запросов.
27 Конструктор1С
 
25.10.20
04:41
(26) это плохо. МВТ может жить долго и бесконтрольно
28 Конструктор1С
 
25.10.20
04:43
(0) наверно пытаешься через точку обращаться к полям полей ВТ?
29 TormozIT
 
гуру
25.10.20
06:44
(26) На всякий случай если в (22) не увидел ссылку, дам прямую http://devtool1c.ucoz.ru/forum/2-1071-1
30 Провинциальный 1сник
 
25.10.20
08:02
(22) "больше часа держать менеджер временных таблиц на продуктивном сервере по факту - плохо"
Почему? МВТ это всего лишь некий список-перечень временных таблиц, созданных на sql-сервере, и деструктор, который при вызове удаляет временные таблицы с сервера. Кому мешают лишние временные таблицы? Место в tempdb занимают разве что - так это мелочь..
31 Надо работать
 
25.10.20
08:41
(30) ничего себе мелочь. На больших базах уложить темпдб неоптимальными запросами - плевое дело
32 Надо работать
 
25.10.20
08:43
(22) круто, давно ждали эту фишку
33 Провинциальный 1сник
 
25.10.20
08:44
(31) Так речь не об неоптимальных запросах, а о простаивающих временных таблицах, не влияющих на производительность
34 TormozIT
 
гуру
25.10.20
10:06
(30) Я же написал в (22) что сама 1С не может вразумительно объяснить это явление, но есть много свидетельств, что деградация происходит и на опытах самой 1С также воспроизводилась. Точные условия не обозначаются. https://partners.v8.1c.ru/forum/topic/1423290#m_1423290
35 Конструктор1С
 
25.10.20
10:41
(33) temoDB не резиновая. Часто под неё выделяют отдельный шустрый SSD, объем которого относительно небольшой
36 Конструктор1С
 
25.10.20
10:45
если тебе нужно долго удерживать временную таблицу, это попахивает кривой архитектурой. К тому за время существования ВТ исходные данные могут на сто раз стать невалидными. Идеальная ВТ, как и идеальная блокировка, должна жить как можно меньше
37 Провинциальный 1сник
 
25.10.20
18:32
(34) Помню, в sql2000 был документированный баг с временными таблицами, когда они физически не удалялись, а лишь помечались как неактивные в контексте сессии, в результате каждое следующее создание временной таблицы было всё более тормозным. В 1с7 это было критично настолько, что даже специальный костыль придумали в 1с++ для обхода бага, чтобы периодически делался реконнект к серверу для очистки контекста временных таблиц. Но в более новых sql вроде бы этого бага нет..
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший