Помогите найти ошибку

1. I_am_Alpharius 25.10.24 17:46 Сейчас в теме
Здравствуйте всем! Я начинающий 1сник, прошу помочь решить задачу. Сижу уже часов 7, по всякому пробовал, и мозг уже отказывается находить ошибку. Ниже прилагаю условие задачи и код, который я родил, но в нём где-то ошибка...

Задача.

Напишите функцию ДобавитьРабочийДень(ДатаНачала,КоличествоРабочихДней), данная
функция добавляет рабочие дни (с 1 по 5 день недели, праздники учитывать не будем), и
возвращает дату. ДатаНачала изменяться не должна. КоличествоРабочихДней –
необязательный параметр, по умолчанию равен 0.

Моя попытка решения.

&НаКлиенте
Функция ДобавитьРабочийДень(ДатаНачала,КоличествоРабочихДней)

ДатаОкончания=ДатаНачала+(86400*КоличествоРабочихДней);
	
СписокДат = Новый Массив;
Дата=ДатаНачала;
Пока Дата<ДатаОкончания Цикл
СписокДат.Добавить(Дата);	
Дата = Дата + 86400;
КонецЦикла;

КоличествоВыхДнейВПериоде=0;
Для Каждого ЭлМассива из СписокДат Цикл
	
	Если ДеньНедели(ЭлМассива)>5 Тогда
	КоличествоВыхДнейВПериоде=КоличествоВыхДнейВПериоде+1;
	КонецЕсли;
	
КонецЦикла;
НужнаяДата=ДатаОкончания+(КоличествоВыхДнейВПериоде*86400);
		
Сообщить("Конечная дата рабочего периода - "+Формат(НужнаяДата,"ДФ=dd.MM.yyyy"));
	
КонецФункции


&НаКлиенте
Процедура Команда(Команда)
	
Перем ДатаНачала,КоличествоРабочихДней;

Если ВвестиДату(ДатаНачала,"Введите дату начала работы",ЧастиДаты.Дата) Тогда
	Если ВвестиЧисло(КоличествоРабочихДней,"Введите количество дней для добавления") Тогда
	ДобавитьРабочийДень(ДатаНачала,КоличествоРабочихДней)
	КонецЕсли;
КонецЕсли;	

КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
4. user1863362 25.10.24 19:00 Сейчас в теме
(3)
И добавляю это количество выходных дней к ДатеОкончания чтобы увеличить рабочий период
Выброси.

Берешь счетчик накопленых рабочих дней, обнуляешь. Берешь дату, инициализируешь ее следующим от началом периода днем. Смотришь - если эта дата указывает на рабочий день, то прибавляешь к счетчику рабочих дней единицу. Если счетчик рабочих дней достиг нужного количества, то принимаешь поздравления - дата указывает на искомый конец периода. Если не достиг - сдвигаешь дату на день вперед, и опять проверяешь полученное на рабочий день, прибавляешь к счетчику... и так пока нужное количество рабочих дней не наберешь.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 25.10.24 18:22 Сейчас в теме
(1) о том, что не так, мы должны догадаться самостоятельно?

На первый взгляд
НужнаяДата=ДатаОкончания+(КоличествоВыхДнейВПериоде*86400);

почему количество выходных дней прибавляется к дате окончания - не совсем понятно
3. I_am_Alpharius 25.10.24 18:43 Сейчас в теме
(2) Я пытаюсь наполнить массив датами; датами каждого дня начиная с ДатыНачала, заканчивая ДатойОкончания(ДатаНачала+КоличествоРабочихДней).

СписокДат = Новый Массив;
Дата=ДатаНачала;
Пока Дата<ДатаОкончания Цикл
СписокДат.Добавить(Дата);    
Дата = Дата + 86400;
КонецЦикла;



Потом я проверяю и считаю сколько выходных дней в датах массива.

КоличествоВыхДнейВПериоде=0;
Для Каждого ЭлМассива из СписокДат Цикл
    
    Если ДеньНедели(ЭлМассива)>5 Тогда
    КоличествоВыхДнейВПериоде=КоличествоВыхДнейВПериоде+1;
    КонецЕсли;
    
КонецЦикла;
Показать


И добавляю это количество выходных дней к ДатеОкончания чтобы увеличить рабочий период.

НужнаяДата=ДатаОкончания+(КоличествоВыхДнейВПериоде*86400);


Кстати, я только что понял, что нужно ещё проверку делать на добавляемые дни, так они тоже будут увеличивать рабочий период вместе с выходными, а это неправильно...
4. user1863362 25.10.24 19:00 Сейчас в теме
(3)
И добавляю это количество выходных дней к ДатеОкончания чтобы увеличить рабочий период
Выброси.

Берешь счетчик накопленых рабочих дней, обнуляешь. Берешь дату, инициализируешь ее следующим от началом периода днем. Смотришь - если эта дата указывает на рабочий день, то прибавляешь к счетчику рабочих дней единицу. Если счетчик рабочих дней достиг нужного количества, то принимаешь поздравления - дата указывает на искомый конец периода. Если не достиг - сдвигаешь дату на день вперед, и опять проверяешь полученное на рабочий день, прибавляешь к счетчику... и так пока нужное количество рабочих дней не наберешь.
5. I_am_Alpharius 25.10.24 19:16 Сейчас в теме
(4) Получилось. Спасибо.

&НаКлиенте
Функция ДобавитьРабочийДень(ДатаНачала, КоличествоРабочихДней)
Дата=ДатаНачала;
КоличествоДобавленныхРабочихДней=0;

Пока КоличествоДобавленныхРабочихДней<КоличествоРабочихДней Цикл
    Дата=Дата+86400; 
    Если ДеньНедели(Дата)<=5 Тогда 
        КоличествоДобавленныхРабочихДней=КоличествоДобавленныхРабочи­хДней+1;
    КонецЕсли;
КонецЦикла;

Сообщить("Конечная дата рабочего периода - " + Формат(Дата, "ДФ=dd.MM.yyyy"));
КонецФункции
Показать
6. SlavaKron 25.10.24 19:19 Сейчас в теме
Задача решается в принципе без цикла.
7. user1519152 25.10.24 19:20 Сейчас в теме
(4) - решение в лоб.
А не в лоб берешь текущий номер дня в неделе начиная с нуля, добавляешь количество рабочих дней, делишь нацело на 5 и умножаешь на 2. Получаешь количество пропущенных выходных, дальше просто. Если стартовая дата суббота или воскресенье, нужно вернуться на пятницу, чтоб правильно считало. Оно быстрее получится, но для практических целей (4) сойдет, плюс оно проще и понятнее.
8. SlavaKron 25.10.24 19:26 Сейчас в теме
(7)
делишь нацело на 5
на 7 же.
9. user1519152 25.10.24 19:27 Сейчас в теме
почему, 5 же в неделе рабочих дней. Надо количество недель определить
10. SlavaKron 25.10.24 19:28 Сейчас в теме
(9) сколько рабочих недель в 150 днях?
11. user1519152 25.10.24 19:29 Сейчас в теме
Чтобы добавить 150 РАБОЧИХ дней, надо 30 недель. Он же рабочие дни добавляет.
12. SlavaKron 25.10.24 19:30 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот