Базовый курс. Занятие №1
Начинаем новый поток базового курса.
Первые три занятия посвящены нулевому блоку.
Необходимо изучить следующие главы 0-го блока.
Глава 1. Развитие линейки «1С:Предприятие 8»
Глава 2. Базовые понятия
Глава 3. Установка платформы и конфигураций
Глава 4. Общие сведения о платформе
Глава 5. Список информационных баз
Глава 6. Пользовательский режим
Глава 7. Базовые приемы работы в конфигураторе
Глава 8. Средства разработчика
Глава 9. Объекты
Глава 10. База данных
Глава 11. Программный код
Глава 12. Примитивные типы данных
Также нужно выполнить домашнее задание, текст которого доступен на странице.
В этой же теме необходимо написать отчет о выполнении задания.
О том как отчитываться, как будет организована работа группы смотрите видео со страницы.
ps. Участники курса без доступа в мастер-группу отчитываться по домашним заданиям не могут.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —напишите нам на e-mail поддержки.
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат НЕ XOR(ВидКлиента = “VIP”, СортТовара = “Высший”)
КонецФункции
Функция XOR(Операнд_1, Операнд_2)
Возврат НЕ (Операнд_1 = Операнд_2)
КонецФункции
<code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара) Возврат НЕ XOR(ВидКлиента = “VIP”, СортТовара = “Высший”)КонецФункции
Функция XOR(Операнд_1, Операнд_2) Возврат НЕ (Операнд_1 = Операнд_2)КонецФункции
</code>
Первый блин кодом комом, немного задвоилось и перекосилось )
Ничего страшного.
Решила, но не удалось проверить. При проверке на синтаксис выдает ошибку:
{Форма.Форма.Форма(22,28)}: Ожидается выражение
Сообщить(РазрешенаПродажа(<<?>>«Постоянный», «Высший»)); (Проверка: Сервер)
Не могу понять в чем дело…
<code>
Функция РазрешенаПродажа (ВидКлиента,СортТовара)
Если ВидКлиента = “VIP” И СортТовара = “Высший” Тогда
Возврат Истина;
ИначеЕсли ВидКлиента <> “VIP” И СортТовара <> “Высший” Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
</code>
Разобралась с ошибкой, дело было в неправильных кавычках:-)
Функция работает правильно. Почитав комментарии, учла свою ошибку, что надо было функцию XOR в общем модуле писать, и во всяком случае сделать ее отдельно.
Да, все верно. Кавычки должны быть классические :)
задание выполнил
Евгений прошу прощения, что вопрос не по теме, но невозможность отправить комментарий из IE9 – это баг или фича? Ещё раз прошу прощения.
Это особенность, которой сейчас озадачен веб-мастер. На текущий момент нужно использовать другой браузер.
Сама по себе функция простая, и тут проблем не возникло. Но до этого я не работал с 8.2 и управляемыми приложения, а в обычной форме нет события “ПриСозданииНаСервере”. Немного повоевав с формой получил ответ: “Нет”, “Да”, “Нет”, “Да”.
Задание выполнено
Вот мои 3 варианта
<code>
Функция РазрешенаПродажа_(ВидКлиента, СортТовара)
Если (ВидКлиента = “VIP”) Тогда
Если (СортТовара = “Высший”) Тогда
Возврат Истина; //можно продать
КонецЕсли;
Иначе
Если НЕ (СортТовара = “Высший”) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь; //нельзя продавать
КонецФункции
</code>
вариант 2
<code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если (ВидКлиента = “VIP”) и (СортТовара = “Высший”) или НЕ(ВидКлиента = “VIP”) и НЕ(СортТовара = “Высший”) Тогда
Возврат Истина; //можно продать
Иначе
Возврат Ложь; //нельзя продавать
КонецЕсли;
КонецФункции
</code>
3-й
<code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
возврат ВидКлиента=”VIP” и СортТовара=”Высший” или не ВидКлиента=”VIP” и не СортТовара=”Высший”;
КонецФункции
</code>
Добрый день,
<code>
Функция ИмитацияXOR(клиент,товар)
возврат (клиент=”vip”)=(товар=”высший”);
КонецФункции
</code>
поправка: Имя функции “ИмитацияXOR”, на самом деле “РазрешенаПродажа”
Функция РазрешенаПродажа(клиент,товар)
возврат (клиент=”vip”)=(товар=”высший”);
КонецФункции
Прошу прощения за невнимательность в прочтении задания. Мой вариант реализации програмной иммитации операции обратной XOR и ее вызова.
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат НЕXOR(ВидКлиента = “VIP”, СортТовара = “Высший”)
КонецФункции
Функция НЕXOR(Операнд1, Операнд2)
Возврат Операнд1 = Операнд2
КонецФункции
Задание выпонил. Пока никаких вопросов не возникло.
Задание выполнил, трудностей не возникло. Я думаю, что функцию “XOR” намерено не стали включать во встроенный язык 1С, так как данную функцию можно реализовать более простыми логическими операторами И, ИЛИ, НЕ и для бизнес-логики этого вполне достаточно. А сама по себе функция “XOR” плохо бы воспринималась. Функцию реализовал просто, чтобы удобно было читать другим разработчикам:
<code>Если ВидКлиента=”VIP” И СортТовара=”Высший” Тогда
Возврат Истина;
ИначеЕсли ВидКлиента<>”VIP” И СортТовара<>”Высший” Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли; </code>
Потом решил опробовать новые механизмы оповещения пользователей в платформе 8.2, создал два поля ввода(куда можно было ввести вид клиента и сорт товара). Если товар можно продавать, то выводится оповещение пользователю, а если нельзя, то выходит сообщение об ошибки прикрепленное к полю ввода сорта товара. Вот такой вот код получился, при нажатии на кнопку:
<code>Если РазрешенаПродажа(ВидКлиента, СортТовара) Тогда
Текст=”Товар сорта: “+СортТовара+”
|можно продавать клиенту, вида: “+ВидКлиента;
ПоказатьОповещениеПользователя(“Соверешена продажа”,, Текст);
Иначе
Сообщение=Новый СообщениеПользователю;
Текст=”Товар сорта: “+СортТовара +”
|нельзя продавать клиенту, вида: “+ВидКлиента;
Сообщение.Текст=Текст;
Сообщение.Поле=”СортТовара”;
Сообщение.Сообщить();
КонецЕсли; </code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Рез = Истина;
Если ВидКлиента = “VIP” Тогда
Рез = (СортТовара = “Высший”);
Иначе
Рез = не (СортТовара = “Высший”);
КонецЕсли;
Возврат Рез;
КонецФункции
Функция неXOR(условие1,условие2)
Если условие1=условие2 Тогда Возврат истина
Иначе ВОзврат ложь
КонецЕсли;
КонецФункции
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат неXOR(ВидКлиента=”VIP”,СортТовара=”Высший”);
КонецФункции
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если ВидКлиента = «VIP» И СортТовара = «Высший» Тогда
Возврат Истина;
ИначеЕсли ВидКлиента <> «VIP» И СортТовара <> «Высший» Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли
КонецФункции
Задание выполнил. Пока довольно простое.
задние выполнил
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Опрация1=ВидКлиента=«VIP»
Операция2=СортТовара = «Высший»
Продажа НЕ XOR(Операция1,Операция2)
КонецФункции
И кнопочки изменить нет свой коммент :)
К сожалению, такой возможности нет..
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат НЕ ((ВидКлиента = “VIP”) <> (СортТовара = “Высший”));
КонецФункции
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат НЕ ((ВидКлиента = “VIP”) <> (СортТовара = “Высший”));
КонецФункции
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
ВИП = ?(ВидКлиента=”VIP”,Истина,Ложь);
ВС = ?(СортТовара=”Высший”,Истина,Ложь);
Возврат (?(ВИП и ВС,Истина,Не(ВИП или ВС)));
КонецФункции
А так даже красивее
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Возврат ( ?((ВидКлиента=”VIP”)=(СортТовара=”Высший”),Истина,Ложь) );
КонецФункции
Задание выполнено
<code>Функция РазрешенаПродажа(Пар1,Пар2)
ЭтоВип = Пар1 = “VIP”;
ЭтоВысший = Пар2 = “Высший”;
Возврат (ЭтоВип = ЭтоВысший);
КонецФункции </code>
Я недавно только осуществил оплату и коробка с дисками ещё не пришла, откуда можно скачать учебную конфигурацию для базового курса? :)
Процедура РазрешенаПродажа(ВидКлиента, СортТовара)
Если ВидКлиента = “VIP” и СортТовара = “Высший” Тогда
Возврат Истина;
ИначеЕсли ВидКлиента <> “VIP” и СортТовара <> “Высший”
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецПроцедуры;
Процедура РазрешенаПродажа(ВидКлиента, СортТовара)
Если ВидКлиента = “VIP” и СортТовара = “Высший” Тогда Возврат Истина;
ИначеЕсли ВидКлиента <> “VIP” и СортТовара <> “Высший” Возврат Истина;
Иначе Возврат Ложь;
КонецЕсли;
КонецПроцедуры;
Ознакомьтесь, пожалуйста, с этой записью
https://mg.spec8.ru/2011/04/03/%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9-%D0%BA%D1%83%D1%80%D1%81-%D0%BF%D0%BB%D0%B0%D0%BD-%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA/
Там есть ответ на Ваш вопрос.
<code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
РазрешенаПродажа = ?((ВидКлиента = “VIP” И СортТовара = “Высший”) ИЛИ
(ВидКлиента <> “VIP” И СортТовара <> “Высший”), Истина, Ложь);
Возврат РазрешенаПродажа;
КонецФункции
</code>
Правда в сообщении выводит не “истина-ложь”, а “да-нет”, это критично?
Это не критично.
“Да-нет” это пользовательское представление значений типа Булево.
выполнил
Задание выполнено
Задание выполнено
Если (ВидКлиента=”VIP”) = (СортТовара=”Высший”) тогда
Возврат 1
иначе
Возврат 0
конецЕсли;
Решил “в лоб”
Если (Контрагент.СтатусКлиента= “VIP” И Номенклатура.Сорт=“Высший”) ИЛИ Контрагент.СтатусКлиент<> “VIP” И Номенклатура.Сорт<>“Высший”) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
P.S. В учебной конфигурации у реквизита СтатусКлиента тип число. Это надо учитывать-?
Нет, учебную конфигурацию не нужно брать во внимание.
<code>
Функция ИсключающееИЛИ(Опер1, Опер2)
Возврат (Опер1 Или Опер2) И Опер1 <> Опер2;
КонецФункции // ИсключающееИЛИ()
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат Не ИсключающееИЛИ(ВидКлиента = “VIP”, СортТовара = “Высший”);
КонецФункции // РазрешенаПродажа()
</code>
Хотя, конечно же, проку от создания функции ИсключающееИЛИ было бы неизмеримо больше, если объявить ее экспортной и поместить в общий модуль.
Добрый день!
Вот мой вариант решения дом.задания №1
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
лВозврат = Ложь;
Если (ВидКлиента = “VIP” И СортТовара = “Высший”) Или
(ВидКлиента <> “VIP” И СортТовара <> “Высший”) Тогда
лВозврат = Истина;
КонецЕсли;
Возврат лВозврат;
КонецФункции
Ответы:Нет,Да,Нет,Да.
Вопрос: А если не указана директива препроцессора, где будет выполняться функция/процедура?
Функция будет компилироваться на сервере.
Подробно о выполнении кода будем говорить в 1-ом блоке курса.
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
//XOR: НЕ(Операнд1=Опреранд2)И(Операнд1 ИЛИ Опреранд2)
//НЕ XOR: (Операнд1=Опреранд2)ИЛИ(НЕ Операнд1 И НЕ Опреранд2)
//XOR: (НЕ Операнд1 ИЛИ НЕ Опреранд2)И(Операнд1 ИЛИ Опреранд2)
//НЕ XOR: (Операнд1 И Опреранд2)ИЛИ(НЕ Операнд1 И НЕ Опреранд2)
//Результат = (ВидКлиента = “VIP” И СортТовара = “Высший”)ИЛИ(НЕ ВидКлиента = “VIP” И НЕ СортТовара = “Высший”);
Возврат НЕ XOR(ВидКлиента = “VIP”, СортТовара = “Высший”);
КонецФункции
Функция XOR(Операнд1, Операнд2)
Возврат (НЕ Операнд1 ИЛИ НЕ Операнд2)И(Операнд1 ИЛИ Операнд2);
КонецФункции
) Усложнил.
Функция XOR(Операнд1, Операнд2)
Возврат (НЕ Операнд1 ИЛИ НЕ Операнд2);
КонецФункции
//Равнозначно
Функция XOR(Операнд1, Операнд2)
Возврат НЕ( Операнд1 И Операнд2);
КонецФункции
//С упрощением
Первое работало. Простите за предыдущий пост…
Функция XOR(Операнд1, Операнд2)
//Возврат (НЕ Операнд1 ИЛИ НЕ Операнд2)И(Операнд1 ИЛИ Операнд2);
Возврат НЕ (Операнд1 = Операнд2); //Работа над ошибками )!!!!!!!!!!!!!!!!!!!!!!!!!!!
КонецФункции
Так гораздо красивее :)
Хотел дойти последовательно, хотя и так ясно, так как “очевидно”. Мозг работает у всех по-разному.
//(Операнд1 = Операнд2) <=> ((Операнд1 = Истина)И(Операнд2 = Истина)) ИЛИ ((Операнд1 = Ложь)И(Операнд2 = Ложь))
//(Операнд1 И Операнд2) ИЛИ (НЕ Операнд1 И НЕ Операнд2)
//НЕ (Операнд1 = Операнд2) <=> НЕ (Операнд1 И Операнд2) ИЛИ (НЕ Операнд1 И НЕ Операнд2)
//НЕ (Операнд1 = Операнд2) <=> (НЕ Операнд1 ИЛИ НЕ Операнд2) И (Операнд1 ИЛИ Операнд2)
Задание выполнено, сложностей не возникло.
Выполнил
Задание выполнено
<code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Условие1 = (ВидКлиента=”VIP” И СортТовара=”Высший”);
Условие2 = (Не ВидКлиента=”VIP”) И (Не СортТовара=”Высший”);
Если Условие1 ИЛИ Условие2 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
</code>
Выполнил, сложностей не возникло
Кажется, работает =)
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат ?(ВидКлиента = “ВИП” И СортТовара = “Высший” ИЛИ ВидКлиента <> “ВИП” И СортТовара <> “Высший”, ИСТИНА, ЛОЖЬ)
КонецФункции
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Если ВидКлиента = “VIP” И СортТовара = “Высший” ИЛИ
ВидКлиента <> “VIP” И СортТовара <> “Высший” Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Выполнено
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Если ВидКлиента = “VIP” И СортТовара = “Высший” ИЛИ ВидКлиента <> “VIP” И СортТовара <> “Высший” Тогда
Возврат Истина;
Иначе Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция XOR(Параметр1, Параметр2)
Возврат Параметр1 <> Параметр2;
КонецФункции
&НаСервере
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат НЕ XOR(ВРЕГ(СокрЛП(ВидКлиента)) = “VIP”, ВРЕГ(СокрЛП(СортТовара)) = “ВЫСШИЙ”);
КонецФункции
Решил всё же создать правильную функцию XOR, которую возможно потом будет использовать из других процедур, поэтому получилось так:
<code>
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Возврат НЕ XOR(ВидКлиента = “VIP”, СортТовара = “Высший”);
КонецФункции
Функция XOR(Операнд1, Операнд2)
Возврат НЕ (Операнд1 = Операнд2);
КонецФункции
</code>
Правильное решение!