Версия для печати темы (https://pro1c.org.ua/index.php?s=eaa468a7d6b81dcb3c24f0c3e2ae47ac&showtopic=59151)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Произвольное условие (запрос) для разных документов

Автор: Constantus 22.05.20, 12:06

Приветствую, Форумчане!
1с8.3.12, УФ, самопис

В одном из документов есть вкладка с произвольным условием запрос в текстовом формате (упрощенный пример) Условие_ПроизвольноеУсловие:

Контекст.Подходит = Ложь;
Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
|    ЗаказМодельИКомплектация.Номенклатура КАК Номенклатура
|ИЗ
|    Документ.Заказ.МодельИКомплектация КАК ЗаказМодельИКомплектация
|ГДЕ
|    ЗаказМодельИКомплектация.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Контекст.Объект);

Если НЕ Запрос.Выполнить().Пустой() Тогда
    Контекст.Подходит = Истина;
КонецЕсли;


Запускается это в одном из модулей

    Контекст = Новый Структура("Объект, Акция, Подходит", Объект, Акция, Ложь);
        Попытка
            Выполнить(Акция.Условие_ПроизвольноеУсловие);
        Исключение
            ОписаниеОшибки = ОписаниеОшибки();
        КонецПопытки;


Всё это работает, но вот пришла беда.
Если посмотреть код, то это произвольное условие срабатывает жестко только на один тип документов "Заказ"
Документ.ЗАКАЗ.МодельИКомплектация КАК ЗаказМодельИКомплектация


Теперь решили эту гадость распространить и на другой документ "Консультации", т.е. каким-то волшебным способом этот текст произвольного условия должен превратиться в
Документ.КОНСУЛЬТАЦИИ.МодельИКомплектация КАК ЗаказМодельИКомплектация


Сможете посоветовать как можно программно это изменить?
Типа

Контекст = Новый Структура("Объект, Акция, Подходит, ДокументПоиска", Объект, Акция, Ложь, "Заказ"/"Консультации");
Документ.[ДокументПоиска].МодельИКомплектация КАК ЗаказМодельИКомплектация



Автор: denis84 22.05.20, 12:32

Constantus @ Сегодня, 13:06 * ,
Добрый день! Возможно такой пример Вас натолкнет на правильный путь:

Запрос = Новый Запрос; 
    Для каждого Объектконф Из Метаданные.Документы Цикл
                ТекстЗапрос =   "ВЫБРАТЬ
                        |   Док.Ссылка
                        |ИЗ
                        |   Документ." + Объектконф.Имя + " КАК Док";  
        
        Запрос.Текст = ТекстЗапрос;    
        РезультатЗапроса = Запрос.Выполнить().Выбрать();
        Пока РезультатЗапроса.Следующий() цикл
            
             Сообщить(РезультатЗапроса.Ссылка);
        КонецЦикла;

Автор: Constantus 22.05.20, 13:17

denis84 @ Сегодня, 16:32 * ,
Да, по такому пути пытаюсь идти

Автор: Vofka 22.05.20, 13:19

Constantus, не очень понятно почему, если это текстовое поле, нельзя написать

Контекст.Подходит = Ложь;
Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
|    ЗаказМодельИКомплектация.Номенклатура КАК Номенклатура
|ИЗ
|    Документ.Консультации.МодельИКомплектация КАК ЗаказМодельИКомплектация
|ГДЕ
|    ЗаказМодельИКомплектация.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Контекст.Объект);

Если НЕ Запрос.Выполнить().Пустой() Тогда
    Контекст.Подходит = Истина;
КонецЕсли;


?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua