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

Удаление Элементов Массива По Условию

Автор shams, 18 мая 2023, 09:16

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

shams

Добрый день!

Написал программный код для того чтобы убрать из массива дат выходных.
 Не отрабатывает верно условие(конструкция ИЛИ).  В данном варианте удаляет только 1 выходной день(субботу).
Делал 2 Если(за сб. и вс.) - все равно удаляет только 1 выходной.  Если оставить условие с вс. - то  воскресение нормально удаляется.
Почему так происходит?


&НаКлиенте
Процедура УдалениеЭлементовМассиваПоУсловию(Команда)
   
   МассивДата = Новый Массив();
   МассивДата.Добавить('20230501');
   
   Для Шаг = 0 По 7 Цикл
      МассивДата.Добавить(МассивДата[Шаг] + 86400);
   КонецЦикла;
   
   Для Каждого Число Из МассивДата Цикл
      Если ДеньНедели(Число) = 6 Или ДеньНедели (Число) = 7 Тогда
         МассивДата.Удалить(МассивДата.Найти(Число));   
      КонецЕсли;
   КонецЦикла;
   
   Для Каждого Число Из МассивДата Цикл
      Сообщить(Число);
      КонецЦикла;
      
   
   
   
КонецПроцедуры

LexaK

shams, вот здесь ошибка
Для Каждого Число Из МассивДата Цикл //это обход по порядку, с начала

для удаления чего-то, из массива, его надо обходить с конца!  :befhbt:

попробуйте сами исправить, если не получится - пишите
если помогло нажмите: Спасибо!

shams

LexaK, Не получилось по этому писал тут уже 2 часа не могу найти ошибку

Afinogen

 B) а что  вам мешает сделать 2 массива?

обходите основной циклом и копируете из него данные в новый если они не равны 6 или 7?

типа так

МассивДатаИтог = Новый Массив;

 Для Н=0 ПО МассивДата.ВГраница() Цикл

  Если НЕ ДеньНедели(МассивДата[Н]) = 6 И НЕ ДеньНедели (МассивДата[Н]) = 7 Тогда

   МассивДатаИтог.Добавить(МассивДата[Н]);

  КонецЕсли;

 КонецЦикла;

LexaK

Цитата: shams от 18 мая 2023, 09:46LexaK, Не получилось по этому писал тут уже 2 часа не могу найти ошибку

не получилось что?
обратный обход массива делали?
код выложите!
если помогло нажмите: Спасибо!

Afinogen

 :D даешь пузырьковый метод  с правилом буравчика в студию!!!!!  :zebzdr:  :zebzdr:  :zebzdr:  :zebzdr:

shams

LexaK, да но не получилось это типа так



   Для Индекс = -ИндексПоследнего По 0 Цикл
      Значение = Массив[-Индекс];
   КонецЦикла;

shams

Afinogen, надо удалить выходных дней а твой код набарот добавляет  выходных дней

shams

LexaK, &НаКлиенте
Процедура УдалениеЭлементовМассиваПоУсловию(Команда)
   
   МассивДата = Новый Массив();
   МассивДата.Добавить('20230501');
   
   Для Шаг = 0 По 30 Цикл
      МассивДата.Добавить(МассивДата[Шаг] + 86400);
   КонецЦикла;
   
   Для Каждого Число Из МассивДата Цикл
      Если ДеньНедели(Число) = 6 Или ДеньНедели (Число) =7  Тогда
         МассивДата.Удалить(МассивДата.Найти(Число));   
      КонецЕсли;
   КонецЦикла;
   
   Для Каждого Число Из МассивДата Цикл
      Сообщить(Число);
      КонецЦикла;
      
   
   
   
КонецПроцедуры


LexaK

shams, попробуйте это код, сравните со своим, проанализируйте этот способ, попробуйте придумать еще пару способов как можно было решить данную задачу
МассивДата = Новый Массив();
  МассивДата.Добавить('20230501');
   
   Для Шаг = 0 По 30 Цикл
      МассивДата.Добавить(МассивДата[Шаг] + 86400);
   КонецЦикла;
   
   лкИндекс = МассивДата.Количество();
   //Для Каждого Число Из МассивДата Цикл
   Пока лкИндекс > 0 Цикл //используем индекс для обхода массива с "конца"
      лкИндекс = лкИндекс -1;
      лкДН = ДеньНедели(МассивДата[лкИндекс]);
      Если лкДН = 6 Или лкДН =7  Тогда
         МассивДата.Удалить(лкИндекс);   
      КонецЕсли;
   КонецЦикла;
   
   Для Каждого Число Из МассивДата Цикл
      Сообщить("" + Число + " - " + ДеньНедели(Число));
   КонецЦикла;
     
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск