Базовый курс. Решение ДЗ №1

Представляем решение первого домашнего задания.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.

комментариев 29 на “Базовый курс. Решение ДЗ №1”

  1. Начинаем выделять время для ДЗ, пока по блоку 0…
    Вопросы одного направления: как определить (достаточный признак) для моих функций XOR и РазрешенаПродажа, где они должны выполнятся: на сервере или на клиенте? если они не делают никаких действий с формой, с отображением чего-то, то однозначно – сервер?
    Почему ПриСозданииНаСервере, а не ПриОткрытии? метод “Сообщить” выполняется и на клиенте, и на сервере… но в данном контексте вроде как основная миссия процедуры – только отобразить сообщение на клиенте…

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    //Вставить содержимое обработчика
    Сообщить(РазрешенаПродажа(“Постоянный”,”Высший”));
    Сообщить(РазрешенаПродажа(“Непостоянный”,”Брак”));
    Сообщить(РазрешенаПродажа(“VIP”,”Брак”));
    Сообщить(РазрешенаПродажа(“VIP”,”Высший”));
    КонецПроцедуры

    Функция XOR(Условие1, Условие2)

    //вариант1
    Возврат ?(Условие1 И Условие2, Ложь, Условие1 ИЛИ Условие2);

    ////вариант2
    //Возврат Условие1 Условие2;

    КонецФункции

    Функция РазрешенаПродажа(ВидКлиента, ВидТовара)
    Условие1=ВидКлиента=”VIP”;
    Условие2=ВидТовара=”Высший”;
    Возврат НЕ XOR(Условие1, Условие2);
    КонецФункции

    • UPD

      ////вариант2
      //Возврат Условие1 Условие2;
      – не скопипастился ранее знак “неравно”.

      Ну по сути это вариант видеорешения.

    • В первых трех заданиях мы не сильно задумываемся о клиент-серверном взаимодействии (все-таки у нас есть и новички в группе).
      Сложные и тяжелые алгоритмы правильно располагать на сервере.
      Что касается текущего задания, то выполняемые операции можно считать элементарными и с ними успешно справиться любой клиент.
      Поэтому действительно выполнение можно было делать на клиенте.
      Мы выбрали событие ПриСозданииНаСервере() исключительно из принципов универсальности и простоты: ведь в этом событии можно обращаться и базе данных, поскольку вызов серверный.
      Что касается вывода сообщения, оно действительно не может быть выведено на сервере, а только на клиенте.
      Но, Сообщить() и СообщениеПользователю могут использоваться на сервере: система накапливает пул сообщений и в момент возврата на клиент (в нашем случае это будет событие ПриОткрытии(), которое можно было даже не создавать) сообщения будут выводиться.
      При этом интересна механика данного поведения платформы:
      – Со стороны сервера возвращается флажок, о том, что есть невыведенные сообщения;
      – Делается еще один вызов сервера, в котором идет обращение к очереди сообщений и они передаются на клиента;
      – На клиенте происходит вывод полученные сообщений.

  2. elcinbektimirov 20.04.2011 в 15:04

    Пусть и подсмотрел решение, зато теперь многое стало очевидным! И будем считать что выполнил, хоть и не сам!

  3. Функция РазрешенаПродажа(ВидКлиента,СортТовара)
    Возврат(ВидКлиента = “VIP”)= (СортТовара=”Высший”);
    КонецФункции
    Посмотрел в решение- получилось так же :)
    Функция РазрешенаПродажа(ВидКлиента,СортТовара) Возврат(ВидКлиента = “VIP”)= (СортТовара=”Высший”);КонецФункции
    Посмотрел в решение – получилось так же :)

    • Как-то странно Хром у меня работает, ответы удваиваются.

      • Это проблема нашего сайта, пытаемся ее решить.

  4. larisakonst 12.04.2011 в 19:03

    &НаКлиенте
    Процедура РазрешитьПродажу(Команда)
     
      
    КонецПроцедуры
       Функция РазрешенаПродажа(ВидКлиента,СортТовара)
      Если (ВидКлиента = “VIP” и СортТовара = “Высший”) или
       (Не(ВидКлиента = “VIP”) и НЕ (СортТовара = “Высший”)) Тогда
       Возврат Истина;
      Иначе
       Возврат Ложь;
      КонецЕсли;
     КонецФункции // РазрешенаПродажа()
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
       Сообщить (РазрешенаПродажа(“Постоянный”,”Высший”));
       Сообщить (РазрешенаПродажа(“Непостоянный”,”Брак”));
       Сообщить (РазрешенаПродажа(“VIP”,”Брак”));
       Сообщить (РазрешенаПродажа(“VIP”,”Высший”));
       КонецПроцедуры

  5. ivchenkoe@rambler.ru 11.04.2011 в 13:46

    Если ВидКлиента=”VIP” и СортТовара=”Высший” Тогда
    Возврат Истина
    ИначеЕсли НЕ (ВидКлиента=”VIP” или СортТовара=”Высший”) Тогда
    Возврат Истина
    Иначе
    Возврат Ложь
    КонецЕсли;
    Если ВидКлиента=”VIP” и СортТовара=”Высший” Тогда Возврат Истина
    ИначеЕсли НЕ (ВидКлиента=”VIP” или СортТовара=”Высший”) Тогда
    Возврат Истина
    Иначе
    Возврат Ложь
    КонецЕсли;
    Результат:  Нет, Да, Нет, Да

  6. Чуть опоздал, просмотрел инфо по отчетности по ДЗ и решил, что “лучше поздно”. Первая мысль, которая пришла в голову:
    <CODE>
    Функция РазрешенаПродажа(ВидКлиента,СортТовара)
    Если (ВидКлиента = “VIP” И СортТовара = “Высший”) или
    (НЕ ВидКлиента = “VIP” И НЕ СортТовара = “Высший”) Тогда
    Возврат Истина
    КонецЕсли;
    Возврат Ложь;
    </code>

    • Совершенно верно, лучше поздно, чем никогда..

  7. Функция РазрешенаПродажа(ВидКлиента, СортТовара)

    возврат ?(ВидКлиента = “VIP” И СортТовара = “Высший”,Истина,Ложь);

    КонецФункции

    • //исправила  условие
      Функция РазрешенаПродажа(ВидКлиента, СортТовара)

      возврат ?((ВидКлиента = «VIP) =( СортТовара = «Высший»),Истина,Ложь);

      КонецФункции

  8. первое задание решил
    //с
        Если (ВидКлиента= “VIP” и СортТовара= “высший”)  или
         (не ВидКлиента=  “VIP” и не СортТовара =  “высший” )
         тогда
         возврат Истина;
        иначе
         возврат Ложь;
        КонецЕсли;
    //-с
    Итог: Сообщения “Да,Да,Нет,Нет”

    • Исправил орфографию. Итог : “Нет,Да,Нет,Да”

  9. Сделал аналогично, только не стал в одну строку записывать, чтобы  наглядней было.
    P.S.  даже табличку аналонгичную на бумажке рисовал для функции РазрешенаПродажа…  :)

  10. Нужно ли стремиться писать всегда максимально красиво или если работает, но много букв тоже допустимо?

    • Конечно, нужно стараться писать всегда красиво.
      Но если создается разовая обработка, и сделать ее нужно быстро (так обычно и бывает) можно позволить себе написать не самым оптимальным и красивым образом.
      Есть обратная сторона медали – нужно писать так, чтобы и другие разработчики поняли тебя, сопровождая код в будущем.

  11. Мастерски!

  12. Остроумно! :)

  13. Красиво

  14. Красивое решение…

  15. Ярослав 06.04.2011 в 12:13

    Что делать если не успел к сроку сделать ДЗ № 1 ?

  16. Эстетично.
    Из любопытства провел замер производительности, так как сам ограничился  “простым и примитивным” . Замер сделал по 3-м попыткам «простого и примитивного» и правильного -> выигрыша в производительности нет. 

    • Скорее всего выигрыш будет на миллионах операций.
      И то его значение будет незначительным.

  17. Юрий Торговцев 06.04.2011 в 09:06

    В начале разбора задания читаем:
    … В текущем домашнем задании необходимо программно
    сымитировать операцию XOR.
    В домашнем задании:
    … В текущем домашнем задании необходимо программно 
    сымитировать операцию, обратную XOR.

    ???

    • Текст в задании считаем более точным, в предыдущей версии текста была неточность. Тем не менее, решение корректное.

  18. Круто)