ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:00:16
Работа с асинхронными методами платформы:
  • 1. Запрещено использование синхронных методов на клиенте, исключение составляют случаи, когда свойство конфигурации установлено определенным образом
  • 2. Современные конфигурации автоматически устанавливают режим работы, запрещающий синхронные вызовы и расширения
  • 3. Во время демонстрации рассматривается конкретная ошибка, возникающая при нарушении указанных правил
00:00:58
Пример реализации обработки файла:
  • 1. Разработана демонстрационная база с кнопкой и полем текстового документа, при нажатии кнопки происходит открытие диалога выбора файла
  • 2. Возникла проблема с использованием синхронных методов на клиентской стороне, возникла ошибка при работе с объектом встроенного языка
  • 3. Решено перейти к изучению асинхронных аналогов метода выбора файлов, рассмотрены два возможных подхода: использование метода «показать» и подробное изучение типа описания оповещения
00:02:46
Создание объекта описания оповещения:
  • Создан объект описания оповещения, используемый для вызова метода после завершения асинхронного процесса
  • Процедура обработки оповещения должна иметь экспортируемое ключевое слово и соответствовать имени, указанному в описании оповещения
  • Метод вызова диалога выбора файла требует передачи объекта описания оповещения первым параметром
00:06:21
Чтение текстового файла:
  • Создан объект текстовый документ и подготовлены методы для работы с ним (чтение и получение содержимого)
  • Использован асинхронный метод начала чтения файла и создана процедура-обработчик завершения чтения
  • Для передачи содержимого файла в процедуру обработчика создано дополнительное поле структуры и передано через параметры оповещения
00:10:14
Использование новых асинхронных функций:
  • 1. В платформе с версии 8.3.18 появились новые асинхронные функции и синтаксические конструкции (асинх_ждать, обещания)
  • 2. Асинхронная функция помечается модификатором «асинх», указываемым перед ключевым словом «функция»
  • 3. Объект-обещание хранит результат выполнения асинхронной функции или обрабатывает возникшие исключения
00:11:45
Применение оператора «асинх ждать»:
  • Разработана команда (вариант 2), предназначенная для показа содержимого выбранного пользователем файла
  • Создан отдельный обработчик действий команды на клиентской стороне для работы с асинхронными функциями
  • Предложена новая версия синтаксиса, позволяющая уменьшить количество процедур и улучшить читаемость кода
0: Всем привет платформа 1 с уже достаточно давно позволяет работать с базой через веб клиент, то есть другими словами пользователь может открыть базу в браузере, но это накладывает определённые ограничения на разработчика и при разработке современных приложений запрещён
1: Использовать синхронные методы на клиенте. Сегодня мы рассмотрим с вами, как работать с асинхронными методами, и не будем терять время. Поехали?
2: При использовании синхронных методов на клиенте возникает следующая ошибка использование синхронных методов на клиенте запрещено, но на самом деле она возникает не всегда, а только в том случае, если в свойствах конфигурации на закладке совместимость, значение свойств, режим
3: Использование синхронных вызовов, расширений и режим использования модальности. Установлено значение не использовать. В современных конфигурациях эти свойства имеют именно такие значения. И на ошибку мы сейчас посмотрим с вами вживую. Для этого я запущу
4: Демонстрационную базу. В этой базе я добавил обработку. Обработка имеет форму и на форме у нас расположена кнопка и поле текстового документа. Принцип работы предполагается следующее. Пользователь нажимает на кнопку. Далее открывается диалог выбора файла пользователь
5: Выбирает файл текстовый, мы его читаем и показываем содержимое на форме. Вот в этом текстовом поле. Сейчас при нажатии на кнопку возникает как раз та ошибка, про которую говорил. Использование синхронных методов на клиенте запрещено. Разберёмся в каком месте
6: Возникает ошибка. Нажимаю подробно конфигуратор, и мы попадаем к той строке, где находится вызов как раз синхронного метода. В этой строке идёт работа с объектом встроенного языка, диалог выбора файла. Перейду в синтакс помощник и посмотрим на методы этого объекта.
7: И вот мы видим, что действительно метод выбрать есть, но в свете того, что у нас свойства конфигурации установлены, так как они установлены сейчас мы не можем его использовать. Для того, чтобы решить задачу, мы должны использовать 1 из 2 асинхронных аналогов, выбрать ассинх или
8: Показать. При этом вы должны понимать, что все эти методы решают 1 и ту же задачу. То есть они позволяют показать пользователю диалог выбора файла. Разница в том, что метод выбрать является синхронным. Методы выбрать осинки показать являются асинхронными. Ну и
9: Посмотрим, как работать с этими методами, и начнём с метода показать в методе показать. У нас есть 1 единственный параметр. В данном случае это описание оповещения и есть отдельный тип в платформе он так и называется. Описание оповещения. Давайте более
10: Подробно разберёмся с этим типом, как с ним нужно работать и как вообще вызываются такого рода методы. На слайде приведён пример. Это не рабочий код, а это именно схема вызова асинхронного метода и в дальнейшем процедуры, которая вызывается уже после. Итак, в 1 стро,
11: Создаётся объект описания оповещения с помощью этого объекта. Описывается, какая процедура должна быть выполнена после того, как закончится выполнение асинхронного метода. В данном случае указано после выполнения метода. 2 параметром указы.
12: Либо форма клиентского приложения, либо общий модуль, в котором находится та самая процедура. Затем вызывается метод. И вот как раз 1 параметром передаётся объект описания оповещения. Ну а дальше, в зависимости от метода уже перечисляются другие параметры, определяя
13: Как раз функциональность этого метода, и важно, чтобы в модуле существовала процедура с таким именем, которая указана на уровне объекта описания оповещения, и для этой процедуры должно быть указано ключевое слово экспорт, в противном случае код.
14: Будет нерабочим, то есть будет возникать ошибка при выполнении. Ну и давайте посмотрим конкретно на нашем примере, как показать диалог выбора файла, используя метод, показать. Итак, для того, чтобы этот метод вызвать, во первых, здесь меняю выбрать на показать метод
15: Показать он ничего не возвращает. Поэтому путь к файлу в самом начале здесь убираю. Ну и у нас есть 1 параметр описание оповещения. Создам этот объект выше. Введу переменную. Что делать после и буду использовать конструктор новое описание
16: 1 параметр здесь это имя процедуры. Мы его придумываем сами после выбора файла. 2 параметр это модуль, в котором эта процедура находится. Если она находится в текущем модуле, можно сюда передать
17: Этот объект, этот объект, это свойство формы, которые содержит саму эту форму готово. Теперь объект описания оповещения передаю в качестве параметра в метод показать и переходим к следующему шагу. Это создание самой процедуры обработчика оповещения. Итак, создаю процедуру.
18: Формы на клиенте после выбора файла важно имя должно полностью совпадать с тем, как оно указано на уровне объекта описания оповещения. Ну а дальше у процедуры, у нас же должны быть параметры определённые. Как узнать, какие параметры будут в процедуре. Очень просто
19: Для каждого асинхронного метода, у которого в качестве параметра есть описание оповещения, есть описание и того, какие параметры будут переданы в процедуру, обработчик этого оповещения, в частности, для метода, показать на уровне описания параметра описания оповещения.
20: Здесь указано, что процедура будет со следующими параметрами. Это выбранные файлы, это будет либо массив выбранных имён файлов, либо не определено, если пользователь закрыл окошко. Ну и 2 параметр это дополнительные параметры. Ну и очень важный момент это проце,
21: Должна быть экспортной, поэтому обязательно указываю ключевое слово экспорт. Следующее, что мы должны сделать, это проверить, выбрал пользователь файл или не выбрал. Сделать это можно, сравнив выбранные файлы с неопределённо. Если равно неопределено, значит, делать больше нам нечего.
22: Выходим из процедуры. Ну а если же не равно не определено, значит это массив файлов. И мы можем получить путь к файлу, как выбранные файлы, квадратные скобочки 0. То есть 1 элемент массива. Ну и для того, чтобы убедиться в том, что код наш рабо,
23: Выведу сообщение, в котором мы просто покажем путь к файлу, который был получен. Сохраняю изменения, запускаю сеанс, проверяем работу этого кода, открываю обработку, нажимаю на кнопку, открывается диалог. Отлично. Далее перехожу в каталог, где находи
24: Наш файл нажимаю открыть и вот мы внизу как раз видим путь к нашему файлу и возвращаемся обратно к коду. Путь к файлу у нас есть. Двигаемся дальше. Следующее, что нам нужно сделать, это прочитать этот текстовый файл, который выбрал пользователь и
25: Содержимое этого файла показать на форме на форме. У меня есть элемент содержимое файла, он связан с реквизитом содержимое файла, у которого тип строка для чтения текстовых файлов. Можно использовать такой объект, как текстовый документ и конструктор этого обе
26: Очень простой новый текстовый документ, поэтому 1 шаг введу переменную txt doc и создам новый текстовый документ далее на уровне объекта текстовый документ у нас есть большое количество методов, и для чтения у нас тоже есть на самом деле.
27: Несколько методов есть метод, который называется прочитать и он является синхронным поэтому его мы использовать не будем. А есть метод, который является аналогом метода прочитать и называется он начать чтение. И здесь мы видим, что у нас
28: Есть 1 параметр. Описание оповещения это как раз признак того, что метод является асинхронным. И будем использовать этот метод для того, чтобы читать наш текстовый документ. Итак, создаю описание оповещения. Что делать после новое описание оповещения.
29: Процедура пускай у нас называется после завершения чтения файла находиться она будет в этом же модуле указываю опять же здесь этот объект ну и вызываем метод начать чтение txt doc точка начать чтение.
30: Параметры передаю сюда во первых, описание оповещения, во вторых, имя файла, которое мы будем читать, оно у нас содержится в переменной путь к файлу. Далее следующий параметр это тип файла, кодировка текста. Ну и кодировка текста. Давайте выберу здесь вот такой
31: Значение ютиф 8. Готово. Следующий этап мы должны создать процедуру обработчика этого оповещения. То есть, когда файл будет прочитан, будет вызвана вот эта процедура, мы её должны описать, описывая процедуру модуля формы на клиенте после
32: Завершение чтения файла. И в этой процедуре нам важно понять какие параметры. Опять же, синтакс помощник, начать чтение. Вот наш 1 параметр, описание оповещения и вот какие параметры сюда передаются только 1 дополнительные параметры. Дальше
33: Возникает вопрос, как нам получить содержимое текстового документа, если в этой процедуре у нас же его нету сейчас и для того, чтобы текстовый документ был передан в процедуру обработчика оповещения. В данном случае мы должны на уровне создания объекта описания оповещения передать
34: 3 параметр дополнительные параметры это то, что мы хотим, чтобы попало вот сюда, в дополнительные параметры. Ну и можно передавать сюда в принципе значения разных типов. Я буду передавать туда структуру, которую предварительно создам параметры чте.
35: Это будет у нас структура, в которой ключом будет такое значение. Текст док, ну и значением будет сам текстовый документ. И передаю 3 параметром в конструктор создания объекта, описания оповещения. 3 параметр. Теперь допол.
36: Параметры у нас будут содержать как раз-таки структуру, которую мы описали вот здесь, и мы можем получить наш текстовый документ в процедуре обработчика оповещения следующим образом txt doc равно дополнительные параметры точка текст док. Окей, что делать?
37: Дальше файл прочитан, как получить его содержимое, а для этого на уровне объекта текстовый документ. У нас есть ещё 1 метод, который называется получить текст, и мы должны этот текст поместить в реквизит содержимое файла, поэтому пишу следующее содержимое файла, равно
38: Txt doc точка. Получить текст ну и давайте посмотрим как это работает. Сохраняю изменения. Запускаю сеанс, открываю обработку, нажимаю на кнопку, выбираю файл, нажимаю открыть и вот мы видим есть ошибка. Не найден экспортируемый метод. Нажимаю
39: Подробно конфигуратор и ошибка возникает вот здесь при создании объекта описания оповещения, что я пропустил это ключевое слово экспорт, поэтому не забывайте для процедуры обработчиков оповещения указывать ключевое слово экспорт, указываю его запуска.
40: Сеанс ещё раз.
41: Открываю обработку, нажимаю на кнопку, выбираю файл и мы видим результат. Содержимое файла успешно прочитано. Теперь рассмотрим, как использовать новые асинхронные функции. Дело в том, что в платформе, начиная с версии 8, 3, 18 появилис
42: Новые асинхронные функции, а также новые синтаксические конструкции, такие как асинх ждать и новый тип данных обещания, рассмотрим более подробно синтаксис для того, чтобы функцию обозначить как асинхронную используются специальные моди.
43: Модификатор асинх, он указывается перед ключевым словом функция. То есть, если модификатор асинх перед функцией указан, значит эта функция будет выполняться асинхронно. Результатом выполнения любой асинхронной функции является объект и
44: Обещания. Обещание это своего рода контейнер для, возможно пока неизвестного результата выполнения синхронной функции. Дело в том, что функция у нас может либо выполниться успешно, тогда мы получим некоторый результат в зависимости от функции, либо можт,
45: Возникнуть исключительная ситуация. Тогда мы должны получить исключение. Так вот, обещание как раз-таки это такой контейнер, в который либо будет помещён результат выполнения функции, либо через этот контейнер мы можем получить исключение, обработать его уже на
46: Уровне той функции, откуда мы вызывали асинхронную. Также у нас появился новый оператор оператор, ждать который используется для того, чтобы ожидать окончания обещания. То есть при вызове функции платформа обещает
47: Её выполнить по результату выполнения через объект обещания. Она нам вернёт либо результат, либо исключительную ситуацию. И через оператор ждать. Мы можем как раз получить результат функции, либо обработать исключительную ситуацию. Давайте посмотрим на примере как раз на
48: Задача. То есть нам нужно опять же открыть диалог выбора файла, получить выбранный пользователем файл, прочитать его, показать содержимое на форме. Для этого создам отдельную команду, которую назову показать. Содержимое файла. Нижнее подчёркивание. Вариант 2. Так.
49: Синоним, немножко поменяю, напишу вот так war 2 и размещу команду на форме в командной панели. Дальше создаю обработчик действия команды на клиенте. Если мы хотим ожидать окончания обещания синхронных функций, которые мы будем дальше вызывать, нам необходимо для нашей
50: Процедуру указать модификатор асинх, то есть указать, что процедура у нас является асинхронной. Следующий этап, как и раньше, создаём объект диалог выбора файла. В этом плане все осталось как и было. Поэтому 2 строки выше скопирую, вставлю сюда создание диалога выбора файла настройка
51: Фильтра. Ну а дальше уже пойдут отличия для объекта. Диалог выбора файла. У нас есть метод, который называется выбрать асинх, он возвращает обещание, но как с этим обещанием работать? Обещание само по себе нам не особо интересно. Да, нам важно.
52: Значение, полученное в результате выполнения функции, либо исключительная ситуация, если вдруг она возникла и здесь мы видим следующее, что результат выполнения обещания массив выбранных мин файлов или неопределённо, что означает то, что здесь написано, то, что
53: После окончания обещания мы можем получить либо массив выбранных файлов, либо получить неопределённо, как мы можем ожидать обещание? Ну, во первых, давайте введу переменную обещание и присвою ей то значение, которое возвращает функция выбрать асинх.
54: Диалог точка выбрать асинх, то есть переменная обещание у меня будет как раз тип данных. Обещание. Далее мы обещание можем ждать, используя оператор, ждать. И этот оператор позволит нам получить результат. Поэтому я введу далее переменную. Результат можно
55: Даже назвать её более все-таки осознанно. Это выбранные файлы и присвоить ей значение, которое мы получим в результате ожидания, окончания обещания, ждать обещания. Далее, как и при решении задачи. В 1 варианте мы проверяем, что такое выбранное
56: Файлы. Если выбранные файлы, это не определено, значит, дальше нам делать нечего. Выходим из процедуры возврат. В противном случае выбранные файлы. Это у нас будет массив имён файлов, и мы получим путь к файлу следующим образом.
57: Выбранные файлы, квадратные скобки, 0 1 элемент массива. Ну и выведем сообщение на экран. Проверим, что этот код работает. Сохраняю изменения. Запускаю сеанс, посмотрим, что получилось в результате. Итак, нажимаю на кнопку диалог выбора файла открывается. Выбираю далее.
58: Файл и появляется сообщение. То есть наш код отработал. Двигаемся дальше. Следующее. Это чтение файла для чтения текстового файла. Создаю объект. Текстовый документ. Txt doc равно новый текстовый документ. Ну а дальше нам нужно прочитать наш текстовый документ. Перейду.
59: Синтакс помощник, описание нашего объекта и для чтения файла. Мы использовали метод начать чтение. А сейчас посмотрим на новый метод, который называется прочитать асинх. Итак, смотрим описание синтаксиса прочитать асинх. Сюда передаётся имя файла.
60: Кодировка разделитель строк текст док точка. Прочитать асинх имя файла беру из переменной путь к файлу тип файла это у нас кодировка текста. Использую кодировку utf 8 ну а разделитель строк по умолчанию перенос строки нас это вполн.
61: Устраивает. Ну и точно также, если мы промотаем вниз возвращаемое значение, которое этот метод позволяет нам получить, это опять же обещание. Итак, результат функции мы помещаем в переменную обещания. Тип. У нас тут будет обещание, ну и для того, чтобы дождаться завершения функции, мы дол,
62: Должны опять же использовать оператор, ждать результат, равно ждать обещание следующий этап мы должны получить содержимое текстового документа txt doc точка получить текст и содержимое поместить в реквизит.
63: Формы содержимое файла проверяю на синтаксис. Ошибок нет сохраним изменения. Посмотрим что получилось. Запускаю сеанс демо синхронные функции показать содержимое файла вариант 2, выбираю файл и вот мы таким образом тоже видим содержимое файла
64: Как и в 1 случае, но при этом обратите внимание, что здесь мы обошлись всего лишь 1 процедурой, в то время как при использовании асинхронных методов в 1 варианте мы задействовали целых 3 процедуры. Новый вариант предполагает немного.
65: Другой синтаксис, к нему нужно привыкнуть, но тем не менее, он позволяет, как вы видите, достаточно сильно сократить количество процедур и плюс повысить читаемость кода.