Имя: Пароль:
1C
 
модель схемы запроса
0 first_may
 
16.12.21
22:15
Добрый вечер.

В инете есть примеры по объектной модели схемы запроса.
Например

//Создание схемы запроса
СхемаЗапроса = Новый СхемаЗапроса;
ЗапросВыбораИзИБ = СхемаЗапроса.ПакетЗапросов[0];
//Установка свойств запроса
ЗапросВыбораИзИБ.ТаблицаДляПомещения = "ТаблицаОбороты";
ЗапросВыбораИзИБ.ВыбиратьРазрешенные = Истина;
//Добавляем операторы выбора первого запроса пакета
ОператорВыбораЗакупок = ЗапросВыбораИзИБ.Операторы[0];
ИсточникНоменклатура = ОператорВыбораЗакупок.Источники.Добавить("Справочник.Номенклатура","Товары");
//Добавляем запрос выбора из регистра закупок
ИсточникЗакупки = ОператорВыбораЗакупок.Источники.Добавить("РегистрНакопления.Закупки.Обороты","Закупки");
ИсточникЗакупки.Источник.Параметры[0].Выражение = Новый ВыражениеСхемыЗапроса("&Начало") ;
ИсточникЗакупки.Источник.Параметры[1].Выражение = Новый ВыражениеСхемыЗапроса("&Окончание") ;
ИсточникЗакупки.Источник.Параметры[2].Выражение = Новый ВыражениеСхемыЗапроса("Месяц") ;
//Меняем тип соединения
ИсточникЗакупки.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.ПравоеВнешнее;




Повторяю все как тут, но у меня после подобной строки
ИсточникЗакупки = ОператорВыбораЗакупок.Источники.Добавить("РегистрНакопления.Закупки.Обороты","Закупки");

в подобной
ИсточникЗакупки.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.ПравоеВнешнее;


выдается ошибка
{<Неизвестный модуль>(1)}: Индекс находится за границами массива

так как соединения нет.

Если пишу

ИсточникЗакупки.Соединения.Добавить(..

и смотрю запрос, то в нем получается соединение ПРАВОЕ и задвоение таблиц.


Подскажите пожалуйста, как правильно добавить левое соединение?
1 first_may
 
16.12.21
22:22
Если смотреть в отладчике СхемаЗапроса.ПолучитьТекстЗапроса(),

то после строки
ИсточникЗакупки = ОператорВыбораЗакупок.Источники.Добавить("РегистрНакопления.Закупки.Обороты","Закупки");

в запросе появляется текст
РегистрНакопления.Закупки.Обороты КАК Закупки

без какого либо соединения.


Что надо написать, что бы указать что это левое соединение?
2 acht
 
16.12.21
22:53
Добавить, найти добавленное, указать ему тип
3 first_may
 
16.12.21
22:55
(2) имеется ввиду соединение?
4 acht
 
16.12.21
22:56
(3) Имеется в виду соединение в коллекции соединений
5 first_may
 
16.12.21
22:58
(4) пример можно?
6 acht
 
16.12.21
23:05
(5) Неа. Мне больше лень чем тебе.
7 first_may
 
16.12.21
23:09
(6) мне не лень, я не пойму где это..

вот строка
ИсточникЗакупки = ОператорВыбораЗакупок.Источники.Добавить("РегистрНакопления.Закупки.Обороты","Закупки");


после нее надо искать?
8 first_may
 
16.12.21
23:22
Именно в ИсточникЗакупки ?
9 acht
 
16.12.21
23:24
(7) Нет. Надо добавить свое соединение в коллекцию типа ИсточникЗакупки.Соединения.Добавить(...) потом найти добавленное через индекс или через ИсточникЗакупки.Соединения.НайтиПоПсевдониму и найденному установить ТипСоединения
10 first_may
 
16.12.21
23:38
(9) хорошо.. у меня так

Запрос   = СхемаЗапроса.ПакетЗапросов[0];
Оператор = Запрос.Операторы[0];

ЗначенияДополнительныхСвойств = Оператор.Источники.Добавить("РегистрСведений.ЗначенияДополнительныхСвойств", "ЗначенияДополнительныхСвойств");


ЗначенияДополнительныхСвойств.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.ЛевоеВнешнее; - и вот тут ошибка, так как нет соединения..


получается что надо дописать
ЗначенияДополнительныхСвойств.Соединения.Добавить("ЗначенияДополнительныхСвойств", а тут с чем и как соединяюсь)
11 first_may
 
16.12.21
23:44
если так пишу, то в тексте запроса получается


...
   РегистрСведений.ЗначенияДополнительныхСвойств КАК ЗначенияДополнительныхСвойств - это после первой строки

   ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияДополнительныхСвойств КАК ЗначенияДополнительныхСвойств
      ПО (РеестрДокументов.Ссылка = ЗначенияДополнительныхСвойств.Документ)  - это после второй строки
12 exwill
 
17.12.21
00:30
(0) Все соединения должны быть у первого источника. Не спрашивай - почему. Просто работай только с первым источником

ИСТОЧНИКНОМЕНКЛАТУРА.Соединения[0].ТипСоединения =
13 first_may
 
17.12.21
00:35
(9) спасибо.. сообразил..
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой