Заметки эксперта. Расследование длительного выполнения отчета “Движение ТМЦ и затрат в производстве” (1С:ERP 2)

19.05.22

База данных - HighLoad оптимизация

Кратко: в ходе проведения нагрузочного тестирования “1С:ERP 2” под ОС Linux на СУБД Postgres выявлено существенное замедление формирования отчета “Движение ТМЦ и затрат в производстве” - до 60 минут. После проведенного расследования и точечной корректировки СКД в отчете, без изменения бизнес-логики результатов его работы, работа отчета была ускорена в 80 раз - средний показатель формирования составил 30 секунд.

Заметки эксперта. Расследование длительного выполнения отчета “Движение ТМЦ и затрат в производстве” (1С:ERP 2)

 

Кратко: в ходе проведения нагрузочного тестирования “1С:ERP 2” под ОС Linux на СУБД Postgres выявлено существенное замедление формирования отчета “Движение ТМЦ и затрат в производстве” - до 60 минут. После проведенного расследования и точечной корректировки СКД в отчете, без изменения бизнес-логики результатов его работы, работа отчета была ускорена в 80 раз - средний показатель формирования составил 30 секунд.

Мы опубликовали в предыдущих двух статьях на наш взгляд интересные и довольно необычные кейсы расследования деградации производительности. Эта статья про случай попроще, но мы считаем, что и он заслуживает вашего внимания. Во-первых, и тут есть существенная проблема с быстродействием. Во-вторых, этот пример показателен тем, что далеко не всегда нужно вообще что-то “переписывать” в конфигурациях 1С. Надеемся, вам будет интересно ;)

Инфраструктура исследуемой системы

  • Технологическая платформа 1С:Предприятие 8, версия 8.3.19.1264
  • Конфигурация: 1С:ERP Управление предприятием 2, версия 2.5.6.234
  • Операционная система: Astra Linux Орел 2.12
  • СУБД: Postgres Pro Enterprise 13
  • Размер базы данных: около 500 Гб
  • Количество пользователей: около 2200

 

Проблема

В ходе проведения нагрузочного тестирования прикладного решения “1С:ERP 2” в рамках программы перехода на операционную систему Linux с использованием СУБД Postgres выявлено длительное формирование отчета "Движение ТМЦ и затрат в производстве”.

Если установить в отчете параметры отбора “Период (месяц)” и “Подразделение”, после чего запустить его формирование – это занимает от 40 до 60 минут. Причем, формирование “под нагрузкой” (одновременная работа пользователей) такого отчета у части пользователей завершается с ошибкой “Недостаточно памяти для получения результата запроса к базе данных”.

В остальных случаях результирующий табличный документ пустой – по установленным отборам данных к выводу нет.
 

Задача

Выявить и устранить причины крайне медленного формирования отчета “Движение ТМЦ и затрат в производстве” в инфраструктуре 1С:ERP 2 / Linux / Postgres.

 

Расследование

На момент выполнения такого рода расследования, у нас должна быть подключена подсистема БСПОценка производительности”, включен технологический журнал 1С (ТЖ 1С), желательно включить подробное логирование в журнале регистраци 1С (ЖР 1С).

Для начала ищем самый длительный замер по ключевой операции формирования этого отчета, полученный подсистемой БСП “Оценка производительности” - запоминаем “Номер сеанса”:

 

Дата начала замера

Дата окончания замера

Номер сеанса

Длительность, сек.

Пользователь

16.01.2022 16:43:18

16.01.2022 17:23:09

2218

2 390,844

ЭкономистПроизводства_012

 

После чего в ТЖ 1С ищем событие CALL (клиент-серверный вызов), соответствующее данному замеру: ”SessionID=11811(2218)”

22:38.093000-2359346998,CALL,1,Usr=ЭкономистПроизводства_012,SessionID=11811(2218),p:processName=erp,Func=Background job,Module=ДлительныеОперации,Method=ВыполнитьСКонтекстомКлиента,Memory=-858220508,MemoryPeak=15575941249,InBytes=117587968,OutBytes=133120366,CpuTime=336095413

Действительно: вызов длился почти 40 минут.

Обращаем внимание на еще один момент: в пике ему потребовалось почти 15 Гб оперативной памяти (свойство MemoryPeak). Это еще одна причина, которая требует расследования (многовато выходит для отчета, который в итоге ничего не выводит).

Кроме этого держим в голове, что у части тестовых пользователей возникала ошибка “Недостаточно памяти для получения результата запроса к базе данных”.

Для анализа ситуации смотрим на запросы, которые выполняются при формировании запроса к базе данных, анализируем события ТЖ 1С  DBPOSTGRS для данного клиент-серверного вызова (сопоставляем по тому же SessionID=11811):

45:09.657000-108177999,DBPOSTGRS,5,process=rphost,p:processName=erp,OSThread=7838,t:clientID=2832,t:applicationName=BackgroundJob,t:computerName=erp02,t:connectID=15586,SessionID=11811,Usr=ЭкономистПроизводства_012,DBMS=DBPOSTGRS,DataBase=erp04\erp,Trans=0,dbpid=27776,Sql="<...>",RowsAffected=42998,Result=PGRES_TUPLES_OK,Context='
ОбщийМодуль.ДлительныеОперации.Модуль : 1063 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
    ОбщийМодуль.ДлительныеОперации.Модуль : 1073 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
        ОбщийМодуль.ОбщегоНазначения.Модуль : 5180 : Выполнить(Текст);
             : 1 : ВариантыОтчетов.СформироватьОтчетВФоне(Параметры[0],Параметры[1])
                ОбщийМодуль.ВариантыОтчетов.Модуль : 2773 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
                    ОбщийМодуль.ВариантыОтчетов.Модуль : 1718 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
                        Отчет.ПроизводственныеЗатраты.МодульОбъекта : 81 : ПроцессорВывода.Вывести(ПроцессорКомпоновки);'
57:10.549000-720529999,DBPOSTGRS,5,process=rphost,p:processName=erp,OSThread=7838,t:clientID=2832,t:applicationName=BackgroundJob,t:computerName=erp02,t:connectID=15586,SessionID=11811,Usr=ЭкономистПроизводства_012,DBMS=DBPOSTGRS,DataBase=erp04\erp,Trans=0,dbpid=27776,Sql="<...>",RowsAffected=2841404,Result=PGRES_TUPLES_OK,Context='
ОбщийМодуль.ДлительныеОперации.Модуль : 1063 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
    ОбщийМодуль.ДлительныеОперации.Модуль : 1073 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
        ОбщийМодуль.ОбщегоНазначения.Модуль : 5180 : Выполнить(Текст);
             : 1 : ВариантыОтчетов.СформироватьОтчетВФоне(Параметры[0],Параметры[1])
                ОбщийМодуль.ВариантыОтчетов.Модуль : 2773 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
                    ОбщийМодуль.ВариантыОтчетов.Модуль : 1718 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
                        Отчет.ПроизводственныеЗатраты.МодульОбъекта : 81 : ПроцессорВывода.Вывести(ПроцессорКомпоновки);'
04:07.978000-292160999,DBPOSTGRS,5,process=rphost,p:processName=erp,OSThread=7838,t:clientID=2832,t:applicationName=BackgroundJob,t:computerName=erp02,t:connectID=15586,SessionID=11811,Usr=ЭкономистПроизводства_012,DBMS=DBPOSTGRS,DataBase=erp04\erp,Trans=0,dbpid=28219,Sql="<...>",RowsAffected=3023307,Result=PGRES_TUPLES_OK,Context='
ОбщийМодуль.ДлительныеОперации.Модуль : 1063 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
    ОбщийМодуль.ДлительныеОперации.Модуль : 1073 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
        ОбщийМодуль.ОбщегоНазначения.Модуль : 5180 : Выполнить(Текст);
             : 1 : ВариантыОтчетов.СформироватьОтчетВФоне(Параметры[0],Параметры[1])
                ОбщийМодуль.ВариантыОтчетов.Модуль : 2773 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
                    ОбщийМодуль.ВариантыОтчетов.Модуль : 1718 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
                        Отчет.ПроизводственныеЗатраты.МодульОбъекта : 81 : ПроцессорВывода.Вывести(ПроцессорКомпоновки);'

Видим, что два запроса выполняются долго - в листинге выше: 720529999 мкс второй запрос, 292160999 мкс третий запрос. Кроме этого, они еще и возвращают в итоге около 3 миллионов строк каждый: RowsAffected=2841404 во втором запросе, RowsAffected=3023307 в третьем запросе.

Это явно избыточная нагрузка на СУБД. К тому же выходит, что фильтрация осуществляется уже после получения данных из базы, ведь результат, как мы помним - у пользователей все равно пустой.

 

Переходим к самому отчету в конфигурации 1С.

Помним: в варианте отчета, вызывающем проблему, отбор устанавливается по периоду и по подразделению.

Открываем настройки схемы компоновки данных (СКД) для данного отчета и видим: отбор по подразделению указан не для отчета, а в отдельных группировках.

 

 

Такая настройка СКД приводит к избыточному чтению данных из СУБД: из базы данных сначала выбираются все данные, без отбора по подразделению. И только после этого компоновщик СКД для каждой группировки накладывает отбор по подразделению.

 

Решение

Проанализировав полученные выше данные по работе 1С с СУБД в контексте этого отчета и структуру его СКД, делаем вывод: основной отбор по подразделению можно перенести в сам отчет, не нарушая логику его работы. Вот так:

 

 

То есть условия в отборе для отчета будут применяться сразу, что ожидаемо снизит нагрузку на СУБД, минимизируя получаемые оттуда данные.

 

Применяем изменения в конфигурации 1С и проверяем формирование отчете в рамках следующей итерации нагрузочного тестирования:

52:05.794000-1516999,DBPOSTGRS,5,process=rphost,p:processName=erp,OSThread=4120,t:clientID=253,t:applicationName=BackgroundJob,t:computerName=erp01,t:connectID=2740,SessionID=2298,Usr=ЭкономистПроизводства_012,DBMS=DBPOSTGRS,DataBase=erp04\erp,Trans=0,dbpid=30344,Sql="<...>",RowsAffected=0,Result=PGRES_TUPLES_OK,Context='
ОбщийМодуль.ДлительныеОперации.Модуль : 1063 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
    ОбщийМодуль.ДлительныеОперации.Модуль : 1073 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
        ОбщийМодуль.ОбщегоНазначения.Модуль : 5180 : Выполнить(Текст);
             : 1 : ВариантыОтчетов.СформироватьОтчетВФоне(Параметры[0],Параметры[1])
                ОбщийМодуль.ВариантыОтчетов.Модуль : 2773 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
                    ОбщийМодуль.ВариантыОтчетов.Модуль : 1718 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
                        Отчет.ПроизводственныеЗатраты.МодульОбъекта : 81 : ПроцессорВывода.Вывести(ПроцессорКомпоновки);'                        
52:22.199000-15617999,DBPOSTGRS,5,process=rphost,p:processName=erp,OSThread=4120,t:clientID=253,t:applicationName=BackgroundJob,t:computerName=erp01,t:connectID=2740,SessionID=2298,Usr=ЭкономистПроизводства_012,DBMS=DBPOSTGRS,DataBase=erp04\erp,Trans=0,dbpid=30668,Sql="<...>",RowsAffected=0,Result=PGRES_TUPLES_OK,Context='
ОбщийМодуль.ДлительныеОперации.Модуль : 1063 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
    ОбщийМодуль.ДлительныеОперации.Модуль : 1073 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
        ОбщийМодуль.ОбщегоНазначения.Модуль : 5180 : Выполнить(Текст);
             : 1 : ВариантыОтчетов.СформироватьОтчетВФоне(Параметры[0],Параметры[1])
                ОбщийМодуль.ВариантыОтчетов.Модуль : 2773 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
                    ОбщийМодуль.ВариантыОтчетов.Модуль : 1718 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
                        Отчет.ПроизводственныеЗатраты.МодульОбъекта : 81 : ПроцессорВывода.Вывести(ПроцессорКомпоновки);'
52:25.135000-2789999,DBPOSTGRS,5,process=rphost,p:processName=erp,OSThread=4120,t:clientID=253,t:applicationName=BackgroundJob,t:computerName=erp01,t:connectID=2740,SessionID=2298,Usr=ЭкономистПроизводства_012,DBMS=DBPOSTGRS,DataBase=erp04\erp,Trans=0,dbpid=30562,Sql="<...>",RowsAffected=0,Result=PGRES_TUPLES_OK,Context='
ОбщийМодуль.ДлительныеОперации.Модуль : 1063 : ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
    ОбщийМодуль.ДлительныеОперации.Модуль : 1073 : ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
        ОбщийМодуль.ОбщегоНазначения.Модуль : 5180 : Выполнить(Текст);
             : 1 : ВариантыОтчетов.СформироватьОтчетВФоне(Параметры[0],Параметры[1])
                ОбщийМодуль.ВариантыОтчетов.Модуль : 2773 : Формирование = СформироватьОтчет(Параметры, Ложь, Ложь);
                    ОбщийМодуль.ВариантыОтчетов.Модуль : 1718 : ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
                        Отчет.ПроизводственныеЗатраты.МодульОбъекта : 81 : ПроцессорВывода.Вывести(ПроцессорКомпоновки);'
52:25.333001-25484999,CALL,1,Usr=ЭкономистПроизводства_012,SessionID=2298(766),p:processName=erp,Func=Background job,Module=ДлительныеОперации,Method=ВыполнитьСКонтекстомКлиента,Memory=-184943301,MemoryPeak=14490779,InBytes=0,OutBytes=0,CpuTime=5387584

Видим, что отбор сразу применился на уровне запроса к базе данных (RowsAffected=0). Потребление памяти при этом снизилось до 15 Мб (MemoryPeak=14490779).

Отчет сформировался за 30 секунд:

 

Дата начала замера

Дата окончания замера

Номер сеанса

Длительность, сек.

Пользователь

24.01.2022 12:51:59

24.01.2022 12:52:29

766

29,804

ЭкономистПроизводства_012

 

Таким образом, без серьезной корректировки отчета, не углубляясь в его бизнес-логику и не меняя её, мы ускорили формирование отчета почти в 80 раз. Кроме этого, избавились от высокого потребления памяти процессами сервера, что порождало ошибку недостатка памяти для получения результата запроса и отображению пользователю.

эксперт быстродействие erp 1С:Эксперт технологическим вопросам платформа деградация производительности производительность высокая нагрузка highload

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    3627    spyke    28    

47

Быстродействие типовой 1С

HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5582    vasilev2015    19    

38

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    8376    170    ZAOSTG    74    

102

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    6689    doom2good    49    

65

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    9530    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5398    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16654    skovpin_sa    14    

101
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6805 19.05.22 16:10 Сейчас в теме
Информативно, спасибо.
mitia.mackarevich; it-expertise; sasha_r; +3 Ответить
2. starik-2005 3037 19.05.22 17:52 Сейчас в теме
3. TMV 14 20.05.22 00:05 Сейчас в теме
Собирать ТЖ в данном случае излишне.
echo77; zqzq; RustIG; +3 Ответить
4. sasha_r 20.05.22 09:28 Сейчас в теме
(3) почему? Мне казалось, собирать ТЖ никогда не вредно.
it-expertise; +1 Ответить
5. TMV 14 20.05.22 10:43 Сейчас в теме
(4) Это не вредно, но и не нужно именно здесь - из пушки по воробьям.
15. buganov 200 23.05.22 08:45 Сейчас в теме
(5) чтобы посмотреть потребление памяти вызовом, например. Без ТЖ не посмотришь.
Опять же, в запросе может быть несколько временных таблиц и увидеть, на какой именно проблема, поможет либо ТЖ, либо трассировка. Но, из первого предложения возникает логичная гипотеза, что с помощью ТЖ можно увидеть сразу всю картину.

Можно было бы еще в дополнение план запроса посмотреть и там явно было бы видно, что ближе к концу на входе в оператор толстая линия, а на выходе тонкая, что тоже говорит о позднем отборе.

Я бы лично сначала план посмотрел, но любой подход верный, если приведет к положительному результату.
it-expertise; +1 Ответить
16. TMV 14 23.05.22 10:03 Сейчас в теме
(15)из Москвы в СПБ можно улететь, а можно и в плацкарте доехать - вопрос эффективности.
17. buganov 200 23.05.22 11:22 Сейчас в теме
(16) Вопрос эффективности - итоговое время формирования отчета при наименьших трудозатратах на оптимизацию. В данном случае пусть и не совсем обычно подошли к экспертизе, так как обычно начинается все с плана запроса, но тем не менее, расследование с помощью ТЖ, как одно из фундаментальных средств показал результат.
Предложите свой вариант, как бы Вы расследовали.
Напомню, что у части пользователей отчет вылетал по памяти.
it-expertise; +1 Ответить
7. IT_Magnit 20.05.22 14:24 Сейчас в теме
(3) Как и писать статью..
6. capitan 2472 20.05.22 12:05 Сейчас в теме

Давайте поговорим об этом)
1. При чем тут переход
под ОС Linux на СУБД Postgres
, разве на windows & mssql СКД по другому работает?
В СКД можно поймать итоговый запрос, а в ТЖ можно поймать его план
2. Что будет с пользователем который не хочет в разрезе подразделений такой отчет строить, например старший экономист ?)

Не относящееся к делу замечание,
да какое уж там замечание, просто камень в огород секты центосников как сервера 1С)
На Astra Linux перешли все кто только мог, а он то на дебиане
8. s22 19 20.05.22 15:58 Сейчас в теме
Логика вроде изменилась.

Сейчас отбор накладывается на все таблицы, а раньше только на одну
9. s22 19 20.05.22 16:00 Сейчас в теме
А вообще от 1с нужны функции получения от запроса плана и скл варианта.
Сделать просто, поможет сильно
it-expertise; sapervodichka; +2 Ответить
10. ivanov660 4347 20.05.22 16:27 Сейчас в теме
Внесу свои пять копеек)
1. Должны быть отборы обязательно - без отборов тормоза случаются).
2. Что-то очень странное условие отбора "Группировка ИЛИ". Если задача стояла в том, чтобы пользователь обязательно указывал подразделение. то это делается значительно проще - во вкладке СКД "Параметры" ставится флаг "запрещать незаполненные значения".
3. Рекомендую также пользоваться обработкой "Консоль системы компоновки данных" с ИТС, она покажет какой запрос формируется в итоге на языке запросов 1С. В результате можно увидеть к чему приводят различные манипуляции со схемой СКД.
11. s22 19 20.05.22 17:01 Сейчас в теме
(10)
2. Что-то очень странное условие отбора "Группировка ИЛИ". Если задача стояла в том, чтобы пользователь обязательно указывал подразделение. то это делается значительно проще - во вкладке СКД "Параметры" ставится флаг "запрещать незаполненные значения".


Нормальное. Если заполнено подразделение то отбор по нему иначе нет отбора.
triviumfan; +1 Ответить
12. ivanov660 4347 20.05.22 17:57 Сейчас в теме
(11)Тогда вышеуказанная оптимизация на половину бессмысленная, сняли отбор и опять тормоза.
13. Fragster 1139 20.05.22 18:17 Сейчас в теме
На картинке в статье не показано, как быстро отловить это дело (отсутствие фильтрации в запросе) в настройках:
14. echo77 1882 22.05.22 11:38 Сейчас в теме
(0) Спасибо, что еще раз обратили на это внимание.
Вспоминая себя: чем больше знаешь, тем более изощренными(сложными) способами решаешь задачи.
Наверное, стоило начать с обзора настроек компоновщика настроек, за тем посмотреть итоговый запрос с параметрами в консоли СКД и уж потом...
VladC#; it-expertise; +2 Ответить
18. Andrekaa 24.05.22 08:05 Сейчас в теме
а в техподдержку 1С написали о своих результатах?
19. it-expertise 326 24.05.22 08:55 Сейчас в теме
(18) мы довольно плотно сотрудничаем с 1С по линии производительности и отказоустойчивости.
Оставьте свое сообщение