# Задание к занятию "Циклы" _Примерное время выполнения: 60 минут_ Все задачи обязательны к выполнению. Пожалуйста, присылайте на проверку все задачи сразу. Любые вопросы по решению задач задавайте в чате учебной группы. ## Цель задания 1. Закрепить на практике приемы разработки алгоритмов с циклами Решение задания научит вас создавать алгоритмы с повторяющимися частями. Это базовый навык, необходимый для решения домашних заданий в будущем и разработки реальных приложений. ## Чеклист готовности к домашнему заданию - [ ] Установлена учебная платформа версии 8.3.20 или больше. - [ ] Развернута информационная база с конфигурацией **УправлениеИТФирмой**, полученная по итогу выполнения [домашнего задания к занятию Условия](/homework-2-5.md). ## Инструкция к заданию 1. Решите описанные задачи в конфигураторе. 2. Протестируйте решение в пользовательском режиме. 3. Отправьте на проверку в личном кабинете Нетологии внешнюю обработку **ПодсчетЧислаДней** с решением задачи 1, внешнюю обработку **ОбработкаТекста** с решением задачи 2 и файл выгрузки информационной базы (.dt) с конфигурацией, содержащей решение по задаче 3. Файлы прикрепите в раздел "решение" в практическом задании. ## Задача 1 "Подсчет числа дней" ### Описание задачи Вы хотите предоставить пользователю возможность рассчитывать сколько рабочих дней между указанными датами. ### Требования к результату Внешняя обработка **ПодсчетЧислаДней** с двумя реквизитами и полями ввода, задающими начало и конец интервала, и кнопкой "Подсчитать", по нажатию на которую подсчитывается и выводится пользователю число рабочих и выходных дней в указанном интервале дат. ### Процесс выполнения 1. Создайте внешнюю обработку с именем, например, **ПодсчетЧислаДней**. 2. Добавьте в нее два реквизита типа Дата - например, **ДатаНач** и **ДатаКон** - и перетащите их на форму. 3. Добавьте команду **Подсчитать** и перетащите ее кнопкой на форму. 4. В обработчике команды: * Объявите две переменных-счетчика числа рабочих и выходных дней. * Обойдите в цикле все даты от начальной до конечной включительно. * В зависимости от дня недели даты прибавьте единицу к одному из двух счетчиков. * Выведите результаты вызовом **Сообщить()**, формируя строку с помощью **СтрШаблон()**. ## Задача 2 "Обработка текста" ### Описание задачи Вы хотите реализовать механизм, который ищет во введенном тексте самое длинное и самое короткое слово. ### Требования к результату Внешняя обработка **ОбработкаТекста** с реквизитом и многострочным полем ввода для текста и кнопкой "Найти", по нажатию на которую определяется и выводится пользователю самое длинное и самое короткое слово. ### Процесс выполнения 1. Создайте внешнюю обработку с именем, например, **ОбработкаТекста**. 2. Добавьте в нее реквизит типа **Строка** - например, **Текст** - и перетащите его на форму, сделав многострочным полем ввода. 3. Добавьте команду **НайтиСлова** и перетащите ее кнопкой на форму. 4. В обработчике команды: * Объявите две переменных для самого длинного и самого короткого слова. * Разделите текст на слова вызовом **СтрРазделить()**. * Обойдите в цикле все слова. * В зависимости от длины сохраните текущее слово как самое длинное или самое короткое. * Выведите результаты вызовом **Сообщить()**, формируя строку с помощью **СтрШаблон()**. ## Задача 3 "Развитие проверки введенных данных" ### Описание задачи Вы хотите дополнительно снизить вероятность ошибки при заполнении реквизитов ИНН и КПП в справочнике **Контрагенты**, проверяя состав строк. ### Требования к результату Выгрузка информационной базы (.dt) с конфигурацией, в которой есть справочник **Контрагенты** с ИНН, КПП. В дополнение к проверке из предыдущего задания необходимо проверять, что строки состоят только из цифр. ### Процесс выполнения 1. Используйте конфигурацию **УправлениеИТФирмой** со справочником **Контрагенты**. 2. Дополните обработчик события **ОбработкаПроверкиЗаполнения** алгоритмом проверки символов, из которых состоят ИНН и КПП: * Используйте цикл со счетчиком для перебора символов; * Для получения очередного символа используйте функцию **Сред()**; * Для проверки является ли символ цифрой заранее определите строку, состоящую только из цифр, и ищите в ней очередной символ с помощью функции **СтрНайти()**. * При выявлении ошибок устанавливайте параметр обработчика **Отказ** в **Истина** и выводите разумное сообщение вызовом **Сообщить()**. ## Критерии оценки Задание считается выполненным при соблюдении следующих условий: 1. Решение включает внешнюю обработку **ПодсчетЧислаДней**, внешнюю обработку **ОбработкаТекста** и выгрузку в формате dt с конфигурацией **УправлениеИТФирмой**; 2. Обработка **ПодсчетЧислаДней** позволяет рассчитать сколько будней и сколько выходных дней между введенными датами; 3. Обработка **ОбработкаТекста** позволяет найти во введенном тексте самое длинное и самое короткое слово; 4. В конфигурации **УправлениеИТФирмой** при записи справочника контрагенты состав строк в реквизитах ИНН и КПП. ## Подсказка: Чтобы вам было проще понять, что в итоге должно получиться, мы подготовили подсказки: анимационные изображения в формате gif или картинки. Чтобы их увидеть, кликните по [ссылке](Examples/homework-2-6-example.md)