Процедуры и функции в 1С 8.3: чем они отличаются и как их использовать
Вставка
- Опубліковано 14 тра 2017
- Ключевое отличие процедуры от функции в 1С и других языках программирования. Примеры использования данных конструкций. Оператор "Возврат".
Читайте статьи по 1С на нашем сайте:
programmist1s.ru/materialyi-po...
все классно. Без лишних слов,все по делу, без нуятины и без этих надоедливых "ээээ" через каждые 5 секунд. Ваши уроки очень интересны и бесконечно полезны
Блин, он реально гений-обучений! Человек реально думает - как лучше объяснить и в каком порядке подать информацию, чтобы "пазлы сложились". Много курсов пытался смотреть, у большинства авторов уже после 2...3 уроков - начинаешь понимать, что что-то "недообъяснили" исходят из того, что все элементарно, явно важные моменты не пытаются объяснить, перескакивают.
Илья Леоньев - ты супер! Еще нравится, что он как бы случайно делает типовые ошибки, объясняет, почему делают эти ошибки и как правильно - и самое главное почему так правильно. Ну, просто красавчик! :)
подскажите, почему перед М не стоит Перем М; а потом уже М = Максимум2(ЧислоА, ЧислоБ);
@@albert10651 Потому что в операцию присваивания (знак равенства) уже включена операция определения переменной.
@@albert10651 смотри бро, после буквы "М" сразу идет знак равенства, там же сразу же присвоили имя переменной (Максимум2)
Понятно?)
Как я тебя понимаю) Прямо сейчас прохожу такой курс и там автор как раз такой, каким ты его описал тут) Вот думаю начать по ютубу по этим роликам начать заниматься)
Как у вас успехи, коллеги? На этом блоггере остановились или еще какой ресурс порекомендуете?
Илья, огромнейшее спасибо за курс! Лучше, что мне пока встречалось, как для начинающего!
Так все понятно и лаконично. Только недавно начала изучать 1С и эти уроки очень помогают. Спасибо за Вашу работу))
проходил курс начальной подготовки на edu.1c такой препод нудный был что нечерта за месяц не понял, Илюха ты пока что лучший в интернете по крайней мере по донесению информации слушателю! Ну это сугубо моё мнение! Спасибо!
И сугубо моё)
@@Gzugza И моё))
А что за препод? Фамилию не скажете? Потом, если что, можно удалить, как только я прочту)
Однозначно Лайк! Без "воды" и все по делу!
Здесь звук мягче, лучше! Хорошие уроки, спасибо!
Ключевое отличие процедуры от функции в 1С и других языках программирования. Примеры использования данных конструкций. Оператор "Возврат".
Услуги 1С программиста в Москве:
1cproger.ru/
Читайте статьи по 1С на нашем сайте:
programmist1s.ru/materialyi-po-1s/
Сделала на Трех числах. Все работает. Спасибо. Только осваиваю, когда что-то не работает - включайте мозг и и ищите ошибку в коде))))) Надо больше уроков по управляемой версии.
It is very, very usefull. This is the best tutorial I saw. Thank you.
@@user-zd2em4tt3o "Это очень, очень полезно. Это лучший туториал (обучалка) который я видел. Спасибо."
Здравствуйте Илья, после ваших уроков, многое становится понятно. Скажите пожалуйста, как можно выбрать процедуру или функцию при создании в поле модуля горячими клавишами кроме ctrl+пробел
И еще, может быть Вы подскажете, где познакомиться с темой о переходах по навигационным ссылкам, о уникальных идентификаторах
Небольшое замечание про переключение языков: Чтобы не переключаться, можно нажимать Alt + НомерСимволаASCII. Например для знака "
У меня на получается (
Как нажимать "60"?
Гугл помог, все ок )
Мне нра. Подскажите как изменить иконку в УТ 10.3 например у справочника номенклатура (по умолчанию шкаф с выдвинутым ящиком).
Здравствуйте, делаю все в точь как у вас, у меня даже ошибка почему тоне вылезла как у вас, когда к словам Максимум добавляли (2,3) не знаю почему если честно, но когда писал формулу М = Максимум2(ЧислоА, ЧислоБ);
Сообщить ("Максимум = " + М); пишет ошибку Переменная не определена (Число Б), почему?
Здравствуйте. Сделайте тоже самое только на управляемом приложение, от обычного все уже уходят. И при переходе на управляемое приложение, просто ни чего не понятно. Просмотров будет еще больше. Успехов!
Спасибо, к управляемым скоро перейдем
Буду ждать, надеюсь долго ждать не придется). Успехов!
@@hanty9910 Попробовал допилить раннее созданное управляемое приложение кнопкой "НайтиМакс" , всё работает , принцип тот же.
В максимуме из трех и выше, саму функцию можно взять за способ проверки и ссылаться на нее, для упрощения, в случае увеличения выборки.
Подскажите как вы вызываете подсказки при написании кода. Я имею ввиду в частности момент на 8:18, где у вас открыт после равно список математических функций.
В одном из предыдущих видео упоминалось об этом, комбинация CRTL + Пробел
Илья, здравствуйте! Начиная с того момента, как прописывается процедура СообщитьОМаксимуме у меня вылетала ошибка синтаксиса. Я долго не мог понять что такое, но потом поменял местами Процедуру СообщитьОМаксимуме и Процедуру кнопки (очень длинное название у которой) и все заработало! НО! Почему у Вас работает и так, а у меня нет?
Илья, Добрый День!
Во-первых, спасибо за уроки!
Они реально кайфовые)
Во-вторых, осмысливая данный урок, спросил себя, а теперь и Вас, почему нельзя было написать такой код? )
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
Максимум (ЧислоА, ЧислоБ);
Сообщить (Максимум(ЧислоА, ЧислоБ));
КонецПроцедуры
Функция Максимум(А, Б);
Если А > Б Тогда Возврат А;
Иначе
Возврат Б;
КонецЕсли;
КонецФункции;
т.е. в кнопке Выполнить идет вывоз процедуры, которая вызывает Функцию и сообщает результат этой функции.
Можно было. Только имейте в виду, что при нажатии на кнопку у вас лишний раз происходит вызов функции Максимум(), он не нужен, его можете удалить. Достаточно написать только Сообщить (Максимум(ЧислоА, ЧислоБ)).
1.Отличается-ли визуально, вызов функции от вызова процедуры? Нет ли каких либо ключевых слов ?
2.Функция должна быть описана в самом начале кода ?
Я изучал Python и поэтому провожу аналогию.
Здравствуйте! Подскажите пожалуйста, почему на этом занятии, при запуске режимной конфигурации у меня открывается окно управляемого приложения?
Если ">", тогда alt + 62 :) Спасибо за уроки!
Вот спасибочки
опущен тонкий момент,
(Оператор1)ТОЧКА С ЗАПЯТОЙ
; это конец любого оператора.
Вопрос от начинающих... В чем разница между такими скобками () или такими {}? Для чего ставится ; в конце Строки? А Так же Важность наличия пробелов между текстом например "Если А > Б Тогда" Важно ли наличие пробелов между А > Б, или можно написать без пробелов А>Б? попробовал и так, и так работает, т.е. это вопрос только эстетики текста?
Добрый день, синтаксис 1с, наверное, как и синтаксис большинства языков, в смысле пробелов достаточно гибкий.
И с пробелами и без язык все сворачивает и удачно компилирует в случае если нет синтаксических ошибок.
Потому да, тут больше эстетика.
Но функция же может быть и без слова Возврат. Зачем тогда вообще нужны процедуры?
Почему числа в функции мы называем просто А и Б? Они же у нас ЧИСЛА? ЧислоА и ЧислоБ. Как комп с этим разбирается?
А, Б и ЧислоА, ЧислоБ это не одно и тоже. Буквы А и Б можно с таким же успехом заменить на любые другие буквы и всё будет работать.
Описывая функцию, после названия функции в скобках мы перечисляем её параметры.
В данном примере функция Максимум2 принимает 2 числа и сохраняет их в переменных А и Б, в функции Максимум3 - 3 числа и сохраняет их в переменных А, Б и В.
Функции по большому счёту всё равно что это за числа и откуда они взяты, её задача принять эти числа, обработать их (в данном случае сравнить что больше/меньше) и что то вернуть.
А вот вызывая эту функцию мы уже и указываем то что должны передать на обработку, в данном примере в функции Максимум2 это ЧислоА и ЧислоБ, но это могут быть и любые другие данные, к примеру ЧислоА и Число В, или просто обычные числа.
Смотрите матчасть Переменные. P/S Язык программирования в вашем вопросе не важен
Артём Яшнов, спасибо тебе человек
Максимум2 (А,Б) //А и Б переменные
Процедура ОсновныеДействияФормыОсновные....
Максимум2(ЧислоА, ЧислоБ); //Это вызов числа которые нам нужно сравнить.
Получется эти числа (2) и (4) летят в (1,2) тобишь (А,Б) теперь в переменной А = 2, в Б = 4, далее ПРоцедура сравнивает их из функции (ну или сама функция сравнивает) эти числа между собой и выдает уже результат.
Максимум2 (А,Б) //Это переменные //Название (переменная А - которая будет хранить числоА, переменная Б - которая будет хранить числоБ).
Ну ладно, допустимя я вместо А написал Ю. И что? Где мы назначаем в системе что Ю это переменная, и что на него записана такая-то функция или число? Ведь у нас есть текстовые поля с именем "ЧислоА", как он поймет и свяжет Ю с ЧислоА, если говорите что все будет работать?
немогу понять - почему в теле процедуры пишем "М =" ? а не Макс,или Максимум..?в подсказках "М" не нашел...
Есть ли курс обучения платный ?
Если в коде размещаю Процедуру после Функции, как в примере, то выдает ошибку "Определения процедур и функций должны размещаться перед операторами тела модуля". Когда поменял их местами - т.е. сначала идет Процедура затем Функция, то все работает. Может, что не так делаю?
проблема была в поставленной точке с запятой после "Конецфункции"
Здравствуйте, сделал всё точь в точь, но выходит ошибка (конецесли). где прописали функцию максимум3(А,Б,В) пришлось 2 раза подряд написать конецесли и лишь тогда начинает работать. в чём прикол понять не могу.
Всё спасибо, нашёл ошибку, пробел поставил случайно
Добрый день, а почему когда сравниваю 10 и 100, то пишет что "Максимум - 100", а когда сравниваю 111 и 22, то "Максимум - 22"? Как так получается, что он будто просто первые цифры только сравнивает?
Ребята, у меня в обработчике ошибка какая-то. Не могу понять, почему перед функцией и процедурой что то стоять должно.
Не могу понять, что происходит. Учебная версия, нахожу максимум из 3х. В первый раз после запуска внешней обработки все получилось... Во второй раз почему то перестал видеть числоВ (А и Б видит), какое бы большое значение "В" не возвращалось, учитывается только максимум А и Б. В третий раз перестала срабатывать кнопка выполнить, то есть, она срабатывает, но сообщение не выводит... Что это может быть?
Чудеса, да и только: удалил реквизиты, удалил форму, создал все заново, опять работает как в первый раз. Интересно, надолго ли...
норм
Почему в продцедуре сообшить. Максимум2(а, б) а в сообщить о максимуме (числоА, числоБ)? Если ввше закоментировали максимум2(числрА, числоБ). Кода нудно писать числоА и число Б. А когда можно просто укачать А Б?
9:35 работает Функция2, а показывает на Функцию3. Функция выше по Модулю.
в чем ошибка подскажите плиз ({ВнешняяОбработка.ВнешняяОбработка2.Форма.Кнопки.Форма(3,15)}: Переменная не определена (ЧислаА)
М = Максимум(>ЧислаБ);
)
Должно быть Объект.ЧислаА, а не ЧислаА.
я в 1 с не силен объясните пожалуйста в чем разница между "Управляемым" и "Обычным" режимом?
Лучше тебе в этом вопросе изучить это более подробно, но если в двух словах - в обычном все делаешь сам, в управляемом половину вещей делает система. От этого меняется логика языка. Но для современного разработчика изучать лучше сразу управляемое
То есть в 1С нету перегрузки функции?
и показывает такое сообщение : {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(35,25)}: Переменная не определена (ЧислоБ)
М = Максимум2 (ЧислоА,
Проверь язык переменных, может ты указал английскую M, вместо русской M
30 Минут искал в чем ошибка))
Здесь 8:56 возникает ошибка Несоответствие типов (параметр номер '2'), не понимаю, где проблема, если честно.
П. С. Думала уже все, не решу, а так глупо получилось. Запятая, чтоб тебя.
не работало, пока не закомментировала //Функцию Максимум3
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(41,11)}: Переменная не определена (B)
Возврат
а нельзя в Сообщить() передать вызов процедуры или функции?
работает
Сообщить("Максимум = " + Максимум2(А, Б));
Вызов функции - можно. Вызов процедуры - нельзя.
@@TripolitovVladimir Оптимизация в деле)
Люди внатуре не вникают, для чего нужны функции , как и я когда то. А ДЛЯ ТОГО ЧТОБЫ ОДИН И ТОТ ЖЕ КОД НЕ ПИСАТЬ 10 РАЗ, а подставлять нужные значения переменных или же сами эти переменные , в аргументы функции ( либо же выполнять некую масивную обработку функцией без аргументов)... Это нужно понять самому
Все видео у Ильи интересные. Но пока что ни у одного не увидел внятного объяснения, почему нельзя обходиться только Функцией. Например, из видео, тело процедуры поместить в функцию, ведь точно так же отработает. Зачем нужно это деление.
Разве процедура действия на кнопку не понадобится в любом случае? В ней, конечно, достаточно прописать лишь вызов функции, а все остальное прописать в функции. Но как совсем без процедуры обойтись - не понимаю что-то... Тогда же при нажатии на "Выполнить" - никакого толка
у меня не было ошибок, когда две функции были определены с одинаковым названием..
потому что namespace разный наверное
Плохо, что на русской раскладке пишутся команды, постоянно переводить приходится с одного языка на DRUGOY
команды можно писать как на русском языке так и на английском. разницы к примеру между "Процедура" и "Procedure" нет ни какой. в справке 1с команда на русском языке, а в скобках синтаксис на английском - Процедура (Procedure)
@@olegf3728 ага) все прям так и используют английский вариант написания) проще сделать по-другому. Например, амперсанд - & - чтоб не переключаться, я использую альт + 38 (на цифр. клав.). Также и остальные символы.
Вообще не понял. Как система понимает что А это число и что Б тоже число? Ведь мы не указывали, допустим как в других языках, что например "А = 1" и "Б = 2". В каком месте к этим буквам назначается число, и какое число назначается, когда мы успели их сделать переменными??? Даже если система берет А и Б из надписей "ЧислоА" и "ЧислоБ", то как он определяет какую букву из этого словосочетания взять? Почему он не может взять допустим букву Ч из "Число" и не запутатся в параметрах и в вычислении?????? Пробовал в параметрах писать всякую ахинею, синтаксическая проверка не прошлась. Так как млять этот гребаный язык программирования понял что есть А и что есть Б????? Мляяяя вообще хз че происходит DX
Типы значения реквизитов А и Б мы определили на этапе их создания в обработке.
@@IlyaLeontyev , все равно не понятно, на этапе создания обработки мы создали реквизиты ЧислоА и ЧислоБ и указали что тип число, но негде не указывали что ЧислоА=А, я тоже на этом застопорился, почему в функции мы пишем просто А и Б, а в процедуре ЧислоА и ЧислоБ, пробовал в процедуре написать просто А и Б не проходит синтаксическую проверку. И было бы замечательно, если бы немного рассказали о правилах написания и дали бы какую нибудь ссылочку на справочную инфу по функциям и процедурам, где какие кавычки, скобки, точки с запятой надо ставить, где пробелы ставятся , а где нет.
Тоже ломал голову над этим вопросом, потом нашел на другом сайте описание функции и понял, что Кога мы описывали функцию вычисления максимума, мы могли там поставить любые буквы например Д и Е в качестве параметров, а вот при вызове этой функции (через вызов прцедуры сообщить) мы указываем эти параметры ЧислоА и ЧислоБ, мы можем еще раз добавить вызов процедуры сообщить А в качестве параметров указать ЧислоА и ЧислоС, и выведется 2 максимума.
@@sergejsimagin3741 А если мы в функцию передадим число и строку, функция крашнется. И будет сообщение об ошибке.
{Форма.Форма.Форма(22)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Если А > Б тогда
Странно что процедуры и функции разделены.
вот так я все указал Функция Максимум2(А,Б)
Если А > Б Тогда
Возврат А;
Иначе
Возврат Б;
КонецЕсли
КонецФункции
Функция Максимум3(А, Б, В)
Если А > Б И А > В Тогда
Возврат А;
ИначеЕсли Б > В Тогда
Возврат Б;
Иначе
Возврат В;
КонецЕсли
КонецФункции
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
// ЧислоА > ЧислоБ = Ложь
//Если {Условие1} Тогда
// {Оператор1};
//ИначеЕсли {Условие2} Тогда
// {Оператор2};
//Иначе
// {Оператор3}
//КонецЕсли;
М = Максимум2 (ЧислоА, ЧислоБ);
Сообщить("Максимум = " + М);
В чем была ошибка? Мне также пишет, не могу разобраться..
Я человек ленивый, поэтому функцию сравнения трех чисел написал вот так
Функция макс3(А, Б, В)
Возврат Макс2(Макс2(А,Б),Макс2(В,Б));
КонецФункции
Может и не оптимально с точки зрения количества операций, выполняемых компьютером. Но зато в одну строчку.
Можно так:
Функция Макс3(А, Б, В)
Возврат Макс2(Макс2(А,Б),В);
КонецФункции
@@user-ui1ub5rm6n Да так лучше.
Не работает
Функция Максимум1(А, Б)
Если А > Б Тогда
Возврат А;
Иначе
Возврат Б;
КонецЕсли;
КонецФункции
Процедура СообщитьОМаксимуме(А, Б)
М = Максимум1(А, Б);
Cообщить ("Максимум =" + М);
КонецПроцедуры
Процедура КомандаВыполнить(Команда)
СообщитьОМаксимуме (ЧислоА, ЧислоБ);
КонецПроцедуры
Решение проблемы:
Короче, я два дня не мог понять в чем ошибка
Я поставил ; после КонецФункции
После, синтаксических ошибок не обнаружено
Дополню, может кому пригодится: запись "Если А > Б и А > В Тогда" равна записи "Если А > Б > В Тогда"
Добрый день. Не согласен. Можно проверить просто подставив числа.
Допустим:
А -10
Б-5
В-8
В этом случае А>Б И А>В сработает корректно в отличие от А>Б>В
@@hazrat6544, спасибо! Про минусы не подумал.
@@user-yo8pq8mu6k бывает. Пожалуйста
@@user-yo8pq8mu6k Как успехи? Уже прошло пол года с момента написания этого комментария
@@hazrat6544, в общем, я до этого изучал Python, потом знакомые предложили попробовать 1С, дошёл до экзамена на 1С: Специалист по платформе. Прошёл курсы и за две недели до самого экзамена меня пригласили джуном по питону и я не задумываясь ушёл в питонисты, т.к. 1С мне не особо нравится.
ВСе Я разобрался
Никита Кудрин в чем причина была? У меня такая же ошибка не могу понять что делать
У меня тоже пишет переменная не определена, и при чем пишет что переменные должны быть поверх функций, задал Перем ЧислоА и Перем ЧислоБ, ошибку больше не выдает, но при отладке не сообщает результат, хотя в Процедуре указано Сообщить М как у вас. В чем может быть причина? Если кто разобрался - напишите
Все настолько легко, проще пареной репы просто!
без домашних заданий это малоэффективное освоение материала.
ну так используй .В чем проблема ?
И зря не проверили Функцию максимум из трех! Работает не верно! Правильнее было ИначеЕсли В > А Тогда Возврат В; Иначе Возврат Б; . У нас по условию выходит В меньше А, если у нас Б будет больше В, то оно все-равно может быть меньше А. Отсюда ошибка. Не в обиду автора, огромное ему спасибо за уроки, очень познавательно, скорее всего просто был невнимателен =)
Я вбил код на три числа с экрана и у меня всё работает. Читайте внимательно код, Б никак не может быть меньше А.
@@PartizannN437 как у нас Б не может быть меньше А, если первое же условие говорит что А>Б?
Вы знаете как работает оператор И? Если А > Б И А > В, тогда мы возвращаем А. Иначе А
Ахаха достигнуто предельное количество подключений к ИБ, это блин учебная версия ограничена по количеству запусков. Ну и жлобы. Только начал учить 1С програмирование а уже такой бред, придётся ставить пиратку, ибо такие ограничения ни в какие ворота не лезут.
код на русском языке - извращение и боль глазам
Да на самом деле это дело вкуса и привычки. Я пока этим не занимаюсь (1С, посматриваю иногда из любопытства), а вот в своё время тренировался обычными ЯП, помню каким извращением и джунглями С++ со всеми этими { } ; * казался после VB. А через какое-то время после С++ уже VB казался "рукалицо" ))
Ко всему привыкаешь за недельку... Соответственно и отвыкаешь.
Что попало,только не для новичков,вообще ничего не понятно,хотя знаю другие языки программирования.
Всё ок, всё понятно, хотя не знаю языки программирования))