Базовый курс. Домашнее задание №1
Первое задание по 0-му блоку базового курса.
Для выполнения рекомендуется изучить следующие главы 0-го блока.
Глава 1. Развитие линейки «1С:Предприятие 8»
Глава 2. Базовые понятия
Глава 3. Установка платформы и конфигураций
Глава 4. Общие сведения о платформе
Глава 5. Список информационных баз
Глава 6. Пользовательский режим
Глава 7. Базовые приемы работы в конфигураторе
Глава 8. Средства разработчика
Глава 9. Объекты
Глава 10. База данных
Глава 11. Программный код
Глава 12. Примитивные типы данных
Был большой загруз на работе. Буду стараться нагнать. Сделал два варианта первый по простому.
&НаСервере
Функция РазрешенаПродажа(ВидКлиента, ВидТовара)
Если (ВидКлиента = “VIP”) Тогда
Если (ВидТовара = “Высший”) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Иначе
Если (ВидТовара = “Высший”) Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецЕсли;
КонецФункции // РазрешенаПродажа()
&НаСервере
Функция РазрешенаПродажаКоротко(ВидКлиента, ВидТовара)
пВидКлиента = ?(ВидКлиента = “VIP”, Истина, Ложь);
пВидТовара = ?(ВидТовара = “Высший”, Истина, Ложь);
Возврат НЕ (пВидКлиента ИЛИ пВидТовара) ИЛИ (пВидКлиента И пВидТовара);
КонецФункции // РазрешенаПродажа()
&НаКлиенте
Процедура Проверить(Команда)
// Вставить содержимое обработчика.
Сообщить(“VIP – Высший ” + РазрешенаПродажа(“VIP”, “Высший”));
Сообщить(“Постоянный – Высший ” + РазрешенаПродажа(“Постоянный”, “Высший”));
Сообщить(“Непостоянный – Брак ” + РазрешенаПродажа(“Непостоянный”, “Брак”));
Сообщить(“VIP – Брак ” + РазрешенаПродажа(“VIP”, “Брак”));
Сообщить(“Старый знакомый – Первый сорт ” + РазрешенаПродажа(“Старый знакомый”, “Первый сорт”));
Сообщить(“————————————–“);
Сообщить(“VIP – Высший ” + РазрешенаПродажаКоротко(“VIP”, “Высший”));
Сообщить(“Постоянный – Высший ” + РазрешенаПродажаКоротко(“Постоянный”, “Высший”));
Сообщить(“Непостоянный – Брак ” + РазрешенаПродажаКоротко(“Непостоянный”, “Брак”));
Сообщить(“VIP – Брак ” + РазрешенаПродажаКоротко(“VIP”, “Брак”));
Сообщить(“Старый знакомый – Первый сорт ” + РазрешенаПродажаКоротко(“Старый знакомый”, “Первый сорт”));
КонецПроцедуры
Вот такие результаты выполнения.
Забыл добавить результат выполнения
VIP – Высший Да
Постоянный – Высший Нет
Непостоянный – Брак Да
VIP – Брак Нет
Старый знакомый – Первый сорт Да
————————————–
VIP – Высший Да
Постоянный – Высший Нет
Непостоянный – Брак Да
VIP – Брак Нет
Старый знакомый – Первый сорт Да
Был большой загруз и на выполнение заданий времени не было. Теперь надеюсь нагнать.
Функция:
Функция РазрешенаПродажа1(ВидКлиента,СортТовара)
Разрешение = Ложь;
Если ВидКлиента = “VIP” Тогда
Если СортТовара = “Высший” Тогда
Разрешение = Истина;
КонеЦесли;
ИначеЕсли СортТовара <> “Высший” Тогда
Разрешение = Истина;
КонецЕсли;
Возврат Разрешение;
КонецФункции
Логика :
«VIP», «Высший»-«Истина».
Все остальное-«Ложь».
Если первый парметр – «Истина» Тогда
Если второй параметр «Истина» Тогда результат – «Истина»
Если первый параметр – «Ложь» Тогда
Если второй параметр «Ложь» Тогда результат – «Истина»
Во всех других случаях результат – «Ложь»
P.S. Решение домашнего задания не смотрел.
Ок, догоняйте.
Сначала написал не оптимально с кучей условий и исключений. А когда увидел насколько любопытно оперировать булевой логикой, то решил задачу сначала теоретически на особеностях И, ИЛИ, НЕ и (), а потом практчески. Вышло так:
“И” дает комбинацию “И,Л,Л,Л”
ИЛИ дает “И,И,И,Л”
НЕ (ИЛИ) “Л,Л,Л,И”
а (И) ИЛИ НЕ (ИЛИ) дает искомую “И,Л,Л,И”
Вот и вышла Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Усл1 = ВидКлиента = “VIP”;
Усл2 = СортТовара = “Высший”;
Возврат (Усл1 и Усл2) ИЛИ НЕ(Усл1 или Усл2);
КонецФункции
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Усл1 = ВидКлиента = “VIP”
Усл2 = СортТовара = “Высший”;
Возврат (Усл1 и Усл2) ИЛИ НЕ(Усл1 или Усл2);
КонецФункции
Запоздал с выполнением заданий, начинаю догонять (естественно, не глядя на решение от преподавателей до выполнения задания)…
Платформу поставил, базу создал, создал в ней обработку:
(на форме просто кнопка)
&НаКлиенте
Процедура ПроверитьПродажу(Команда)
Сообщить(РазрешенаПродажа(“Постоянный”, “Высший”));
Сообщить(РазрешенаПродажа(“Непостоянный”, “Брак”));
Сообщить(РазрешенаПродажа(“VIP”, “Брак”));
Сообщить(РазрешенаПродажа(“VIP”, “Высший”));
КонецПроцедуры
&НаКлиенте
Функция ИсключающееИЛИ(Значен1, Значен2)
Возврат (Значен1 и НЕ Значен2) или (НЕ Значен1 и Значен2);
КонецФункции
&НаКлиенте
Функция РазрешенаПродажа(ТипКлиента, ТипТовара)
Возврат ИсключающееИЛИ(ТипКлиента <> “VIP” , ТипТовара = “Высший”);
КонецФункции // РазрешенаПродажа()
Всем доброго времени суток!
На работе загруз, поэтому запоздал с началом занятий.
Пока не глядя в авторский ответ даю свой вариант решения:
Функция РазрешенаПродажа(Знач ВидКлиента, Знач СортТовара)
Возврат (ВидКлиента = “VIP” И СортТовара = “Высший”) Или (ВидКлиента <> “VIP” И СортТовара <> “Высший”);
КонецФункции // РазрешенаПродажа()
Наверное поздно и не очень оптимально, на всё же:
Возврат ((ВидКлиента=»VIP») И (СортТовара=»Высший»)) ИЛИ (НЕ(ВидКлиента=»VIP») И НЕ(СортТовара=»Высший»));
Сама функция:
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если (ВидКлиента =”VIP” и СортТовара = “Высший”) ИЛИ (ВидКлиента <> “VIP” И СортТовара <> “Высший”) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Создал процедуру
Если ВидКлиента = “VIP” И СортТовара <> “Высший” тогда
Возврат Ложь
ИначеЕсли ВидКлиента <> “VIP” И СортТовара = “Высший” тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
задание сделал, особых трудностей не возникло.
Иду с отставанием постараюсь нагнать как можно быстрее.
Добрый времени суток.
Выполнение самого задания не вызвало трудностей, трудности возникли с управляемым интерфейсом, запуталась в свойствах конфигурации.
Функция РазрешенаПродажа(Клиент, Сорт)
Если Клиент = “VIP” Тогда
СтатусКлиента = Истина;
Иначе
СтатусКлиента = Ложь;
КонецЕсли;
Если Сорт = “Высший” Тогда
СтатусСорта = Истина;
Иначе
СтатусСорта = Ложь;
КонецЕсли;
Возврат СтатусКлиента = СтатусСорта;
КонецФункции
Функция РазрешенаПродажа(Клиент, Сорт)
Если Клиент = “VIP” Тогда
СтатусКлиента = Истина;
Иначе
СтатусКлиента = Ложь;
КонецЕсли;
Если Сорт = “Высший” Тогда
СтатусСорта = Истина;
Иначе
СтатусСорта = Ложь;
КонецЕсли;
Возврат СтатусКлиента = СтатусСорта;
КонецФункции
Легкое задание – оно не вызвало затруднений у меня.
Здравствуйте. Вчера был командировке и из Йошкар-Олы отправил свое решение ДЗ1. Сегодня вернулся в Москву и в комментариях не увидел своего решения и решил повторить его снова.
Так как опоздал с решением даю два варианта:
Вариант 1: Создал новую форму обработки. В ней создал два строковых реквизита: ВидКлиента и СортТовара. В модуле формы создал процедуру – ВидКлиентаПри Изменении(Элемент)
Сообщить(РазрешенаПродажа1(ВидКлиента1, СортТовара1));
КонецПроцедуры
Сообщить(РазрешенаПродажа(ВидКлиента, СортТовара));
КонецПроцедуры
Еще одну процедуру:
Процедура СортТовара1ПриИзменении(Элемент)
Сообщить(РазрешенаПродажа(ВидКлиента, СортТовара));
КонецПроцедуры
На сервере создал функцию:
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если ((ВидКлиента=”VIP”) и (СортТовара=”Высший”)) или ((ВидКлиента <> “VIP”) и (СортТовара<>”Высший”))тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Вариант2: Создал перечисления – ВидКлиента со значениями – VIP и Постоянный; СортТовара со значениями – Высший и БРАК. В форме обработки создал реквизиты ВидКлиента и СортТовара -Типа – ПеречислениеСсылка. На сервере переписал функцию:
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если ((ВидКлиента=Перечисления.ВидКлиента.VIP и СортТовара=Перечисления.СортТовара.Высший) или (ВидКлиента<>Перечисления.ВидКлиента.VIP и СортТовара<>Перечисления.СортТовара.Высший)) тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Ваше решение было одобрено вчера в 12:43 (Мск).
Все ок.
Здравствуйте. Конечно же, наипростейшим решением по первому заданию будет case-выбор возможных вариантов ситуаций. Т.обр код получается следующим:
<code>
Функция РазрешитьПродажу(ВидКлиента, СортТовара)
Если (ВидКлиента = “Вип”)И(СотрТовара = “Высший”) Тогда
Возврат Истина;
ИначеЕсли (ВидКлиента <> “Вип”)И(СортТовара<> “Высший”) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
</code>
Можно также последовательно вычислять и логические выражения, сохраняя промежуточные результаты в переменных, но такое решение не очень “красиво”, на мой взгляд.
Доброго времени суток! ДЗ реализовала следующим образом:
<code>
Функция РазрешенаПродажа(X, Y)
А = ?(X = “VIP”, Истина, Ложь);
Б = ?(Y = “Брак”, Истина, Ложь);
Если (А или Б) И (А <> Б) Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
</code>
Результат работы функции: 0,1,0,1
Функция РазрешенаПродажа(пар1,пар2)
В = пар1= “VIP”;
С =пар2 = “Высший”;
а = (не в и с) или (Не с и в);
Возврат НЕ а;
КонецФункции
Функция РазрешенаПродажа(пар1,пар2) В = пар1= “VIP”; С =пар2 = “Высший”; а = (не в и с) или (Не с и в); Возврат НЕ а; КонецФункции
Здравствуйте,
В связи с тем, что задержалась с решением реализовала несколько вариантов.
1.Если (ВидКлиента = “VIP” и СортТовар = “Высший”)
тогда ПродажаРазрешена = Истина
ИначеЕсли не (ВидКлиента = “VIP”) и не (СортТовар = “Высший”)
тогда ПродажаРазрешена = истина
Иначе ПродажаРазрешена = Ложь ;
КонецЕсли;
2.
КлиентВип=( ВидКлиента=”VIP”);
СортТовараВысший=( СортТовар=”Высший”);
ПродажаРазрешена=не ((КлиентВип и не СортТовараВысший) или (не КлиентВип и СортТовараВысший) );
3.ПродажаРазрешена = КлиентВип = СортТовараВысший;
Возврат ПродажаРазрешена;
Вроде все получилось
Мой вариант решения был такой, но как я увидел как можно было решить поставленную задачу сразу понял, сложность своего решения.
<code>]Возврат(?((ВидКлиента = “VIP” И СортТовара = “Высший”) Или (ВидКлиента <> “VIP” И СортТовара <> “Высший”), Истина, Ложь))</code>
К сожалению, только сегодня нашлось время досмотреть необходимые главы курса и выполнить домашнее задание.
Проблем не возникло.
Задание выполнил.
Пока все просто и понятно.
Всем доброго времени суток!
Сначала когда читаешь задание, то вроде бы и надо то потратить на него пару минут.
Начал исполнять и окончательно запутавшись со скобками в условии, бросил это дело.
На следующий день пересмотрев еще раз видео по приоритетам, наконец-то понял что скобки вообще не нужны и выкинул их все из условия. Вот какое оно в итоге получилось:
ВидКлиента = “VIP” И СортТовара = “Высший” ИЛИ ВидКлиента <> “VIP” И СортТовара <> “Высший”
Результат исполнения обработчика события «ПриСозданииНаСервере»:
Продать нельзя
Продать можно
Продать нельзя
Продать можно
Жду следующего ДЗ!
Всем удачи на курсах!
Опоздал на один день. блин.
На базисе «И» «ИЛИ» «НЕ»
В СНДФ
1*1+0*0
В СНКФ
(0+1)*(1+0)
Но так как есть функция РАВНО, ЕСЛИ.
Можно решить так:
&НаКлиенте
Процедура Разрешение(Команда)
ВидКлиента=?(Клиент=”VIP-клиент”,1,0);
СортТовара= ?(Товар=”Высший” ,1,0);
// Клиент и Товары- реквизиты формы
Сообщить(РазрешениеПродаж(ВидКлиента,СортТовара));
КонецПроцедуры
&НаКлиенте
Функция РазрешениеПродаж(А,Б)
Возврат ?(А=Б,”Продать”,”Продать высший сорт”) ;
КонецФункции
Единственное что некрасиво:
0 0 0
0 1 1
1 0 1
1 1 0 т. е. Клиент=”VIP-клиент” И Товар=”Высший” а мы ему «Просто продать»