Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Корректно отработать цикл в цикле
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
ignsv
Ситуация следующая:

Выбираю изменения цен за период
потом начинаю их соответственно выводить( заранее сформировал шапку табДока с датами изменения)

в ТабЗнач храниться все возможные даты изменений
никак не могу организовать праильно в цикле обход

Пример: получаю Дату1 (01.04.12), всего в списке: 01.04.12/05.04.12/10.04.12
сравниваю и поидее должен получить: Область с датой пусто, пусто
то тут все будет норм, ошибки появляються когда у меня несколько дат изменения тогда выводиться : область с датой, пусто,пусто + пусто, область сдатой, пусто, а надо: область с датой,а надо: область с датой, пусто.
Уже прирывал цикл и прочее.

Прошу помощи ибо никак не могу разобраться с такими циклами что б на будущее правильно использовать




    
        Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
                
                Для каждого ЗаписьПериод Из ТабЗнач Цикл
                    Если ВыборкаДетальныеЗаписи1.Период = ЗаписьПериод.Период Тогда
                        ОбластьДоп.Параметры.История    = ВыборкаДетальныеЗаписи1.Цена;  
                        ТабДок.Присоединить(ОбластьДоп);    
                        Продолжить;
                    Иначе
                    ТабДок.Присоединить(ОбластьДопПусто);
                    КонецЕсли;
                КонецЦикла;
                
            КонецЦикла;
Ardi
"А надо надо а надо надо надо а надо" - этот фрагмент описания получился несколько нечитаемым.
ignsv
Таки да. опечатка ))

Пример:

Есть Номенклатура с ценами на 01,01,11 и на 01,01,12 (тоесть две записи в ВыборкаДетальныеЗаписи1)

Всего дат изменения цен ( для всех позиций товаров) у меня три 01,01,10 / 01,01,11 / 01,01,12

мне нужно вывисти в макет : пустую область / область с ценой/ область с ценой



у меня жи выводиться шесть полей всего ( из них две с ценами)
Ardi
ничего не понтно.
logist
А Вы можете написать исходную задачу, и указать конфигурацию, а то из того что написано не всё ясно. Мне кажется что вы вообще не правильным путем идете.
ignsv


По калькулятору цена менялась 31,12,10 и 01,12,11 надо вывести в соответствующих колонках

по зеркалу 01,11,11 и 01,12,11 аналогично

по коду:
у меня в ТабЗнач все варианты дат ( шапка с датами)

в ВыборкаДетальныеЗаписи1 дата когда изменялась цена для номенклатуры

все посортировано по датам

УТП 1,2,7,4
остатки с регистра Товары на складах
цены с регистра Цены номенклатуры
Ardi
ТабЗначДаты = ТабЗнач.Выгрузить();
ТабЗначДаты.Свернуть("Период");
ТабЗначДаты.Сортировать("Период Убыв");

Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
для Каждого текДата из ТабЗначДаты Цикл
Отбор = Новый Структура();
Отбор.Вставить("ФизЛицо",Справочники.ФизическиеЛица.ПустаяСсылка());
Отбор.Вставить("фирма",Справочники.фирма.ПустаяСсылка());
Отбор.Вставить("номенклатура",Справочники.номенклатура.ПустаяСсылка());
Строки = ТабЗнач.НайтиСтроки(Отбор);
Если Строки.Количество() > 0 Тогда
    Цена = Строки[0];
Иначе
Цена = 0;
КонецЕсли;
ОбластьДоп.Параметры.История    = ВыборкаДетальныеЗаписи1.Цена;  
ТабДок.Присоединить(ОбластьДоп);  
КонецЦикла;
КонецЦикла;
ignsv
не тут что то не так:

Для Каждого текДата из ТабЗначДаты Цикл
Отбор = Новый Структура();
Отбор.Вставить("ФизЛицо",Справочники.ФизическиеЛица.ПустаяСсылка());
Отбор.Вставить("фирма",Справочники.фирма.ПустаяСсылка());
Отбор.Вставить("номенклатура",Справочники.номенклатура.ПустаяСсылка());
Строки = ТабЗнач.НайтиСтроки(Отбор);
Если Строки.Количество() > 0 Тогда
    Цена = Строки[0];
Иначе
Цена = 0;
КонецЕсли;
ОбластьДоп.Параметры.История    = ВыборкаДетальныеЗаписи1.Цена;  
ТабДок.Присоединить(ОбластьДоп);  
КонецЦикла;


Возьмем внутренний цикл если у нас будет 3 даты в ТабЗначДаты
и две в ВыборкаДетальныеЗаписи1 то присоединиться облпсть 6 раз.

NP = Результат1.Выгрузить();
            ВыборкаДетальныеЗаписи1 = Результат1.Выбрать();
            
            
            ТабДок.Вывести(ОбластьДетальныхЗаписей);
            // номер = 0;
            // Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
                 для Каждого текДата из ТабЗнач Цикл
                     Отбор = Новый Структура();
                     //Отбор.Вставить("ФизЛицо",Справочники.ФизическиеЛица.ПустаяСсылка());
                     //Отбор.Вставить("фирма",Справочники.фирма.ПустаяСсылка());
                     Отбор.Вставить("Период",текДата.Период);
                     Строки = NP.НайтиСтроки(Отбор);
                     Если Строки.Количество() > 0 Тогда
                         Цена = Строки[0].Цена;
                     Иначе
                         Цена = 0;
                     КонецЕсли;
                     ОбластьДоп.Параметры.История    = Цена;  
                     ТабДок.Присоединить(ОбластьДоп);
                     ОбработкаПрерыванияПользователя();
                    // Прервать;
                 КонецЦикла;


так работает норм, спасибо за помощь
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.