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