Новые возможности платформы 1С версии 8.3.18, асинхронные методы.
Вставка
- Опубліковано 16 жов 2024
- Платформа 1С 8.3.18. Асинх, Ждать и Обещание!
Новые возможности платформы 1С по работе с асинхронными методами. Заклинания Асинх! Ждать!
В видео демонстрируется решение задачи аналогичной задаче одного из прошлых видео, посвященных работе с файлами и картинками.
Рекомендуем ознакомиться с этим видео • Работа с файлами и кар... перед просмотром нового.
1Ска: ПоместитьНаСерверАсинх
Я: Будь здорова
Слёзы наворачиваются. Почему сразу так нельзя было сделать и не городить всю эту вакханалию с описаниями оповещений.
Как-то раз спросили розу:
"Отчего, чаруя око,
Ты колючими шипами
Нас царапаешь жестоко?"
"Чтобы сладкого добиться,-
Отвечал цветок Востока,
Испытай сначала горечь,
В дармовщине мало прока"
Шота Руставели "Витязь в Тигровой шкуре" ;)
в других языках тоже не сразу это все появилось
под капотом там все равно описания оповещения, асинх это просто сахар
Павлу Чистову - многие годы респект!
Респект и 1С от обладателя автографа 1С-Бога Нуралиева )))
&НаСервере
Память.Жрать()
Эта команда включена по умолчанию. По просьбам трудящихся, разумеется.
Класс))
Это из исходников хрома?
@@СтаниславЧайковский-м9щ Дык, хром обычно на клиенте память кушает.
@@АлександрШейка-ц5ь Где запущен там и кушает.
Прекрасно!!! Теперь не придётся прыгать между процедурами на клиенте, чтобы нырнуть на сервер в зависимости от ответа на вопрос. На правой руке удобно, на левой привычно, выбираю Удобство!
Нагородили огород! Во всех языках суффикс Async - НЕ Возвращает Promise, а означает немного другое.
Понятнее было бы называть метод Начать, но он уже занят под работу с описаниями оповещений.
Чем дальше развивается Платформа тем больше собственных "велосипедов"
Шедевр. Люблю новые платформы, столько интересного всегда.
Спасибо! Как всегда просто, доступно и понятно!
Для тех, кто досматривает до конца - самое важное объяснение в конце.
Павел, я вашей привычкой "А=0;" пять лет назад заразился как обучался 1С, до сих пор в действии))
5 лет.. Везет вам...
@@chistovpavel это Вы смысле ещё мало ?)
Что интересно ,ставлю похожие точки останова, Ф=1; и тоже из опыта других языков
@@chistovpavel Как "переменная i 30 лет на рынке счетчиков", так и "А=0;" 15 лет на рынке брейк-поинтов".
@@s.portowyi15 Да мне кажется ---i--- уже лет так 60. Скоро на пенсию... Чуть продержаться.
У меня одного ощущение какихто странных костылей аля мы можем как js. Хорошо а http запрос на сервер асинхронно можно? А запись в регистр асинхронно? Почему всего пара предопределенных вариантов?
Сначала для асинхронности придумали оповещения, чем сломали головы программистам 1С, сломали лаконичность кода, потребовали разбивать логику работы программы на мало связанные процедуры, а потом поняли что наделали херни и решили исправиться. Вот только код с оповещениями придётся разгребать лопатой ещё как минимум года 2 в типовых конфигурациях и всю оставшуюся жизнь в не типовых.
Приветствую Павел, давно не смотрел твоего видео. Как всегда на высоте.
Детские крики на фоне говорят о удаленной работе. За содержание спасибо.
Сильно слышно?
@@chistovpavel Немножко, и совсем не мешают.. Как по мне - нормальный житейский фон.
Ну давайте уже в 1с на JS писать а то зачем это все)) Ну а серьезно, кто писал на JS не мог не заметить что последнее время 1с упорно вносят оттуда фичи
А кто будет платить лицензионные платежи создателям JavaScript за это?
Так однопоточные приложения. На JS отточили и перенесли в 1С.
так сейчас в разработчики 1С jav'исты вроде как, по крайней мере они там внедряют новые возможности и фишки)
Один в один с js.
@@Crisis2424 фронтенд 1с на javascript написан.
Похоже дизайн языковых конструкций от создателей #КонецВставить надеюсь в итоге мы получить &НаКлиентеАсинхронно и похожее. Ждать вообще выкинут и компилятор будет все асинхронные методы выполнять асинхронно в контексте &НаКлиентеАсинхронно
в javascript async await считается вершиной асинхронной мысли и врядли тут будут await убирать, не просто так эта конструкция жива уже десятки лет
Не совсем понятно как будет работать процедура, если я в одну и ту же процедуру АСИНХР помещу в перемешку с кодом 2-3 вызова ЖДАТЬ? Будет ли выполнение линейно или же все эти ЖДАТЬ сработают за раз?
Спи спокойно Паша!
Если это аналог async await в js, то ведь в js насколько понимаю сама процедура async работает в синхронном режиме. В этом и есть основной смысл такой конструкции - удобство работы с асинхронными вызовами в стиле синхронного программирования. В 1С же очень странная реализация. Не факт, что это будет чем-то удобнее, чем было раньше.
А я правильно понимаю, что в 1С до сих пор нет способа сделать асинхронный http запрос встроенными средствами?
Но с опытом понимаешь что это хорошо ;)
ПоместитьФайл - 2009
НачатьПолучениеФайла - 2015
ЗАПРЕТ - ПоместитьФайл - 2018
НачатьПомещениеФайлаНаСервре - 2019
ЗАПРЕТ - НачатьПолучениеФайла - 2019
ПоместитьФайлНаСерверАсинх - 2020
По сути релиз платформы ради релиза платформы. Уже версий 10 платформы я ничего для себя нового не нахожу. Там где сложность оправдана - например сделать нормальный интерфейс многопоточности - 1С усложнять платформу не хочет. И в то же время с попытками сделать несложную асинхронность какую то жесть городили несколько версий платформы. В итоге ресурсоемкие и требующие неординарного подхода вещи я уже года 4 переношу в микросервисы (хранение документов, отчетные данные, журнал регистрации) - пусть через набор фоновых заданий и т.д. но в последствии с этими данными работать проще, как минимум пользователям - так как им важна скорость. Блин, я благодаря(или вопреки) 1С уже неплохо пишу на Jаva с использованием Spring/Spring Boot. Еще пару лет и в рабочих базах останется только то, для чего 1С изначально и предназначалась - оперативный и бухгалтерский учет, а все остальное пользователь будет обрабатывать в вебе и точно не через web-интерфейс 1С. Потому что все что выходит за рамки именно учета - сделано не совсем так как хотелось бы и похоже больше на набор костылей нежели на хорошо структурированный код.
Хотя если без демагогии - в данном случае (по моему мнению) началось движение в нужном направлении. В очень нужном. Главное чтоб не останавливалось это движение)
Что то не очень понял как работает. Пример:
&НаКлиенте
АСИНХ Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Отказ = Истина;
Обещание = Ждать ВопросАсинх("Записать изменения?", РежимДиалогаВопрос.ДаНет, 60);
Если Обещание = КодВозвратаДиалога.Да Тогда
Отказ = Ложь;
КонецЕсли;
КонецПроцедуры
Все равно запись элемента происходит и только потом выходит вопрос. На Отказ вообще не реагирует.
Как только добавляешь перед процедурой Асинх, сразу отказ перестает работать, он просто игнорируется
&НаКлиенте
Асинх Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Отказ = Истина;
КонецПроцедуры
Отказ в такой процедуре не срабатывает. Это нормальное поведение?
Олег П конечно нормальное. Ведь асинхронная процедура выполняется до конца, не останавливаясь. В этом же и весь смысл. Применять асинхронную процедуру не имеет смысла в стандартных системных обработчиках
@@ОлегП-о5ч Либо для 1С Асинх ПередЗаписью и ПередЗаписью две разные процедуры, либо не знаю. В других языках до первого вызова "Ждать" код выполняется синхронно, как в обычной функции.
Не понял, для чего во втором примере было показывать, что вылазит два диалоговых окна. Даже на простом примере всё показано замудрено.
Разработчики платформы, как всегда, жгут: Асинх Процедура... Неужели нельзя было ключевое слово "Асинх" в конце строки указывать, как слово "Экспорт"...
Он не стал заморачиваться и написал код и его работу в стандартной процедуре, мог поставить СтандартнаяОбработка Ложь, и после этого вызвать уже свою процедуру со своим примером кода. Но мы и без этого все поняли.
Надо заморачиваться, если хочешь кодить нормально.
Наконец-то :-)
А что делать с открытием формы? Там оповещение остаётся?
Оповещение о закрытии формы? Да остается.
А в какой версии появятся корутины и ленивые вычисления?
Ожидайте через 5 лет
В Котлине)
Походу кто-то из 1С курсы прошёл по js) о промисах узнали, это уже хорошо, авось может ещё про колбэки и замыкания что-то почитают...
веб клиент на жс написан
гениальный индусский код
Спасибо, что там еще нового в 8.3.18?
Что им мешало этот префикс вставить как директиву &НаСервере &Асинхронно или как Экспорт в конце строки... нет же, сделали самым вырвиглазным способом.
Взять то что сделано плохо и сделать ещё хуже это главная скрепа 1с
Интересно , где Вы были 6 ( шесть ! ) лет назад ! Во время работы на Олимпиаде в Сочи ?! Так обидно ! Никто из " сопровождающих специалистов " даже не понимал , что МНЕ нужно ! Там такие специалисты были , после города Сургута ( банковская специализация ), ну ОЧЕНЬ сложно было " разговаривать " на одном языке ! А сейчас - пандемия и возраст ! Или наоборот .
Вопросы пришли именно на олимпиаде? "Хорошо" готовились видимо.
@@chistovpavel ... на тот момент в 1 С не было многого из того , что сейчас предлагаете ..., запаздываете с обновлениями ... , а так - это просто было мое мнение и досада за нерасторопность разработчиков программы ...
@@ГульназираЩербакова В рамках олимпиадных задач и задач на worldSkills за шесть лет мало что поменялось.
Фразу "запаздываете с обновлениями" расшифруйте пожалуйста.
"В чём плюсы и ОСОБЕННОСТИ данного метода" :-D
А как это соотносится с отказом модальности? Кто-нибудь скажет мне?
Почитайте об аналогичных реализациях асинхронных методов и promise на других языках, например JS и сразу поймете. Если коротко: синхронные методы полностью занимают собой стек вызовов из-за чего форма, из которой они вызваны становится модальной на это время и общение других клиентских методов на это время остановлено (как и работа пользователя, который ждёт пока всё отвиснет).
А зачем вообще сущность Обещание? Мы ее можем как-то в последствии обработать? Или это просто "заглушка" для тех, кто не написал директиву Ждать?
Просто с одной стороны синтаксис Ждать [Метод] очень понятен в плане ожидаемого исполнения кода, а с другой стороны исполнение асинхронных методов подобного рода без Ждать бессмысленно.
То же касается и суффикса Асинх в методах ВопросАсинх, ПоместитьФайлНаСерверАсинх и т.п. Если они полностью заменяют старые методы, то зачем суффикс? Или они будут существовать параллельно? Не проще ли было иметь один метод Вопрос, режим работы которого определяется режимом работы процедуры/функции или директивой Ждать?
Вообще идея классная, но есть ощущение переусложненного синтаксиса.
Это вы ещё 1с экзекьютор не видели. Вот где переусложнение кода. Видать ребята из 1с упорно изобретают свой велосипед
@@alexorgnet свой велосипед изобрести не грех, если он удобнее и проще чужих. Мне, например, на русском писать программу проще, но это не повод накручивать синтаксис до неприличия.
Согласен, если методы переименовали, то зачем перед ними ставить Ждать? И так бы поняла система, что тут надо ждать)
И вообще, если в процедуре встречается асинхронный метод, то пусть она считается асинхронной без всяких доп модификаторов.
@@verterius А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? Спасибо ;) (Шутка)
@@asoneas Я имел ввиду, что если перед процедурой есть директива АСИНХ, то пусть все методы внутри будут асинхронными без изменения их названий) Чем не галочка?)
Мне кажется, еще немного, и 1С перейдет на js.
1С:Исполнитель - это русифицированная Java, как мне кажется.
@@sialsoft я имел ввиду не Java а js
В видео описано как из асинхронной процедуры сделать синхронную. А сама сущность работы с промисом опущена совсем. Автора уважаю, но цель то совсем другая у таких процедур.
Я ж адинесник... Расскажите, можно приватно, запишу дополнение.
В 1С это не использовал, впервые о возможности от вас и узнал, спасибо. Но цель "не ждать", а выполнять другие действия и уже только по выполнению обработать результат.
@@chistovpavel Цель тут лишь уйти от коллбэков и упростить код, только вот пример можно было бы расширить, например если ниже под вызовом АСИНХ функции у меня будет обычная функция, что будет в таком случае? В JS она бы вызвалась не дожидаясь результата АСИНХ функции, а тут как? И почему-то нет исходников, они бы не помешали конечно.
спасибо!
Кто-то 1Сникам рассказал про Python и asyncio
Есть шанс, что получиться такой франкиншейт, что-то из питона, что-то из java, javascript и т.д. )) В итоге при отладке будешь плеваться и матриться.. как сейчас.. когда, чтобы добраться до сути ныряешь в 20-ую процедуру
Жуть Опять привыкать по новому
домашний комп и 50 лицензий)
он удаленно подключен, но думаю один чёрт там варезные ключи
Так я где работаю!? Специально заморочился drive.google.com/file/d/13zs4pp8JIVlrOobNA6xD3EPhFPMarYiM/view?usp=drivesdk это реальные ключи, и еще тут на канале есть видео как я активировал программные, поищите.
@@chistovpavel я знаю, это не более чем шутка. раз уж вы заметили мой комментарий, хочу поблагодарить вас за статьи и за канал на ютубе, еще вроде был форум. Все это очень помогло вернуться в профессию после 10 летнего перерыва.
Немножко перестраховался)) Бывает один пользователь съедает 10 лицензий, особенно если вебсервер
Ахаха - Тип данных Обещание, модификатор Ждать... ЗВучит забавно и выглядит удобно. Все же лучше чем лапша вроде ОжиданиеПокаТЫЗакончишь.
"Ожидание Пока Ты КОНЧИШЬ" - а так было бы лучше? ))))
@@NoBodyAnyBody32 как вариант))
@@research_Development 1С-Стайл! Главное, чтобы юзер не уснул пока 1С Обещание выполняется )))
Это уже 1С-Стайл больше 20 лет! 1С 2.0 в Досе выполнялось мгновенно ))) начинал с него. Появилась 1С 7.7 и ВСЁ СТАЛО...
@@NoBodyAnyBody32 Для этого есть оповещения! Можно котиков рисовать в зависимости от процента действия!
Чет не привычно видеть код на русском, а тааак вызовите кто-нибудь священника!!!
ну так англоязычные видят язык на родном языке для них все языки как для нас 1с
@@nvufc7060 ну эт да)
Пишите на английском, в 1С двуязычный синтаксис.