Базовый курс. Занятие №1
Начинаем новый поток базового курса.
Первые три занятия посвящены нулевому блоку.
Необходимо изучить следующие главы 0-го блока.
Глава 1. Развитие линейки «1С:Предприятие 8»
Глава 2. Базовые понятия
Глава 3. Установка платформы и конфигураций
Глава 4. Общие сведения о платформе
Глава 5. Список информационных баз
Глава 6. Пользовательский режим
Глава 7. Базовые приемы работы в конфигураторе
Глава 8. Средства разработчика
Глава 9. Объекты
Глава 10. База данных
Глава 11. Программный код
Глава 12. Примитивные типы данных
Также нужно выполнить домашнее задание, текст которого доступен на странице.
В этой же теме необходимо написать отчет о выполнении задания.
О том как отчитываться, как будет организована работа группы смотрите видео со страницы.
ps. Участники курса без доступа в мастер-группу отчитываться по домашним заданиям не могут.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —напишите нам на e-mail поддержки.
Мое решение
Функция ПродажаРазрешена(Клиент, Сорт)
Если (Клиент=”VIP” И Сорт=”Высший”) ИЛИ (НЕ Клиент=”VIP” И НЕ Сорт=”Высший”) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
просмотрел ваше решение, “однако”, как говорится учтемс :))
Загруз по другой учебе, полностью пропустил график. Только сейчас нашел время :(
Евгений,
в видео block0-073-part5-main.avi речь идет о цикле ПОКА в условия напрямую передается функция ПолучитьПорог(). В видео говориться что тем самым цикл ПОКА будет вызывать функцию каждый новый виток цикла, а если же присвоить переменной функцию то это более экономно с точки зрения ресурсов. Объясните плиз почему функция вызывается иначе переменной?
Мне кажется, что это логичное поведение платформы.
По сути это поведение одинаковое: на каждой итерации цикла для проверки условия выхода из него нужно обратиться к значению переменной или результату функции.
А чтобы получить результат функции нужно ее выполнить. Вот и получается, что функция выполняется на каждой итерации цикла.
Другое дело, что платформа могла бы закэшировать результат функции.
Но сама она этого не делает, необходимость кэширования должен указать сам разработчик.
Если правильно понимаю кэширование лучше ВСЕГДА делать через переменную?
Да, в большинстве случаев.
Тем не менее у платформы существуют возможности настройки кэширования на уровне общих модулей.
Об этом мы будем говорить в 1-ом блоке курса.
Только сейчас нашел время на прохождение курса.. ну раз есть еще возможность выкладывать решения по домашним заданиям буду вносить моя решения…
Первую часть задания сначала сделал отдельно в виде функции:
Функция XOR(Пар1, Пар2)
Если (Пар1 ИЛИ Пар2) И НЕ (Пар1=ИСТИНА И Пар1=Пар2) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // XOR()
При решении второй части задачи скопировал строки текста задания с обозначением кавычек «», в результате чего долго не мог понять почему не проходит контроль на синтаксические ошибки, что не достаточно параметров в функции ))) Пока не исправил «» на ” “.
Создал функцию:
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если (ВидКлиента=”VIP” И СортТовара=”Высший”) ИЛИ (ВидКлиента<>”VIP” И СортТовара<>”Высший”)Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции;
Символы кавычек в тексте комментария были автоматически преобразованы на стандартные, поэтому для ясности поясню, что я не сразу увидел разное написание кавычек в условии задачи и то написание кавычек которое понимает компилятор 1с 8.2 :-)
Ок, на это многие наткнулись :)
Правильно, лучше поздно, чем никогда.
Здравствуйте только сейчас подошла к решению ДЗ1:
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Если ((ВидКлиента=”VIP”) и (СортТовара=”Высший”)) или
((ВидКлиента<>”VIP”) и (СортТовара=”Брак”)) тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // РазрешенаПродажа()
В Предприятии при открытии формы обработки выдал окно сообщения со строками:
“Нет”
“Да”
“Нет”
“Да”
Здравствуйте. Я в числе аутсайдеров :)
Код:
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если ВидКлиента = “VIP” и СортТовара = “Высший” Тогда
Возврат (Истина);
ИначеЕсли ВидКлиента <> “VIP” и СортТовара <> “Высший” Тогда
Возврат (Истина);
Иначе
Возврат (Ложь);
КонецЕсли;
КонецФункции // Разрешенапродажа(ВидКлиента, СортТовара()
&НаКлиенте
Процедура Сформировать(Команда)
Сообщить(РазрешенаПродажа(“Постоянный”, “Высший”));
Сообщить(РазрешенаПродажа(“Непостоянный”, “Брак”));
Сообщить(РазрешенаПродажа(“VIP”, “Брак”));
Сообщить(РазрешенаПродажа(“VIP”, “Высший”));
//ПриСозданииНаСервере(Истина, Истина);
КонецПроцедуры
Не поняла только что делать с обработчиком события ПриСозданииНаСервере.
Светлана
Добрый день!
>Я в числе аутсайдеров :)
Еще не поздно нас догнать :)
>Не поняла только что делать с обработчиком события ПриСозданииНаСервере.
Посмотрите решение, понимание должно прийти.
Я так поняла, что процедура ПриСозданииНаСервере() – это системная процедура при открытии формы на сервере.
Это обработчик события, вызывающийся в момент создания формы.
Спасибо. Теперь все встало на свои места
Лежал в больнице. Раньше не мог отчитаться по ДЗ.
<code>
Возврат ВидКлиента = “VIP” И СортТовара = “Высший”
ИЛИ НЕ(ВидКлиента = “VIP” ИЛИ СортТовара = “Высший”);
КонецФункции // РазрешенаПродажа()
</code>
Ваш комментарий уже был ранее одобрен.
Нет смысла дублировать..
Был в больнице, отчитываюсь за прошедшие ДЗ
&НаСервере
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Возврат ВидКлиента = “VIP” И СортТовара = “Высший”
ИЛИ НЕ(ВидКлиента = “VIP” ИЛИ СортТовара = “Высший”);
КонецФункции // РазрешенаПродажа()
Извините за опоздание. Но лучше поздно, чем никогда.
Задание выполнила. Сначала функцию РазрешенаПродажа поместила на клиенте, поэтому при синтаксической проверке выдано было сообщение об ошибке, что “Процедура или функция с указанным именем не определена”. Код функции получился такой:
<code>
Если ВидКлиента = “VIP” И СортТовара = “Высший” Тогда
Возврат Истина;
ИначеЕсли ВидКлиента <> “VIP” И СортТовара <> “Высший” Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
</code>
Почитала комментарии, вижу, что можно было сделать и по-другому.
>Но лучше поздно, чем никогда.
Все верно.
На работе завал, буду в отстающих:)
Решение 1 задачи (модуль внешней обработки):
&НаКлиенте
Процедура ВыполнитьТестXOR(Команда)
Сообщить(РазрешенаПродажа(“Постоянный”,”Высший”));
Сообщить(РазрешенаПродажа(“Непостоянный”,”Брак”));
Сообщить(РазрешенаПродажа(“VIP”,”Брак”));
Сообщить(РазрешенаПродажа(“VIP”,”Высший”));
КонецПроцедуры
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Операнд1 = ВидКлиента = “VIP”;
Операнд2 = СортТовара = “Высший”;
Результат = Операнд1 = Операнд2;
Возврат НЕ Результат;
КонецФункции
&НаКлиенте
Процедура ВыполнитьТестXOR(Команда) Сообщить(РазрешенаПродажа(“Постоянный”,”Высший”));
Сообщить(РазрешенаПродажа(“Непостоянный”,”Брак”));
Сообщить(РазрешенаПродажа(“VIP”,”Брак”));
Сообщить(РазрешенаПродажа(“VIP”,”Высший”));
КонецПроцедуры
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Операнд1 = ВидКлиента = “VIP”;
Операнд2 = СортТовара = “Высший”;
Результат = Операнд1 = Операнд2;
Возврат НЕ Результат;
КонецФункции
Немного невнимательна. Т.к. речь идет в задаче о разрешении продажи, то в функции РазрешенаПродажа, последняя строчка будет не “Возврат НЕ Результат”, а просто “Возврат Результат”.
Догоняю. Сделал. Наверно без изыска. Ответ получился верный.
Функция РазрешенаПродажа(ВидКлиента,СортТовара)
Если (ВидКлиента = “VIP” И СортТовара = “Высший”) ИЛИ (НЕ ВидКлиента = “VIP” И НЕ СортТовара = “Высший”)
Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // РазрешенаПродажа(
Функция РазрешенаПродажа(ВидКлиента,СортТовара) Если (ВидКлиента = “VIP” И СортТовара = “Высший”) ИЛИ (НЕ ВидКлиента = “VIP” И НЕ СортТовара = “Высший”) Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли;
КонецФункции // РазрешенаПродажа(
Сорри, не обрамил код. 8/
Ничего страшного
Понимаю, что поздно, но тем не менее..
Возврат ((СортТовара=СортТовараВысшый) И (ВидКлиента=ВидКлиентаVIP)) или
(не(СортТовара=СортТовараВысшый) И не(ВидКлиента=ВидКлиентаVIP))
выполнял условием
Задание выполнил, во время решения возникли интересные идеи.
После создания функции XOR с помощью логических операторов И/ИЛИ/НЕ захотелось создать универсальную функцию, которая могла бы вычислять исключающее ИЛИ для любого количества булевых значений. При этом функция XOR, принимающая только 2 параметра, будет являться частным случаем этой универсальной функции.
Из определения исключающего ИЛИ следует, что функция возвращает значение ИСТИНА только в том случае, если среди всех переданных булевых значений ИСТИНА встречается только один раз – другими словами количество ИСТИН должно быть равно 1. Во всех остальных случаях функция должна возвращать ЛОЖЬ.
Для решения достаточно было бы создать счетчик количества значений ИСТИНА и увеличивать его на 1 в случае, если проверяемое условие равно ИСТИНА:
Счетчик = 0;
Если (ИСТИНА = Условие) Тогда
Счетчик = Счетчик + 1;
КонецЕсли;
Однако вспомнив тему “Преобразование типов”, я понял, что функцию можно написать короче, использовав свойство преобразования булевых значений к числу: ИСТИНА будет преобразовано к 1, ЛОЖЬ – к 0. Таким образом достаточно будет напрямую складывать значения булевых типов, а итоговая сумма будет показывать количество значений ИСТИНА:
Счетчик = Счетчик + БулевоЗначение;
Итоговый код:
———
Функция РазрешенаПродажа( ВидКлиента, СортТовара )
ЭтоVipКлиент = (“VIP” = ВидКлиента);
ЭтоВысшийСорт = (“Высший” = СортТовара);
Возврат НЕ XOR(ЭтоVipКлиент, ЭтоВысшийСорт);
КонецФункции
Функция XOR(Выражение1, Выражение2)
МассивУсловий = Новый Массив();
МассивУсловий.Добавить( Выражение1 );
МассивУсловий.Добавить( Выражение2 );
Результат = МножественноеИсключающееИли( МассивУсловий );
Возврат Результат;
КонецФункции
Функция МножественноеИсключающееИли( МассивУсловий )
Результат = ЛОЖЬ;
Количество = 0;
Для Каждого Условие ИЗ МассивУсловий Цикл
Количество = Количество + Условие;
КонецЦикла;
Результат = (1 = Количество);
Возврат Результат;
КонецФункции
Отличное решение!
Задание выполнено
Функцию сделал. Про обработчик события “При созд на сервере” Сообщить и т.д. не понял. Зачем это? Что он сообщит.
Сообщить нужно результат выполнения функции для проверки.
Можно сказать, что прикладного смысла эта задача не имеет, но это самое начало.
Добрый день извините за опоздание , минут десять мучился с внешней обработкой пока хоть что то заработало
Сходу 8.2 не ослишь как в 8.1 (
//Проверяет корректность отгрузки
Функция РазрешенаПродажа (ТипКлиента,ТипТовара)
Возврат ?((ТипКлиента =”VIP” и ТипТовара = “Высший”) или (НЕ ТипКлиента =”VIP” и НЕ ТипТовара = “Высший”),Истина,Ложь );
КонецФункции
Нет
Да
Нет
Да
Вот Это?
Да.
Задание №1 выполнил
Решил через Если
Сложностей нет, вариантов особых тоже. Если не выделять XOR в отдельную функцию, то можно и так:
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Условие1 = ВидКлиента = “VIP”;
Условие2 = СортТовара = “Высший”;
Возврат (Условие1 = Условие2);
КонецФункции
Если совсем как по заданию, то получаем вариант как у trambalda
Выполнено
В модуле обработки вставил след. функцию и за ней проверочные вызовы по собитию.
Функция РазрешенаПродажа(ВидКлиента, СортТовара)
Если (ВидКлиента = “VIP”) Тогда
Если(СортТовара = “Высший”) Тогда
Возврат Истина;
КонецЕсли
Иначе
Если Не (СортТовара = “Высший”) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
Выполнила через условный оператор. А про СтарогоЗнакомого нужно оператор Если?
Так:
<code>
ИначеЕсли ВидТовара = “СтарыйЗнакомый” И СортТовара = “Первый” Тогда
Возврат Истина;
</code>