|
Автоматическая генерация текста запроса в динамическом списке | ☑ | ||
---|---|---|---|---|
0
dubolom
04.08.21
✎
09:08
|
Всем доброго времени суток!
Подскажите, пожалуйста, как именно динамический список автоматически генерирует текст запроса на основании основной таблицы (если флаг ПроизвольныйЗапрос - Ложь)? Я правильно понимаю, что это - выбор всех возможных полей справочника и всех возможных полей табличных частей (типа ТабличнаяЧасть1.*)? Как это правильно реализовать программно? (Переделываю в расширении автоматическую генерацию на произвольный запрос через схему запроса). |
|||
1
brainguard
04.08.21
✎
09:10
|
(0) Выбор всех возможных полей справочника, но не табличных частей
|
|||
2
dubolom
04.08.21
✎
09:11
|
(1) Когда я вижу произвольные запросы в типовых, там обычно фигурируют конструкции типа ОчереднаяТабличнаяЧасть.*
|
|||
3
brainguard
04.08.21
✎
09:13
|
(2) А ты не ориентируйся на типовые. Создателям типовых нужно получать зарплату, а тебе нужно решать задачи. Делай то, что тебе нужно
|
|||
4
mistеr
04.08.21
✎
09:16
|
(0) Не всех, а тех, которые отображаются в ДС.
А чем не устраивает стандартный запрос? |
|||
5
acht
04.08.21
✎
09:16
|
(3) > Делай то, что тебе нужно
Без зарплаты |
|||
6
Вафель
04.08.21
✎
09:19
|
Да и не всех полей, а только видимых
|
|||
7
Вафель
04.08.21
✎
09:20
|
А сам запрос дает возможность вывода полей
|
|||
8
dubolom
04.08.21
✎
09:22
|
(3) Главное, чтобы ничего не слетело от этого. Не пропало поле, на которое что-нибудь ссылается, например.
(4) Нужно добавить соединение с ещё одной таблицей. |
|||
9
dubolom
04.08.21
✎
09:23
|
Это где-то формализовано, как именно генерируется автоматический запрос?
|
|||
10
ДенисЧ
04.08.21
✎
09:24
|
А зачем его нужно создавать программно?
|
|||
11
dubolom
04.08.21
✎
09:25
|
(10) Ну добавление любого нового поля в запрос или соединения с новой таблицей - это ведь уже произвольный запрос.
|
|||
12
ДенисЧ
04.08.21
✎
09:27
|
(11) Ты не понял вопроса. Зачем это делать _программно_ ?
|
|||
13
dubolom
04.08.21
✎
09:30
|
(12) Хочется сделать по уму, чтобы при обновлениях на следующие релизы, если добавится какое-нибудь новое поле, не пришлось запрос переписывать. Можно ведь и забыть про это.
|
|||
14
Вафель
04.08.21
✎
09:31
|
Слект * фром
|
|||
15
ДенисЧ
04.08.21
✎
09:33
|
(13) Ну если ты вместо обычного котячьего занятия решил заняться подростковым грехом в присядку - кто тебе мешает пробежаться по метаданным и собрать запрос?
|
|||
16
dubolom
04.08.21
✎
09:34
|
(15) Хотелось бы какого-то формального описания, как он генерируется. Просто чтобы всё по фэн-шую сделать, точь-в-точь как было, но с моими изменениями.
Нагуглить я его не смог. |
|||
17
Вафель
04.08.21
✎
09:35
|
(16) формальное в (14)
|
|||
18
ДенисЧ
04.08.21
✎
09:35
|
(16) И не нагуглишь. Ибо коты, когда им заняться нечем, не в гугль пишут, а немного другим занимаются.
Всё это вшито в платформе. Можешь устроиться в 1с и посмотреть исходники. |
|||
19
dubolom
04.08.21
✎
09:36
|
(17) (18) Ок понял вас, спасибки.
|
|||
20
mistеr
04.08.21
✎
09:39
|
(16) Там сложнее, генерируется сразу SQL с пейджингом. Общее описание где-то было, но тебе оно мало поможет.
|
|||
21
ДенисЧ
04.08.21
✎
09:49
|
(20) Пейджинг уже потом добавляется. При отрисовке.
|
|||
22
dubolom
04.08.21
✎
10:31
|
Расковырял, что там в автоматической генерации.
В общем, выбраны практически все реквизиты (будем считать, что все, пофиг). Все табличные части. И поля: Ссылка, Номер, Дата, МоментВремени, ПометкаУдаления, Проведен. Из них и буду собирать запрос. |
|||
23
brainguard
04.08.21
✎
10:33
|
(5) Точно
|
|||
24
brainguard
04.08.21
✎
10:35
|
(16) В 1С нет "фэн-шуя"
|
|||
25
dubolom
04.08.21
✎
10:36
|
(24) Значит, у меня - будет.
|
|||
26
dubolom
04.08.21
✎
11:32
|
Ура, я это домучил! Кому интересно:
СхемаЗапроса = Новый СхемаЗапроса; ЗапросСписка = СхемаЗапроса.ПакетЗапросов.Добавить(); ОператорЗаказов = ЗапросСписка.Операторы[0]; ИсточникЗаказы = ОператорЗаказов.Источники.Добавить("Документ.ЗаказКлиента", "ЗаказКлиента"); ИсточникАдресаДоставки = ОператорЗаказов.Источники.Добавить("РегистрСведений.Адр1_АдресаДокументов", "АдресаДокументов"); СоединениеАдресаДоставки = ИсточникАдресаДоставки.Соединения[0]; СоединениеАдресаДоставки.ТипСоединения = ТипСоединенияСхемыЗапроса.ПравоеВнешнее; СоединениеАдресаДоставки.Условие = Новый ВыражениеСхемыЗапроса("ЗаказКлиента.Ссылка = АдресаДокументов.Документ"); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.Ссылка"); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.Номер"); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.Дата"); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.ПометкаУдаления"); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.Проведен"); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.МоментВремени"); РеквизитыЗаказа = Метаданные.Документы.ЗаказКлиента.Реквизиты; Для Каждого РеквизитЗаказа Из РеквизитыЗаказа Цикл ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента." + РеквизитЗаказа.Имя); КонецЦикла; Для Каждого ТЧЗаказа Из Метаданные.Документы.ЗаказКлиента.ТабличныеЧасти Цикл ДоступнаяВложеннаяТаблица = ЗапросСписка.ДоступныеТаблицы.Найти("Документ.ЗаказКлиента." + ТЧЗаказа.Имя); ОператорЗаказов.ВыбираемыеПоля.Добавить(ДоступнаяВложеннаяТаблица); КонецЦикла; КоличествоКолонок = ЗапросСписка.Колонки.Количество(); ОператорЗаказов.ВыбираемыеПоля.Добавить("ЗаказКлиента.Партнер.ГруппаДоступа"); ЗапросСписка.Колонки[КоличествоКолонок].Псевдоним = "Адр1_ГруппаДоступа"; ОператорЗаказов.ВыбираемыеПоля.Добавить("ЕСТЬNULL(АдресаДокументов.АдресДоставки, ЗНАЧЕНИЕ(Справочник.Адр1_АдресаДоставки.ПустаяСсылка))"); ЗапросСписка.Колонки[КоличествоКолонок+1].Псевдоним = "Адр1_АдресДоставки"; Список.ПроизвольныйЗапрос = Истина; Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса(); |
|||
27
ДенисЧ
04.08.21
✎
11:44
|
(26) Нам извращения не интересны...
|
|||
28
dubolom
04.08.21
✎
11:46
|
(27) То, что делают взрослые дееспособные люди по согласию и к своему удовольствию - не извращение.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |