Вход | Регистрация
 

Вопрос по элементам цикла

Вопрос по элементам цикла
Я
   Nemirov
 
09.06.20 - 16:00
Можно ли использовать Элементы одного цикла в другом Например: Для каждого Элемент1 из тзРезультат1 цикл //Элемент1 использовать в цикле Для каждого Элемент2 из тзРезультат2 цикл?
или как сделать что бы первоначальный цикл не маслал несколько раз второй цикл?
Для каждого стр из тзРезультат цикл
    Если НЕ ИспользоватьАртикул Тогда
        Если   Не СокрЛП(Стр.Наименование) = "" тогда
            Для Каждого СтрЗапроса из Выборка цикл
            Если Не СокрЛП(СтрЗапроса.Наименование) = "" тогда
            Если Сокрлп(СтрЗапроса.НоменклатураТЗПоставщика) = СокрЛП(Стр.Наименование)  Тогда
            стр.НоменклатураСсылка =  Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(СтрЗапроса.НоменклатураНаша));
                Иначе
                Отказ = Истина;
                Сообщить("Нет привязки номенклатуры " + СокрЛП(Стр.Наименование),СтатусСообщения.ОченьВажное);
                КонецЕсли ;         
                КонецЕсли;
                КонецЦикла ;
                Продолжить;
                КонецЕсли;                КонецЦикла;
   Волшебник
 
Модератор
1 - 09.06.20 - 16:01
Можно
   Nemirov
 
2 - 09.06.20 - 16:02
(1) Возвратом?
   lodger
 
3 - 09.06.20 - 16:07
(0) задачу логически опиши нормально.
тебе не нужно 2 цикла и тем более не нужно "первоначальный цикл не маслал несколько раз второй цикл".
нужен обход одного цикла и поиск по ключам в таблице\массиве.
   palpetrovich
 
4 - 09.06.20 - 16:08
НайтиСтроки пользуй
и вот это НайтиПоНаименованию - обязательно? сразу в тзРезультат  нельзя получить?
   Nemirov
 
5 - 09.06.20 - 16:14
(4) все данные из файла беруться
   Nemirov
 
6 - 09.06.20 - 16:15
(4) там только наименование строковое
   Волшебник
 
Модератор
7 - 09.06.20 - 16:15
(2) команда Прервать прерывает цикл, внутри которого она находится
   dka80
 
8 - 09.06.20 - 16:15
Задачу опиши
   Nemirov
 
9 - 09.06.20 - 16:16
(7) Спасибо
   Nemirov
 
10 - 09.06.20 - 16:22
(8) Для каждого стр из тзРезультат цикл                                                      //Нужно обойти каждый элемент этой ТЗ

       Для Каждого СтрЗапроса из Выборка цикл                                                // Тут Беру элементы из выборки

             Если Сокрлп(СтрЗапроса.НоменклатураТЗПоставщика) = СокрЛП(Стр.Наименование)  Тогда//чтобы сравнить элемент из выборки с элементом тзРезультат 

                стр.НоменклатураСсылка =  Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(СтрЗапроса.НоменклатураНаша));  //Если истина тогда присваиваем  стр.НоменклатураСсылка значение Выборки в 

                                                                                                                                                                                      // ссылочном виде

                Иначе
                  Сообщить("Нет привязки номенклатуры " + СокрЛП(Стр.Наименование),СтатусСообщения.ОченьВажное);    //  иначе сообщаем ошибку так понятнее????

             КонецЕсли;            
           КонецЦикла ;
   КонецЦикла;
   Nemirov
 
11 - 09.06.20 - 16:24
(10) Но получается что вначале второй цикл пройдет все строки возвращается к следующей строчке первого цикла и так по порядку... Вопрос был в том как переделать циклы что бы каждая строчка первого цикла не крутила полностью второй цикл.
   Ёпрст
 
12 - 09.06.20 - 16:28
(10) всё в топку
   Ёпрст
 
13 - 09.06.20 - 16:30
Выборка - Это что у вас ?
   Ненавижу 1С
 
14 - 09.06.20 - 16:31
+(12) все в запрос
   Nemirov
 
15 - 09.06.20 - 16:31
(13) Внатуре!!  Выборка = ЗапросТз.Выполнить().Выгрузить();
   Ёпрст
 
16 - 09.06.20 - 16:32
(15) а ТзРезультат откуда ?
   Cthulhu
 
17 - 09.06.20 - 16:38
ну так вместо второго говнокодо-цикла - тупо поиск в ТЗ.
   Nemirov
 
18 - 09.06.20 - 16:42
(16) Тз Результат из файла в таблицу тип "строка"
   Волшебник
 
Модератор
19 - 09.06.20 - 16:43
Здесь достаточно одного запроса. Циклы вообще не нужны.
   Волшебник
 
Модератор
20 - 09.06.20 - 16:44
Надо одной строкой выгрузить список наименований номенклатуры поставщика в параметр запроса или временную таблицу, который выберет то, что есть в базе.
   Ёпрст
 
21 - 09.06.20 - 16:50
(18) тогда тип того:
Запрос = Новый Запрос("
|Выбрать Табличка.Наименование как Наименование Поместить Табличка ИЗ &Табличка как Табличка;
|Выбрать Табличка.Наименование,EстьNULL(СправочникНоменклатура.ССылка,""нихрена нету такого наименования"" ИЗ Табличка как Табличка Левое Соединение Справочник.Номенклатура как СправочникНоменклатура ПО Подстрока(СправочникНоменклатура.Наименование,1,200) = Подстрока(Табличка.Наименование,1,200)");

Запрос.УстановитьПараметр("Табличка",ТзРезультат)//в ТЗРезультат должна быть типизированная колонка "Наименование" 

Запрос.Выполнить().Выгрузить().ВыбратьСтроку()


Не оптимально, но сойдёт, для области
   Nemirov
 
22 - 09.06.20 - 16:51
(20) Это хорошо но как я сравню строки в запросе если их надо отфарматировать от лишних символов как я делал в цикле?
   Волшебник
 
Модератор
23 - 09.06.20 - 17:01
(22) Тогда сначала цикл по таблице значений, форматирование. Потом запрос, который выбирает только то, что нужно. Потом цикл по результату запросу.

В данном случае цикла внутри цикла быть не должно. Номенклатур может быть 10 тысяч позиций. Если вложить циклами, то получится 100 000 000 витков.

Поэтому надо изменять на поиск по индексу или доверить всю работу запросу.


Список тем форума
Рекламное место пустует  Рекламное место пустует
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.