Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 мая 2024, 01:34

сравнить в цикле предыдущее найденное значение с найденным

Автор aleks-lit, 19 сен 2013, 13:08

0 Пользователей и 1 гость просматривают эту тему.

aleks-lit

сравнить в цикле предыдущее найденное значение с найденным


ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"регистратор");
   Пока ВыборкаПериод.Следующий() Цикл
      фл=0;ИтогПодработкиДень=0;
      ВыборкаКонтрагент = ВыборкаПериод.Выбрать();
      Пока ВыборкаКонтрагент.Следующий() Цикл

         НомерСтроки = НомерСтроки + 1;
         ОбластьДетальныхЗаписей.Параметры.КоличествоСтр = НомерСтроки;
         ОбластьДетальныхЗаписей.Параметры.ДатаДок = Формат(ВыборкаПериод.Регистратор,"ДФ=dd.MM.yy");
         Если ОбластьДетальныхЗаписей.Параметры.ДатаДок -1 <> ОбластьДетальныхЗаписей.Параметры.ДатаДок тогда
            фл=1
         иначе
            фл=0
         конецесли;


         ОбластьДетальныхЗаписей.Параметры.Контрагент = ВыборкаКонтрагент.Владелец;         

Dethmontt

ВыборкаКонтрагент = ВыборкаПериод.Выбрать();
ПредыдущееНайденноеЗначение = Неопределено;
Пока ВыборкаКонтрагент.Следующий() Цикл
   Если НЕ ПредыдущееНайденноеЗначение = Неопределено тогда
       Сообщить("Предыдущее и текущее значения равны? Ответ: "+выборка.ТекущееЗначение = ПредыдущееНайденноеЗначение);
   КонецЕсли;
   //....
   //....

   ПредыдущееНайденноеЗначение = Выборка.ТекущееЗначение;
КонецЦикла;
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

aleks-lit

Цитата: Dethmontt от 19 сен 2013, 13:51
ВыборкаКонтрагент = ВыборкаПериод.Выбрать();
ПредыдущееНайденноеЗначение = Неопределено;
Пока ВыборкаКонтрагент.Следующий() Цикл
   Если НЕ ПредыдущееНайденноеЗначение = Неопределено тогда
       Сообщить("Предыдущее и текущее значения равны? Ответ: "+выборка.ТекущееЗначение = ПредыдущееНайденноеЗначение);
   КонецЕсли;
   //....
   //....

   ПредыдущееНайденноеЗначение = Выборка.ТекущееЗначение;
КонецЦикла;


я тут покумекал и сделал так:


старЗнач = "";

Пока ВыборкаПериод.Следующий() Цикл
фл=0;ИтогПодработкиДень=0;
ВыборкаКонтрагент = ВыборкаПериод.Выбрать();

//для с = 1 по 10 цикл
  новЗнач =Формат(ВыборкаПериод.Регистратор,"ДФ=dd.MM.yy");
//если старЗнач <> "" тогда
если старЗнач <> новЗнач тогда
если старЗнач = "" тогда
фл=0
Иначе
фл=1
конецесли;
  иначе
    фл=0

КонецЕсли;
         

Если фл=1 Тогда
ОбластьДетальныхЗаписейДень.Параметры.ИтогоЗаДень = "ИТОГО за "+Формат(старЗнач,"ДФ=dd.MM.yy");
                        .............. и тд

         

но есть один косяк за последний день не выводится итог

Yura063

Поставьте после цикла Вывод последнего значения!
Помогли, отблагодари!

aleks-lit

Цитата: Yura063 от 20 сен 2013, 12:15
Поставьте после цикла Вывод последнего значения!

что именно? если поставить после цикла тот же код с оператором "если", то повторяется тоже самое(со сдвигом на 1 позицию.

   
ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"регистратор");
старЗнач = "";
КоличествоПриходЗаДень =  Число(0) ;
Пока ВыборкаПериод.Следующий() Цикл
фл=0;ИтогПодработкиДень=0;
ВыборкаКонтрагент = ВыборкаПериод.Выбрать();

//для с = 1 по 10 цикл
  новЗнач =Формат(ВыборкаПериод.Регистратор,"ДФ=dd.MM.yy");
//если старЗнач <> "" тогда
если старЗнач <> новЗнач тогда
если старЗнач = "" тогда
фл=0
Иначе
фл=1
конецесли;
  иначе
    фл=0

КонецЕсли;
         

Если фл=1 Тогда
ОбластьДетальныхЗаписейДень.Параметры.ИтогоЗаДень = "ИТОГО за "+Формат(старЗнач,"ДФ=dd.MM.yy");

//итог количество день

ОбластьДетальныхЗаписейДень.Параметры.КоличествоРасход = ВыборкаПериод.КоличествоРасход-ИтогПодработкиДень;//минус подработка по влажности
ОбластьДетальныхЗаписейДень.Параметры.КоличествоПриход = КоличествоПриходЗаДень;
//итог влажность-сорность день
ОбластьДетальныхЗаписейДень.Параметры.ПриходВлажностьЦП  = ВыборкаПериод.ВлажностьПриход;
ОбластьДетальныхЗаписейДень.Параметры.ПриходСорностьЦП   = ВыборкаПериод.СорностьПриход;
ОбластьДетальныхЗаписейДень.Параметры.РасходВлажностьЦП  = ВыборкаПериод.ВлажностьРасход;
ОбластьДетальныхЗаписейДень.Параметры.РасходСорностьЦП   = ВыборкаПериод.СорностьРасход;


ОбластьДетальныхЗаписейДень.Параметры.Остаток = НачОстаток;
ОбластьДетальныхЗаписейДень.Параметры.Подработка = ?(ИтогПодработкиДень>0,"подр: влажность "+ИтогПодработкиДень,"");

ТабДок.Вывести(ОбластьДетальныхЗаписейДень);

//Сумма итогов
ИтогВлажностьПриход=ИтогВлажностьПриход+ВыборкаПериод.ВлажностьПриход;
ИтогСорностьПриход=ИтогСорностьПриход+ВыборкаПериод.СорностьПриход;
ИтогВлажностьРасход=ИтогВлажностьРасход+ВыборкаПериод.ВлажностьРасход;
ИтогСорностьРасход=ИтогСорностьРасход+ВыборкаПериод.СорностьРасход;

ИтогКоличествоПриход=ИтогКоличествоПриход+ВыборкаПериод.КоличествоПриход;
ИтогКоличествоРасход=ИтогКоличествоРасход+ВыборкаПериод.КоличествоРасход;

ИтогПодработки = ИтогПодработки+ИтогПодработкиДень;
КоличествоПриходЗаДень =  Число(0) ;

            КонецЕсли;
              старЗнач = новЗнач;

Пока ВыборкаКонтрагент.Следующий() Цикл



//КоличествоПриходЗаДень = КоличествоПриходЗаДень + формат(ОбластьДетальныхЗаписей.Параметры.КоличествоПриход,"ЧДЦ=0");
// ВыборкаПериод.КоличествоПриход
НомерСтроки = НомерСтроки + 1;
ОбластьДетальныхЗаписей.Параметры.КоличествоСтр = НомерСтроки;
ОбластьДетальныхЗаписей.Параметры.ДатаДок = Формат(ВыборкаПериод.Регистратор,"ДФ=dd.MM.yy");
//Иначе
//фл=0
//конецесли;

//конеццикла
//Если ОбластьДетальныхЗаписей.Параметры.ДатаДок -1 <> ОбластьДетальныхЗаписей.Параметры.ДатаДок тогда
// фл=1
//иначе
// фл=0
//конецесли;

ОбластьДетальныхЗаписей.Параметры.Контрагент = ВыборкаКонтрагент.Владелец;

//при попадании подработки, дублируем только остаток
Если (ВыборкаКонтрагент.КодОперации = Перечисления.КодыОпераций.СнижениеВлажности) Тогда

ОбластьДетальныхЗаписей.Параметры.Влажность = "";
ОбластьДетальныхЗаписей.Параметры.Сорность  = "";
ОбластьДетальныхЗаписей.Параметры.КоличествоРасход  = "";
ОбластьДетальныхЗаписей.Параметры.КоличествоПриход  = "";
ОбластьДетальныхЗаписей.Параметры.ПриходВлажностьЦП = "";
ОбластьДетальныхЗаписей.Параметры.РасходВлажностьЦП = "";
ОбластьДетальныхЗаписей.Параметры.ПриходСорностьЦП  = "";
ОбластьДетальныхЗаписей.Параметры.РасходСорностьЦП  = "";
ОбластьДетальныхЗаписей.Параметры.Остаток = НачОстаток;
ОбластьДетальныхЗаписей.Параметры.Подработка = "подр: влажность "+ВыборкаКонтрагент.КоличествоРасход;
КоличествоПриходЗаДень = КоличествоПриходЗаДень+Число(0);
ИтогПодработкиДень = ИтогПодработкиДень+ВыборкаКонтрагент.КоличествоРасход;

Иначе

//Анализы рассчитаем % влажности и сорности, исходя из данных центнеро-процентов
Если ВыборкаКонтрагент.КоличествоПриход>0 Тогда//Приход
ОбластьДетальныхЗаписей.Параметры.Влажность = Окр(ВыборкаКонтрагент.ВлажностьПриход/ВыборкаКонтрагент.КоличествоПриход*100,2);
ОбластьДетальныхЗаписей.Параметры.Сорность  = Окр(ВыборкаКонтрагент.СорностьПриход/ВыборкаКонтрагент.КоличествоПриход*100,2);
Иначе//Расход
ОбластьДетальныхЗаписей.Параметры.Влажность = Окр(ВыборкаКонтрагент.ВлажностьРасход/ВыборкаКонтрагент.КоличествоРасход*100,2);
ОбластьДетальныхЗаписей.Параметры.Сорность = Окр(ВыборкаКонтрагент.СорностьРасход/ВыборкаКонтрагент.КоличествоРасход*100,2);
КонецЕсли;

//Масса
ОбластьДетальныхЗаписей.Параметры.КоличествоРасход = ВыборкаКонтрагент.КоличествоРасход;
ОбластьДетальныхЗаписей.Параметры.КоличествоПриход = ВыборкаКонтрагент.КоличествоПриход;

//ЦП
ОбластьДетальныхЗаписей.Параметры.ПриходВлажностьЦП = ВыборкаКонтрагент.ВлажностьПриход;
ОбластьДетальныхЗаписей.Параметры.РасходВлажностьЦП = ВыборкаКонтрагент.ВлажностьРасход;
ОбластьДетальныхЗаписей.Параметры.ПриходСорностьЦП = ВыборкаКонтрагент.СорностьПриход;
ОбластьДетальныхЗаписей.Параметры.РасходСорностьЦП = ВыборкаКонтрагент.СорностьРасход;

//Нач. остаток
    НачОстаток = НачОстаток + ВыборкаКонтрагент.КоличествоПриход - ВыборкаКонтрагент.КоличествоРасход;
КоличествоПриходЗаДень = КоличествоПриходЗаДень + Число(ВыборкаКонтрагент.КоличествоПриход);      // ВыборкаПериод.КоличествоПриход
                                    //заполним комменты по операциям или очищаем прошлое значение подработки
Если (ВыборкаКонтрагент.КодОперации = Перечисления.КодыОпераций.СнижениеСорности)Тогда
ОбластьДетальныхЗаписей.Параметры.Подработка = "подр: сорность";
ИначеЕсли (ВыборкаКонтрагент.КодОперации = Перечисления.КодыОпераций.Аспирация) Тогда
ОбластьДетальныхЗаписей.Параметры.Подработка = "подр: аспирация";
Иначе
ОбластьДетальныхЗаписей.Параметры.Подработка = "";
КонецЕсли;
//КоличествоПриходЗаДень = КоличествоПриходЗаДень + ВыборкаКонтрагент.КоличествоПриход;
КонецЕсли;

//Нач. остаток
            ОбластьДетальныхЗаписей.Параметры.Остаток = НачОстаток;
//КоличествоПриходЗаДень = КоличествоПриходЗаДень + ВыборкаКонтрагент.КоличествоПриход; 

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

//КонецЕсли;


КонецЦикла;
КонецЦикла;


будте добры подскажите куда именно и что подставить.

Yura063

За последний день у вас в любом случае должен выводится?
Помогли, отблагодари!

aleks-lit

Цитата: Yura063 от 20 сен 2013, 14:05
За последний день у вас в любом случае должен выводится?

да должен

Yura063

Есть варианты:
- дублировать полностью код для последней дата, это после цикла по выборке по дате, только без условий.
- менять цикл, то есть, вместо пока Выборка.Следующий() Цикл сделать Пока выборка.дата <> "" цикл (гемора тоже много)
Помогли, отблагодари!

aleks-lit

Цитата: Yura063 от 20 сен 2013, 15:04
Есть варианты:
- дублировать полностью код для последней дата, это после цикла по выборке по дате, только без условий.
- менять цикл, то есть, вместо пока Выборка.Следующий() Цикл сделать Пока выборка.дата <> "" цикл (гемора тоже много)


я пробовал и после конца первого цикла и после 2 цикла но не так работает

Yura063

ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"регистратор");
   старЗнач = "";
   КоличествоПриходЗаДень =  Число(0) ;
   Пока ВыборкаПериод.Следующий() Цикл
      фл=0;ИтогПодработкиДень=0;
      ВыборкаКонтрагент = ВыборкаПериод.Выбрать();
     
            //для с = 1 по 10 цикл
              новЗнач =Формат(ВыборкаПериод.Регистратор,"ДФ=dd.MM.yy");
            //если старЗнач <> "" тогда
               если старЗнач <> новЗнач тогда
                  если старЗнач = "" тогда
                     фл=0
                  Иначе
                     фл=1
                  конецесли;
                 иначе
                                        фл=0
                 
               КонецЕсли;
         
         
         Если фл=1 Тогда
         ОбластьДетальныхЗаписейДень.Параметры.ИтогоЗаДень = "ИТОГО за "+Формат(старЗнач,"ДФ=dd.MM.yy");
         
         //итог количество день
           
         ОбластьДетальныхЗаписейДень.Параметры.КоличествоРасход = ВыборкаПериод.КоличествоРасход-ИтогПодработкиДень;//минус подработка по влажности
         ОбластьДетальныхЗаписейДень.Параметры.КоличествоПриход = КоличествоПриходЗаДень;
         //итог влажность-сорность день
         ОбластьДетальныхЗаписейДень.Параметры.ПриходВлажностьЦП  = ВыборкаПериод.ВлажностьПриход;
         ОбластьДетальныхЗаписейДень.Параметры.ПриходСорностьЦП   = ВыборкаПериод.СорностьПриход;
         ОбластьДетальныхЗаписейДень.Параметры.РасходВлажностьЦП  = ВыборкаПериод.ВлажностьРасход;
         ОбластьДетальныхЗаписейДень.Параметры.РасходСорностьЦП   = ВыборкаПериод.СорностьРасход;
     
         
         ОбластьДетальныхЗаписейДень.Параметры.Остаток = НачОстаток;
         ОбластьДетальныхЗаписейДень.Параметры.Подработка = ?(ИтогПодработкиДень>0,"подр: влажность "+ИтогПодработкиДень,"");

         ТабДок.Вывести(ОбластьДетальныхЗаписейДень);
         
         //Сумма итогов
         ИтогВлажностьПриход=ИтогВлажностьПриход+ВыборкаПериод.ВлажностьПриход;
         ИтогСорностьПриход=ИтогСорностьПриход+ВыборкаПериод.СорностьПриход;
         ИтогВлажностьРасход=ИтогВлажностьРасход+ВыборкаПериод.ВлажностьРасход;
         ИтогСорностьРасход=ИтогСорностьРасход+ВыборкаПериод.СорностьРасход;
         
         ИтогКоличествоПриход=ИтогКоличествоПриход+ВыборкаПериод.КоличествоПриход;
         ИтогКоличествоРасход=ИтогКоличествоРасход+ВыборкаПериод.КоличествоРасход;
         
         ИтогПодработки = ИтогПодработки+ИтогПодработкиДень;
         КоличествоПриходЗаДень =  Число(0) ;

            КонецЕсли;
                 старЗнач = новЗнач;

       Пока ВыборкаКонтрагент.Следующий() Цикл
         
         
               
         //КоличествоПриходЗаДень = КоличествоПриходЗаДень + формат(ОбластьДетальныхЗаписей.Параметры.КоличествоПриход,"ЧДЦ=0");
         // ВыборкаПериод.КоличествоПриход
         НомерСтроки = НомерСтроки + 1;
         ОбластьДетальныхЗаписей.Параметры.КоличествоСтр = НомерСтроки;
         ОбластьДетальныхЗаписей.Параметры.ДатаДок = Формат(ВыборкаПериод.Регистратор,"ДФ=dd.MM.yy");
                      //Иначе
               //фл=0
            //конецесли;
         
         //конеццикла
         //Если ОбластьДетальныхЗаписей.Параметры.ДатаДок -1 <> ОбластьДетальныхЗаписей.Параметры.ДатаДок тогда
         //   фл=1
         //иначе
         //   фл=0
         //конецесли;
         
         ОбластьДетальныхЗаписей.Параметры.Контрагент = ВыборкаКонтрагент.Владелец;
         
         //при попадании подработки, дублируем только остаток
         Если (ВыборкаКонтрагент.КодОперации = Перечисления.КодыОпераций.СнижениеВлажности) Тогда
           
            ОбластьДетальныхЗаписей.Параметры.Влажность = "";
            ОбластьДетальныхЗаписей.Параметры.Сорность  = "";
            ОбластьДетальныхЗаписей.Параметры.КоличествоРасход  = "";
            ОбластьДетальныхЗаписей.Параметры.КоличествоПриход  = "";
            ОбластьДетальныхЗаписей.Параметры.ПриходВлажностьЦП = "";
            ОбластьДетальныхЗаписей.Параметры.РасходВлажностьЦП = "";
            ОбластьДетальныхЗаписей.Параметры.ПриходСорностьЦП  = "";
            ОбластьДетальныхЗаписей.Параметры.РасходСорностьЦП  = "";
            ОбластьДетальныхЗаписей.Параметры.Остаток = НачОстаток;
            ОбластьДетальныхЗаписей.Параметры.Подработка = "подр: влажность "+ВыборкаКонтрагент.КоличествоРасход;
            КоличествоПриходЗаДень = КоличествоПриходЗаДень+Число(0);
            ИтогПодработкиДень = ИтогПодработкиДень+ВыборкаКонтрагент.КоличествоРасход;
           
         Иначе
           
            //Анализы рассчитаем % влажности и сорности, исходя из данных центнеро-процентов
            Если ВыборкаКонтрагент.КоличествоПриход>0 Тогда//Приход
               ОбластьДетальныхЗаписей.Параметры.Влажность = Окр(ВыборкаКонтрагент.ВлажностьПриход/ВыборкаКонтрагент.КоличествоПриход*100,2);
               ОбластьДетальныхЗаписей.Параметры.Сорность  = Окр(ВыборкаКонтрагент.СорностьПриход/ВыборкаКонтрагент.КоличествоПриход*100,2);
            Иначе//Расход
               ОбластьДетальныхЗаписей.Параметры.Влажность = Окр(ВыборкаКонтрагент.ВлажностьРасход/ВыборкаКонтрагент.КоличествоРасход*100,2);
               ОбластьДетальныхЗаписей.Параметры.Сорность = Окр(ВыборкаКонтрагент.СорностьРасход/ВыборкаКонтрагент.КоличествоРасход*100,2);
            КонецЕсли;
           
            //Масса
            ОбластьДетальныхЗаписей.Параметры.КоличествоРасход = ВыборкаКонтрагент.КоличествоРасход;
            ОбластьДетальныхЗаписей.Параметры.КоличествоПриход = ВыборкаКонтрагент.КоличествоПриход;
           
            //ЦП
            ОбластьДетальныхЗаписей.Параметры.ПриходВлажностьЦП = ВыборкаКонтрагент.ВлажностьПриход;
            ОбластьДетальныхЗаписей.Параметры.РасходВлажностьЦП = ВыборкаКонтрагент.ВлажностьРасход;
            ОбластьДетальныхЗаписей.Параметры.ПриходСорностьЦП = ВыборкаКонтрагент.СорностьПриход;
            ОбластьДетальныхЗаписей.Параметры.РасходСорностьЦП = ВыборкаКонтрагент.СорностьРасход;
           
            //Нач. остаток         
             НачОстаток = НачОстаток + ВыборкаКонтрагент.КоличествоПриход - ВыборкаКонтрагент.КоличествоРасход;
            КоличествоПриходЗаДень = КоличествоПриходЗаДень + Число(ВыборкаКонтрагент.КоличествоПриход);      // ВыборкаПериод.КоличествоПриход
                                             //заполним комменты по операциям или очищаем прошлое значение подработки
            Если (ВыборкаКонтрагент.КодОперации = Перечисления.КодыОпераций.СнижениеСорности)Тогда
               ОбластьДетальныхЗаписей.Параметры.Подработка = "подр: сорность";
            ИначеЕсли (ВыборкаКонтрагент.КодОперации = Перечисления.КодыОпераций.Аспирация) Тогда
               ОбластьДетальныхЗаписей.Параметры.Подработка = "подр: аспирация";
            Иначе
               ОбластьДетальныхЗаписей.Параметры.Подработка = "";
            КонецЕсли;
            //КоличествоПриходЗаДень = КоличествоПриходЗаДень + ВыборкаКонтрагент.КоличествоПриход;
         КонецЕсли;
         
         //Нач. остаток         
            ОбластьДетальныхЗаписей.Параметры.Остаток = НачОстаток;
         //КоличествоПриходЗаДень = КоличествоПриходЗаДень + ВыборкаКонтрагент.КоличествоПриход; 

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

Добавлено: 20 сен 2013, 16:09


Наверное так. я сильно не смотрел!
Помогли, отблагодари!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск