Распространенные ошибки разработчиков, приводящие к проблемам производительности

Публикация № 1485525 02.08.21

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

проблемы быстродействия качество кода

Рассмотрим примеры ошибок, анализ, исправление и мероприятия по недопущению подобного в будущем. Всего будет 18 примеров.

В данной статье коснемся проблемной стороны разработки кода. Посмотрим на примеры кода и ситуаций, которые могут привести или приводят к проблемам производительности. Диалог будем вести от «простых» ситуаций к сложным.

В следующей статье проведем анализ проблем с использованием профайлера и плана запросов, т.е. посмотрим как это все выглядит со стороны SQL сервера.

Думаю, что актуально для специалистов начального уровня и среднего, а сеньоры могут дополнить примерами из своего опыта. Господа сеньоры возможно для вас это банально и стандартно, но для меня когда я начинал работать с управляемыми формами и платформой 1С - это бы очень пригодилось, поэтому давайте общаться в конструктивном диалоге, спасибо.

Коллеги делитесь в комментариях описанием Ваших вариантов/ситуаций, будем рады почитать, спасибо!

 

О чем поговорим?


 

I) Разбор ситуаций

Типы ошибок.


 

  • Проблемы знаний – привносит нам проблемы, связанные с неопытностью разработчика. Иногда вместо правильного решения мы можем увидеть брутфорс и т.п. Свойственно в основном разработчику начального уровня. 
    Исключение таких ошибок решается повышением квалификации специалистов. Список мероприятий:
    • курсы,
    • патронаж/наставничество,
    • тех-часы,
    • самообучение,
    • код-ревью (обзор-кода),
    • парное кодирование (очень мощная практика, но дорогая тратится время сразу двух специалистов).
    • другие.
  • Ошибки кодирования – ошибки, допускаемые любыми специалистами. Это могут быть опечатки, проблемы копирования/вставки или другие подобного рода. 
    Мероприятия для их отлова:
    • проверка статическим анализатором 1С,
    • запуск тестов (тестирование),
    • обзор-кода.
  • Быстрое решение – свойственно создание костыльного, не масштабируемого, плохого решения, в котором в угоду скорости (нужно было вчера) приносится в жертву качество. В результате в дальнейшем сталкиваемся с обрастанием костылями и проблемами в работе. Эта ошибка всегда увеличивает технический долг.
    Могут быть исправлены процедурой, которая называется - рефакторинг кода. 
  • Архитектурные – самые страшные ошибки. Исправление этих ошибок самый трудоемкий процесс иногда может означать полностью переделку системы. Если система модульная, то исправление еще возможно в обозримые сроки. 
    Недопущение:
    • проведение архитект-ревью,
    • заимствование решений из проверенных конфигураций,
    • мозговой штурм,
    • консультаций и технический аудит опытными специалистами.

 

1. Храним файлы в реквизитах объекта

 

Постановка задачи

  • Заказчик попросил добавить картинку – фотографию пользователя и/или дополнительное изображение товара в номенклатуру. 

Реализация:

  • Добавляем реквизит с типом «Хранилище Значений» и храним картинку в объекте.


Проблема

  • Картинки могут быть большие и при обращении к данным объекта через точку (это тоже плохо) или при открытии карточки объекта мы будем каждый раз перекачивать мегабайты изображений.

Реализация данного решения свойственна новичку в разработке.

Решение

  • Откатываем механизм хранения файлов в объекте.
  • Используем из БСП подсистему файлов (ссылка на ИТС БСП подсистема файлов): 
    • Добавляем новый справочник «Пользователи Присоединенные Файлы»;
    • Добавляем реквизит ссылку в самом справочнике;
    • Добавляем обвязку подсистемы.


Мероприятия:

  • Выполнять код-ревью решений
  • Контролировать работу новичка, дать ему наставника, парное программирование и т.п.
  • Проводить обсуждения в команде вариантов реализации

 

2. Забыли добавить условие отбора

 

Что происходит

  • О проблеме сообщили, когда накопился большой объем данных более 200 тысяч документов. 
  • При выводе на печать состава товаров документа «Маршрутный лист» время печати возросло с 2 до 40 секунд.

Проблема

  • В печатной форме при формировании таблицы данных на печать забыли добавить условие на отбор (ссылку на массив документов) из-за этого впустую используются лишние ресурсы. На рисунке или текстовом блоке приведен пример кода с ошибкой.
 
 Пример кода с ошибкой

 
Решение

  • Добавили условие отбора ("ТаблицаВыходныеИзделия.Ссылка В (&МассивСсылок)"). Результат решения приведен на рисунке ниже.
 
 Пример кода с исправлением

 

Мероприятия:

  • Проверять длительные запросы.
  • Выполнять тесты
  • Выполнять обзор-кода (новый чек поинт).

 

3. Используем неоптимальный поиск при обработке данных в циклах

 

Постановка задачи:

  • Заказчик попросил создать обработку загрузки товаров из файла (Excel) в документы ввода остатков (данных больше 1000 позиций)

Подобный код часто используется в обработках загрузки данных, различных программных обработках данных (удивила конфигурация УХ, из-за которой и появился этот пункт)

Быстрый код:

  •  Создали процедуру для обработки данных, для того чтобы учесть уже найденные элементы была создана таблица для хранения кеша найденных данных данных.
 
 Быстрое решение

 

Проблема:

  • Поиск по таблице медленный при больших объемах данных. Для разового поиска пойдет, но для цикла выглядит ужасно.

Решение:

  • Требуется добавить индекс на поля участвующие в отборе ("ТаблицаКеша.Индексы.Добавить("НоменклатураСтрокой");")
  • Или использовать тип "Соответствие" для поиска (хешированную таблицу) кешированных данных
 
 Хорошее решение

 

Мероприятия:

  • Обзор-кода
  • Ведем базу знаний
  • Обсуждаем хорошие практики

 

4. Используем директиву &НаСервереБезКонтекста

 

Что происходит

  • Обрабатываем большой объём данных;
  • При работе на управляемой форме происходят длительные «подвисания» при попытке выбрать склад, изменить значение элемента или других действий с реквизитами.

Проблема

  • Между клиентом и сервером передается большой объем данных десятки тысяч и более;
  • Процесс сериализации и десериализации данных на форме начинает оказывать существенное влияние на процесс работы.
 
 Ниже приведен пример неудачного решения и показан соответствующий код


Решение

  • Для вызовов серверных расчетов с клиента необходимо использовать операнд «&НаСервереБезКонтекста»;
  • При работе на управляемой форме надо максимально снижать количество вызовов с клиента контекстных серверных;
  • Стараться работать с меньшим объемом данных – используйте фильтры;
  • То, что можете получить на сервере и нужно на сервере – получайте и обрабатывайте там;
  • Измените, обдумайте снова логику приложения.

Пример варианта исправления кода приведен ниже. Как вы можете убедиться, то создание правильного кода в данном случае достигается тратой пары секунд и дописыванием двух слов «без контекста».

 
 Исправленное решение

 

Мероприятия:

  • Обзор кода 
  • Чек лист для обзора кода
  • Читаем статьи про то как работает клиент-серверное взаимодействие

 

5. Используем директиву &НаКлиентеНаСервереБезКонтекста

 

Что происходит:

  • Иногда в процессе работы на управляемых формах требуется использовать функцию или процедуру, которая выполняет одинаковые функции на клиенте или сервере одновременно.

Реализация:

  • Создаем две функции, которые на клиенте и сервере и называем "ФункцияНаКлиенте" и "ФункцияНаСервере".
  • Создаем одну функцию, но на сервере
 
 Вариант реализации

Проблемы:

  • Возможно дублирование кода, если реализовать две отдельных функции
  • Выполнение лишних передач данных между клиентом и сервером, т.к. используем "НаСервере"

Решение:

  • Создаем одну функцию с директивой "&НаКлиентеНаСервереБезКонтекста"
 
 Вариант хорошего решения

 

6. Отсутствие индекса по соединяемым полям в пакетных запросах

 

Что происходит

  • По результатам анализа длительных запросов по отчету конфигурации «Мониторинг производительности» было выявлено необычное, плавающее появление длительных запросов регламентного задания. 
  • Нормальное время выполнения 2-3 секунды
  • Аномалия выполнялась 120-600 секунд.
 
 Ниже приведен кусок кода описывающий проблемную ситуацию


 Проблема

  • План запросов может выбираться не оптимальный
  • Длительное время выполнения загружает сервер
  • Мешает пользователям (особенно в высоконагруженных базах) 
  • Чем больше активность, тем значительнее влияние


Решение

  • Индексируем все поля, которые в пакетных запросах участвуют в соединениях, условиях/отборах.
    По факту вы можете возразить, что будет потрачено лишнее время на данную процедуру. Но в большинстве случаев – это доли секунды и со временем основного запроса несопоставимы. Зато у вас появляется стабильность. В следующей статье мы рассмотрим как выглядят изменения в плане построения запросов для разных случаев.
    В данном случае требуется добавить для временной таблицы ВтСклады описание индексирования "ИНДЕКСИРОВАТЬ ПО Склад".
 
 Исправленный код

 

7. Условия по измерениям вне виртуальных таблиц

 

Что происходит

  • Разработчик не соблюдает стандарты разработки и выполняет отборы вне виртуальных таблиц «Остатки», «Обороты», «Остатки и Обороты», «Срез Последних» и др. 
  • Подход тяп ляп и в «боевую» базу.

P.S. На всех собеседованиях, я тем или иным образом проверяю квалификацию разработчиков задавая косвенные и наводящие вопросы про знания оптимальных вещей.

 
Пример плохого кода: 

Проблема

  • Такой подход необоснованно перегружает оборудование;
  • Плохой стиль.


Решение:

  • Перенести отборы в виртуальную таблицу;
  • Следовать стандартам и рекомендациям в разработке на платформе 1С.

Мероприятия:

  • Отправить джуна на курсы
  • Обзор-кода
  • Просмотр длительных запросов
 
 Правильный код:


8. Используем объектную модель, а не запросную

 

Пример

  • При проведении заказа клиента в модуле объекта «При Записи» выполняем проверку наличия в договоре признака «Лимитный»                
 
 Плохая реализация в контексте модуля объекта документа «Заказ клиента»:

 
Проблема:

  • Права доступа (у пользователя может не быть доступа к части реквизитов объекта)
  • Получается весь объект целиком (это документ с несколькими сотнями строк в ТЧ или вы в реквизитах храните мегабайты с архивом договора)
  • Сама проверка плоха (если у вас есть выгрузки между базами и вместо договора битая ссылка, то вы этот документ не откроете никогда)


Решение

  • Используем запросную модель;
  • Можно поставить получение данных в привилегированном режиме.
 
 Хороший код:

     


9. Добавляем поля из таблицы в динамический список

 

Динамические списки – это, пожалуй, одна из самых проблемных вещей в 1С, особенно в высоконагруженных базах. Рассмотрим несколько актуальных примеров.


Постановка задания

  • В динамическом списке документа «Задание на перевозку», заказчик попросил вывести получателя из табличной части распоряжения (аргумент: 90% с одним или одинаковым получателем)
     

 
 Вариант быстрого решения

 

Проблема

  • Снижаем производительность лишними соединениями;
  • Это явный костыль;
  • Если мы захотим вывести что-то еще из другой табличной части?

Решение

  • Добавляем новый реквизит в шапку документа, который назовем «xyz_КонтрагентДляСписка»/«Первый Получатель Отправитель» 
  • При записи документа выбираем для заполнения первого получателя из табличной части если есть.

 

 
 Хороший вариант реализации


 

10. Вывод полей через точку от составного типа в динамических списках, отчетах, АРМ

 

Постановка задачи

  • Нам требуется в списке для ссылочных (обычно составных) полей «Регистратор», «Документ Расчетов», «Объект Расчетов» и т.п. вывести дополнительные информационные поля: «Дата», «Номер» и т.д. 

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

 
 Плохой код

 

Проблема

  • Это очень сплошная «боль» для пользователей при использовании РЛС. 
  • Доступ к данным сразу потребует наличия доступа ко всем документам регистраторов.
  • Производится неявное лишнее соединение ко всем таблицам документов при РЛС.
  • Страдает быстродействие.

Решение

  • Используем дополнительный регистр (будут храниться все часто используемые реквизиты документов, который заполняем при записи документа или справочника). В типовых конфигурациях есть регистр сведений «Реестр Документов».

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

 
 Вариант хорошего решения:


 Мероприятия:

  • При проектировании учитываем возможные потребности пользователей
  • Проводим архитект-ревью или мозговой штурм
  • Используем базу знаний хороших решений.

 

11. Очень сложный запрос в динамических списках

 

Постановка задачи:

  • Заказчик попросил в список заказов добавить информацию по выполнению заявок.
    Есть динамический список документов «заказы клиентов», а также есть регистр остатков выполнения некоторого вспомогательного процесса выполнения заявок в разрезе заказов клиента. И требуется увидеть статус выполнения этих заявок в рамках основного списка.

Реализация:

В динамический список добавили соединение документов заказов клиентов с вложенным запросом на основании регистра.

 
 вариант быстрой реализации

Проблема:

  • Данное решение довольно медленно отрабатывает из-за сложной структуры – неоправданно много данных просчитывается на SQL сервере для того чтобы отобразить 25 первых строчек.
  • Время ожидания у пользователей под ограничениями находится в приделах 100-200 сек
  • Поиск по подобно увеличивает время до 400-500 сек
  • Особенно это заметно, когда в базе довольно много документов и движений.

Если вы застали раннюю версию УТ11 (до выхода ERP), то могли видеть подобную проблему для динамического списка подбора номенклатуры по товарам. Это решение очень сильно тормозило даже на маленькой нагрузке, и бизнес испытал "легкий" шок при попытке поработать на этой пилотной конфигурации. К счастью, в скором времени они исправились и переделали на более оптимальный вариант.

Решение:

  • Создаем новый регистр сведений с измерением «Заказ клиента» и состоянием вспомогательного процесса выполнения заявок.
  • Переписываем запрос на соединение двух списка документов «Заказы клиентов» с новым регистром сведений «Выполнение заявок»
  • В результате время отклика ушло в нормальные значения, а поиск по подобно снизился до 10-20 сек.
 
 вариант исправленный

 

Мероприятия:

  • Повышаем квалификацию разработчиков:
  • Посещаем конференции, 
  • Обсуждаем варианты реализации, 
  • Смотрим планируем на будущее (в базе будет много документов, а не 20-30 как на демонстрационном стенде)

 

12. Использование временных таблиц в динамических списках 

 

Постановка задачи:

  • Заказчик попросил внести изменения в форму выбора сделок. Требовалось добавить некоторый фильтр на сделки по партнеру, если в параметрах открытия передается ссылка на партнера.

Решение:

  •  В динамический список была добавлена временная таблица, которая формировала список сделок по партнеру при наличии отбора. (одно радует, что стиль "рваный запрос" не применялся)
 
 Пример быстрого кода решения поставленной задачи

 

Проблема:

  • Проблема быстродействия. Если с обычным списком форма открывалась в самом худшем случае до 10 секунд, то теперь могла зависать на 60-200 секунд
  • Лучше не использовать временные таблицы в динамических списках - это вам не отчеты
  • Не учтены рекомендации не использовать в условиях и соединениях конструкции "Выбор", что в свою очередь просаживало быстродействие при наложении РЛС с использованием шаблона "ПоНаборамЗначений", не очень хорошо в условиях использовать отрицание условия - "НЕ РАВНО" когда нет отбора по основному индексу (все условия наиболее эффективно работают при условии "РАВНО").

Решение:

  • Было решено исключить использование временной таблицы
  • Исключить использование конструкции "Выбор"
  • Получать список партнеров в привилегированном режиме и добавление их в запрос с помощью команды "ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка
 
 Пример хорошего решения решения

 

Мероприятия:

  • Код-ревью
  • Повышаем знания по основным механизмам БСП

 

13. Использование типа «Любая ссылка»

 

Что происходит:

  • Хотим заложить заранее возможность использования любого документа, справочника (проектирование звездолетов)
  • В задачах и бизнес-процессах – это предмет.

 

Проблема

  • Предприятие 1С для проверки RLS доступа по составному типу добавляет в проверку условия по всем входящим объектам.
  • Получаем «дикие» тормоза в списках. На практике наблюдал по замерам время отработки прорисовки списков задач и бизнес процессов с длительностью 30 и более минут.


Решение

  • Не используем тип «Любая ссылка»;
  • Выбираем типы, которые действительно используем;
  • В списках выведем заранее поля использующие данные из агрегирующего регистра по подобию «Реестр документов».

 

14. Создаем лишние роли

 

Что происходит

  • Заказчик разработать новую подсистему «Производственно-технологическая подсистема»;
  • Нужны новые справочники, документы, регистры.

Реализация

  • Добавили роли под каждый объект, на чтение и изменение: «Чтение справочника рабочие центры», «Добавление и изменение справочника рабочие центры», «Чтение справочника рабочие участки» и т.д.


Проблема

  • Лишние роли увеличивают сложность настройки прав;
  • Больше ролей применяется к пользователю и тем самым усложняются проверки при использовании RLS.


Решение

  • Создавать кумулятивные роли: «Добавление и изменение НСИ», «Чтение технологических данных», «Чтение производственных данных» и т.д.

 

15. Выбор из множества с плохой уникальностью

 

Что происходит:

  • Подбор серии при вводе по строке. Производится поиск существующих серий по данным регистра «Движение серий».

Проблема:

  • Сложный запрос на каждый ввод символа,
  • Используется «ПОДОБНО»,
  • Часто вводят 0 или 1 – это каждая вторая серия при их количестве более 100 тысяч – бессмысленная подсказка.
  • Используем разрешенные и добавляем ограничение RLS там где не нужно (похоже на своеобразный, но не удачный фильтр) - это дополнительно увеличивает время обработки (иногда 60 и более секунд)
 
 Описание проблемы

 

Решение:

  • Ограничить подсказку длиной 3 и более символов. 
  • Добавить фильтры по периоду.
  • Проиндексировать в регистре измерение «Серия» и/или установить его первым по порядку.
  • Использовать другие алгоритмы (регистр «живых» серий на складе)
  • Добавить привилегированный режим получения данных (сотрудник склада должен видеть все серии, что доступны ему)
 
 Вариант реализации

 

16. При записи или проведении выполняем сложные расчеты

 

Постановка задачи на разработку:

  • Заказчик попросил пересчитывать процент оплаты заказа клиента при расчетах по заказам.
  • Или рассчитать себестоимость - ФИФО по партиям.

Реализация:

  • Мы вставляем в процедуру проведения алгоритм для пересчета статусов по регистру сведений статусы расчетов.

Проблема:

  • Это длительная процедура (используется ФИФО, большой объема документов)
  • Блокировки (пользователи работают по тем же метаданным и аналитикам)
  • Кто-то запустил пере проведение набора документов - система уходит в offline

Решение:

  • Данный функционал выносится в отдельное фоновое задание. 
  • Данные для обновления расчетов при записи объектов добавляются в регистр сведений «К Расчету Процента Оплаты» или «К расчету себестоимости»
  • Отдельный регистр с расширенной аналитикой

 

17. Создаем узкое горлышко

 

Что происходит:

  • Переходим с одной версии на другую;
  • Переходим на новый механизм «Видов запасов», т.е. появляются устаревшие виды. Много позиций ходового товара попало в устаревшие виды запасов, т.е. много менеджеров "одномоментно" продают товар из разных подразделений.

Реализация:

  • Добавили новый регистр сведений «Устаревшие виды запасов с остатками» с одним измерением «Вид запасов»;
  • Добавили блокировку на этот регистр при списании товаров организаций;
 
 Поясняющий проблему код

 

Проблема:

  • Устаревшие виды запасов используются по множеству складов и организаций;
  • При активных продажах ходового устаревшего «вида» ловим блокировки;
  • Система «умирает» при пике пользователей (более 300-500 online) в некоторые моменты времени.

Решение

  • Так делать нельзя! 
  • Требуется переосмысление реализации подсистемы – добавление большего числа аналитик в измерения (Склад, Организация, ВидНоменклатуры, Номенклатура и т.п.), отложенная процедура списания устаревших товаров с остатками, другие мероприятия.

 

18. Используем com соединение

 

Что происходит

  • Для получения данных из внешней базы – кросс отчеты, сравнения документов и т.п.
  • Перенос данных.

Проблема:

  • Долгая процедура инициализации (подгружает всю конфигурацию)
  • Соответствие версий предприятия 1С для баз данных
  • Доступно только для Windows.

Решение:

  • Используем конвертацию, выгрузку/загрузку из файлов. 
  • Используем REST сервисы


II) Мероприятия по повышению качества продукта

 
1. Знание основ (БСП, правила разработки и др.)

 

Мы повышаем общий уровень разработчиков и команды в целом. В результате у нас будет:

  • Использовать готовые решения, а не изобретать велосипеды
  • Качество кода
  • Рефакторинг или уменьшение технического долга
  • Правильность решений, снижение количества ошибок и общая эффективность команды

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

 

2. Кейсы, база знаний

 

Знания и приемы, которые команда получает в процессе работы:

  • Можно создать вики ресурс
  • Использовать Confluence от JIRA
  • Excel в общей папке или еще что-то

 

3. Код-ревью

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

Иными словами - это проверка качества кода, прежде чем поместить ветку в мастер:

4. Архитект-ревью

 

Это обсуждение, согласование архитектуры решения прежде чем начать разработку:

  • Позволит избежать провалов в архитектуре
  • Обсуждение и выбор оптимального решение
  • Методика разработки «сверху вниз»

 

5. Тестирование

 

Это мощный, чудесный механизм, позволяющий выявить различные проблемы на различных этапах разработки:

  • Юнит-тесты
  • Сценарные тесты
  • Нагрузочное тестирование
  • Интеграционное тестирование

 

III) Инструменты


1. Конфигурации проверки качества кода «АПК»

Позволяет вам довольно успешно проверять код на наличие требованием стандартов (1С:Совместимо). В комплексе с данным инструментом можно развернуть и Sonar Cube с плагином для 1С проверки на «запах кода».

 

2. Конфигурация «Мониторинг производительности»

Позволяет автоматизировать и упростить часть задач решаемых задач по поиску проблемных мест в ваших рабочих базах и базах разработчиков.

Список долгих запросов:

 

Тексты ошибок:

  • Уже настроен, если вы выполнили пункт выше)
  • Показывает проблемные точки в работе программы
  • Есть интеллектуальная классификация существующих ошибок

Метрики состояния в готовом виде:

  • Позволяет анализировать наличие проблем производительности в реальном режиме времени
  • Есть возможность выполнять оперативные воздействия по результатам анализа
  • Интеллектуальное детектирование проблем и информирование через различные мессенджеры

 

3. SQL Профайлер (Microsoft SQL Profiler) или Microsoft SQL Management Studio Extended Events

Инструмент, позволяющий в реальном времени анализировать запросы, которые приходят из 1С. И думать над задачей оптимизации. В следующей статье мы рассмотрим пример работы с ним для части рассмотренных выше случаев, будет интересно, по крайней мере у нас в команде было очень интересно обсудить эту тему. Также рассмотрим в связке с уже бесплатным инструментом "SQL Sentry Plan Explorer".


4. Блокнот и RegExpr

Это, на мой взгляд, очень сложные мероприятие, когда под рукой есть готовые инструменты. Если вы только не являетесь специалистом 80-го уровня и на завтрак едите планы запросов.

 

Видео выступления

 
 Видео с конференции


Заключение

 

  • Учитесь и развивайтесь
  • Используйте автоматизацию
  • Используйте правильные подходы
  • Используйте мировые практики
  • Участвуйте в open source проектах

 

Ссылки на источники информации

 

Все ссылки и дополнительные соберем в одном месте.

  1. Фреймворк «Мониторинг производительности»
  2. Фреймворк «Тестирование 3.0»
  3. Как завести у себя в команде код-ревью. Отвечаем на вопросы
  4. По следам код-ревью
  5. Анализ проблем производительности по динамике мониторинга RAS 1C 
  6. 5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С
  7. Как работает серверный вызов в 1С
  8. 1C ITS

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1418 02.08.21 11:32 Сейчас в теме
Не очень хорошо в условиях использовать отрицание условия - "НЕ РАВНО"
Что-то новенькое... Можно пояснение?
3. ivanov660 3757 02.08.21 11:54 Сейчас в теме
(1)Поправил фразу в контексте примера. СКЛ хорошо работает с условиями на "РАВНО", по крайней мере должно быть обязательно основное условие с использованием равно, а вот уже дополнительные условия могут содержать другие операторы, в противном случае не будет эффективно использован индекс. Сходу на ИТС нашел только эту ссылку: Эффективные условия запросов
Далее планирую рассмотреть план запроса для части примеров, там мы сможем увидеть поведение сервера.
11. tolyan_ekb 199 02.08.21 13:25 Сейчас в теме
(3) Я тоже об этом читал, но проверить руки не дошли. Было бы здорово увидеть пример.
61. buganov 193 05.08.21 10:17 Сейчас в теме
(1) НЕ РАВНО в запросе равносильно непопаданию в индекс.
Попробуйте взять запрос на РАВНО и на НЕ РАВНО в условии и в плане с вероятностью 99.9% появится скан таблицы

https://ru.stackoverflow.com/questions/727401/sql-server-%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-sarg-%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82
Lucechiaro; Irwin; Aleskey_K; Merkalov; ivanov660; +5 Ответить
63. ivanov660 3757 05.08.21 10:23 Сейчас в теме
(61)Вроде так и было, в следующей статье мы посмотрим как меняются планы запросов при изменении.
67. buganov 193 05.08.21 11:52 Сейчас в теме
(63) Еще подкину идею для следующего выпуска:
поиск по массиву, когда Т.Поле В(&Список)
И список состоит из 10 элементов и когда из 1000, в плане прямо наглядно видно, как меняется план запроса.
И еще, как меняется план при разной селективности и что скан может вылезти даже при поиску по индексированному, но низкоселективному полю. Это к слову о проектировании регистров очень важную роль играет
65. ixijixi 1418 05.08.21 10:42 Сейчас в теме
(61) Окей, принято, хотя в ссылке немного про другое. А если вместо конструкции
Т.Поле <> &Поле
использовать
Не Т.Поле = &Поле
Тут уже не будет скана таблицы?
66. buganov 193 05.08.21 11:48 Сейчас в теме
(65) Если поле индексировано, то будет поиск по индексу
68. ixijixi 1418 05.08.21 12:18 Сейчас в теме
(66) Да, индексировано. Предположим, что это поле "Ссылка". Забавно получается. Если условие "=", то идет поиск по индексу. А если "<>" - то скан, хотя поле индексированное? Нелогично, не находите?
69. ivanov660 3757 05.08.21 13:01 Сейчас в теме
(68)Зачем запросу план и кто его выполняет? в статье хорошо описаны основные операторы получения данных. И особенности их работы - как раз варианты условий при которых они используются
70. buganov 193 05.08.21 14:15 Сейчас в теме
(68) Все очень логично. Представьте себе ситуацию, что на стоянке стоят различные автомобили, пусть ауди, которые размещены по модели. Если Вы ищете, например, А6 и для этого Вы сразу подойдете к месту, где они стоят. Но если же ищете любую не А6, то Вам придется перебрать всю стоянку. Что, в целом, логично. Тут так же. Индекс это всего то дерево, где слева меньшие, справа большие. И из примера выше, А3 будут стоять левее, а Q7 правее.
71. ixijixi 1418 06.08.21 11:45 Сейчас в теме
(70)
Но если же ищете любую не А6, то Вам придется перебрать всю стоянку.
Нет, я найду все А6, все остальные будут удовлетворять условию.
72. ivanov660 3757 06.08.21 12:42 Сейчас в теме
(71)не уверен, что так работает оптимизатор СКЛ. Даже если это так, то план запроса будет гораздо сложнее, чем проверка на равенство.
73. ixijixi 1418 06.08.21 12:55 Сейчас в теме
(72) Можете проверить? Сначала Т.Поле <> &Поле, затем Не Т.Поле = &Поле. Будет план отличаться?
74. ivanov660 3757 06.08.21 14:47 Сейчас в теме
(73)посмотрю, буду на выходных писать
75. buganov 193 09.08.21 09:53 Сейчас в теме
(71) перефразирую. Вам нужно выгнать все машины со стоянки, кроме А6. Вам же нужно почесть строки и вернуть клиенту. Теперь логика несколько поменялось, не так ли? И наиболее оптимально будет проверить всю стоянку и каждую машину на шильдик А6 и, если условие выполняется, выгнать автомобиль за пределы
76. ixijixi 1418 10.08.21 08:13 Сейчас в теме
(75) Выгнать != Найти, в контексте обсуждения это скорее удалить, но и операция тут другая
2. bulpi 209 02.08.21 11:53 Сейчас в теме
Плюс поставил.
Замечания :
1)Часть пунктов встречается во всех типовых конфигурациях :)
2)Неприязнь к com - соединению - это личное у автора. Не нужно возводить личную неприязнь в ранг общего правила.
5. ivanov660 3757 02.08.21 11:57 Сейчас в теме
(2)
1. Сами 1С-ники рекомендуют отказываться от Com.
2. Дополнительно попробуйте запустить частый обмен на одной базе через com - этак с 10-20 бухгалтерий ( 5 минут).
Aleskey_K; +1 Ответить
26. bulpi 209 02.08.21 16:21 Сейчас в теме
(5)

2. Ну запускаю. Ну работает. 1-2 секунды на соединение. Потом все так, как будто это и не com.
1.Понятно, что веб и http сервисы современнее и универсальнее. Но если специально для передачи 1 документа между двумя базами надо на сервере запускать IIS, то ну его на фиг. Тем более, что не всегда есть на это права. И не всегда сисадмин поведется на такое безобразие.
(5)
28. ivanov660 3757 02.08.21 16:47 Сейчас в теме
(26)Применять или не применять на ваше усмотрение и текущую ситуацию.
46. Yashazz 4476 03.08.21 11:21 Сейчас в теме
(5) Насчёт отказа от СОМ - а вы посмотрите типовые конфигурации, и сколько там его использований. От СОМ уже лет 15 "отказываются" )))
47. ivanov660 3757 03.08.21 11:48 Сейчас в теме
(46) Смотрел эволюцию УХ. В консолидации был только COM, в УХ появилось использование вебсервисов. Т.ч. работы в этом направлении идут, ожидать, что это будет сделано за 1-2 месяца - наивно.
50. Yashazz 4476 03.08.21 12:01 Сейчас в теме
(47) если вы ожидали 1-2 месяцев, то да, это было наивно) Не огорчайтесь, лет через 10, может, от СОМ и правда почти откажутся)
А пока что его пихают куда ни попадя, от пауз и регулярных выражений до запуска приложений.
4. maksa2005 370 02.08.21 11:57 Сейчас в теме
Код-ревью - Вам надо - Вы и делайте) Меня и так устраивает
sapervodichka; smit1c; +2 Ответить
6. muskul 02.08.21 12:10 Сейчас в теме
Это все конечно прекрасно, но та же типовая УПД в УТ работает ужасно долго, один запрос заполнение строки "к платежно-расчетному документу" делается значительное время что легче его просто убрать. вот такая вот оптимизация
7. BigClock 02.08.21 12:10 Сейчас в теме
Хотел бы спросить по пункту 2, секция "Пример кода с исправлением". В этом запросе сначала идет объединение двух ТЧ по всем документам (секция запроса "ИЗ"), а затем отбор по нужным документам (секция запроса "ГДЕ"). Насколько это оптимально по производительности? Возможно, лучше сначала сделать отбор по одной ТЧ и поместить его результаты во временную таблицу а затем уже левое соединение.
ВЫБРАТЬ
	ТаблицаВыходныеИзделия.Ссылка КАК Ссылка,
	ТаблицаВыходныеИзделия.КлючСвязиОперации КАК КлючСвязиОперации, 
	ТаблицаВыходныеИзделия.НомерСтроки КАК НомерСтроки,
	ТаблицаВыходныеИзделия.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ВыходныеИзделия
ИЗ
	Документ.МаршрутныйЛистПроизводства.ВыходныеИзделия КАК ТаблицаВыходныеИзделия
ГДЕ
	ТаблицаВыходныеИзделия.Ссылка В (&МассивСсылок)
;

ВЫБРАТЬ
	ВТ_ВыходныеИзделия.Ссылка КАК Ссылка,
	ВТ_ВыходныеИзделия.НомерСтроки КАК НомерСтроки,
	ВТ_ВыходныеИзделия.Номенклатура КАК Номенклатура,
	ВТ_ВыходныеИзделия.Номенклатура.Код КАК НоменклатураКод,
	ВТ_ВыходныеИзделия.Номенклатура.Артикул КАК НоменклатураАртикул,
	ТаблицаОпераций.Операция КАК Операция,
	ТаблицаОпераций.РабочийЦентр КАК РабочийЦентр,
	ТаблицаОпераций.ВидРабочегоЦентра КАК ВидРабочегоЦентра
ИЗ
	ВТ_ВыходныеИзделия КАК ВТ_ВыходныеИзделия
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.МаршрутныйЛистПроизводства.Операции КАК ТаблицаОпераций
		ПО ВТ_ВыходныеИзделия.Ссылка = ТаблицаОпераций.Ссылка
			И ВТ_ВыходныеИзделия.КлючСвязиОперации = ТаблицаОпераций.КлючСвязи
;

...
Показать
8. ivanov660 3757 02.08.21 12:22 Сейчас в теме
(7) Это пример кода из типовой конфигурации и акцент сделан на пропуске условия. Относительно оптимальности всего запроса, то надо смотреть в рамках всего контекста. На оператор "В", тоже есть ограничения. При большом количестве данных, сервер может преобразовывать в соединение.
9. ipoloskov 158 02.08.21 13:03 Сейчас в теме
"6. Отсутствие индекса по соединяемым полям в пакетных запросах"
На курсах по Эксперт по Технологическим вопросам сказали, что нет смысла индексировать временную таблицу, если там не 100.000 строк. Или в случае использования ее в параметрах виртуальной таблицы есть какой-то нюанс? Как-то непонятно - SQL уже знает, сколько строк в таблице ВТ_Склад. Как он может построить неоптимальный запрос?
dabu-dabu; +1 Ответить
10. ivanov660 3757 02.08.21 13:21 Сейчас в теме
(9)
1. Это пример из реальной ситуации. Пока не проиндексировали, был плавающий план запросов, который мы наблюдали. Почему СКЛ так делает ответа у меня нет (существенное влияние оказывает нагрузка на сервере).
2. Как они обосновали такое заявление? Почему 100 000, а не 90 000? Сказали верьте нам на слово? По факту они иногда что-то говорят, а потом меняют позицию.
51. Sapiens_bru 4 03.08.21 12:58 Сейчас в теме
(10) Это видимо были такие курсы. На хороших курсах говорят примерно так "Не нужно бездумно включать индексы в любых ситуациях. Смотрите на результаты без индексов(причем не в моменте а статистически) и включайте индексы там где они действительно нужны"
62. buganov 193 05.08.21 10:21 Сейчас в теме
(9) На курсе говорили про то, что не всегда индекс сработает и что нужно проверять на конкретных данных. Не всегда индекс отработает, но бывает, что очень помогает, хоть и такое случается редко, чаще всего на больших ВТ можно наоборот ухудшить ситуацию, ибо построить индекс тоже стоит ресурсов.
64. ivanov660 3757 05.08.21 10:25 Сейчас в теме
(62)На мой взгляд - вообще всегда надо работать с данными, по которым стоит фильтр (оперативные действия). Если вы конечно пересчитываете себестоимость, то это другая ситуация и решения уже должны быть архитектурные.
12. tolyan_ekb 199 02.08.21 13:28 Сейчас в теме
Спасибо за примеры с кодом и рассуждениями.
ivanov660; +1 Ответить
13. biimmap 921 02.08.21 13:29 Сейчас в теме
Если позволишь я тоже немного прикопаюсь к COM-соединению. Мой текущий проект на COM работает обмен между самописной базой Управленческие табеля и типовыми ЗУПами 2.5; 3.1 + Беларусь и Казахстан. Довольно удобно всё получилось. само чтение данных не так уж долго идёт. Учитывая 6000 сотрудников на выгрузку в самописную базу (именно чтение!) занимает 20 секунд, на выгрузку в ЗУП тоже меньше минуты секунд 50. Данных очень много в обе стороны гуляет. Назад вообще данные об отработанном времени, там главная таблица больше 100 тыс записей.

Ну и собственно клиент настоял на COM технологии. Я им предлагал веб сервис.

Также я успешно её использую сейчас при переводе 2.5 на 3.1. Проверяю и корректирую данные через COM обработками.
16. ivanov660 3757 02.08.21 14:04 Сейчас в теме
(13)Если устраивает пользуйтесь, но нас не устроило. И у меня на на опыте было много примеров, когда даже запуск фонового задания существенно влиял на быстродействие (пришлось минимизировать количество запусков). Это действительно нагруженные системы и задачи.
21. biimmap 921 02.08.21 14:22 Сейчас в теме
(16) у нас рег. задание 1 раз в час обновляет данные. всё норм. Видел бы ты как у них было))) Тебе материала хватило бы на 5 таких статей))) Процесс формирования табелей с нескольких суток превратился в 1,5 часа.
rabid_otter; +1 Ответить
14. Eremkin 02.08.21 13:50 Сейчас в теме
Добрый день. Спасибо за такую статью. Нужно больше таких статей )
Вопрос к примеру №9. По мне не самый удачный вариант решения такой проблемы, если в будущем необходимо выводить еще и значения других полей из табличных частей. Вот здесь как раз необходимо сделать архитект-ревью. Хорошим решением будет решение из примера №11. Плодить реквизиты в самом документе по мне не очень красиво.
18. ivanov660 3757 02.08.21 14:17 Сейчас в теме
(14)Согласен, иногда решение зависит от поставленной задачи и других моментов. Но это самый быстрый вариант.
15. Sashares 31 02.08.21 13:59 Сейчас в теме
В 9 в варианте быстрого решения условие "И (Р.НомерСтроки = 0)" - это не ошибка?
Реально условие по номеру строки 0?
17. ivanov660 3757 02.08.21 14:16 Сейчас в теме
(15)Опечатался, когда перебивал пример (НомерСтроки=1), но идея должна быть ясна.
19. Sashares 31 02.08.21 14:21 Сейчас в теме
20. MikhailDr 02.08.21 14:22 Сейчас в теме
Можно вопрос по шестому примеру. Я далек от эксперта, но удивлен что создание индекса в таблице с одной колонкой, а это ссылка привело к ускорению работы. Просто я всегда думал, что индексирование имеет смысл только когда количество колонок больше двух. Ведь на одной колонке индекс будет равен этой самой колонке, в чем тогда выигрыш времени?

Статья классная, таких сильно не хватает на сайте с конкретными примерами. Часть примеров использую в свой практики, не всегда к сожалению успеваю, но стараюсь.

Продолжение будет?
22. ivanov660 3757 02.08.21 14:26 Сейчас в теме
(20)Мы использовали кеш из Соответствия.
А про таблицы, если вы их используете не забывайте добавлять индексы особенно для составного ключа (в примере УХ, там действительно составной ключ).
23. Sashares 31 02.08.21 15:15 Сейчас в теме
(20) Индексирование имеет смысл если в таблице много строк и/или выполняется многократный поиск.
Количество колонок в этом случае не важно. Просто если колонка одна, то нет смысла использовать именно таблицу значений.
30. adamx 36 02.08.21 17:25 Сейчас в теме
(20)Индекс строится в виде бинарного дерева. На поиск элемента при наличии индекса уходит в 2^N раз меньше времени, чем при сканировании. Строится индекс за время A * N * О(log N) вроде. Поэтому все будет зависеть от количества записей в левой таблице и метода соединения их. (A - коэффициент сложности построения)
То есть например на 1000 записей в правой таблице надо А * 1000 * 10 = А* 10 000 операций на построение дерева + 10 операций на поиск нужного элемента.
И если в левой таблице 5 записей - то проще сканом перебрать и получится всего 5 000 операций (это максимум, если неуникальные записи). А если например 200 записей - то уже получится скорее всего выигрыш.
38. ivanov660 3757 03.08.21 08:29 Сейчас в теме
(20)Будет, ожидайте. Рассмотрим как это выглядит на плане запросов.
24. adamx 36 02.08.21 15:46 Сейчас в теме
10-й пункт нарушает седьмой. надо в условие оборотного регистра по регистратору добавлять условие.
И самое интересное - отборы не равнозначны? Это точно приемлемое решение в 10-м пункте?
25. ivanov660 3757 02.08.21 15:58 Сейчас в теме
(24)В 10м пункте используется именно соединение, а не отбор. т.е. мы к результирующим данным добавляем поля.
Не рекомендуется соединять между собой несколько виртуальных таблиц. Можно конечно вынести виртуальную таблицу во временную таблицу и потом соединять, но для динамического списка - это будет плохим решением.
29. adamx 36 02.08.21 17:01 Сейчас в теме
(25)
"ВЫБРАТЬ
|	Т.Регистратор КАК Регистратор,
|	РД.ДатаДокументаИБ КАК ДатаДок,
|	РД.НомерДокументаИБ КАК НомерДок,
|	РД.Комментарий КАК КомментарийДок,
|	Т.ЗаказКлиента КАК ЗаказКлиента,
|	Т.СуммаОборот КАК СуммаОборот
|ИЗ
|	РегистрНакопления.РасчетыСКлиентами.Обороты(, , Регистратор, ) КАК Т
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РД
|		ПО Т.Регистратор = РД.Ссылка
|			И (РД.ДополнительнаяЗапись = ЛОЖЬ)"
Показать


В этом запросе внутреннее соединение. Его нужно оставить.
Я имею ввиду конструкцию (РегистрНакопления.РасчетыСКлиентами.Обороты(, , Регистратор,
//****
Регистратор В (Выбрать Таб.Регистратор ИЗ РегистрСведений.РеестрДокументов КАК Таб ГДЕ (Таб .ДополнительнаяЗапись = ЛОЖЬ))
//*****
) )

Внизу условие И (РД.ДополнительнаяЗапись = ЛОЖЬ)" - надо убрать.
Тогда левая таблица будет с меньшим количеством строк (к ней уже применено это условие), а правая будет соединяться по хорошо проиндексированному полю с большой селективностью.

Это в теории ( :-). Как я понимаю рекомендации 1с.). На практике может оптимизатор запутаться именно в виртуальной таблице и зависнуть... :-)))
31. ivanov660 3757 02.08.21 17:36 Сейчас в теме
(29)В регистре расчеты с клиентами 10-15 типов документов, а в реестре документов больше 40, поэтому тут как минимум должен быть отбор по типам. Как это будет в реальности выглядеть тяжело представить, посмотреть план запроса.
Но пример немного о другом - о том, что через точку плохо выбирать.
27. SlavaKron 02.08.21 16:27 Сейчас в теме
В 9-м пункте, наверно, всё-таки ПередЗаписью.
32. adamx 36 02.08.21 17:55 Сейчас в теме
В 15 примере

Запрос.УстановитьПараметр("СтрокаПоиска", "%" + СокрЛП(Параметры.СтрокаПоиска) + "%");

Не видно использования функции ОбщегоНазначения.

Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт
	
	ИтоговаяСтрокаДляПоиска = СтрокаПоиска;
	ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "~", "~~");
	ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "%", "~%");
	ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "_", "~_");
	ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "[", "~[");
	ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "-", "~-");
	
	Возврат ИтоговаяСтрокаДляПоиска;
	
КонецФункции
Показать

Она экранирует спецсимволы. Ее желательно ведь использовать? Иначе например серию Р[5.7] не получится найти...
ivanov660; +1 Ответить
34. ivanov660 3757 02.08.21 20:20 Сейчас в теме
(32)Оптимизирован типовой код и именно рассматриваемая задача, ваше замечание действительно полезное.
33. sapervodichka 6230 02.08.21 19:37 Сейчас в теме
Хороший урок! (из последнего что сам столкнулся это лишние роли - профили в 1500 ролей кладут базы)
35. rabid_otter 134 02.08.21 22:03 Сейчас в теме
очевидные вещи написаны. адекватный программист это все и так знает.
DJ_Codebase; Yashazz; +2 Ответить
36. ivanov660 3757 02.08.21 22:11 Сейчас в теме
(35)Конструктив будет? Может поделитесь каким-нибудь полезным life hack?

Любой программист проходит стадию новичка, для них это полезно, сеньоры должны знать (но бывают исключения).
54. rabid_otter 134 03.08.21 14:18 Сейчас в теме
(36) хз, что добавить... обычная средняя статья для новичков.
по поводу использования НаКлиентеНаСервереБезКонтекста для избежания дублирования кода не соглашусь.
в типовых там еще передают всю форму, что нивелирует суффикс "БезКонтекста" по сути.
читайте макконнелла "совершенный код", применяйте и будет вам счастье.
советую еще почитать "Элегантные объекты. Java Edition", мне зашло.

по поводу того, что полезно: не громоздить кучи кода в клиентских формах.
потому что при передаче данных на сервер в форме, передается еще и весь код, большие блоки текста желательно инкапсулировать в клиентские общие модули.
это было единственным замечанием начальника отдела разработки в компании «Билайн» после ревью моего кода на собеседовании (которое я прошел, но не пошел в Билайн из-за более интересного предложения).
еще полезно держать кэш частых ссылок и служебных данных на форме, чтобы снизить частоту обращения к серверу.
58. rabid_otter 134 03.08.21 15:20 Сейчас в теме
(36) и еще - очень много любителей зачем-то гонять большие таблицы на сервер с клиента. это тоже замедляет работу системы. в статье не увидел таких очевидных вещей.
выбирать в запросах как можно меньше полей, ограничивать выборку - это тоже каждому должно быть очевидно.
если почитать всякие SOLID, KISS, YAGNI, дзен Питона например, все станет очень понятно. многие концепты можно применить и в 1С.
39. biimmap 921 03.08.21 09:10 Сейчас в теме
(35) и много ли в Вашем окружении адекватных? В какой они стране??? Я вот постоянно с г..нокодерами сталкиваюсь! Поэтому да вещи очевидные, но слишком много неадекватных...
ivanov660; +1 Ответить
41. rabid_otter 134 03.08.21 09:56 Сейчас в теме
(39) хз, всякое бывает, но то что я вижу в большинстве случаев - норм. сижу на самописках уже года 4.
37. Nigra 03.08.21 07:27 Сейчас в теме
Покоробило
"
Если НЕ ЕстьБлокировкаОбъекта(Контрагент)=Истина Тогда
//...
КонецЕсли;
"
первая заповедь программиста: "Не мудри!"
по-моему проще написать
Если ЕстьБлокировкаОбъекта(Контрагент)=Ложь Тогда
или (если функция возвращает булевы значения)
Если Не ЕстьБлокировкаОбъекта(Контрагент) Тогда
Aleskey_K; Albert_2008; +2 Ответить
40. Yashazz 4476 03.08.21 09:44 Сейчас в теме
Если честно, всё это уже обсуждалось столько раз, что аж на зубах скрипит. Уже больше 50 точно. Уже просто такой баян, что сил нет. Да, аккуратно и грамотно оформлено, но и только. Всё свалено в кучу, ошибки разнородные, разноплановые, просто собраны вместе по малопонятному принципу. И как всегда, оживлённые баталии в комментах, "а как же всё-таки правильно". Честное слово, надоело. Кроме как очередной раз плюсики собрать, ни малейшей пользы - пионэры как косячили, так и косячат, БСП как писали хрень, не лезущую в их же стандарты, так и пишут... Осточертело уже.

А если кому нужен конструктив, то вот, из личного опыта. Никогда не называйте переменные, реквизиты и параметры зарезервированными именами. Г-внокодеров из 1С-центральной поубивать надо за переменные с именем "запрос" или "строка". Потому что существует ряд случаев, когда это аукается большими и неочевидными проблемами. И я сейчас даже не про сом-соединение или работу в "Выполнить" или вызываемое из функций СКД. Я про глюки платформы. В своё время один реквизит формы, названный "ТабличныйДокумент", стоил нашей фирме проваленных сроков по проекту, сорванного контракта, кучи скандалов, судебного преследования и попадания лично РП на 5 лямов. Потому что 8.3.7 начинала ооочень своеобразно себя вести в работе с такой формой. Она спонтанно её переобновляла, кэшировала фрагментами какие-то данные, порой не отрабатывала расположение элементов или запоминание настроек, а в тонком клиенте падала.
Багов в платформе много, подобное ещё может всплыть где угодно. Желающие встать на грабли могут продолжать писать "Структура = Новый Структура".
Aggressorak; Cерый; cdiamond; VirDim; rabid_otter; +5 Ответить
42. ivanov660 3757 03.08.21 10:05 Сейчас в теме
(40)
1. Коллега, будьте любезны и приведите пару ссылок - статьи в которых приводится разбор примеров по аналогии статьи выше (не будьте голословны).
2. Про стиль кодирования мы с вами обсуждали в предыдущей статье, тут мы говорим совсем про другое.
3. Я выше уже писал, что сеньоры вашего уровня могут спокойно проходить мимо.
4. По факту я вижу как подобного рода статьи меняют качество программистов - на своей команде, при общении с коллегами на конференции, в общении в личном общении. Я рад этому.
5. Я лично всегда поощряю данные статьи и подобные начинания, а гнать хейт по крайней мере не профессионально.
Артано; +1 Ответить
43. Yashazz 4476 03.08.21 10:55 Сейчас в теме
1. Вы не хуже меня знаете, какой на ИС "хороший" поиск. Будет время - разыщу. Не будет - не взыщите. Но что таких полно - факт.
2. А я не про стиль, я про грубые и опасные ошибки, которые начинающий, беря за образец типовую конфу, может совершить.
3. Бывает, я тоже нахожу нечто ранее неизвестное, посему каждую такую публикацию читаю внимательно.
4. Рад за вас, а я вот - напротив, вижу уровень ниже плинтуса.
5. Я просто не понимаю, зачем пережёвывать одно и то же стопицотый раз. Какой смысл писать об этом, если раньше уже писали? Про ту же индексацию временных таблиц - ну уже нереально сколько раз говорено, зачем опять одно и то же? Вы можете вывести универсальный рецепт? Нет, он невозможен. Вы можете досконально расписать, как именно и в каких случаях ведут себя разные СУБД с разными настройками при индексации ВТ? Тоже нет. Всё, что можно сказать, это "ребята, держите ухо востро, вот список факторов, вот инструменты, дальше включайте мозг сами". Нахрена ещё обсасывать?
DJ_Codebase; Артано; +2 Ответить
48. ivanov660 3757 03.08.21 11:54 Сейчас в теме
(43) Согласно вашему комментарию 90% статей инфостарта можно удалить, т.к. уже все расписано было (по крайней мере на ИТС).
Gilev.Vyacheslav; +1 Ответить
49. Yashazz 4476 03.08.21 11:58 Сейчас в теме
(48) Ага! И вот тогда вместо кучи барахла мы бы получили легко отыскиваемые, дельные, нужные и порой уникальные материалы. Но увы.
59. Yashazz 4476 03.08.21 18:58 Сейчас в теме
(48) А согласно вашей позиции, я могу сейчас пойти и запостить повтор того, что, к примеру, год назад уже было. Так?)
44. Артано 731 03.08.21 10:58 Сейчас в теме
(40) Яков, статьи такие будут появляться ровно до тех пор пока косячить не перестанут. Я вот, тоже по этой теме периодически статьи пуляю и про ошибки года три назад писал. Потому что куда ни придёшь хоть бери любой модуль и выписывай новые примеры =)
45. Yashazz 4476 03.08.21 11:09 Сейчас в теме
(44) В этом плане интересно бы исследовать, насколько появление принципиально новых инструментов (система взаимодействия, "кагбэ асинхронность", базы-копии и базы-для-отчётов) влияют на появление новых ошибок и, главное, новых категорий ошибок.
Ошибка ведь что? Когнитивно-перцептивно-психологическое явление, помноженное на технологию. Вот это бы раскопать - повторяются ли , "проецируются" ли старые классические ошибки на новый инструмент, и что может породить качественно иной класс ошибок.
56. Артано 731 03.08.21 14:36 Сейчас в теме
(45) В своих исследованиях приближался к этому вопросу, но не углублялся, копая там, где было достаточно для понимания процессов. Если в общем, то ошибки повторяются всегда. Тут проблема именно в генном коде, а не программном. Просто часть ошибок могут быть формализованы и их легко идентифицировать, иные же не видны пока не наступишь на хорошо спрятанные грабли.
Про принципиально новые классы ошибок, затрудняюсь ответить. Если только ошибки связанные строго с использованием некого нового инструмента, но опять же, причины этих ошибок будут скорее всего одни и те же.
52. savostin.alex 80 03.08.21 13:24 Сейчас в теме
"При записи документа выбираем для заполнения первого получателя" - наверное, перед записью?
53. AntonProgma 41 03.08.21 13:57 Сейчас в теме
В 9-ом примере в реквизит шапки xyz_КонтрагентДляСписка попадает получатель из первой строки без проверки, что в остальных строках. По условию задачи в таблице "90% с одним или одинаковым получателем". А в 10% разные получатели? В смысле, "хорошее решение" - это оптимизация вывода данных, которые в 10% ошибочны? Я 5 раз перечитал и не могу поверить.
55. lobonosov@mail.ru 03.08.21 14:31 Сейчас в теме
По 6 пункту: проблема не в том что нет индекса в ВТ, а в том что выбираются записи без отбора на период. Создавать ВТ и помещать туда почти весь справочник склады не вижу смысла. Достаточно условия НЕ Склад.ПометкаУдаления.
По пункту 14: Если нужна тонкая настройка доступа, то лучше как раз использовать 2-й подход: создавать роли-функции. Все типовые конфигурации как раз придерживаются данного подхода.
Больше ролей применяется к пользователю и тем самым усложняются проверки при использовании RLS - это происходит только в том случае, если на 1 объект конфигурации назначено несколько ролей с разным текстом RLS. И при 2-м подходе найти ошибку гораздо быстрее, достаточно проверить 2 роли: одну на добавление и одну на чтение.
57. mikl79 116 03.08.21 14:43 Сейчас в теме
60. RustRR 04.08.21 12:16 Сейчас в теме
13. Использование типа «Любая ссылка»
Решение: 
Не используем тип «Любая ссылка»;

*картинка Okay*
77. Hatson 511 08.09.21 11:54 Сейчас в теме
Пункт 9. Необходимо использовать обработчик ПередЗаписью(Отказ), а не ПриЗаписи(Отказ)
Оставьте свое сообщение

См. также

SonarQube: про объемы, ветки, покрытие кода и интеграцию с Gitlab

DevOps и автоматизация разработки Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Опыт применения SonarQube в нескольких командах. Плюс некоторые тонкости: уменьшение объемов базы SQ, интеграция, покрытие кода.

26.02.2023    1815    kraynev-navi    10    

41

Delayed durability поможет вашему ORM увеличить производительность на 50% и более, если Вы только будете использовать …

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

ORM (Relational Mapping) используется во многих языках программирования, в том числе и в 1С. Однако реализация высоконагруженных решений, приводит к мысли, что разработчики ORM не учитывали ее влияния на производительность СУБД. Такая ситуация и в 1С, и ORM на Java, и наверняка в других ORM. В предыдущих частях показана глубина проблемы. В этой части предложено решение со стороны СУБД (MS SQL, Oracle, Postgres).

13.02.2023    477    1CUnlimited    0    

9

Зачем и как читать чужой код? Какой результат ожидаем получить? Основные подходы

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Данная статья является кратким содержанием статей цикла "Как читать чужой код". Цель такой публикации: создать чек-лист различных подходов для чтения непонятного кода. Более подробно каждый из методов можно прочитать в исходной статьей. Последовательность изложения материала полностью совпадает с исходными статьями, и разделена на 4 части.

06.02.2023    2396    biimmap    9    

23

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Как проверять код на языке 1С с помощью BSL Language Server

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Некоторые разработчики на платформе 1С не проверяют свой код ни на соответствие стандартам 1С, ни на самые распространённые ошибки кодирования. И если раньше они могли оправдываться отсутствием инструментов для этого, то с появлением BSL Language Server оправданий больше нет.

13.01.2023    2724    aleksei_adamov    10    

44

Без комментариев!

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

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

05.01.2023    4995    ardn    161    

37

Избавиться от скана таблицы в плане запроса

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

Для запросов, содержащих "LIKE %СтрокаПоиска%". Справедливо для MS SQL и Postgres.

20.12.2022    2775    vasilev2015    31    

23

Концепция ORM как двигатель прогресса - выдержит ли ее ваша СУБД?

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

ORM (Object-Relational Mapping) используется во многих языках программирования, в том числе и в 1С. Однако реализация высоконагруженных решений приводит к мысли что разработчики ORM не учитывали ее влияния на производительность СУБД. Такая ситуация и в 1С, и ORM на Java, и наверняка в других ORM. Причины приоткрывает данная статья.

16.12.2022    1134    1CUnlimited    5    

8

Правила работы с транзакциями 1С

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

Список правил при работе с транзакциями из BSL Language Server и SonarQube 1C (BSL) Plugin. Переработка и осмысление материала.

01.12.2022    3950    kuzyara    39    

78

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Как избавиться от большого количества комментариев в коде с использованием EDT + Git

Рефакторинг и качество кода DevOps и автоматизация разработки Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Публикация освещает вопрос улучшения качества и читабельности кода путем отказа от излишних комментариев. Рассматривается пример из опыта работы команды разработки на EDT + Git. Команда работает в EDT меньше года. Конфигурация сильно доработана и не обновляется типовыми релизами.

15.11.2022    978    shastin87    5    

9

Нагрузочное тестирование в 1С:ERP

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

Для того чтобы еще до внедрения информационной системы убедиться, что целевая система справится с ожидаемой нагрузкой, требуется провести нагрузочное тестирование. О том какие инструменты и методики помогут организовать подобный проект при внедрении 1С:ERP, и о том, какие неожиданные факторы могут влиять на производительность системы я и хотел бы рассказать в данной статье.

02.11.2022    3481    Tavalik    23    

32

Тормоза при записи номенклатуры в ERP 2.5.8.287

HighLoad оптимизация Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Обратил внимание на медленную работу при пакетной записи элементов номенклатуры.

25.10.2022    725    m191    6    

5

Партицированная дисциплина программиста в 1С

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

Почему при росте объемов базы 1С все становится медленней, даже если все индексы правильно сделаны? В статье на простом примере с регистром сведений показана причина и как этого избежать. Кто виноват больше, 1С или MS SQL решать Вам :)

20.09.2022    1825    1CUnlimited    2    

6

Видеокурс-практикум: как подготовить и написать ТЗ, ЗНР, ЧТЗ. Промо

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

3 500 рублей

Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов

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

От быстродействия запросов, которые обращаются к крупным таблицам, напрямую зависит скорость работы всей базы в целом. Артем Кузнецов, тимлид команды 1С в компании ООО «Финтех решения» на конференции Infostart Event 2021 Moscow Premiere рассказал, как оптимизировать производительность при поддержке больших систем. Показал, на что следует обращать внимание при код-ревью запросов, как оптимизировать RLS, виртуальные таблицы, индексы и условия, и как доработка архитектуры решения может ускорить работу базы.

29.08.2022    5837    Chernazem    44    

105

Workaround me в 1С/MS SQL и не только, системный подход к созданию костылей

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

Workaround свидетельствует о невозможности решить проблему "правильным путем" и вызывает чувство стыда. Но практика показывает, что способность решать проблемы через workaround является порой единственным способом решить проблему в разумное время. А победителей, как говорят, не судят, так почему бы не создавать workaround по системе?

15.08.2022    1226    1CUnlimited    0    

6

Ускорим проведение в 1С:Управление холдингом

HighLoad оптимизация Запросы Платформа 1С v8.3 1С:Управление холдингом Бесплатно (free)

В 1С:Управление холдингом есть "нехороший" запрос, который съедает значительную часть времени проведения документов. Если его подправить, то проведение заметно ускорится.

10.08.2022    5005    sapervodichka    60    

73

Миссия невыполнима. Общие реквизиты разделители против временных таблиц

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

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

05.08.2022    1624    1CUnlimited    0    

14

Методика похудения для 1С – 100%

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

Удаление архивных данных из базы - это непростая задача как для 1С, так и для любой базы данных. В статье изложены различные способы решения задачи, включая самый эффективный для 1С.

28.07.2022    5567    1CUnlimited    37    

43

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.

Экспертный кейс. История расследования одного небыстрого закрытия месяца в 1C:ERP. Пример неочевидных путей расследования в виде детективной истории

HighLoad оптимизация Механизмы платформы 1С Запросы Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

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

11.07.2022    5350    it-expertise    27    

56

Рефакторинг и реинжиниринг в повседневной практике

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В этой статье будут затронуты многие темы. Использование WS ссылок, HTTP запросов, асинхронных запросов к внешним сервисам, работа с XML, методики интеграции. Но лишь попутно. Для наглядности. На технических вопросах реализации останавливаться не буду. Все примеры работы с этими объектами есть в коде. Файлы обработки и расширения доступны. Главная цель - рассмотреть рефакторинг и реинжиниринг как инструменты для достижения вполне конкретных практических целей.

20.06.2022    1135    user1374747    0    

6

Производительный режим работы RLS

HighLoad оптимизация Роли и права Платформа 1С v8.3 8.3.14 8.3.6 8.3.8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Бесплатно (free)

Функционал подсистемы УправлениеДоступом позволяет работать с RLS в двух режимах: стандартном и производительном. Каждый из режимов имеет свои преимущества и недостатки относительно другого. Основные из них будут рассмотрены в данном материале.

14.06.2022    7246    Neti    7    

86

Модульность в 1С – как следовать принципам DRY в реалиях 1С: Предприятие 8.3

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Принцип DRY – Don't repeat yourself (не повторяйся) – один из классических принципов программирования. Краеугольным камнем реализации этого принципа является модульная архитектура, которую можно реализовать в 1С с помощью расширений. Но экосистемы модулей общего назначения, сравнимой с существующими в других языках, в 1С пока что нет. О том, как спроектировать архитектуру таких модулей и управлять ими с помощью менеджера пакетов, на митапе «Путь к идеальному коду» рассказал технический директор компании «А1» Арсений Геращенко.

03.06.2022    2900    Enigma    3    

22

Распознавание и загрузка документов в 1С Промо

Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд). Точность распознания до 98%.

от 11 рублей

Красота разработки в 1С, или художественная верстка кода

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рекомендации по верстке и организации кода в 1С, которые я вывел для себя. P.S. Нет, это не про комментарии и номера версий.

02.06.2022    6700    TimofeySin    67    

63

Любовь. Быстродействие. 1С

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

Несколько эпизодов на общую тему, собранные за последние полгода. Первый вариант, будет исправляться и дополняться.

26.05.2022    3938    vasilev2015    20    

34

Оптимизация высоконагруженных конфигураций: история маленькой победы, или советы тем, кто столкнулся с проблемой впервые и не знает, что делать

HighLoad оптимизация Администрирование СУБД Платформа 1С v8.3 8.3.14 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Пост будет больше интересен руководителям отделов ИТ сопровождения или проектным менеджерам, перед которыми будет стоять задача решения проблемы деградации производительности баз данных 1С. Пост для тех, кому эта тема нова, нет особого опыта, и с ходу непонятно, с чего начать.

24.05.2022    3993    avolsed    15    

33

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

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

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

19.05.2022    2235    it-expertise    19    

23

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Как выжить, если у тебя в базе 1С 50+ расширений

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Расширения – это простой способ делать доработки на лету. Но администрировать большое количество расширений и не допустить бардак – очень сложно. О том, как выжить в такой ситуации, реализовать управление доработками и установкой актуальных версий расширений, на митапе «Путь к идеальному коду» рассказал Юрий Былинкин – архитектор 1С в компании Аскона.

16.05.2022    5727    ardn    44    

53

Тестирование - игровое моделирование

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

Мы рассмотрим подход к тестированию с применением элементов искусственного интеллекта

25.04.2022    1526    ivanov660    0    

15

Несколько слов про платформенный механизм оптимизации RLS

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

Смотрим, как работает платформенный механизм оптимизации RLS, сравним поведение на разных СУБД MS SQL, Postgres 11,13,14.

07.04.2022    3651    ivanov660    23    

69

Почему после обновления Бухгалтерии в марте 2022 года отчеты стали такими медленными

HighLoad оптимизация Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

Статья раскрывает причину, почему время формирования отчетов после обновления Бухгалтерии в марте 2022 сильно увеличилось. И рассказывает, как можно исправить ситуацию.

05.04.2022    5134    DBOdin_Lab    33    

29

Экспертный кейс. Расследование фатального замедления времени расчета себестоимости в 1С:ERP 2

HighLoad оптимизация Механизмы типовых конфигураций Запросы Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

При выполнении нагрузочного тестирования информационной системы на базе 1С:ERP для одного из клиентов с целью оценки возможности миграции системы на PostgreSQL и Astra Linux мы столкнулись с неприемлемым увеличением времени выполнения расчета себестоимости. Строго говоря, сценарий тестирования закрытия месяца не был выполнен вообще – он не укладывался в таймаут выполнения теста, 24 часа. По прошествии 18 часов всё ещё шло выполнение операции «Распределение затрат и расчет себестоимости». Более 16 часов выполнялся подэтап “Расчет партий и себестоимости. Этап. Расчет себестоимости: РассчитатьСтоимость”. Всё это время выполнялся запрос, который в текущей инфраструктуре клиента (СУБД MS SQL Server) выполняется чуть более 3 минут на аналогичных данных.

25.03.2022    5509    it-expertise    92    

66

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Экспертный кейс. Расследование деградации производительности системы. Проведение документа “Поступление товаров и услуг” (1С:ERP 2)

Механизмы платформы 1С Запросы HighLoad оптимизация Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В ходе проведения нагрузочного тестирования одним из наших клиентов была выявлена сильная деградация производительности системы в целом и, в частности, выполнения ключевой операции “Проведение документа поступление товаров и услуг” в течение выполнения теста. Согласно данным подсистемы БСП “Оценка производительности”, время выполнения ключевой операции “Проведение документа поступление товаров и услуг” возрастало в процессе тестирования с 15-20 секунд в начале тестирования до 150-200 секунд в его финале.

02.03.2022    4000    it-expertise    48    

30

Пример пошагового решения проблемы производительности на базе Postgres SQL с картинками

HighLoad оптимизация Технологический журнал Платформа 1С v8.3 Бесплатно (free)

Рассмотрим по шагам процесс обнаружения, анализа и решения проблемы производительности на примере базы ERP, сравним отличия в работе Postgres и MS SQL.

28.02.2022    12555    ivanov660    18    

144

Ускорение работы конфигуратора 1С с большими прикладными решениями

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

Ускорение работы 1С конфигуратора с большими прикладными решениями путем размещения системных каталогов 1С на RAM диске.

13.01.2022    7167    stg2005    105    

40

Ошибка производительности при проведении этапа 2.2 в ERP 2.4 и ERP 2.5

HighLoad оптимизация Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Хочется поделиться одним подводным камнем, с которым могут встретиться другие пользователи ERP. Искал решение в интернете, но ничего похожего не нашел. Поэтому решил создать эту тему.

06.12.2021    1747    Rokky78    6    

12

Про простой и понятный код

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Внимание! Данная публикация с большой долей вероятности не добавит ничего нового к Вашим знаниям и Вашему опыту, поэтому если Вы читаете Инфостарт исключительно для целей "прокачки" своих навыков, не тратьте на её чтение своё время и перейдите сразу к следующей!

03.12.2021    5367    q_i    161    

71