вторник, 2 августа 2016 г.

Запрос, по всем документам, у которых есть общий реквизит




Запрос формируется динамически, по всем документам, у которых имеется общий реквизит "Организация".

 
Процедура Инициализация()
 
 Исключения = Новый Массив;
 Исключения.Добавить("ЗаявкаНаДоставку");
 Исключения.Добавить("ЗаказПокупателя");
 Исключения.Добавить("ЧекККМ");
 
 ТаблицаДокументов = Новый ТаблицаЗначений;
 ТаблицаДокументов.Колонки.Добавить("Имя");
 ТаблицаДокументов.Колонки.Добавить("Реквизит");
 
 Для Каждого Док Из Метаданные.Документы Цикл
  Если Исключения.Найти(Док.Имя) <> Неопределено Тогда
   Продолжить;
  КонецЕсли;
  Если Док.Реквизиты.Найти("Организация") = Неопределено Тогда
   Продолжить;
  КонецЕсли;
  Нов = ТаблицаДокументов.Добавить();
  Нов.Имя = Док.Имя;
 КонецЦикла;
 
 ТекстЗапроса = "";
 
 Для Каждого Стр Из ТаблицаДокументов Цикл
  Если ТаблицаДокументов.Индекс(Стр) = 0 Тогда
   ТекстЗапроса = ТекстЗапроса + "
  | ВЫБРАТЬ РАЗРЕШЕННЫЕ";
  Иначе 
   ТекстЗапроса = ТекстЗапроса + "
  | ВЫБРАТЬ";
  КонецЕсли;
   
   ТекстЗапроса = ТекстЗапроса + "
  | РеализацияТоваровУслуг.Ссылка,
  | РеализацияТоваровУслуг.Организация,
  | """ + Стр.Имя + """ КАК Вид
  |ИЗ
  | Документ." + Стр.Имя + " КАК РеализацияТоваровУслуг
  |ГДЕ
  | РеализацияТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2
  |{ГДЕ
  | РеализацияТоваровУслуг.Проведен,
  | РеализацияТоваровУслуг.ПометкаУдаления,
  | РеализацияТоваровУслуг.Дата,
  | РеализацияТоваровУслуг.Организация.*}
  |";
  Если ТаблицаДокументов.Индекс(стр)+ 1 <> ТаблицаДокументов.Количество() Тогда
   ТекстЗапроса = ТекстЗапроса + "
   |ОБЪЕДИНИТЬ ВСЕ
   |";
  КонецЕсли;
 КонецЦикла;
 
 Построитель.Текст = ТекстЗапроса;
 Построитель.ЗаполнитьНастройки();
 
 Отбор = Построитель.Отбор.Найти("Организация");
 Если Отбор = Неопределено Тогда
  Отбор = Построитель.Отбор.Добавить("Организация");
 КонецЕсли;
 
КонецПроцедуры 
 
Или Вот такая конструкция:

ТекстЗапроса = "";

Для Каждого Тип Из ТипыШаблонов Цикл
 ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", "
 |ОБЪЕДИНИТЬ ВСЕ")
 + "
 |ВЫБРАТЬ " + ?(ПустаяСтрока(ТекстЗапроса),"РАЗРЕШЕННЫЕ","") + "
 | ПредметыШаблона.Ссылка КАК ШаблонБизнесПроцесса,
 | ПредметыШаблона.РольПредмета,
 | ПредметыШаблона.ИмяПредмета
 |ИЗ
 | %Таблица%.Предметы КАК ПредметыШаблона
 |ГДЕ
 | ПредметыШаблона.Ссылка В (&ШаблоныЭтапа)";
 ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%Таблица%", Тип.Значение);
КонецЦикла;