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

Первое задание по 0-му блоку базового курса.

Для выполнения рекомендуется изучить следующие главы 0-го блока.
Глава 1. Развитие линейки «1С:Предприятие 8»
Глава 2. Базовые понятия
Глава 3. Установка платформы и конфигураций
Глава 4. Общие сведения о платформе
Глава 5. Список информационных баз
Глава 6. Пользовательский режим
Глава 7. Базовые приемы работы в конфигураторе
Глава 8. Средства разработчика
Глава 9. Объекты
Глава 10. База данных
Глава 11. Программный код
Глава 12. Примитивные типы данных

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

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

  1. Задание выполнено.
    Немного запутало введение при постановке задачи.
    <code>Если ВидКлиента = “ВИП” и СортТовара=”Высший” тогда
      Возврат истина  
     ИначеЕсли не ВидКлиента = “ВИП” и не СортТовара=”Высший” тогда
      Возврат истина  
     иначе
      Возврат ложь
     КонецЕсли;
    </code>
    Получилось нет,да,нет,да

  2. Если НЕ(ВидКлиента = “VIP” и СортТовара = “Высший”) или (ВидКлиента <> “VIP” и СортТовара = “Высший”) Тогда
    Возврат “Запрещено”;
    Иначе
    Возврат “Разрешено”;
    КонецЕсли;

  3. XOR сложение в конечном поле размерности 2 может иметь более двух аргументов.
    Сравнение строк точное посимвольное через массив, особенность работы с разными кодировками.

  4. //Приоритеты выполнения:
    //    1                    2  1                      3
    Учитывая приоритеты выполнения НЕ, И, ИЛИ,  тело функции без скобок может быть выглядеть так:
    Возврат
    НЕ ВидКлиента = “VIP” И НЕ СортТовара=”Высший” ИЛИ
    ВидКлиента = “VIP” И СортТовара=”Высший”;
    Проверял. Возвращает правильные значения.

  5. &НаКлиенте
    Процедура ВызовТонкийКлиент(Команда)
     
     //общие данные тестов функции == Математика.ИсключающееИЛИ(
     А1 = 1;
     А2 = 2;
     А3 = 2;
     
     СтруКонтекст = Новый Структура;
     СтруКонтекст.Вставить(“А1”, А1);
     СтруКонтекст.Вставить(“А2”, А2);
     СтруКонтекст.Вставить(“А3”, А3);
     
     ИмяТеста = “тест1”;
     МассивИлиСтрокаУсловий = “(СтруКонтекст.А1 = 1) <> (СтруКонтекст.А2 = 1)”;
     РезультатПроверки = Математика.ИсключающееИЛИ(МассивИлиСтрокаУсловий,СтруКонтекст);
     Сообщить(“Результат проверки =условие строкой==”+ИмяТеста+”= “+РезультатПроверки);
     
     ИмяТеста = “тест2”;
     МассивИлиСтрокаУсловий = “СтруКонтекст.А1 <> СтруКонтекст.А2”;
     РезультатПроверки = Математика.ИсключающееИЛИ(МассивИлиСтрокаУсловий,СтруКонтекст);
     Сообщить(“Результат проверки =условие строкой==”+ИмяТеста+”= “+РезультатПроверки);
     
     ИмяТеста = “тест3”;
     МассивИлиСтрокаУсловий = Новый Массив;
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.А1 = 1”);
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.А2 = 1”);
     РезультатПроверки = Математика.ИсключающееИЛИ(МассивИлиСтрокаУсловий,СтруКонтекст);
     Сообщить(“Результат проверки =массив условий==”+ИмяТеста+”= “+РезультатПроверки);
     
     ИмяТеста = “тест4”;
     МассивИлиСтрокаУсловий = Новый Массив;
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.А1 = 1”);
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.А2 = 1”);
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.А3 = 1”);
     РезультатПроверки = Математика.ИсключающееИЛИ(МассивИлиСтрокаУсловий,СтруКонтекст);
     Сообщить(“Результат проверки =массив условий==”+ИмяТеста+”= “+РезультатПроверки);
     
    КонецПроцедуры
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
     
     Сообщить(Математика.РазрешенаПродажа(“«Постоянный»”, “«Высший»”));
     Сообщить(Математика.РазрешенаПродажа(“«Непостоянный»”, “«Брак»”));
     Сообщить(Математика.РазрешенаПродажа(“«VIP»”, “«Брак»”));
     Сообщить(Математика.РазрешенаПродажа(“«VIP»”, “«Высший»”));
     Сообщить(Математика.РазрешенаПродажа(“«Алиса»”, “«Высший»”, “Привет soft&hard”));
     
    КонецПроцедуры

  6. <code>
    // ИсключающееИЛИ{XOR}
    // сложение в конечном поле размерности 2 если передается массив условий
    // проверка произвольного условия если условие строкой
    // Результат              – Булево или в случае ошибки Неопределено
    // МассивИлиСтрокаУсловий – массив условий или собранная строка условий
    // СтруКонтекст           – контекст проверки
    // СтруОписаниеОшибки     – структура для описания искючительных ситуаций
    Функция ИсключающееИЛИ(МассивИлиСтрокаУсловий, СтруКонтекст, СтруОписаниеОшибки = Неопределено) Экспорт
     // сложение в конечном поле размерности 2 если передается массив условий
     // проверка произвольного условия если условие строкой
     // тут явная передача контекста проверки на сервер в стилистике КД
     
     СтрокаУсловие = “”;
     
     Если ТипЗнч(МассивИлиСтрокаУсловий) = Тип(“Массив”) Тогда
      Для каждого эл Из МассивИлиСтрокаУсловий Цикл
      
       СтрокаУсловие = СтрокаУсловие + ?(ПустаяСтрока(СтрокаУсловие),””,” + “) + ” ?(“+СокрЛП(эл)+”,1 ,0 ) “;
      
      КонецЦикла;
      // сумма в конечном поле размерности 2
      СтрокаУсловие = “(“+СтрокаУсловие + ” % 2 ) = 1″;
      
     ИначеЕсли ТипЗнч(МассивИлиСтрокаУсловий) = Тип(“Строка”) Тогда
      
      СтрокаУсловие = МассивИлиСтрокаУсловий;
      
     Иначе
      
      Возврат (Неопределено);
      
     КонецЕсли;
     
     РезультатПроверки = Неопределено;
     
     Попытка
      // проверка безопасности производиться не будет
      Выполнить(“РезультатПроверки = ” + СтрокаУсловие);
      Возврат(РезультатПроверки);
      
     Исключение
      
      Если СтруОписаниеОшибки = Неопределено Тогда
       
       СтруОписаниеОшибки = Новый Структура;
       
      КонецЕсли;
      
      СтруОписаниеОшибки.Вставить(“ИсключительнаяСитуация_ПроверкаУсловия”, “{“+СтрокаУсловие+”} =описание ошибки= {“+ОписаниеОшибки()+”}”);
       
      Выполнить(Неопределено);
      
     КонецПопытки;
    КонецФункции // ИсключающееИЛИ{XOR}
    // создадим из строки символов массив
    Функция СоздатьМассивСимволов(СтрВходящая)
     
     КоличествоСимволов = СтрДлина(СтрВходящая);
     
     МассивСимволовВидКлиента = Новый Массив;
     
     Для НомерСимвола = 1 По КоличествоСимволов Цикл
     
      МассивСимволовВидКлиента.Добавить(КодСимвола(Сред(СтрВходящая,НомерСимвола,1)));
     
     КонецЦикла;
     
     Возврат (МассивСимволовВидКлиента);
     
    КонецФункции
    // проверим совпадение массивов символов
    Функция СовпадениеМассивовСимволов(МассивСимволов1, МассивСимволов2)
     ВсегоСимволовВмассиве = МассивСимволов1.Количество();
     Если ВсегоСимволовВмассиве <> МассивСимволов2.Количество() Тогда
      Возврат (Ложь);
     КонецЕсли;
     Для ИндексЭлементаМассива = 0 По ВсегоСимволовВмассиве – 1 Цикл
      Если МассивСимволов1[ИндексЭлементаМассива] <> МассивСимволов2[ИндексЭлементаМассива]  Тогда
       Возврат (Ложь);
      КонецЕсли;
     КонецЦикла;
     Возврат (Истина);
    КонецФункции 
    // проверяем точное совпадение с эталонными строками т.к. например символы « и ” имеют различный код :)
    Функция РазрешенаПродажа(ВидКлиента, СортТовара, A1КВА=””) Экспорт
     // в точном соответствии с условиями задачи скопировано из pdf
     МассивСимволовВИП = СоздатьМассивСимволов(“«VIP»”);
     МассивСимволовВысший = СоздатьМассивСимволов(“«Высший»”);
     
     МассивСимволовВидКлиента = СоздатьМассивСимволов(ВидКлиента);
     МассивСимволовСортТовара = СоздатьМассивСимволов(СортТовара);
     
     Совпадение_с_ВИП = СовпадениеМассивовСимволов(МассивСимволовВИП, МассивСимволовВидКлиента);
     НЕ_Совпадение_с_Высший = НЕ СовпадениеМассивовСимволов(МассивСимволовВысший, МассивСимволовСортТовара);
     
     СтруКонтекст = Новый Структура;
     // структура эталона
     СтруКонтекст.Вставить(“Совпадение_с_ВИП”, Совпадение_с_ВИП);
     СтруКонтекст.Вставить(“НЕ_Совпадение_с_Высший”, НЕ_Совпадение_с_Высший);
     
     МассивИлиСтрокаУсловий = Новый Массив;
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.Совпадение_с_ВИП”);
     МассивИлиСтрокаУсловий.Добавить(“СтруКонтекст.НЕ_Совпадение_с_Высший”);
     
     Если НЕ ПустаяСтрока(A1КВА) Тогда
      МассивИлиСтрокаУсловий.Добавить(“Истина”);
     КонецЕсли;
     
     РезультирующееРазрешение = ИсключающееИЛИ(МассивИлиСтрокаУсловий, СтруКонтекст);
     
     Возврат(РезультирующееРазрешение);
     
    КонецФункции

    </code>

    • Впечатляющее объемом кода решение :)

      Но, кажется, Вы сильно усложнили задачу.
      Такой универсальности не требовалось.

  7. respublica 21.01.2011 в 21:01

    Задание выполнено. С помощью конспекта по мат. логике я заметил, что по условиям задачи требуется результат выполнения двойной импликации. В устной речи это операция выражается словами “тогда и только тогда”. Поэтому решение основано на этом факте.
    <code>
    ПереданВипКлиент = (ВидКлиента = “VIP”);
    ПереданВысшийСорт = (СортТовара = “Высший”);
    Возврат (ПереданВипКлиент = ПереданВысшийСорт);

    </code>
    Результат: Нет, да, нет, да.
    П. С. Заметил, что при копировании строчки из pdf-файла
    Сообщить(РазрешенаПродажа(«Постоянный», «Высший»));

    платформа воспринимает кавычки «и »  как один символ, но при этом безбочно ругается при синтаксическом контроле :(. Замена на стандартные ” и ” решает проблему.

  8. Выполнил ДЗ.
    вот функция
    &НаСервере
    Функция РазрешенаПродажа(ВидКлиента, СортТовара)
     Возврат ?(ВидКлиента = “VIP”, СортТовара = “Высший” , Не СортТовара = “Высший”);
    КонецФункции

    Результат
    Нет
    Да
    Нет
    Да

  9. Скорик Андрей 21.01.2011 в 19:37

    Задание выполнил. Не могу сказать что открыл для себя что-то новое.

    • Это вводное задание, если у вас был опыт разработки, то об открытиях говорить пока рано..

  10. kulkov.a.v 21.01.2011 в 17:39

    Задание выполнено.Функция РазрешенаПродажа.
    Сначала попробывал сделать через Если..Иначе.
    Потом понял что все можно сделать проще.
    Если (_Клиент = «VIP») И (Товар = «Высший») Тогда
    Возврат Истина;
    ИначеЕсли НЕ(_Клиент = «VIP») И НЕ(Товар = «Высший») Тогда
    Возврат Истина;
    Иначе
    Возврат Ложь;
    Результат: Нет, Да, Нет, Да.
    Задание выполнено.Функция РазрешенаПродажа. Сначала попробывал сделать через Если..Иначе.Потом понял что все можно сделать проще.
    Если (_Клиент = «VIP») И (Товар = «Высший») Тогда Возврат Истина;
    ИначеЕсли НЕ(_Клиент = «VIP») И НЕ(Товар = «Высший») ТогдаВозврат Истина;
    ИначеВозврат Ложь;
    Результат: Нет, Да, Нет, Да.

  11. Здравствуйте! Выполнено. Затруднений по платформе не возникло. Сначала написал функцию с разветвлением по двум условиям. Потом подумал, сократил
    <code>
    Возврат(Контрагент=”VIP” и Сорт=”Высший”) или  (Контрагент<>”VIP” и Сорт<>”Высший”);
    </code>
    Вообще булева логика тренирует мозг. :)

  12. В результате анализа условий задачи перевел их в формальный вид и составил истинностную таблицу для функции «РазрешенаПродажа». Таблица выглядит следующим образом:
    АBС
    1 1 1
    0 0 1
    1 0 0
    0 1 0
    Заглянул в учебник логики – оказалось эта функция называется эквиваленция.
    Затем составил логическую формулу данной функции: (А И В) ИЛИ (НЕ А И НЕ В), где А-«ВидКлиента, В-«СортТовара». Формулу можно упростить: (А И В) ИЛИ НЕ(А ИЛИ В). Для визуализации таблицы значений и конструирования формулы использовал Excel.
    Далее конструирую функцию в конфигураторе. Сравниваю переданный параметр «ВидКлиента» со значением «вип», параметр «СортТовара» со значением «высший»:
    <code>
    ВидКлиента=ВидКлиента=”вип”;
    СортТовара=СортТовара=”высший”;
    </code>
    Далее с помощью условной конструкция «Если…Тогда…Иначе» реализуем формулу (А И В) ИЛИ НЕ(А ИЛИ В) и возвращаем «Истина» или «Ложь».
    После этого я увидел второй вариант решения и реализовал его с помощью дополнительной переменной «РазрешитьПродажу» и присвоения ей результата вычисления логического выражения, созданного с помощью конструкции «?(вычислить выражение по условию)». Код стал более компактным. И только здесь я обратил внимание на закономерность – значение функции истинно, когда операнды равны. После этого код ещё более упростился путем упрощения логического выражения. Были исключены логические операторы – И, ИЛИ, НЕ. Осталась строка:
    <code>
    РазрешитьПродажу=?(ВидКлиента=СортТовара,Истина,Ложь);
    Возврат РазрешитьПродажу;
    </code>
    Ну а затем удалось увидеть ещё более изящное решение (четвёртый вариант!):
    <code>
    РазрешитьПродажу=ВидКлиента=СортТовара;
    Возврат РазрешитьПродажу;
    </code>

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

  14. Федор 21.01.2011 в 11:50

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

  15. содержание функции (сделана внешняя обработка):
    <code>
    возврат (ВидКлиента = «VIP») <> (НЕ (СортТовара = «Высший»));
    </code>

  16. &НаКлиенте
       Функция РазрешенаПродажа(ВидКлиента, СортТовара)
        Если
         (ВидКлиента= “VIP” И СортТовара= “Высший”)
         ИЛИ (ВидКлиента <> “VIP” И СортТовара <> “Высший”)  Тогда
                   Результат =”Нет”
         Иначе
           Результат =”Да”;
              Возврат Результат;
         КонецЕсли;
        КонецФункции

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

    Возврат ( ВидКлиента=”VIP” И СортТовара=”Высший” ) ИЛИ ( НЕ ВидКлиента=”VIP” И НЕ СортТовара=”Высший” );

    КонецФункции // РазрешенаПродажа()

  18. ДЗ № 1 выполнил следующим образом:
    Если (У1 и У2) или (У3 и У4) тогда
    возврат истина;
    Иначе
    возврат ложь;
    КонецЕсли;

  19. Уважаемые коллеги. Хотя выполнил задание и написал короткую функцию в одну строку: <code>
    Возврат ((ВидКлиента = «VIP») + (СортТовара = «Высший»))<>1; </code> до сих пор не могу понять почему в описание задачи шел разговор о XOR, ведь решение задачи это по факту функция логической эквиваленции (оба условия Истина, либо оба условия Ложь) ?
    А для получения XOR необходимо изменить функцию следующий образом (заменит “<>” на “=”): <code>
    Возврат ((ВидКлиента = «VIP») + (СортТовара = «Высший»))=1; </code> (только одно условие Истина).

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

  20. Для заданных условий достаточно:
    <code>
    Если ВидКлиента=”VIP” и СортТовара=”Высший”
    или ВидКлиента<>”VIP” и СортТовара<>”Высший” тогда
    Возврат Истина;
    Иначе
    Возврат Ложь;
    КонецЕсли;
    </code>

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

    Если ((ВидКлиента=”VIP”) и (СортТовара=”Высший”)) или  ((ВидКлиента <> “VIP”) и (СортТовара<>”Высший”)) тогда
    Возврат Истина;
    Иначе
    Возврат Ложь;
    КонецЕсли;    

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

  22. Разобрался на половину, и то с уже “написанной другими функцией”. Понятно что функция будет возвращать то или иное значение. А дальше ?……
    Сообщить(РазрешенаПродажа(«Постоянный», «Высший»));
    Сообщить(РазрешенаПродажа(«Непостоянный», «Брак»));
    Сообщить(РазрешенаПродажа(«VIP», «Брак»));
    Сообщить(РазрешенаПродажа(«VIP», «Высший»));

    • >А дальше ?
      А дальше будут следующие задания, разумеется, более сложные. Первое задание было разминочным. Ведь некоторые участники на платформе 1С пишут впервые, поэтому такие задания необходимы.

  23. Ход решения:

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

    Вид клиента = VIP / Сорт товара = Высший / Возможность продажи

    Ложь/Ложь/Истина

    Ложь/Истина/Ложь

    Истина/Ложь/Ложь

    Истина/Истина/Истина

    Заметил обратную связь между работой XOR и условиями возможности продажи (столбец 3 и 4):

    Вид клиента = VIP / Сорт товара = Высший / Возможность продажи / Результат оператора XOR

    Ложь/Ложь/Истина/Ложь

    Ложь/Истина/Ложь/Истина

    Истина/Ложь/Ложь/Истина

    Истина/Истина/Истина/Ложь

    Написал функцию c 2-я параметрами, имитирующую работу оператора XOR.  Использовал однострочный оператор «Если …. Тогда …… Иначе». При условии равенства 2-х параметров, функция возвращает Ложь, иначе функция возвращает Истина.

     Написал функцию «Разрешена Продажа».  В функции использовал однострочный оператор «Если …. Тогда …… Иначе».  В условии оператора вызываю функцию XOR и передаю в неё 2 параметра:

    ВидКлиента = «VIP»
    СортТовара = «Высший»

    Т.к.  оператор XOR и условия продажи имеют обратную связь, то при возврате значения Ложь, присваиваю  функции «Разрешена продажи» значение Истина и, наоборот, при возврате Истина, присваиваю Ложь.
     
    Сложности:
    Логика решения д/з трудностей не вызвала. Много проблем было с зашиванием алгоритма в программу.  Синтаксический контролер оборался. Долго не мог понять ошибку “о не возможности преобразования значения в Булево”. С помощь Табло разобрался.

  24.  
    &НаСервере
    Функция Исключающее_ИЛИ(Операнд1, Операнд2)

    Возврат ?(ТипЗнч( Операнд1 ) = Тип(“Булево”) И ТипЗнч( Операнд2 ) = Тип(“Булево”), Операнд1 <> Операнд2, Неопределено);

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

    Возврат НЕ Исключающее_ИЛИ(ВидКлиента = “VIP”, СортТовара = “Высший”);

    КонецФункции
    &НаСервере
    Функция Исключающее_ИЛИ(Операнд1, Операнд2)
    Возврат ?(ТипЗнч( Операнд1 ) = Тип(“Булево”) И ТипЗнч( Операнд2 ) = Тип(“Булево”), Операнд1 <> Операнд2, Неопределено);
    КонецФункции
     
    &НаСервере
    Функция РазрешенаПродажа(ВидКлиента, СортТовара)
    Возврат НЕ Исключающее_ИЛИ(ВидКлиента = “VIP”, СортТовара = “Высший”);
    КонецФункции

  25. Функция РазрешенаПродажа(ВидКлиента, СортТовара)
    Возврат (ВидКлиента = “VIP” И СортТовара = “Высший”)
    ИЛИ (Не ВидКлиента = “VIP” И Не СортТовара = “Высший”);
    КонецФункции

  26. Функция РазрешенаПродажа (ВидКлиента, СортТовара)     // Oliwer
    Если (ВидКлиента = “VIP” И СотрТовара = “ВЫСШИЙ”) ИЛИ (ВидКлиента <> “VIP” И СортТовара <> “Высший”) Тогда
    Возврат;

    КонецФункции
    Функция РазрешенаПродажа (ВидКлиента, СортТовара)
    Если (ВидКлиента = “VIP” И СотрТовара = “ВЫСШИЙ”) ИЛИ (ВидКлиента <> “VIP” И СортТовара <> “Высший”)  Тогда
    Возврат;
    КонецФункции

  27. Сергей 20.01.2011 в 22:31

    Чтоб хоть чем то отличаться засуну сюда функцию сравнить. А вообще у  ira самый наглядный вариант.
     <code>
    функция РазрешенаПродажа (ВидКлиента,СортТовара)
     Сравнение = Новый СравнениеЗначений;
     VIPВысший=Сравнение.Сравнить(ВидКлиента+СортТовара,”VIPВысший”);
     НеVIP=Сравнение.Сравнить(ВидКлиента,”VIP”);
     НеВысший=Сравнение.Сравнить(СортТовара,”Высший”);
     Если (VIPВысший=0) или (НеVIP<>0 и НеВысший<>0) Тогда
      Результат=”Да”;
     иначе 
      Результат=”Нет”;
     КонецЕсли;
     Возврат Результат;
    КонецФункции
    </code>

  28. Елена 20.01.2011 в 20:57

    &НаСервере
    Функция РазрешенаПродажа(ВидКлиента, СортТовара) Экспорт
     Возврат ВидКлиента=”VIP” и СортТовара  = “Высший” или
     ВидКлиента<>”VIP” и  СортТовара<> “Высший”;
    КонецФункции

  29. На форме внешней обработки разместил 2 кнопки. При нажатии первой выполняется проверка без XOR
    Функция РазрешенаПродажа(ВидКлиента,СортТовара)
    Возврат (((ВидКлиента = “VIP”) и (СортТовара = “Высший”)) или ((ВидКлиента <> “VIP”) и (СортТовара <> “Высший”)));
    КонецФункции // РазрешенаПродажа()
    При нажатии второй – проверяется с XOR
    &НаСервереБезКонтекста
    Функция РазрешенаПродажаXOR(ВидКлиента,СортТовара)
    Возврат (НЕ XOR(ВидКлиента=”VIP”,СортТовара=”Высший”));
    КонецФункции // РазрешенаПродажаXOR()
    Все сообщения выводятся в поле формы.
    При срабатывании события ПриСозданииНаСервере сообщения выводятся непосредственно в рабочую область.
    Такое различие объясняется, вероятно, разным контекстом исполнения.

  30. Функция РазрешенаПродажа(Клиент, товар)
    кто = Клиент=”VIP” ;
    что = товар=”Высший”;
    Возврат(кто и что или не кто и не что)
    КонецФункции

    • Вальдемар 20.01.2011 в 23:04

      Решение:<code>&НаCервере
      Функция РазрешенаПродажа(ТипКлиента,СортТовара)
      Возврат (ТипКлиента=”вип” и СортТовара=”высший”)
      или (Не ТипКлиента =”вип” и Не СортТовара =”высший”);
      КонецФункции</code>

  31. Сделал так
      &НаСервере
    Функция РазрешенаПродажа(ВидКлиента,СортТовара)
     Возврат(ВидКлиента=”V” и СортТовара=”B”)или (ВидКлиента<>”V” и СортТовара<>”B”);
    КонецФункции // РазрешенаПродажа()
    ЕСЛИ можно как то короче, поделитесь.

  32. Максим Ефимов 20.01.2011 в 17:37

    &НаСервере
    Функция РазрешенаПродажа(ТипКлиента, СортТовара)
    Возврат (ТипКлиента=”VIP” и СортТовара=”Высший”) или (ТипКлиента<>”VIP” и СортТовара<>”Высший”)

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

  33. Patio-5Element 20.01.2011 в 17:33

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

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

  34. Решил. <code>Возврат ((ВидКлиента = “VIP”) и (СортТовара = “Высший”)) или  (НЕ(ВидКлиента = “VIP”)) и (Не(СортТовара = “Высший”))</code>

  35. Согласен, просто делал на скорую руку – НДС сегодня все-таки

    • Нажимайте на кнопку “Ответить” для нужно сообщения.
      Сейчас ваши сообщения попадают в корень записи.

  36. Дмитрий 20.01.2011 в 15:22

    Реализация:
    функция РазрешенаПродажа(ВидКлиента, СортТовара)
    Возврат ВидКлиента = (НЕ СортТовара);
    конецфункции

    Вызов:

    РазрешенаПродажа(ВидКлиента=”VIP”, СортТовара”Высший”)

    • Дмитрий 20.01.2011 в 17:27

      fix
      Вызов:
      <code>РазрешенаПродажа(ВидКлиента=”VIP”, СортТовара<>”Высший”)</code>

  37. Функция XOR
    Функция НЕ_ИЛИ(Пар1, Пар2)
    Возврат ?(Пар1 = Пар2, Ложь, Истина);    
    КонецФункции
    Функция РазрешенаПродажа(ВидКлиента, СортТовара)
    Если ВидКлиента = “VIP” Тогда
    Если СортТовара = “Высший” Тогда
    Возврат Истина;
    Иначе
    Возврат Ложь;
    КонецЕсли
    Иначе
    Возврат ?(СортТовара = “Высший”, Ложь, Истина);
    КонецЕсли;
    КонецФункции

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

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

    Результат:
    Нет
    Да
    Нет
    Да
     

  39. Задание выполнил, чтобы не париться создал функцию xor по логике, а потом просто вызвал требуемое равенство
    Функция xor(Операнд1, Операнд2)
    возврат ?(Операнд1,Не Операнд2,Операнд2)
    КонецФункции
    Функция РазрешенаПродажа(ВидКлиента, СортТовара)
    Возврат xor(ВидКлиента = “VIP”, СортТовара = “Высший”);
    КонецФункции

  40. Реализуем функцию Xor:
    Xor(a,b)=(a  И  НЕ b) ИЛИ (НЕ а  И  b)
    Реализуем функцию РазрешенаПродажа:
    РазрешенаПродажа(ВидКлиента,СортТовара)=
    Xor(ВидКлиента=«VIP»,СортТовара<>«Высший»);
    А если случайно ВидКлиента=«vip» (все символы в нижнем регистре),
    скажем в случае ошибки пользователя , хотя пользователь подразумевал VIP клиента,
    тогда есть смысл перед сравнением строк переводить их в нижний или верхний регистр?

    • Разумеется, если решать общую задачу, то на сравнения строк лучше не опираться.
      Необходимо использовать какие-либо константные значения (перечисления, предопределенные элементы справочников).
      Но в этом задании не требуется использовать данные объекты.

      А для приведения строки к нужному регистру можно использовать функции ВРег() и НРег().