|   |   | 
| 
 | Автоматическая генерация текста запроса в динамическом списке | ☑ | ||
|---|---|---|---|---|
| 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) То, что делают взрослые дееспособные люди по согласию и к своему удовольствию - не извращение.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |