комментариев 6 на “Базовый курс. Занятие №4”

  1. Aleksandr.nett 08.01.2016 в 19:50

    Процедуры размещаем в модуле управляемого приложения.

  2. Aleksandr.nett 08.01.2016 в 19:48

    Домашнее задание № 4 Блок 0.
    <

    Перем глОбед;
    Перем НачПериода;
    Перем КонПериода;
    Перем Числа;

    Процедура ПередНачаломРаботыСистемы(Отказ)
       
       ПолучитьПериодРабочегоДня( НачПериода, КонПериода);
       
        Если ТекущаяДата() < НачПериода Тогда
               
        Предупреждение("Вход в программу запрещен до начала рабочего дня - "+НачПериода+".");
           
        Отказ = Истина;
       
        КонецЕсли;
       
    КонецПроцедуры

    Процедура ПриНачалеРаботыСистемы()
        Перем Значение;
        глОбед = Новый СписокЗначений;
        глОбед.Добавить("Курица");
        глОбед.Добавить("Рыба");
        глОбед.Добавить("Мясо");
         
       
        Ответ = Неопределено;
       
        Ответ = ГлОбед.ОтметитьЭлементы("Выберите вид обеда на сегодня!");
       
        Пока НЕ Ответ  Цикл     
           
            Предупреждение("Необходимо указать вид обеда обязательно!");
           
            Ответ = ГлОбед.ОтметитьЭлементы("Выберите вид обеда на сегодня!");
           
            Продолжить;
           
        КонецЦикла;

        ВыделитьПростыеЧисла(Числа);
       
       

    Процедура ПередЗавершениемРаботыСистемы(Отказ)
       
        ПолучитьПериодРабочегоДня( НачПериода, КонПериода);
       
        Если ТекущаяДата() < КонПериода Тогда
           
            Ответ = Вопрос("Завершить работу до окончания рабочего дня - "+КонПериода+".", РежимДиалогаВопрос.ДаНет);
           
            Если Ответ = КодВозвратаДиалога.Нет Тогда
               
                Отказ = Истина; 
            Иначе
               
            КонецЕсли;
           
        КонецЕсли;
       
    КонецПроцедуры

    Процедура ПолучитьПериодРабочегоДня(НачПериода,КонПериода)

        Дата =  Формат(ТекущаяДата(),"ДФ=yyyyMMdd");
           
        НачВремя =  "090538";
        КонВремя =  "181142";
       
        НачПериода = Дата(Строка(Дата+НачВремя));
        КонПериода = Дата(Строка(Дата+КонВремя));

    КонецПроцедуры // ПолучитьПериодРабочегоДня()

    <

    Процедура выделения простых чисел.
    <

    Процедура ВыделитьПростыеЧисла(Числа)
       
        Перем Простое;
        Перем ПростоеИтог;
       
        Числа = Новый Структура();
       
        ЧислаД = Новый Массив(1000);
        ЧислаН = Новый Массив(1000);
       
        Для Сч=1 По ЧислаН.ВГраница()+1 Цикл
           
            ЧислаД.Установить(Сч-1,Сч);
            ЧислаН.Установить(Сч-1,Сч);
           
           
           
            // Обход преобразования Числа в строку с нераспознаваем. пробелами.                                            
            Если Сч=1000 Тогда                  
                Сч="1000";                               
            КонецЕсли;
           
            Числа.Вставить("Число"+Сч);
        КонецЦикла;
       
        ЧислаД.Удалить(0);
       
        Для каждого ЧислоН Из ЧислаН Цикл
           
            Если ЧислоН > 2 Тогда
               
                Для каждого ЧислоД Из ЧислаД Цикл
                    // ( ЧислоД <> 1 И ЧислоД <> ЧислоН )
                   
                    Если ЧислоД >= ЧислоН  Тогда
                        Прервать;
                    КонецЕсли;
                   
                    Если  Найти(Строка(ЧислоН/ЧислоД),",")  Тогда  
                        Простое = Истина;
                    Иначе
                        Простое = Ложь;
                    КонецЕсли;
                   
                    ПростоеИтог = Простое И ПростоеИтог; 
                КонецЦикла;
               
            ИначеЕсли ЧислоН <> 1 Тогда
                ПростоеИтог = Истина;                       
            КонецЕсли;
           
            // Обход преобразования Числа в строку с нераспознаваемыми пробелами.  
            Если ЧислоН=1000 Тогда            
                ЧислоН="1000";                               
            КонецЕсли;
            Ключ = "Число"+ЧислоН;
           
                   
            // Записываем в таблицу  признак числа.  
            Если ПростоеИтог = Неопределено Тогда
               
            ИначеЕсли ПростоеИтог Тогда
                Значение = "Простое";   
            ИначеЕсли ПростоеИтог = Ложь  Тогда
                Значение = "Не простое";
            КонецЕсли;
           
            Числа.Вставить(Ключ,Значение);
           
            //Очищаем  ПростоеИтог
            ПростоеИтог = Истина; 
        КонецЦикла;  
       
    КонецПроцедуры

     <
  3. Здравствуйте! Подскажите, пожалуйста, где находится ссылка на решение домашних заданий? Спасибо.

    • Татьяна Гужавина 21.10.2015 в 07:55

      Доброго дня!
      Отчет по 4-му заданию необходимо оставлять здесь – https://mg.spec8.ru/1cdevbase-hw04/
      После одобрения Вашего решения на странице с заданием Вам станет доступным файл с решением преподавателя.

      • Понял, спасибо. Значит, я все 4 ответа не там размещал.

  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";
    Сообщить(СтруктураЧисел[Х]);