Доброго дня!
Отчет по 4-му заданию необходимо оставлять здесь – https://mg.spec8.ru/1cdevbase-hw04/
После одобрения Вашего решения на странице с заданием Вам станет доступным файл с решением преподавателя.
Создал две константы НачалоРаботы и ОкончаниеРаботы. Тип – Дата, состав даты – Время. В пользовательском режиме определил требуемые значения. В модуле управляемого приложения определил стандартный обработчик события ПередНачаломРаботыСистемы(), в котором получаю значения времени начала и окончания работы. Для этого создал общий модуль РаботаСКонстантамиСервер, который компилируется на сервере с возможностью вызова на клиенте. В модуле определил две функции.
Функция ПолучитьНачалоРаботы() Экспорт
Возврат Константы.НачалоРаботы.Получить();
КонецФункции
Функция ПолучитьОкончаниеРаботы() Экспорт
Возврат Константы.ОкончаниеРаботы.Получить();
КонецФункции
В модуле управляемого приложения в процедуре ПередНачаломРаботыСистемы() провожу соответствующую проверку. Также создал список значений с вариантами обедов и глобальную переменную, в которой будут храниться выбранные пользователем значения.
В процедуре ПередЗавершениемРаботыСистемы() провожу проверку на досрочный выход из системы.
Если ТекущееВремя < ВремяНачалаРаботы ИЛИ ТекущееВремя > ВремяОкончанияРаботы Тогда
Предупреждение("Нельзя работать в нерабочее время!", 10);
ЗавершитьРаботуСистемы(Ложь);
Иначе
ВариантыОбеда = Новый СписокЗначений;
ВариантыОбеда.Добавить("Курица");
ВариантыОбеда.Добавить("Мясо");
ВариантыОбеда.Добавить("Рыба");
КоличествоВыбранныхЭлементов = 0;
Пока КоличествоВыбранныхЭлементов = 0 Цикл
ВариантыОбеда.ОтметитьЭлементы("Выберите обед");
Для каждого Элемент Из ВариантыОбеда Цикл
Если Элемент.Пометка Тогда
КоличествоВыбранныхЭлементов = КоличествоВыбранныхЭлементов + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для каждого Элемент Из ВариантыОбеда Цикл
Если Элемент.Пометка Тогда
ГлОбед.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ваш сегодняшний обед:";
Сообщение.Сообщить();
Для каждого Элемент Из ГлОбед Цикл
Сообщение.Текст = Элемент;
Сообщение.Сообщить();
КонецЦикла;
Ответ = Вопрос("Рабочий день еще не закончился! Вы действительно хотите выйти из системы?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Далее, в модуле управляемого приложения, в разделе основной программы создал структуру с именем СтруктураЧисел. Заполнение структуры происходит с помощью процедуры ЗаполнитьСтруктуруЧисел(). Определение, является ли число простым, осуществляется в функции ВидЧисла().
Процедура ЗаполнитьСтруктуруЧисел(СтруктураЧисел)
Для Счетчик = 1 По 1000 Цикл
Если Счетчик = 1000 Тогда
Счетчик1000 = Формат(Счетчик, "ЧГ=0");
КонецЕсли;
СтруктураЧисел.Вставить("Число" + ?(Счетчик <> 1000, Счетчик, Счетчик1000), ВидЧисла(Счетчик));
КонецЦикла;
КонецПроцедуры
Функция ВидЧисла(Число)
Если Число = 1 ИЛИ Число = 2 Тогда
Возврат "Простое";
КонецЕсли;
Если Число % 2 = 0 Тогда
Возврат "Не простое";
КонецЕсли;
КвадратныйКореньЧисла = Окр(Sqrt(Число), 0, РежимОкругления.Окр15как20 );
Делитель = 3;
Пока Делитель <= КвадратныйКореньЧисла Цикл
Если Число % Делитель = 0 Тогда
Возврат "Не простое";
КонецЕсли;
Делитель = Делитель + 2;
КонецЦикла;
Для каждого ЭлементСтруктуры Из СтруктураЧисел Цикл
Сообщение.Текст = ЭлементСтруктуры.Ключ + " - " + ЭлементСтруктуры.Значение;
Сообщение.Сообщить();
КонецЦикла;
КонецПроцедуры
ГлОбед = Новый Массив;
СтруктураЧисел = Новый Структура;
ЗаполнитьСтруктуруЧисел(СтруктураЧисел);
ВывестиНаЭкранСтруктуруЧисел(СтруктураЧисел);
Проверил возможность обращения к данным структуры с помощью различных вариантов.
// обращение к элементам структуры по известному ключу
Сообщить(СтруктураЧисел["Число591"]);
// обращение к элементам структуры по ключу, содержащемуся в переменной
Х = "Число332";
Сообщить(СтруктураЧисел[Х]);
Вход
Важно!
Для новых покупателей Базового курса - с чего начать
...........................................................
Все контакты Саппорта Spec8.ru
...........................................................
Как задавать вопросы по материалам курса и ДЗ
...........................................................
Что такое Мастер-группа
...........................................................
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Процедуры размещаем в модуле управляемого приложения.
Домашнее задание № 4 Блок 0.
<
Перем НачПериода;
Перем КонПериода;
Перем Числа;
Процедура ПередНачаломРаботыСистемы(Отказ)
ПолучитьПериодРабочегоДня( НачПериода, КонПериода);
Если ТекущаяДата() < НачПериода Тогда
Предупреждение("Вход в программу запрещен до начала рабочего дня - "+НачПериода+".");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ПриНачалеРаботыСистемы()
Перем Значение;
глОбед = Новый СписокЗначений;
глОбед.Добавить("Курица");
глОбед.Добавить("Рыба");
глОбед.Добавить("Мясо");
Ответ = Неопределено;
Ответ = ГлОбед.ОтметитьЭлементы("Выберите вид обеда на сегодня!");
Пока НЕ Ответ Цикл
Предупреждение("Необходимо указать вид обеда обязательно!");
Ответ = ГлОбед.ОтметитьЭлементы("Выберите вид обеда на сегодня!");
Продолжить;
КонецЦикла;
ВыделитьПростыеЧисла(Числа);
Процедура ПередЗавершениемРаботыСистемы(Отказ)
ПолучитьПериодРабочегоДня( НачПериода, КонПериода);
Если ТекущаяДата() < КонПериода Тогда
Ответ = Вопрос("Завершить работу до окончания рабочего дня - "+КонПериода+".", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
Иначе
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьПериодРабочегоДня(НачПериода,КонПериода)
Дата = Формат(ТекущаяДата(),"ДФ=yyyyMMdd");
НачВремя = "090538";
КонВремя = "181142";
НачПериода = Дата(Строка(Дата+НачВремя));
КонПериода = Дата(Строка(Дата+КонВремя));
КонецПроцедуры // ПолучитьПериодРабочегоДня()
<
Процедура выделения простых чисел.
<
Перем Простое;
Перем ПростоеИтог;
Числа = Новый Структура();
ЧислаД = Новый Массив(1000);
ЧислаН = Новый Массив(1000);
Для Сч=1 По ЧислаН.ВГраница()+1 Цикл
ЧислаД.Установить(Сч-1,Сч);
ЧислаН.Установить(Сч-1,Сч);
// Обход преобразования Числа в строку с нераспознаваем. пробелами.
Если Сч=1000 Тогда
Сч="1000";
КонецЕсли;
Числа.Вставить("Число"+Сч);
КонецЦикла;
ЧислаД.Удалить(0);
Для каждого ЧислоН Из ЧислаН Цикл
Если ЧислоН > 2 Тогда
Для каждого ЧислоД Из ЧислаД Цикл
// ( ЧислоД <> 1 И ЧислоД <> ЧислоН )
Если ЧислоД >= ЧислоН Тогда
Прервать;
КонецЕсли;
Если Найти(Строка(ЧислоН/ЧислоД),",") Тогда
Простое = Истина;
Иначе
Простое = Ложь;
КонецЕсли;
ПростоеИтог = Простое И ПростоеИтог;
КонецЦикла;
ИначеЕсли ЧислоН <> 1 Тогда
ПростоеИтог = Истина;
КонецЕсли;
// Обход преобразования Числа в строку с нераспознаваемыми пробелами.
Если ЧислоН=1000 Тогда
ЧислоН="1000";
КонецЕсли;
Ключ = "Число"+ЧислоН;
// Записываем в таблицу признак числа.
Если ПростоеИтог = Неопределено Тогда
ИначеЕсли ПростоеИтог Тогда
Значение = "Простое";
ИначеЕсли ПростоеИтог = Ложь Тогда
Значение = "Не простое";
КонецЕсли;
Числа.Вставить(Ключ,Значение);
//Очищаем ПростоеИтог
ПростоеИтог = Истина;
КонецЦикла;
КонецПроцедуры
<
Здравствуйте! Подскажите, пожалуйста, где находится ссылка на решение домашних заданий? Спасибо.
Доброго дня!
Отчет по 4-му заданию необходимо оставлять здесь – https://mg.spec8.ru/1cdevbase-hw04/
После одобрения Вашего решения на странице с заданием Вам станет доступным файл с решением преподавателя.
Понял, спасибо. Значит, я все 4 ответа не там размещал.
Создал две константы НачалоРаботы и ОкончаниеРаботы. Тип – Дата, состав даты – Время. В пользовательском режиме определил требуемые значения. В модуле управляемого приложения определил стандартный обработчик события ПередНачаломРаботыСистемы(), в котором получаю значения времени начала и окончания работы. Для этого создал общий модуль РаботаСКонстантамиСервер, который компилируется на сервере с возможностью вызова на клиенте. В модуле определил две функции.
Возврат Константы.НачалоРаботы.Получить();
КонецФункции
Функция ПолучитьОкончаниеРаботы() Экспорт
Возврат Константы.ОкончаниеРаботы.Получить();
КонецФункции
В модуле управляемого приложения в процедуре ПередНачаломРаботыСистемы() провожу соответствующую проверку. Также создал список значений с вариантами обедов и глобальную переменную, в которой будут храниться выбранные пользователем значения.
В процедуре ПередЗавершениемРаботыСистемы() провожу проверку на досрочный выход из системы.
Процедура ПередНачаломРаботыСистемы(Отказ)
ВремяНачалаРаботы = РаботаСКонстантамиСервер.ПолучитьНачалоРаботы();
ВремяОкончанияРаботы = РаботаСКонстантамиСервер.ПолучитьОкончаниеРаботы();
ТекущееВремя = Дата(0001,01,01,Час(ТекущаяДата()), Минута(ТекущаяДата()), Секунда(ТекущаяДата()));
Если ТекущееВремя < ВремяНачалаРаботы ИЛИ ТекущееВремя > ВремяОкончанияРаботы Тогда
Предупреждение("Нельзя работать в нерабочее время!", 10);
ЗавершитьРаботуСистемы(Ложь);
Иначе
ВариантыОбеда = Новый СписокЗначений;
ВариантыОбеда.Добавить("Курица");
ВариантыОбеда.Добавить("Мясо");
ВариантыОбеда.Добавить("Рыба");
КоличествоВыбранныхЭлементов = 0;
Пока КоличествоВыбранныхЭлементов = 0 Цикл
ВариантыОбеда.ОтметитьЭлементы("Выберите обед");
Для каждого Элемент Из ВариантыОбеда Цикл
Если Элемент.Пометка Тогда
КоличествоВыбранныхЭлементов = КоличествоВыбранныхЭлементов + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для каждого Элемент Из ВариантыОбеда Цикл
Если Элемент.Пометка Тогда
ГлОбед.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ваш сегодняшний обед:";
Сообщение.Сообщить();
Для каждого Элемент Из ГлОбед Цикл
Сообщение.Текст = Элемент;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
ВремяОкончанияРаботы = РаботаСКонстантамиСервер.ПолучитьОкончаниеРаботы();
ТекущееВремя = Дата(0001,01,01,Час(ТекущаяДата()), Минута(ТекущаяДата()), Секунда(ТекущаяДата()));
Если ТекущееВремя < ВремяОкончанияРаботы Тогда
Ответ = Вопрос("Рабочий день еще не закончился! Вы действительно хотите выйти из системы?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Далее, в модуле управляемого приложения, в разделе основной программы создал структуру с именем СтруктураЧисел. Заполнение структуры происходит с помощью процедуры ЗаполнитьСтруктуруЧисел(). Определение, является ли число простым, осуществляется в функции ВидЧисла().
Для Счетчик = 1 По 1000 Цикл
Если Счетчик = 1000 Тогда
Счетчик1000 = Формат(Счетчик, "ЧГ=0");
КонецЕсли;
СтруктураЧисел.Вставить("Число" + ?(Счетчик <> 1000, Счетчик, Счетчик1000), ВидЧисла(Счетчик));
КонецЦикла;
КонецПроцедуры
Функция ВидЧисла(Число)
Если Число = 1 ИЛИ Число = 2 Тогда
Возврат "Простое";
КонецЕсли;
Если Число % 2 = 0 Тогда
Возврат "Не простое";
КонецЕсли;
КвадратныйКореньЧисла = Окр(Sqrt(Число), 0, РежимОкругления.Окр15как20 );
Делитель = 3;
Пока Делитель <= КвадратныйКореньЧисла Цикл
Если Число % Делитель = 0 Тогда
Возврат "Не простое";
КонецЕсли;
Делитель = Делитель + 2;
КонецЦикла;
Возврат "Простое";
КонецФункции
Процедура ВывестиНаЭкранСтруктуруЧисел(СтруктураЧисел)
Сообщение = Новый СообщениеПользователю;
Для каждого ЭлементСтруктуры Из СтруктураЧисел Цикл
Сообщение.Текст = ЭлементСтруктуры.Ключ + " - " + ЭлементСтруктуры.Значение;
Сообщение.Сообщить();
КонецЦикла;
КонецПроцедуры
ГлОбед = Новый Массив;
СтруктураЧисел = Новый Структура;
ЗаполнитьСтруктуруЧисел(СтруктураЧисел);
ВывестиНаЭкранСтруктуруЧисел(СтруктураЧисел);
Проверил возможность обращения к данным структуры с помощью различных вариантов.
Сообщить(СтруктураЧисел["Число591"]);
// обращение к элементам структуры по ключу, содержащемуся в переменной
Х = "Число332";
Сообщить(СтруктураЧисел[Х]);