[РЕШЕНО] Обращение к массиву из запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Anutko, 4 авг 2016.

  1. TopicStarter Overlay
    Anutko
    Offline

    Anutko

    Регистрация:
    16 сен 2014
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Имеется обработка. В форме обработки - список фильтров, который может иметь разное количество значений в зависимости от настроек.
    Результат обработки формируется через запрос с переменным количеством условий, соответствующих количеству фильтров.
    Список фильтров, я так понимаю, можно записать в массив и потом в условиях запроса извлекать по номеру элемента.
    Как объявить этот массив в тексте запроса и обращаться к нему - какой синтаксис?
    Последнее редактирование: 4 авг 2016
  2. TopicStarter Overlay
    Anutko
    Offline

    Anutko

    Регистрация:
    16 сен 2014
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Уф... Заработало. Правда, я так и не поняла, в чём был мой косяк. То есть, в итоге оказалось, что достаточно объявить массив в процедуре, а не в самом запросе. Но я вроде пробовала и так, оно не работало, а потом заработало внезапно.
  3. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    О интересно , пример бы в студию ...
  4. TopicStarter Overlay
    Anutko
    Offline

    Anutko

    Регистрация:
    16 сен 2014
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    В общем, суть обработки - в пакетной замене реквизитов в любом документе или справочнике по заданным параметрам. Список фильтров соответствует списку реквизитов выбранного документа/справочника. Соответственно, заранее неизвестно, сколько их будет.
    Обработка была на украинском, я её перевела и оптимизировала немношк )

    Исходный фрагмент был такой:
    Код:
        Сч=1;
        табФільтр.ВыбратьСтроки();
        Пока табФільтр.ПолучитьСтроку()=1 Цикл
            Если (ПустоеЗначение(табФільтр.Значення)=0) Тогда
                Если Сч=1 Тогда МФ_1=табФільтр.Значення; ИначеЕсли Сч=2 Тогда МФ_2=табФільтр.Значення;
                ИначеЕсли Сч=3 Тогда МФ_3=табФільтр.Значення; ИначеЕсли Сч=4 Тогда МФ_4=табФільтр.Значення;
                ИначеЕсли Сч=5 Тогда МФ_5=табФільтр.Значення; ИначеЕсли Сч=6 Тогда МФ_6=табФільтр.Значення;
                ИначеЕсли Сч=7 Тогда МФ_7=табФільтр.Значення; ИначеЕсли Сч=8 Тогда МФ_8=табФільтр.Значення;
                ИначеЕсли Сч=9 Тогда МФ_9=табФільтр.Значення; ИначеЕсли Сч=10 Тогда МФ_10=табФільтр.Значення;
                ИначеЕсли Сч=11 Тогда МФ_11=табФільтр.Значення; ИначеЕсли Сч=12 Тогда МФ_12=табФільтр.Значення;
                ИначеЕсли Сч=13 Тогда МФ_13=табФільтр.Значення; ИначеЕсли Сч=14 Тогда МФ_14=табФільтр.Значення;
                ИначеЕсли Сч=15 Тогда МФ_15=табФільтр.Значення; ИначеЕсли Сч=16 Тогда МФ_16=табФільтр.Значення;
                ИначеЕсли Сч=17 Тогда МФ_17=табФільтр.Значення; ИначеЕсли Сч=18 Тогда МФ_18=табФільтр.Значення;
                ИначеЕсли Сч=19 Тогда МФ_19=табФільтр.Значення; ИначеЕсли Сч=20 Тогда МФ_20=табФільтр.Значення;
                ИначеЕсли Сч=21 Тогда МФ_21=табФільтр.Значення; ИначеЕсли Сч=22 Тогда МФ_22=табФільтр.Значення;
                ИначеЕсли Сч=23 Тогда МФ_23=табФільтр.Значення; ИначеЕсли Сч=24 Тогда МФ_24=табФільтр.Значення;
                ИначеЕсли Сч=25 Тогда МФ_25=табФільтр.Значення; ИначеЕсли Сч=26 Тогда МФ_26=табФільтр.Значення;
                ИначеЕсли Сч=27 Тогда МФ_27=табФільтр.Значення; ИначеЕсли Сч=28 Тогда МФ_28=табФільтр.Значення;
                ИначеЕсли Сч=29 Тогда МФ_29=табФільтр.Значення; ИначеЕсли Сч=30 Тогда МФ_30=табФільтр.Значення;
                ИначеЕсли Сч=31 Тогда МФ_31=табФільтр.Значення; ИначеЕсли Сч=32 Тогда МФ_32=табФільтр.Значення;
                ИначеЕсли Сч=33 Тогда МФ_33=табФільтр.Значення; ИначеЕсли Сч=34 Тогда МФ_34=табФільтр.Значення;
                ИначеЕсли Сч=35 Тогда МФ_35=табФільтр.Значення; ИначеЕсли Сч=36 Тогда МФ_36=табФільтр.Значення;
                ИначеЕсли Сч=37 Тогда МФ_37=табФільтр.Значення; ИначеЕсли Сч=38 Тогда МФ_38=табФільтр.Значення;
                ИначеЕсли Сч=39 Тогда МФ_39=табФільтр.Значення; ИначеЕсли Сч=40 Тогда МФ_40=табФільтр.Значення;
                ИначеЕсли Сч=41 Тогда МФ_41=табФільтр.Значення; ИначеЕсли Сч=42 Тогда МФ_42=табФільтр.Значення;
                ИначеЕсли Сч=43 Тогда МФ_43=табФільтр.Значення; ИначеЕсли Сч=44 Тогда МФ_44=табФільтр.Значення;
                ИначеЕсли Сч=45 Тогда МФ_45=табФільтр.Значення; КонецЕсли;
                ТекстЗапроса=ТекстЗапроса+"Условие(Док."+табФільтр.Реквізит+" "+табФільтр.Параметр+" МФ_"+Сч+");
                |";
                Сч=Сч+1;
            КонецЕсли;
        КонецЦикла;
    После оптимизации стал такой:
    Код:
        Сч = 1;   
        табФильтр.ВыбратьСтроки();
        Пока табФильтр.ПолучитьСтроку() = 1 Цикл
            Если (ПустоеЗначение(табФильтр.Значение) = 0) Тогда  
                МФ[Сч] = табФильтр.Значение;
                ТекстЗапроса = ТекстЗапроса + "Условие(Док." + табФильтр.Реквизит + " " + табФильтр.Параметр + "МФ["+Сч+"]" + ");
                |"; 
                Сч = Сч + 1;
            КонецЕсли;
        КонецЦикла;  
    В начале модуля там и там объявляется массив, только у автора он был с чёрточкой:
    Код:
    Перем МФ_[45];
    а у меня без:
    Код:
    Перем МФ[45];

Поделиться этой страницей