Имя: Пароль:
1C
 
Установка флажка в зависимости от состояния
0 miniconda
 
11.11.19
19:43
У меня есть БП МойБизнесПроцесс, в котором есть много заявок, связанных с закупками. У каждой заявки есть форма с реквизитами "Номер заявки" и флажком "Оплачено".
Мне нужно сделать так, чтобы при нажатии на кнопку на внешней обработке проверялись все заявки у БП, делался запрос в 1С Бухгалтерию (реализовано уже) и
ставились флажки, если в Бухгалтерии в подобных заявках статус "Оплачено".

Но есть одно НО! Мне сказали, что делать запрос внутри цикла = мовитон (у меня в голове было так: я бегу по заявкам с помощью цикла, если "Номер заявки" заполнен,
то делаю запрос), поэтому надо как-то иначе. Но что-то не приходит в голову как реализовать, чтобы было по православному :))

Пока что реализовал запрос, в котором получаю ТЗ с данными конкретной задачи.

ТЗ = Новый ТаблицаЗначений;
    ТекстЗапроса = "ВЫБРАТЬ
    | ДокументБух.Номер КАК Номер,
    | ДокументБух.Дата КАК Дата,
    | ВЫБОР
    |     КОГДА ДокументБух.СостоянияОбъектов = ЗНАЧЕНИЕ(Перечисление.СостоянияОбъектов.Оплачено) ТОГДА
    |         ИСТИНА      
    |     ИНАЧЕ
    |         ЛОЖЬ
    |     КОНЕЦ КАК СОСТОЯНИЕ
    | ИЗ
    | Документ.ДокументБух КАК ДокументБух
    | ГДЕ
    | ДокументБух.Номер = ""&Номер""
    | и
    | ГОД(ДокументБух.Дата) = 2019";
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&Номер","З-21842");
    ТЗ = ВыполнитьЗапросКВнешней1С(ТекстЗапроса);
    КонецЕсли;
    КонецЦикла
1 Волшебник
 
11.11.19
19:50
>> СтрЗаменить(ТекстЗапроса,"&Номер","З-21842");

это тоже моветон
2 miniconda
 
11.11.19
20:29
(1) возможно, но если опустить этот момент, как можно реализовать задуманное?
3 Волшебник
 
11.11.19
20:31
(2) сделайте 1 запрос на все данные за пределами цикла
4 miniconda
 
11.11.19
20:40
(3) и потом уже сравнивать по Номеру заявки в результате запроса искать Состояние?
Вероятно, этот запрос будет выполняться довольно долго, и это не лучшая идея
5 ДенисЧ
 
11.11.19
20:57
(4) Прежде чем считать вероятности - попробуй.
6 ДенисЧ
 
11.11.19
20:58
И да, вот это
| ДокументБух.Номер = ""&Номер""
...
В приличном обществе за такое бьют канделябром.
В неприличном - этот канделябр запихивают в...
7 miniconda
 
11.11.19
22:38
(5) да я вот попробовал, в самом деле если брать все, то очень долго.

Да и насчет ""&Номер"" - это же я чисто проверял для конкретного примера, а мне надо пройтись по всем(
8 Радим1987
 
11.11.19
22:44
Я обычно такие вещи делаю через схемы запроса

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |    ПервичныйАкт.Ссылка КАК Ссылка
                   |ПОМЕСТИТЬ ВТ
                   |ИЗ
                   |    Документ.кс_ПервичныйАкт КАК ПервичныйАкт
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ВТ.Ссылка КАК Ссылка
                   |ИЗ
                   |    ВТ КАК ВТ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка) КАК КОЛИЧЕСТВО
                   |ИЗ
                   |    ВТ КАК ВТ";
    
    
    Если КоличествоЭлементов > 0 Тогда
        
        СхемаЗапроса = Новый СхемаЗапроса;
        СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);             
        Оператор = СхемаЗапроса.ПакетЗапросов[0].Операторы[0];
        
        Оператор.Отбор.Добавить("ПервичныйАкт.Ссылка В (&Список)");
        
        Запрос.УстановитьПараметр("Список",СтруктураПараметров.Список);               
        Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
        
    КонецЕсли;
    
    МассивРезультатовЗапроса = Запрос.ВыполнитьПакет();
9 Сияющий в темноте
 
11.11.19
23:32
Выбрать все заявки бизнес-процесса,соединить с таблицей с данными оплаты и все.
Но,судя по СтрЗамегить, отойдите от 1с от греха подальше.
10 miniconda
 
12.11.19
19:42
(9) не могли бы вы проконсультировать меня по этому вопросу, совсем зеленый еще в 1С, почему это плохо?)
11 DrZombi
 
гуру
12.11.19
20:13
(10) Бизнес процесс, тоже таблица, как и документ, как и справочник, как и регистр.
Это все таблицы, но своеобразной структуры и содержит стандартный набор реквизитов и так же дополнительный.

Используя соответствующие связи с таблицами, вы получите нужный результат, ОДНИМ запросом.

...Ваш Вопрос: "Как мне это сделать?"....
...Ответ: А я что вижу ваши данные?... как вы там это расположили. Придется вам самим разбирать. :)
12 miniconda
 
12.11.19
21:02
(11) А что конкретно вам хотелось бы увидеть? Могу предоставить, если будете так любезны что-то посоветовать или помочь)