Имя: Пароль:
1C
1С v8
Тест на понимание Асинх
0 Почему 1С
 
16.06.21
20:59
1. 3, 1, 2 100% (2)
2. 1 , 2 , 3 0% (0)
3. 2, 3, 1 0% (0)
Всего мнений: 2

Ниже дан код, не выполняя его в 1С выберите правильный вариант. Что выведится в сообщения по порядку.

&НаКлиенте
Асинх Процедура Команда1(Команда)
    Сообщить("1");
    а = Тест();
    Сообщить("2");
    b = ждать а;
    Сообщить("3");
КонецПроцедуры

&НаКлиенте
Асинх Функция Тест()
    Возврат 5;
КонецФункции
1 ДНН
 
16.06.21
21:49
Должно быть 1,2,3
Но 1С выведет 3,1,2. Причем визуально это будет выглядеть как будто сначала вывелось правильно, а потом 3 переместилась наверх
2 acht
 
16.06.21
22:02
Смотрю и понимаю, что геня даже свой подход "гуру-тестов" и тот не сам выдумал...
3 vde69
 
16.06.21
22:48
а где в сабже асинхронность?
4 Сергиус
 
17.06.21
00:24
Асинх это новая директива в 1с или что?
5 PR
 
17.06.21
00:27
6 ДенисЧ
 
17.06.21
06:19
(4) Эх... Бросить всё и уехать в "Москва, Россия" (с) почти анекдот.
7 Почему 1С
 
17.06.21
06:26
(3) Ну так что выведется? И как это называется?
8 dmt
 
17.06.21
08:57
странное поведение
9 dmt
 
17.06.21
09:00
причем если в отладчике постоять секунду на строке Сообщить(3) и только затем ее выполнить, то порядок сообщений будет нормальным )
10 Smit1C
 
17.06.21
09:04
Как-то так

3, 1, 2
11 Вафель
 
17.06.21
09:14
По идее должно быть 1,2,3
Как сделала 1с - хз
12 Smit1C
 
17.06.21
09:17
ИМХО: Там просто Сообщить("3") в миллесекундах обгоняет асинхронный вызов Сообщить("1") и Сообщить("2"), если поставить паузу перед Сообщить("3"), то выведется 1,2,3.
Поправьте если я не прав...
13 Почему 1С
 
17.06.21
09:17
(10) Сможешь объяснить почему так работает?
14 ДенисЧ
 
17.06.21
09:19
(12) А с чего Сообщить("1") стал асинхронным, а Сообщить("3") - нет?
15 Почему 1С
 
17.06.21
09:19
(12) Можно в функции тест запулить цикл на 100000 итераций, результат не изменится
16 ДНН
 
17.06.21
09:19
(13) Потому что это ошибка 1С. Видимо связанная с Сообщить. Если вместо Сообщить использовать ЗаписьТекста и писать в файл, то будет записано 1,2,3
17 dmt
 
17.06.21
09:23
(12) похоже на конкретный баг в Сообщить. Пауза перед Сообщить(3) в 600 мс дает примерно половину сообщений в правильном порядке.
18 Smit1C
 
17.06.21
09:27
(15)

Асинх Процедура КомандаА(Команда)
    
    
    Сообщить("1");
    а = Тест();
    
    Сообщить("2");
    b = ждать а;
    
    ТекДата = ТекущаяДата();
    Пока ТекДата+5>=ТекущаяДата() Цикл КонецЦикла;
    
    Сообщить("3");
    
КонецПроцедуры


выведет 1,2,3
19 TormozIT
 
гуру
17.06.21
09:29
Используй обычное приложение. Там вывод сообщений синхронный. Поэтому визуальный порядок сообщений будет соответствовать порядку из вывода.
20 ДенисЧ
 
17.06.21
09:37
(19) а в 77 вообще никакой асинхронности нет.. Давайте хором на 77 перейдём )))
21 Почему 1С
 
17.06.21
09:47
(18) При чем прилично нужно подождать, чтобы порядок заработал. на цикле в 100к элементов порядок не правильный, а уже на 1кк становится правильным. Никак не в миллисекундах дело выходит
22 Garykom
 
гуру
17.06.21
09:59
Объясните нахера в платформу 1С добавили другой вид асинхронности?
Когда уже есть одна с оповещениями при отказе от модальности?
23 Garykom
 
гуру
17.06.21
10:01
(22)+ Синтаксический сахар?
А предыдущий депрекатировать будут или так и будут раздувать платформу вместо того чтобы ее сократить-оптимизировать и сосредоточиться на вылизывании и обезбаживании?
24 Garykom
 
гуру
17.06.21
10:03
Сцуко вы еще лямбда-функции добавьте анонимные в виде замыканий
25 sikuda
 
17.06.21
10:04
(23) Так что же нам предложили в 2009 году как прикладным программистам? Получается нам предложили callback, завернутый в ОписаниеОповешения(). И даже функции работы с обещаниями в 8.3.18 не меняют этой сути, а просто перепаковывают примерно как программисты javascript свои callback-и в promise. Но в отличие от Web вся остальная схема работы 1С осталась синхронной. Взаимодействие с сервером в 1С само синхронно — последовательно вызываются функции клиента и сервера, ответ у HTTPЗапрос — получаем последовательно. А ОписаниеОповещения повесили на клиента и функции взаимодействия с пользователем.
Нет не все функции в 1С будут прикрывать столь срамную реализацию. Есть и правильная тенденция в ПолучитьФайлССервера с несколькими Оповещениями(callback) и в них мы как раз начинаем получать правильное использование технологии.
В общем
https://blog.sikuda.ru/wp-content/uploads/2020/01/TransferFile.png
26 Garykom
 
гуру
17.06.21
10:06
(25) Так и я про что?
Раннее фуйню спороли а сейчас вместо того чтобы ее исправить придумали еще одну
27 fisher
 
17.06.21
10:07
(1) +1
На файловой 8.3.18.1363 выводится именно так.
Это какой-то прикол буфера сообщений. Уже была где-то длинная ветка с паззлерсом, где сообщения чуть ли не затраивались или что-то в этом духе. Не помню подробностей, к сожалению.
Если одновременно с Сообщить() заполнять массив, то массив будет заполнен ожидаемо.
28 Garykom
 
гуру
17.06.21
10:07
Имхо давно пора делать чтобы клиент 1С мог работать (вызывать) несколько любых/разных серверов 1С ))
Асинхронно
29 Chai Nic
 
17.06.21
10:09
Асинхронность без многопоточности - зло.
30 oslokot
 
17.06.21
10:10
Я один не понимаю что это за асинх и зачем она нужна в 1С ?
31 fisher
 
17.06.21
10:10
(22) В смысле - нахера? Попробуй цепочку асинхронных вызовов написать в старом стиле и посмотри какая лапша получается. Сделали почти как у взрослых - так гораздо удобнее.
(33) Да, сахар. Сладкий. Старый задиприкейтят, куда деваться.
32 1Сергей
 
17.06.21
10:13
(0) Ничего не выведет. вывалится в ошибку на строке "b = ждать а;"
33 Chai Nic
 
17.06.21
10:16
(30) Для совместимости с мозгами джавистов и их творчеством для смартфонов
34 sikuda
 
17.06.21
10:17
(31) Анекдот в тему:
"Павел, а можно задать вопрос асинхронно?
А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? Спасибо"
35 fisher
 
17.06.21
10:17
(1)(27) + Причем действительно визуально видно, как сначала выводятся 1, 2 а потом первым втыкается 3. То есть очевидно при выводе сообщений еще как-то хитро порядок может восстанавливаться и просто в этом случае он восстанавливается неправильно. То ли баг, то ли фича.
36 Вафель
 
17.06.21
10:18
Асинхронность нужна чтобы в браузере работало
37 oslokot
 
17.06.21
10:19
(33) (36) ну дык оно и щас работает через описаниеоповещения и т.д.
38 fisher
 
17.06.21
10:21
Вас, плять, не понять. То плачут что язык не развивается. А когда развивается - плачут что остаются старые варианты синтаксиса. А если бы вырезали - плакали бы что обратную совместимость сломали.
Хлебом не корми - дай поплакать.
39 oslokot
 
17.06.21
10:22
Работает - не трожь (с)
40 Почему 1С
 
17.06.21
10:22
(32) а на Асинх первее не заругается?
41 1Сергей
 
17.06.21
10:23
(40) кстати, да
42 fisher
 
17.06.21
10:23
(41) С 18 релиза только.
43 Chai Nic
 
17.06.21
10:27
(39) Оно и дальше бы работало без асинхронности. Собственно, отрасли учетных систем это нафиг не сдалось. Но пришлось влезать в облака, веб и смартфоны. А там сихронный код некомильфо.
44 Garykom
 
гуру
17.06.21
10:28
(34)
>Анекдот в тему:
>"Павел, а можно задать вопрос асинхронно?
>А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? >Спасибо"

а ты хорош!

действительно просто верните синхронность на место, точнее скройте под капотом всю эту асинхронную муйню

и просто разрешите писать банально ПоместитьФайл() а что там будет и как выкручиваться и синхронно или нет плевать
45 1Сергей
 
17.06.21
10:28
(42) Почитал. Да, всё-таки ругнётся на ждать
46 fisher
 
17.06.21
10:47
(44) > скройте под капотом всю эту асинхронную муйню
Не все там так просто. Неспроста требуют функции с использованием асинхронности тоже как асинхронные в объявлении описывать. Они сразу должны особым образом компилиться/исполняться, как возвращающие промисы вместо обычных значений возврата. Для них отдельная механика и их надо сразу различать. Да и слишком много под капот - тоже плохо. Синтаксис с промисами как раз мне вполне нравится. Он и удобный/компактный и при этом не дает забыть, что происходит на самом деле. У таких же функций еще ряд особенностей есть. Передача параметров по значению, например. И это тоже нужно помнить.
47 fisher
 
17.06.21
10:50
Да и вообще это не 1С изобретение. Слизали с того же js.
48 Garykom
 
гуру
17.06.21
11:01
(46) Все функции "как асинхронные в объявлении описывать" и все
Во многих ЯП не требуется отдельно, все зависит от вызова/контекста
49 Garykom
 
гуру
17.06.21
11:03
И да &НаСервере и &НаКлиенте это изврат вот с него все началось!
Надо было оставить это в разных модулях чисто серверных и чисто клиентских и чисто "без контекста" если уж так хочется
50 Garykom
 
гуру
17.06.21
11:04
И самый изврат это в чисто дябильном ограничении (в мозгах разработчиков) что сервер не может клиента вызывать

Ибо Сообщить() вызванное на &НаСервере каким то магическим образом сообщает на клиенте! :)
51 fisher
 
17.06.21
11:05
(48) > Во многих ЯП не требуется отдельно
Перечисли несколько из многих.
52 fisher
 
17.06.21
11:07
(49) Ты бы первый брызгать начал мол "дебилы, прыгай теперь все время между модулями, контекст держать трудно, нет чтобы через аннотации сделать!"
53 Chai Nic
 
17.06.21
11:09
И кстати аннотации лучше было делать суффиксом, по типа ключевого слово "Экспорт" в определении. А без этого нелепого амперсанда.
54 Chai Nic
 
17.06.21
11:10
+(53) И в этом плане Асинх как префикс - уродство дикое
55 Garykom
 
гуру
17.06.21
11:12
(52) Так один хрен между модулями прыгать сейчас приходится
56 fisher
 
17.06.21
11:12
(53)(54) А мне норм.
(55) Ну а был бы вообще калейдоскоп.
57 Garykom
 
гуру
17.06.21
11:13
Аннотации кстати это говно
Еще со времен Java раздражают где вся JPS на них
58 Garykom
 
гуру
17.06.21
11:13
(57) *вся JPA
59 fisher
 
17.06.21
11:14
(57) Ага. Сказали в golang а потом начали комменты парсить при кодогенерации.
60 Garykom
 
гуру
17.06.21
11:14
(56) модуль менеджера и модуль объекта не калейдоскоп?
61 Garykom
 
гуру
17.06.21
11:14
(59) угу тоже начали местами в какую то не ту хрень идти
62 Garykom
 
гуру
17.06.21
11:15
(60)+ сцуко почему не сделали "аннотации" &ЭтоМенеджер и &ЭтоОбъект ???
63 fisher
 
17.06.21
11:15
(60) Нет. А вот при программировании формы без разделения экрана на две части вообще не представляю, как бы работал.
64 Garykom
 
гуру
17.06.21
11:18
(63) Ты не поверишь
В свое время прекрасно "программировал форму" только кодом

Да и сча когда надо 3D нарисовать беру https://ru.wikipedia.org/wiki/OpenSCAD где кодом/скриптами
65 Garykom
 
гуру
17.06.21
11:20
(64)+ У меня прекрасное объектно-визуальное мышление, могу за конфигуратор сам в воображении форму по коду рисовать
66 Chai Nic
 
17.06.21
11:20
(60) Модуль менеджера так то штука логичная. За исключением модулей менеджера обработок и отчетов. Их использование ничем нельзя оправдать.
67 fisher
 
17.06.21
11:20
(64) Я про то, что если бы код формы явно делился на два модуля, клиентский и серверный как ты предлагаешь, то человечески работать можно было бы только одновременно имея оба модуля перед глазами.
68 fisher
 
17.06.21
11:22
Потому что клиент-серверный код формы плотно увязан между собой и надо постоянно держать общий контекст.
69 Garykom
 
гуру
17.06.21
11:23
(67) расскажи это бэкендерам с фронтэндерами и фуллстеками веб
70 Garykom
 
гуру
17.06.21
11:25
(69)+ Сцуко сколько я себя приучивал на лету читать &НаСервере и &НаКлиенте
Вместо логичного другого модуля к которым уже вполне привык до этого
71 fisher
 
17.06.21
11:25
(69) Это только фуллстекам рассказать можно. Остальные не поймут. А им рассказывать нельзя. Иначе они будут плакать горючими слезами и проситься в 1С.
72 Garykom
 
гуру
17.06.21
11:26
(71) ты не понимаешь?

когда у тебя сервер и клиент разные то очень логично и понятно когда код в разных модулях
и как раз дикая путаница если в одном с аннотациями
73 fisher
 
17.06.21
11:28
(72) Не. Не понимаю. Мне вполне комфортно. Никакой выгоды от отдельного модуля не вижу. А выговор от указательного пальца точно получу.
74 fisher
 
17.06.21
11:31
Не. Выгоду вижу - не пришлось бы аннотации писать. Получается, сколько ты модулей предлагаешь, три? А когда захочешь одну и ту же функцию на клиенте и сервере - копи-паст или четвертый модуль?
75 DrZombi
 
гуру
17.06.21
11:32
(0) Тест липовый, нужно нормально так...
С использованием всех правил 1С Языка программирования и возможности Серверной версии 1С :)
76 ДенисЧ
 
17.06.21
11:32
(74) Для одной функции - ln -s )))
77 Garykom
 
гуру
17.06.21
11:37
(74) Я хочу сказать что контекст где выполняться должно определяться автоматически или непосредственно при запуске/вызове процедуры/функции

Т.е. модуль один и там никаких аннотаций, просто
Процедура МояПроцедура()

А вот в коде
НаСервере МояПроцедура() или НаКлиенте МояПроцедура() если принудительно указываешь и просто МояПроцедура() если на автомат платформы полагаемся
78 Garykom
 
гуру
17.06.21
11:39
(77) Ву компрене?
79 Вафель
 
17.06.21
11:40
(77) в 1с не увидели смысла писать такой автомат
80 Garykom
 
гуру
17.06.21
11:40
(79) Точнее "не шмогла"
81 Вафель
 
17.06.21
11:42
(80) просто посчитали не нужным выделять столько денег на разработку данной фичи
82 fisher
 
17.06.21
11:49
(77) Уже общий? Только ж разделять хотел по модулям. Мне такое не нравится. Я хочу видеть явное разделение мест исполнения иначе легко завтыкать.
Вот контекстные/неконтекстные автоматически определять можно было бы. Но на практике это бы замедлило компиляцию модулей. Т.е. либо время старта, либо первое обращение к объекту. Это неприемлемая цена за такой сахар. Тогда только на полную предкомпиляцию переходить, а тут свои минусы.
83 Serginio1
 
17.06.21
11:53
(23) Тем, что в JS появился async await и уже давно. А отказ от модульности на событиях причем еще и метод в текстовом виде ....
84 Garykom
 
гуру
17.06.21
11:57
(82) Или разные модуля или по контексту при вызове
А вот эти аннотации полная глупость и вынуждают иногда дублировать код, если одна функция и на клиенте и на сервере может выполняться и не надо делать долгий вызов сервера
85 fisher
 
17.06.21
12:04
(84) Баба Яга против. Вполне нормальный инженерный компромисс получился. А ты как-то из крайности в крайность кидаешься. То тебя хлебом не корми дай красивое разделение на клиент/сервер по модулям, то вообще не нужно никакого разделения и пускай разработчик с платформой по очереди репу чешут.
86 Garykom
 
гуру
17.06.21
12:06
(85) Не надо таких компромиссов
И несколько версий платформы параллельно не надо!
Нужна одна но без глюков
87 fisher
 
17.06.21
12:09
Я не против.
Согласен быть богатым. Согласен быть счастливым.
88 fisher
 
17.06.21
12:15
Что там кстати насчет (51)?
89 BIP1
 
17.06.21
12:21
(0) Сначала выводится "3", потом "1,2", а потом "3,1,2".
90 Chai Nic
 
17.06.21
15:11
(72) &НаСервере и &НаКлиенте это полное соответствие парадигмы пхп/джаваскрипт, когда в одном коде вперемешку и серверные и клиентские процедуры..
91 Garykom
 
гуру
17.06.21
15:20
(90) эээ давным давно принято js отдавать отдельными файликами а не засовывать в динамически формируемую html кодом на php
92 minsk1s
 
17.06.21
15:24
(30) Если Вы не понимаете зачем это в 1С, скорее всего Вы не понимаете, что это такое в принципе...
Чтобы не читать талмуды ИТС, небольшой FAQ по Асинх: https://1cnik.by/asinhronnye_funkcii.php
93 minsk1s
 
17.06.21
15:27
как-то так

3, 1, 2
94 Garikk
 
17.06.21
15:31
(90) так давно никто не делает (битрикс не считается)
запросы к беку только через аякс, html шаблонной статикой, отрисовка фиксированными js-ами
95 Garykom
 
гуру
17.06.21
15:37
(88) http://golang-book.ru/chapter-10-concurrency.html

package main

import "fmt"

func f(n int) {
    for i := 0; i < 10; i++ {
        fmt.Println(n, ":", i)
    }
}

func main() {
    go f(0)
    var input string
    fmt.Scanln(&input)
}


По сути тоже самое но у функции никакого признака Асинх в описании/объявлении нет, только при вызове
И да там где надо получить ответ некий аналог Ждать
96 fisher
 
17.06.21
15:44
(95) Многопоточность и асинхронность - не совсем одно и то же.
97 Garykom
 
гуру
17.06.21
15:46
(96) Это одно и тоже когда количество разрешенных потоков = 1

В примере на Golang многопоточность + асинхронность
98 Garykom
 
гуру
17.06.21
15:47
(97)+ например нода она однопоточная асинхронная изначально
99 Cthulhu
 
17.06.21
15:53
(25): Матвей, там у тебя на сайте ошибка: ссылка на "2. Online консоль запросов" ведет в никуда: Not Found / The requested URL /хттп://ццц.итс22.ру/zaprosi-1s-8 was not found on this server. / Apache/2.4.6 Server at blog.sikuda.ru Port 80)
100 fisher
 
17.06.21
15:55
(95)(97) Согласен. Горутины, конечно, киллер-фича.
101 oslokot
 
17.06.21
15:58
(92) Асинхронность в 1с и так уже есть через оповещения, благодаря которым отслеживаются моменты завершения вызовов процедур, плюс отказ от модальности и прочие плюшки. И все это уже давно работает и в браузерах и в мобильных приложениях. Может быть и коряво все выглядит но работает. Ожидание ответа от диалоговых вызовов, обработка выбора, ожидание помещения файлов в хранилище и обратно и так далее.
То есть я о том, что уже и так все работает в браузерах как надо
102 Garykom
 
гуру
17.06.21
15:58
(100) блин так и я про что!
что в объявлении процедуры/функции "Асинх" нафик не надо
чтобы любую можно было вызвать асинхронно и она обещание вернула в виде своего имени, которое можно использовать потом для возврата результата или статуса завершения
103 ДенисЧ
 
17.06.21
16:00
(101) Вот чтобы было менее коряво - приделали асинки.
104 Garykom
 
гуру
17.06.21
16:02
(102)+ и отдельные не синхронные вызовы для встроенных методов платформы тоже нахрен не нужны!
те же самые юзать а поведение зависит от настроек конфы где стоит синхронно/асинхронно
105 Вафель
 
17.06.21
16:04
(104) в жс нужно писать, а чтобы не заморачиваться решили переложить на прогов
106 Cthulhu
 
17.06.21
16:05
(101): есть - да не такое. ожидания ответа от диалоговых вызовов без потери контекста (один из вариантов - вариант в лоб в виде приостановки выполнения "как раньше в модальном режиме") - не было. теперь - есть.
107 Garykom
 
гуру
17.06.21
16:07
(106) ыыы теперь мы научились асинхронно эмулировать иснхронные/модальные вызовы
108 fisher
 
17.06.21
16:08
(102) Это если сразу так задизайнить. А тут чтобы не перепиливать приколотили сбоку плюшку.
109 sikuda
 
17.06.21
16:08
(99) Так чего там про sikuda.ru ;0 port 80???
110 fisher
 
17.06.21
16:09
В общем, дареному коню в зубы не смотрят :)
111 fisher
 
17.06.21
16:10
В js вроде точно также было. Сначала на коллбэках а потом приколотили асинки точно таким же макаром.
112 sikuda
 
17.06.21
16:25
(111) Так все таки что такое ВопросАсих? - https://code1c.sikuda.ru/wp-content/plugins/codemirror1c/run/question/
113 ДедМорроз
 
17.06.21
16:36
Если бы результат можно было получать без ожидания,то этому бы цены не было,а когда только ждать - это костыление.