Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 сен 2021, 18:20

Не могу придумать функцию

Автор chabanitos, 10 июл 2017, 15:15

0 Пользователей и 1 гость просматривают эту тему.

chabanitos

Я новичок на этом форуме и в деле программирования 1С вообще. Буквально 2 дня назад пошел на курсы программирования и получил некоторый набор задач для того что бы разбираться дома. На одной вроде и простой почему то застрял и не могу сообразить как сделать. Натолкните пожалуйста на правильные мысли.

Суть задачи

Добавить новое перечисление "СортТовара",
Значения:
•   высший
•   первый
•   второй
•   третий
Добавить новое перечисление "ТипКлиента"
Значения:
•   ВИП
•   ПостоянныйКлиент
•   ПростойКлиент
Добавить новую обработку "РазрешениеНаПродажу", добавить в нее  2 реквизита СортТовара и ТипКлиента с типами значения перечисления.
Создать форму обработки, вывести туда 2 реквизита.  В свойствах кнопки "Выполнить"  выбрать процедуру  в поле  Действие, и в модуле формы в данной процедуре  нужно вызывать функцию, которая производит  следующий расчет:
Вип клиентам разрешена продажа товаров только высшего сорта.
Всем другим клиентам  можно продавать любой сорт товара, кроме высшего.
Функция возвращает истину или ложь
Процедура  в  зависимости от ответа функции должна  выводить сообщение разрешена или не разрешена продажа, после того как пользователь заполнит реквизиты на форме и нажмет кнопку Выполнить.

Тут все очень просто, это все я сделал. Код вот

Функция РазрешениеПродажи()
    Если ТипКлиента = Перечисления.ТипКлиента.ВИП
И СортТовара = Перечисления.СортТовара.высший
ИЛИ ТипКлиента <> Перечисления.ТипКлиента.ВИП
И СортТовара <> Перечисления.СортТовара.высший
Тогда
РазрешениеНаПродажу = ("Продажа разрешена");
Иначе
РазрешениеНаПродажу = ("Продажа запрещена");
КонецЕсли;
Возврат РазрешениеНаПродажу;
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
Разрешение = Обработки.РазрешениеНаПродажу.ПолучитьФорму();
СортТовара = Элементыформы.СортТовара.Значение;
ТипКлиента = Элементыформы.ТипКлиента.Значение;
ПроверкаРазрешения = РазрешениеПродажи();
Сообщить (ПроверкаРазрешения);
    // Вставить содержимое обработчика.
КонецПроцедуры


А вот вторая часть задачи над которой мучаюсь

Написать функцию в предыдущей задачей одной строкой  такого вида:
Функция РазрешенаПродажа()
Возврат (и тут нужное выражение одной строкой);
КонецФункции;

Не доходит мне как можно весь вышеописанный код написать одной строкой. Подскажите пожалуйста.

alex0402

Цитата: chabanitos от 10 июл 2017, 15:15ПроверкаРазрешения = РазрешениеПродажи();
заменить на
ПроверкаРазрешения = РазрешениеПродажи(ТипКлиента,СортТовара)

Цитата: chabanitos от 10 июл 2017, 15:15Возврат (и тут нужное выражение одной строкой);

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

    Возврат (ТипКлиента = Перечисления.ТипКлиента.ВИП и СортТовара = Перечисления.СортТовара.высший) или (ТипКлиента <> Перечисления.ТипКлиента.ВИП и СортТовара <> Перечисления.СортТовара.высший)

КонецФункции
Спасибо за Сказать спасибо

chabanitos

Теперь мучаюсь надо следующей задачей
Как прописать что бы при работе сутки через трое каждому четвертому дню прописывался статус рабочий а всем остальным прописывался выходной. Подскажите еще новичку.

Golickoff

Цитата: chabanitos от 15 июл 2017, 20:13
Как прописать что бы при работе сутки через трое каждому четвертому дню прописывался статус рабочий а всем остальным прописывался выходной.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, 4) КАК НоваяДата";
Запрос.УстановитьПараметр("ИсходнаяДата", РеквизитСодержащийЗначениеНужнойДаты);
Результат = Запрос.Выполнить().Выбрать();
Результат.Следующий();
НоваяДата = Результат.НоваяДата;
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

wise

(2) тут как в игре...
если САМ не разберёшься с первым уровнем, то на втором сложнее, на третьем ЕЩЁ сложнее... т.д.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

AIFrame

Golickoff,
Можно проще.
ДатаНачалаОтсчета= НачалоДня(ДатаНачалаОтсчета) + (4*86400);

Golickoff

Цитата: AIFrame от 18 июл 2017, 04:32
Можно проще.
Просто не люблю считать секунды.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

AIFrame

Цитата: Golickoff от 18 июл 2017, 06:33
Цитата: AIFrame от 18 июл 2017, 04:32
Можно проще.
Просто не люблю считать секунды.

НачалоОтсчета = КонецДня(КонецДня(КонецДня(КонецДня(НачалоОтсчета) + 1) + 1) + 1) + 1;

:P
Не, извращаться, конечно, можно по всякому, но запросом... Feels wierd.

Golickoff

ТС в самом начале пишет, что в 1С не так давно. При сложении дат, по моему, нет ничего более понятного чем ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ/МЕСЯЦ/ГОД, 4/146/100500). Я бы так сразу не понял что такое 86400, пока не увидел формулу (60^2)*24.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск