Отправляет email-рассылки с помощью сервиса Sendsay

Школа 1С

  Все выпуски  

Школа 1С Несложная 'игрушка' на 'восьмерке'


Информационный Канал Subscribe.Ru

Школа 1С
Выпуск 55
Несложная «игрушка» на «восьмерке»

Здравствуйте, уважаемые Ученики, Коллеги и Читатели!

Обращаем ваше внимание на то, что, начиная с этого выпуска, наша рассылка меняет имя, теперь она называется так же, как и сайт – «Школа 1С». Этим действием мы отнюдь не рвем все нити со своим прошлым, но всего лишь приводим в соответствие названия для того, чтобы перестать пусть вынужденно, но все же использовать наименование относительно новой, но в то же время – весьма перспективной линейки продуктов фирмы «1С».

На этом с организационными вопросами все. Теперь перейдем, собственно, к теме выпуска.

Многие Читатели справедливо критикуют нас за то, что в наших выпусках мы до сих пор не затрагивали вопросы использования «восьмерки» - последней (на данный момент) версии флагманской платформы производства фирмы «1С» - «1С:Предприятие 8.0». Популярность и распространенность продуктов на базе «восьмерки» растет, а значит, и эти темы становятся все более актуальными. К чести фирмы «1С» она весьма серьезно занимается методической поддержкой своего продукта: кроме проведения уже привычных курсов в Учебных центрах и Центрах сертифицированного обучения выпускаются книги, методические материалы на дисках ИТС, дистанционные курсы и т.д.

И все же не все понятно новичкам. Многим довольно тяжело «войти в восьмерку», начать программировать, конфигурировать, администрировать и просто использовать эту систему. Задача «Школы 1С» - помочь таким пользователям! Поэтому, начиная с данного выпуска, в нашей рассылке время от времени будут появляться материалы и по работе с этим продуктом. Мы не обещаем вам систематичность в представлении этих материалов, но мы, как и прежде, будем рассматривать некоторые важные и интересные вопросы.

В этом выпуске мы рассмотрим процесс создания на «восьмерке» весьма несложной «игрушки», описание которой часто встречалось в советских книгах по программированию. Игра называется «Угадай число», и она, среди прочего, демонстрирует способ организации и мощь использования поиска методом половинного деления.

Правила игры очень просты: пользователь загадывает число из заранее оговоренного интервала чисел, а программа пытается отгадать его, выдвигая предположения и узнавая от пользователя, больше или меньше очередного предположения программы загаданное им число. Поиск загаданного числа ведется методом половинного деления – очередное предположение вычисляется как середина уменьшающегося с каждым шагом интервала поиска, каждый следующий интервал является половинкой предыдущего, получающейся в результате разбиения интервала предположением и выбора из двух полученных половинок той, которая соответствует ответу от пользователя на вопрос «Больше или меньше?»

Мы намерено не останавливаемся подробно на изучении метода половинного деления – сегодня он известен любому старшекласснику и студенту младших курсов института. Наиболее интересующиеся могут найти его описание в литературе, а наиболее пытливых призываем разобраться в тексте модуля.

Несложной игрушке несложную реализацию! Игру «Угадай число» мы оформим в виде внешней обработки системы «1С:Предприятие 8.0».

Запустим «1С:Предприятие 8.0», войдем в любую информационную базу в режиме «Конфигуратор», в меню «Файл» выберем пункт «Новый...», в появившемся окне выбора вида документа выберем «Внешняя обработка». В появившемся окне введем имя внешней обработки (по всем правилам составления идентификаторов!) – «УгадайЧисло». Синоним система по-умному подставит сама, получив его путем нехитрого преобразования введенного идентификатора – эта возможность Конфигуратора «восьмерки» существенно упрощает жизнь программистам. Впрочем, полученный синоним мы все же немного изменим – «Игра “Угадай число”».

В восьмой версии системы «1С:Предприятие» у обработки (да и у многих других объектов) может быть несколько диалоговых форм, при этом одна из них может быть назначена основной. Новые формы можно добавлять в соответствующей ветке дерева снизу, но мы планируем только одну форму, поэтому поступим проще – в поле «Основная форма внешней обработки» нажмем кнопочку с лупой. На экране появится окно конструктора формы обработки, который поможет нам и создать форму, и назначить ее основной. Для этого мы выбираем тип формы – «Форма обработки», устанавливаем «галочку» во флажке «Назначить форму основной», соглашаемся с предложенными конструктором именем и синонимом – «Форма», снимаем «галочки» во флажках «Командная панель формы сверху» и «Командная панель формы снизу» – командные панели нам не понадобятся, нажимаем кнопку «Готово». Форма создана, назначена основной и показана на экране.

Несмотря на то, что сама форма нам не понадобится, мы все же проведем некоторые преобразования: удалим созданные автоматически кнопки «Выполнить» и «Закрыть», в окне свойств изменим заголовок формы – уберем слово «Обработка» и оставим только «Игра “Угадай число”», да и размеры формы уменьшим до минимума.

Теперь в окне свойств формы нас интересует раздел «События», а именно – событие «Перед открытием». Это событие возникает перед открытием формы, еще до показа ее на экране, причем в обработчике этого события можно и вовсе отказаться от открытия формы – этой особенностью мы, кстати, и воспользуемся. А для автоматического создания процедуры-обработчика мы воспользуемся уже знакомой нам кнопочкой с лупой.

Нажали? Отлично! На экране появляется текст модуля нашей формы с автоматически созданной процедурой «ПередОткрытием» – еще одна замечательная возможность «восьмерки», направленная на облегчение жизни программистам. Обратите внимание на процедуру «КнопкаВыполнитьНажатие» – она осталась от удаленной нами автоматически созданной конструктором кнопки «Выполнить», эту процедуру мы тоже рекомендуем удалить.

Ниже мы приводим текст модуля нашей формы:

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

      
// Краткие названия для упрощения текста модуля
       ДаНет = РежимДиалогаВопрос.ДаНет
;
       Да    = КодВозвратаДиалога.Да
;
       Нет   = КодВозвратаДиалога.Нет
;

       НижняяГраница  = 1
;
       ВерхняяГраница = 1000
;

       Предупреждение("Загадайте число от "+НижняяГраница+" до "+ВерхняяГраница+"!"
);

      
// Начальные значения
       Догадка               = 0;                
// текущее предположение
       ТекущаяНижняяГраница  = НижняяГраница;    
// текущая нижняя граница интервала
       ТекущаяВерхняяГраница = ВерхняяГраница +1;
// текущая верхняя граница интервала
       Догадались            = Ложь;             
// флаг того, что число угадано
       НомерПопытки          = 0
;

       Пока Не Догадались Цикл                   
// крутим цикл до тех пор, пока не угадаем число
            
// следующая попытка...
             НомерПопытки = НомерПопытки +1
;

            
// очередное предположение вычисляется методом половинного деления
             НоваяДогадка = Цел((ТекущаяВерхняяГраница+ТекущаяНижняяГраница) / 2
);

            
// совпадение нового и старого предположения означает,
            
// что где-то нас обманули...
             Если НоваяДогадка=Догадка
Тогда
                    Предупреждение("Нечестно играете!!!"
);
                   
Прервать;
            
КонецЕсли;

             Догадка = НоваяДогадка
;

            
// проверим предположение
             Догадались = (Вопрос("Загаданное Вами число - "+Догадка+"?", ДаНет,, Да, "Предположение №"+НомерПопытки)=Да
);

             Если Не Догадались
Тогда
                   
// если не угадали, узнаем больше или меньше предположения загаданное число
                    Больше = (Вопрос("Загаданное Вами число больше "+Догадка+"?", ДаНет,, Да, "Больше или меньше")=Да
);

                   
// сдвинем границы (установим интервал)
                    Если Больше
Тогда
                           ТекущаяНижняяГраница = Догадка
;
                   
Иначе
                           ТекущаяВерхняяГраница = Догадка
;
                   
КонецЕсли;
            
Иначе
                   
// ура! число отгадано!
                    Предупреждение("Ура!"
);
            
КонецЕсли;
      
КонецЦикла;

      
// откажемся от открытия формы обработки
       Отказ =
Истина;

КонецПроцедуры

Осталось совсем чуть-чуть. Во-первых, созданную нами внешнюю обработку необходимо сохранить. В меню «Файл» выбираем пункт «Сохранить», выберите, где Вы хотите сохранить файл с внешней обработкой, и введите имя этого файла. Обратите внимание на его расширение: в версии 8.0 у файлов внешних обработок оно “epf”, тогда как в версии 7.х было “ert”.

Ну и во-вторых, нужно запустить пользовательский режим («1С:Предприятие») и испробовать нашу обработку! В меню «Файл» выберем пункт «Открыть...» и выберем сохраненный на предыдущем шаге файл внешней обработки. Играем! Делу время – потехе час!

В завершении нам бы хотелось обратить Ваше внимание еще на несколько новых для системы «1С:Предприятие 8.0» возможностей. Использование системных перечислений (в нашем примере мы использовали РежимДиалогаВопрос и КодВозвратаДиалога) и булевых или логических значений и переменных – это примеры тех нововведений, которые позволяют упростить чтение программного модуля.

На сегодня на этом все!

С уважением, директор «Школы 1С» Владислав Аврутин.


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.school1c
Архив рассылки
Отписаться
Вспомнить пароль

В избранное