Базовый курс. Решение ДЗ №1
Представляем решение первого домашнего задания.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
— залогиньтесь.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.
Начинаем выделять время для ДЗ, пока по блоку 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;
– не скопипастился ранее знак “неравно”.
Ну по сути это вариант видеорешения.
В первых трех заданиях мы не сильно задумываемся о клиент-серверном взаимодействии (все-таки у нас есть и новички в группе).
Сложные и тяжелые алгоритмы правильно располагать на сервере.
Что касается текущего задания, то выполняемые операции можно считать элементарными и с ними успешно справиться любой клиент.
Поэтому действительно выполнение можно было делать на клиенте.
Мы выбрали событие ПриСозданииНаСервере() исключительно из принципов универсальности и простоты: ведь в этом событии можно обращаться и базе данных, поскольку вызов серверный.
Что касается вывода сообщения, оно действительно не может быть выведено на сервере, а только на клиенте.
Но, Сообщить() и СообщениеПользователю могут использоваться на сервере: система накапливает пул сообщений и в момент возврата на клиент (в нашем случае это будет событие ПриОткрытии(), которое можно было даже не создавать) сообщения будут выводиться.
При этом интересна механика данного поведения платформы:
– Со стороны сервера возвращается флажок, о том, что есть невыведенные сообщения;
– Делается еще один вызов сервера, в котором идет обращение к очереди сообщений и они передаются на клиента;
– На клиенте происходит вывод полученные сообщений.
Пусть и подсмотрел решение, зато теперь многое стало очевидным! И будем считать что выполнил, хоть и не сам!
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Возврат(ВидКлиента = “VIP”)= (СортТовара=”Высший”);
КонецФункции
Посмотрел в решение- получилось так же :)
Функция РазрешенаПродажа(ВидКлиента,СортТовара) Возврат(ВидКлиента = “VIP”)= (СортТовара=”Высший”);КонецФункции
Посмотрел в решение – получилось так же :)
Как-то странно Хром у меня работает, ответы удваиваются.
Это проблема нашего сайта, пытаемся ее решить.
&НаКлиенте
Процедура РазрешитьПродажу(Команда)
КонецПроцедуры
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Если (ВидКлиента = “VIP” и СортТовара = “Высший”) или
(Не(ВидКлиента = “VIP”) и НЕ (СортТовара = “Высший”)) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // РазрешенаПродажа()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Сообщить (РазрешенаПродажа(“Постоянный”,”Высший”));
Сообщить (РазрешенаПродажа(“Непостоянный”,”Брак”));
Сообщить (РазрешенаПродажа(“VIP”,”Брак”));
Сообщить (РазрешенаПродажа(“VIP”,”Высший”));
КонецПроцедуры
Если ВидКлиента=”VIP” и СортТовара=”Высший” Тогда
Возврат Истина
ИначеЕсли НЕ (ВидКлиента=”VIP” или СортТовара=”Высший”) Тогда
Возврат Истина
Иначе
Возврат Ложь
КонецЕсли;
Если ВидКлиента=”VIP” и СортТовара=”Высший” Тогда Возврат Истина
ИначеЕсли НЕ (ВидКлиента=”VIP” или СортТовара=”Высший”) Тогда
Возврат Истина
Иначе
Возврат Ложь
КонецЕсли;
Результат: Нет, Да, Нет, Да
Чуть опоздал, просмотрел инфо по отчетности по ДЗ и решил, что “лучше поздно”. Первая мысль, которая пришла в голову:
<CODE>
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Если (ВидКлиента = “VIP” И СортТовара = “Высший”) или
(НЕ ВидКлиента = “VIP” И НЕ СортТовара = “Высший”) Тогда
Возврат Истина
КонецЕсли;
Возврат Ложь;
</code>
Совершенно верно, лучше поздно, чем никогда..
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
возврат ?(ВидКлиента = “VIP” И СортТовара = “Высший”,Истина,Ложь);
КонецФункции
//исправила условие
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
возврат ?((ВидКлиента = «VIP) =( СортТовара = «Высший»),Истина,Ложь);
КонецФункции
первое задание решил
//с
Если (ВидКлиента= “VIP” и СортТовара= “высший”) или
(не ВидКлиента= “VIP” и не СортТовара = “высший” )
тогда
возврат Истина;
иначе
возврат Ложь;
КонецЕсли;
//-с
Итог: Сообщения “Да,Да,Нет,Нет”
Исправил орфографию. Итог : “Нет,Да,Нет,Да”
Сделал аналогично, только не стал в одну строку записывать, чтобы наглядней было.
P.S. даже табличку аналонгичную на бумажке рисовал для функции РазрешенаПродажа… :)
Нужно ли стремиться писать всегда максимально красиво или если работает, но много букв тоже допустимо?
Конечно, нужно стараться писать всегда красиво.
Но если создается разовая обработка, и сделать ее нужно быстро (так обычно и бывает) можно позволить себе написать не самым оптимальным и красивым образом.
Есть обратная сторона медали – нужно писать так, чтобы и другие разработчики поняли тебя, сопровождая код в будущем.
Мастерски!
Остроумно! :)
Красиво
Красивое решение…
Что делать если не успел к сроку сделать ДЗ № 1 ?
Нужно сделать его сейчас.
Эстетично.
Из любопытства провел замер производительности, так как сам ограничился “простым и примитивным” . Замер сделал по 3-м попыткам «простого и примитивного» и правильного -> выигрыша в производительности нет.
Скорее всего выигрыш будет на миллионах операций.
И то его значение будет незначительным.
В начале разбора задания читаем:
… В текущем домашнем задании необходимо программно
сымитировать операцию XOR.
В домашнем задании:
… В текущем домашнем задании необходимо программно
сымитировать операцию, обратную XOR.
???
Текст в задании считаем более точным, в предыдущей версии текста была неточность. Тем не менее, решение корректное.
Круто)