Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в версии 8.3.14.1565.
В сложных прикладных решениях 1С:Предприятия существует прикладной функционал расчета себестоимости товаров. Это достаточно сложная задача и мы решили сделать встроенный в платформу механизм, который будет максимально простым в использовании и, при этом, весьма производительным.
Проанализировав работу прикладных решений, мы пришли к выводу, что один из наиболее трудозатратных этапов представляет собой, по сути, решение системы линейных алгебраических уравнений (СЛУ). В результате в платформе, во встроенном языке, мы реализовали новый объект, позволяющий находить решение СЛУ.
Существуют классические алгоритмы решения СЛУ, однако в платформе мы использовали собственный алгоритм с дополнительной оптимизацией. В случае разреженной матрицы СЛУ, что как раз соответствует задаче расчета себестоимости, наш алгоритм работает существенно быстрее классических алгоритмов. В случае плотной матрицы СЛУ он показывает результаты, близкие к классическим (гарантированно не хуже).
По нашим оценкам использование этого нового объекта в задаче расчета себестоимости позволит увеличить производительность в десятки раз.
Помимо этой задачи вы можете использовать новый объект и в других прикладных областях, которые автоматизируются решениями 1С:Предприятия:
В общем виде система линейных алгебраических уравнений выглядит следующим образом:
где это известные коэффициенты уравнений.
Решение системы линейных уравнений заключается в нахождении таких значений , при которых все равенства выполняются.
Объект РасчетСистемЛинейныхУравнений обладает рядом свойств, которые позволяют гибко настраивать необходимую точность решения через численные значения и количество итераций алгоритма. Кроме этого они позволяют устанавливать границу изменения алгоритма решения для получения оптимальной скорости вычислений.
Объект содержит конструктор и два метода:
Особенностью нового функционала является то, что он поддерживает параллельное использование вычислительных ресурсов. Вы можете регулировать количество используемых потоков вычисления. Функционал доступен на сервере, в толстом клиенте и в COM-соединении.
Для решения системы линейных уравнений необходимо подготовить две таблицы с коэффициентами системы линейных уравнений – ИсточникДанныхУзлов и ИсточникДанныхСвязей. Эти таблицы могут быть объектами типа ТаблицаЗначений или РезультатЗапроса.
Далее нужно дать описание этих таблиц, выставив определенные свойства объекта РасчетСистемЛинейныхУравнений: КолонкаУравненияВУзлах, КолонкаУравненияВСвязях, КолонкаПеременныеВСвязях.
Следующим шагом является описание систем линейных уравнений, которые требуется решить. Для этого существует специальный объект ОписаниеСистемыЛинейныхУравнений. В нем нужно указать свойства КолонкаКоэффициентовВСвязях и КолонкаКоэффициентовВУзлах, соответствующие данной системе.
Полученные описания следует добавить в коллекцию ОписанияСистемЛинейныхУравнений (свойство ОписанияСистем объекта РасчетСистемЛинейныхУравнений). Для корректной работы нужно добавить в коллекцию как минимум одно ОписаниеСистемыЛинейныхУравнений.
Далее можно указать дополнительные (необязательные) свойства объекта РасчетСистемЛинейныхУравнений, которые позволяют тонко настроить механизм решения.
Финальный этап - вызов метода РассчитатьСистемыЛинейныхУравнений().
Отметим, что механизм позволяет рассчитывать сразу несколько систем линейных уравнений за один вызов метода РассчитатьСистемыЛинейныхУравнений().