вторник, 14 июля 2020 г.

В клиентском приложении 1С отсутствует возможность параллельного выполнения кода 1С. Предложение для разработчиков платформы 1С


Описание проблемы
В клиентском приложении 1С отсутствует возможность параллельного выполнения кода 1С.
Все операции, выполняемые кодом 1С на клиентской части 1С, являются последовательными.
На сегодняшний день, к сожалению, это так.
Простой пример. Нужно на клиенте распараллелить следующий код:
&НаКлиенте
Процедура ПечатьДокументов()
ТабДок1 = ТОРГ12(Ссылка);
ТабДок2 = СчетФактура(Ссылка);
ТабДок3 = Сертификаты(Ссылка);
КонецПроцедуры
Распараллелить невозможно. Платформенный обработчик ожидания не является параллельным, так как выполняется только при бездействии приложения, не содержит такой возможности.
Последствия:
 - ожидание пользователя,
 - негатив со стороны пользователя;
 - бизнес требует параллельный функционал -> разработчик выполняет задачу неоптимально и трудозатратно -> бизнес терпит увеличенные расходы на неоптимальные решения.

Предложение для разработчиков платформы 1С
// Создается новое ОписаниеПараллельногоОповещения и метод ВыполнитьПараллельно.
// Пример использования
ОжидатьОкончаниеКаждойОперации = Истина; // Функция ОкончаниеПараллельныхОпераций вызывается только в случае окончания всех операций.
ОПО = Новый ОписаниеПараллельногоОповещения("ОкончаниеПараллельныхОпераций", ОжидатьОкончаниеКаждойОперации);
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Ссылка", Ссылка);
МассивФункций = Новый Массив;
МассивФункций.Добавить("ТОРГ12");
МассивФункций.Добавить("СчетФактура");
МассивФункций.Добавить("Сертификаты");
МассивСтруктурПараметров = Новый Массив;
МассивСтруктурПараметров.Добавить(СтруктураПараметров); // Структура параметров для функции ТОРГ12.
МассивСтруктурПараметров.Добавить(СтруктураПараметров); // Структура параметров для функции СчетФактура.
МассивСтруктурПараметров.Добавить(СтруктураПараметров); // Структура параметров для функции Сертификаты.
ВыполнитьПараллельно(ОПО, МассивФункций, МассивСтруктурПараметров); // Позволяет запускать только функции, возвращающие значения.
// Передаваемые параметры сопоставляются по именам (ключ структуры = имени параметра).

// Создается функция ОкончаниеПараллельныхОпераций. 
// МассивРезультатов - это массив, содержащий результаты выполнения функций; индексы массива функций и массива результатов совпадают.
Функция ОкончаниеПараллельныхОпераций(МассивРезультатов)
ТабДок1 = МассивРезультатов[0];
ТабДок2 = МассивРезультатов[1];
ТабДок3 = МассивРезультатов[3];
МаксВысота = Макс(ТабДок1.ВысотаТаблицы, ТабДок2.ВысотаТаблицы, ТабДок3.ВысотаТаблицы);
Сообщить("Максимальная высота: " + Строка(МаксВысота));
КонецФункции

Выгоды:
 - пользователь не ждет, производительность приложения существенно повышается;
 - исчезает негатив пользователя, появляется позитив из-за отзывчивости программы и отсутствия периодических подвисаний;
 - задачи бизнеса решаются оптимально, быстро, экономно;
 - платформа становится более конкурентоспособной по сравнению с другими языками, что в свою очередь притягивает специалистов.

Комментариев нет:

Отправить комментарий