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

Задача.

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

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

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

    ДатаОкончания=ДатаНачала+(86400*КоличествоРабочихДней);

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

    КоличествоВыхДнейВПериоде=0;
    Для Каждого ЭлМассива из СписокДат Цикл

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

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

    Сообщить("Конечная дата рабочего периода - "+Формат(НужнаяДата,"ДФ=dd.MM.yyyy"));

    КонецФункции

    &НаКлиенте
    Процедура Команда(Команда)

    Перем ДатаНачала,КоличествоРабочихДней;

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

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

Берешь счетчик накопленых рабочих дней, обнуляешь. Берешь дату, инициализируешь ее следующим от началом периода днем. Смотришь - если эта дата указывает на рабочий день, то прибавляешь к счетчику рабочих дней единицу. Если счетчик рабочих дней достиг нужного количества, то принимаешь поздравления - дата указывает на искомый конец периода. Если не достиг - сдвигаешь дату на день вперед, и опять проверяешь полученное на рабочий день, прибавляешь к счетчику... и так пока нужное количество рабочих дней не наберешь.
---
о том, что не так, мы должны догадаться самостоятельно?

На первый взгляд

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

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

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

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

```1c
    КоличествоВыхДнейВПериоде=0;
    Для Каждого ЭлМассива из СписокДат Цикл

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

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

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

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

Кстати, я только что понял, что нужно ещё проверку делать на добавляемые дни, так они тоже будут увеличивать рабочий период вместе с выходными, а это неправильно...
---
И добавляю это количество выходных дней к ДатеОкончания чтобы увеличить рабочий периодВыброси.

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

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

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

    Сообщить("Конечная дата рабочего периода - " + Формат(Дата, "ДФ=dd.MM.yyyy"));
    КонецФункции
```
---
Задача решается в принципе без цикла.
---
- решение в лоб.
А не в лоб берешь текущий номер дня в неделе начиная с нуля, добавляешь количество рабочих дней, делишь нацело на 5 и умножаешь на 2. Получаешь количество пропущенных выходных, дальше просто. Если стартовая дата суббота или воскресенье, нужно вернуться на пятницу, чтоб правильно считало. Оно быстрее получится, но для практических целей (4) сойдет, плюс оно проще и понятнее.
---
делишь нацело на 5 на 7 же.
---
почему, 5 же в неделе рабочих дней. Надо количество недель определить
---
сколько рабочих недель в 150 днях?
---
Чтобы добавить 150 РАБОЧИХ дней, надо 30 недель. Он же рабочие дни добавляет.
---
ага, не то считал.