Загрузка данных


Задачи 3–8. Полные коды

---

Задача 3. Вывести каждый день месяца по введённой дате

Условие: пользователь вводит дату, вывести все дни её месяца.

```1С
ДатаВвед = Дата(1, 1, 1);
ВвестиДату(ДатаВвед, "Введите дату", ЧастьДаты.Дата);

ГодВвед   = Год(ДатаВвед);
МесяцВвед = Месяц(ДатаВвед);
ДнейВМесяце = День(КонецМесяца(ДатаВвед));

Для Д = 1 По ДнейВМесяце Цикл
    ТекДата = Дата(ГодВвед, МесяцВвед, Д);
    Сообщить(Формат(ТекДата, "ДФ=""дд.ММ.гггг"""));
КонецЦикла;
```

Пример для даты 15.04.2012:

```
01.04.2012
02.04.2012
...
30.04.2012
```

---

Задача 4. Названия дней недели для недели введённой даты

Условие: вывести все 7 дней недели (Пн–Вс) с датами — той недели, куда попадает введённая дата.

```1С
ДатаВвед = Дата(1, 1, 1);
ВвестиДату(ДатаВвед, "Введите дату", ЧастьДаты.Дата);

Понедельник = НачалоНедели(ДатаВвед);

Для Сдвиг = 0 По 6 Цикл
    ТекДата = Понедельник + Сдвиг * 86400;
    НомерДня = ДеньНедели(ТекДата);
    
    Если НомерДня = 1 Тогда
        Название = "Понедельник";
    ИначеЕсли НомерДня = 2 Тогда
        Название = "Вторник";
    ИначеЕсли НомерДня = 3 Тогда
        Название = "Среда";
    ИначеЕсли НомерДня = 4 Тогда
        Название = "Четверг";
    ИначеЕсли НомерДня = 5 Тогда
        Название = "Пятница";
    ИначеЕсли НомерДня = 6 Тогда
        Название = "Суббота";
    Иначе
        Название = "Воскресенье";
    КонецЕсли;
    
    Сообщить(Формат(ТекДата, "ДФ=""дд.ММ.гггг""") + " — " + Название);
КонецЦикла;
```

Пример для даты 15.04.2012 (воскресенье):

```
09.04.2012 — Понедельник
10.04.2012 — Вторник
11.04.2012 — Среда
12.04.2012 — Четверг
13.04.2012 — Пятница
14.04.2012 — Суббота
15.04.2012 — Воскресенье
```

---

Задача 5. Все дни между двумя датами, кроме сб и вс

Условие: две даты, первая должна быть раньше второй. Вывести все дни, кроме субботы и воскресенья.

```1С
Дата1 = Дата(1, 1, 1);
Дата2 = Дата(1, 1, 1);
ВвестиДату(Дата1, "Введите первую дату", ЧастьДаты.Дата);
ВвестиДату(Дата2, "Введите вторую дату", ЧастьДаты.Дата);

Если Дата1 > Дата2 Тогда
    Сообщить("Ошибка: первая дата должна быть раньше второй");
Иначе
    Дней = (НачалоДня(Дата2) - НачалоДня(Дата1)) / 86400;
    
    Для Сдвиг = 0 По Дней Цикл
        ТекДата = Дата1 + Сдвиг * 86400;
        НомерДня = ДеньНедели(ТекДата);
        
        // 6 — суббота, 7 — воскресенье
        Если НомерДня = 6 ИЛИ НомерДня = 7 Тогда
            Продолжить;
        КонецЕсли;
        
        Сообщить(Формат(ТекДата, "ДФ=""дд.ММ.гггг"""));
    КонецЦикла;
КонецЕсли;
```

Пример для 13.04.2012 – 18.04.2012:

```
13.04.2012
16.04.2012
17.04.2012
18.04.2012
```

(14 и 15 — сб и вс — пропущены)

---

Задача 6. Вывести 12 месяцев через Формат

Условие: вывести названия всех 12 месяцев, используя цикл и Формат.

```1С
Для М = 1 По 12 Цикл
    ДемоДата = Дата(2026, М, 1);
    Сообщить(М + " — " + Формат(ДемоДата, "ДФ=""ММММ"""));
КонецЦикла;
```

Результат:

```
1 — январь
2 — февраль
3 — март
4 — апрель
5 — май
6 — июнь
7 — июль
8 — август
9 — сентябрь
10 — октябрь
11 — ноябрь
12 — декабрь
```

---

Задача 7. Многострочная строка → вывод построчно

Условие: пользователь вводит многострочный текст, вывести каждую строку отдельно.

```1С
Текст = "";
ВвестиСтроку(Текст, "Введите многострочный текст", 0, Истина);

КолСтрок = СтрЧислоСтрок(Текст);

Для Сч = 1 По КолСтрок Цикл
    Стр = СтрПолучитьСтроку(Текст, Сч);
    Сообщить("Строка " + Сч + ": " + Стр);
КонецЦикла;
```

Пример ввода:

```
Первая строка
Вторая строка
Третья строка
```

Результат:

```
Строка 1: Первая строка
Строка 2: Вторая строка
Строка 3: Третья строка
```

---

Задача 8. Предложение → вывод каждого слова отдельно

Условие: пользователь вводит предложение, вывести каждое слово отдельно.

```1С
Предложение = "";
ВвестиСтроку(Предложение, "Введите предложение", 200);
Предложение = СокрЛП(Предложение);

// Убираем двойные пробелы (дважды, для тройных и т.д.)
Предложение = СтрЗаменить(Предложение, "  ", " ");
Предложение = СтрЗаменить(Предложение, "  ", " ");

// Заменяем пробелы на переносы строк
Предложение = СтрЗаменить(Предложение, " ", Символы.ПС);

КолСлов = СтрЧислоСтрок(Предложение);

Для Сч = 1 По КолСлов Цикл
    Слово = СокрЛП(СтрПолучитьСтроку(Предложение, Сч));
    
    Если НЕ ПустаяСтрока(Слово) Тогда
        Сообщить("Слово " + Сч + ": " + Слово);
    КонецЕсли;
КонецЦикла;
```

Пример ввода:

```
Сегодня хорошая погода
```

Результат:

```
Слово 1: Сегодня
Слово 2: хорошая
Слово 3: погода
```

---

Ключевые приёмы в задачах 3–8

Приём Где применяется
Для … По … Цикл Все задачи
Дата + N * 86400 — сдвиг на N дней Задачи 4, 5
ДеньНедели(Дата) — номер дня недели (1=Пн, 7=Вс) Задачи 4, 5
НачалоНедели(Дата) — понедельник недели Задача 4
Продолжить — пропуск итерации Задача 5
Формат(Дата, "ДФ=""ММММ""") — название месяца Задача 6
СтрЧислоСтрок + СтрПолучитьСтроку Задачи 7, 8
СтрЗаменить(…, " ", Символы.ПС) — разбить на слова Задача 8

Важные числа

Число Смысл
86400 секунд в сутках (1 день при прибавлении к дате)
1 (в ДеньНедели) понедельник
6 суббота
7 воскресенье
0 в ВвестиСтроку(…, 0, Истина) без ограничения длины + многострочный ввод