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

Как правильно сделать условия для двойного цикла?

Автор gulnyr, 10 окт 2022, 10:28

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

gulnyr

Есть такой код:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
 |ИнвентаризацияОС.Ссылка КАК Ссылка,
 |ИнвентаризацияОС.Ссылка.Номер КАК Номер,
 |ИнвентаризацияОС.Ссылка.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
 |РегСведПерв.ИнвентарныйНомер КАК ИнвентарныйНомер
|ИЗ
   |Документ.ИнвентаризацияОС.ОС КАК ИнвентаризацияОС,
     |ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПервых КАК РегСведПерв
     |ПО ИнвентаризацияОС.ОсновноеСредство = РегСведПерв.ОсновноеСредство
|ГДЕ
 |ИнвентаризацияОС.Ссылка.ПодразделениеОрганизации = &ПодразделениеОрганизации
 |И РегСведПерв.ИнвентарныйНомер = &ИнвентарныйНомер";


Запрос.УстановитьПараметр(
    "ПодразделениеОрганизации",
    Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("ПринтерыМосквы")
);

Запрос.УстановитьПараметр(
"ИнвентарныйНомер",
"0481"
);       

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();

Пока ВыборкаДокументов.Следующий() Цикл       
    ИнвНомер = ВыборкаДокументов.ИнвентарныйНомер;
КонецЦикла;


Док = ВыборкаДокументов.Ссылка.ПолучитьОбъект();
Для каждого Стр из Док.ОС Цикл

Если ИнвНомер = "0481" Тогда
  Если Стр.НаличиеФактическое = Истина Тогда
    Стр.НаличиеФактическое = Ложь;
  КонецЕсли;
КонецЕсли;

Сообщить(Стр.НаличиеФактическое);

КонецЦикла;

Данный цикл проставляет галочки всем инвентарным номерам, а не только для номера 0481. Как сделать так, чтобы галочка проставился только для указанного инвентарного номера?

antoneus

Пока ВыборкаДокументов.Следующий() Цикл       
    ИнвНомер = ВыборкаДокументов.ИнвентарныйНомер;
    Если ИнвНомер = "0481" Тогда

        Док = ВыборкаДокументов.Ссылка.ПолучитьОбъект();
        Для каждого Стр из Док.ОС Цикл
            Если Стр.НаличиеФактическое = Истина Тогда
                Стр.НаличиеФактическое = Ложь;
            КонецЕсли;
            Сообщить(Стр.НаличиеФактическое);       
       КонецЦикла;
       //Док.Записать();//записать ведь надо?
    КонецЕсли;       
КонецЦикла;

gulnyr

antoneus, галочка почему-то все равно для всех инвентарных номеров проставляется (указал в скриншоте).

2022-10-10_10-58-18.png

Может в запросе нужно было что-то дописать?

antoneus

То есть галок там не было а после выполнения встали?

gulnyr

antoneus, нет, просто я условие добавил, если галочка есть, значит убрать, если галочки нет, то добавить:

        Если Стр.НаличиеФактическое = Истина Тогда
            Стр.НаличиеФактическое = Ложь;                             
        Иначе
            Стр.НаличиеФактическое = Истина;
        КонецЕсли;

Проблема в том, что условие для галочек применяется для всех инвентаризационных номеров, вместо выбранной одной, в данном случае № 0481.

Пробовал даже в запросе добавить такое условие:
|ГДЕ                                           
 |ИнвентаризацияОС.Ссылка.ПодразделениеОрганизации = &ПодразделениеОрганизации
 |И РегСведПерв.ИнвентарныйНомер = &ИнвентарныйНомер
 |И ИнвентаризацияОС.Ссылка.ОС.ОсновноеСредство = РегСведПерв.ОсновноеСредство";


Все равно галочка добавляется для всех, вместо одной.
Как это исправить?

LexaK

gulnyr, двойной цикл не нужен, просто используйте НомерСтроки из ТЧ.ОС
(это пример, совсем не оптимально, только для понимания)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
 |ИнвентаризацияОС.Ссылка КАК Ссылка,
 |ИнвентаризацияОС.Ссылка.Номер КАК Номер,
 |ИнвентаризацияОС.НомерСтроки,
 |ИнвентаризацияОС.Ссылка.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
 |РегСведПерв.ИнвентарныйНомер КАК ИнвентарныйНомер
|ИЗ
   |Документ.ИнвентаризацияОС.ОС КАК ИнвентаризацияОС,
     |ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПервых КАК РегСведПерв
     |ПО ИнвентаризацияОС.ОсновноеСредство = РегСведПерв.ОсновноеСредство
|ГДЕ
 |ИнвентаризацияОС.Ссылка.ПодразделениеОрганизации = &ПодразделениеОрганизации
 |И РегСведПерв.ИнвентарныйНомер = &ИнвентарныйНомер";


Запрос.УстановитьПараметр(
    "ПодразделениеОрганизации",
    Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("ПринтерыМосквы")
);

Запрос.УстановитьПараметр(
"ИнвентарныйНомер",
"0481"
);       

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();

Пока ВыборкаДокументов.Следующий() Цикл       
    //ИнвНомер = ВыборкаДокументов.ИнвентарныйНомер;
//КонецЦикла;


       Док = ВыборкаДокументов.Ссылка.ПолучитьОбъект();
       Стр = Док.ОС[ВыборкаДокументов.НомерСтроки - 1];
       Стр.НаличиеФактическое = Не Стр.НаличиеФактическое;
        Сообщить("НаличиеФактическое " + Стр.НаличиеФактическое);
       Док.записать();
 
КонецЦикла;
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск