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

Публикация № 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. the1 945 02.08.21 11:32 Сейчас в теме
Не очень хорошо в условиях использовать отрицание условия - "НЕ РАВНО"
Что-то новенькое... Можно пояснение?
3. ivanov660 2879 02.08.21 11:54 Сейчас в теме
(1)Поправил фразу в контексте примера. СКЛ хорошо работает с условиями на "РАВНО", по крайней мере должно быть обязательно основное условие с использованием равно, а вот уже дополнительные условия могут содержать другие операторы, в противном случае не будет эффективно использован индекс. Сходу на ИТС нашел только эту ссылку: Эффективные условия запросов
Далее планирую рассмотреть план запроса для части примеров, там мы сможем увидеть поведение сервера.
11. tolyan_ekb 196 02.08.21 13:25 Сейчас в теме
(3) Я тоже об этом читал, но проверить руки не дошли. Было бы здорово увидеть пример.
61. buganov 184 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
Aleskey_K; Merkalov; ivanov660; +3 Ответить
63. ivanov660 2879 05.08.21 10:23 Сейчас в теме
(61)Вроде так и было, в следующей статье мы посмотрим как меняются планы запросов при изменении.
67. buganov 184 05.08.21 11:52 Сейчас в теме
(63) Еще подкину идею для следующего выпуска:
поиск по массиву, когда Т.Поле В(&Список)
И список состоит из 10 элементов и когда из 1000, в плане прямо наглядно видно, как меняется план запроса.
И еще, как меняется план при разной селективности и что скан может вылезти даже при поиску по индексированному, но низкоселективному полю. Это к слову о проектировании регистров очень важную роль играет
65. the1 945 05.08.21 10:42 Сейчас в теме
(61) Окей, принято, хотя в ссылке немного про другое. А если вместо конструкции
Т.Поле <> &Поле
использовать
Не Т.Поле = &Поле
Тут уже не будет скана таблицы?
66. buganov 184 05.08.21 11:48 Сейчас в теме
(65) Если поле индексировано, то будет поиск по индексу
68. the1 945 05.08.21 12:18 Сейчас в теме
(66) Да, индексировано. Предположим, что это поле "Ссылка". Забавно получается. Если условие "=", то идет поиск по индексу. А если "<>" - то скан, хотя поле индексированное? Нелогично, не находите?
69. ivanov660 2879 05.08.21 13:01 Сейчас в теме
(68)Зачем запросу план и кто его выполняет? в статье хорошо описаны основные операторы получения данных. И особенности их работы - как раз варианты условий при которых они используются
70. buganov 184 05.08.21 14:15 Сейчас в теме
(68) Все очень логично. Представьте себе ситуацию, что на стоянке стоят различные автомобили, пусть ауди, которые размещены по модели. Если Вы ищете, например, А6 и для этого Вы сразу подойдете к месту, где они стоят. Но если же ищете любую не А6, то Вам придется перебрать всю стоянку. Что, в целом, логично. Тут так же. Индекс это всего то дерево, где слева меньшие, справа большие. И из примера выше, А3 будут стоять левее, а Q7 правее.
71. the1 945 06.08.21 11:45 Сейчас в теме
(70)
Но если же ищете любую не А6, то Вам придется перебрать всю стоянку.
Нет, я найду все А6, все остальные будут удовлетворять условию.
72. ivanov660 2879 06.08.21 12:42 Сейчас в теме
(71)не уверен, что так работает оптимизатор СКЛ. Даже если это так, то план запроса будет гораздо сложнее, чем проверка на равенство.
73. the1 945 06.08.21 12:55 Сейчас в теме
(72) Можете проверить? Сначала Т.Поле <> &Поле, затем Не Т.Поле = &Поле. Будет план отличаться?
74. ivanov660 2879 06.08.21 14:47 Сейчас в теме
(73)посмотрю, буду на выходных писать
75. buganov 184 09.08.21 09:53 Сейчас в теме
(71) перефразирую. Вам нужно выгнать все машины со стоянки, кроме А6. Вам же нужно почесть строки и вернуть клиенту. Теперь логика несколько поменялось, не так ли? И наиболее оптимально будет проверить всю стоянку и каждую машину на шильдик А6 и, если условие выполняется, выгнать автомобиль за пределы
76. the1 945 10.08.21 08:13 Сейчас в теме
(75) Выгнать != Найти, в контексте обсуждения это скорее удалить, но и операция тут другая
2. bulpi 188 02.08.21 11:53 Сейчас в теме
Плюс поставил.
Замечания :
1)Часть пунктов встречается во всех типовых конфигурациях :)
2)Неприязнь к com - соединению - это личное у автора. Не нужно возводить личную неприязнь в ранг общего правила.
5. ivanov660 2879 02.08.21 11:57 Сейчас в теме
(2)
1. Сами 1С-ники рекомендуют отказываться от Com.
2. Дополнительно попробуйте запустить частый обмен на одной базе через com - этак с 10-20 бухгалтерий ( 5 минут).
Aleskey_K; +1 Ответить
26. bulpi 188 02.08.21 16:21 Сейчас в теме
(5)

2. Ну запускаю. Ну работает. 1-2 секунды на соединение. Потом все так, как будто это и не com.
1.Понятно, что веб и http сервисы современнее и универсальнее. Но если специально для передачи 1 документа между двумя базами надо на сервере запускать IIS, то ну его на фиг. Тем более, что не всегда есть на это права. И не всегда сисадмин поведется на такое безобразие.
(5)
28. ivanov660 2879 02.08.21 16:47 Сейчас в теме
(26)Применять или не применять на ваше усмотрение и текущую ситуацию.
46. Yashazz 4117 03.08.21 11:21 Сейчас в теме
(5) Насчёт отказа от СОМ - а вы посмотрите типовые конфигурации, и сколько там его использований. От СОМ уже лет 15 "отказываются" )))
47. ivanov660 2879 03.08.21 11:48 Сейчас в теме
(46) Смотрел эволюцию УХ. В консолидации был только COM, в УХ появилось использование вебсервисов. Т.ч. работы в этом направлении идут, ожидать, что это будет сделано за 1-2 месяца - наивно.
50. Yashazz 4117 03.08.21 12:01 Сейчас в теме
(47) если вы ожидали 1-2 месяцев, то да, это было наивно) Не огорчайтесь, лет через 10, может, от СОМ и правда почти откажутся)
А пока что его пихают куда ни попадя, от пауз и регулярных выражений до запуска приложений.
4. maksa2005 355 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 2879 02.08.21 12:22 Сейчас в теме
(7) Это пример кода из типовой конфигурации и акцент сделан на пропуске условия. Относительно оптимальности всего запроса, то надо смотреть в рамках всего контекста. На оператор "В", тоже есть ограничения. При большом количестве данных, сервер может преобразовывать в соединение.
9. ipoloskov 149 02.08.21 13:03 Сейчас в теме
"6. Отсутствие индекса по соединяемым полям в пакетных запросах"
На курсах по Эксперт по Технологическим вопросам сказали, что нет смысла индексировать временную таблицу, если там не 100.000 строк. Или в случае использования ее в параметрах виртуальной таблицы есть какой-то нюанс? Как-то непонятно - SQL уже знает, сколько строк в таблице ВТ_Склад. Как он может построить неоптимальный запрос?
dabu-dabu; +1 Ответить
10. ivanov660 2879 02.08.21 13:21 Сейчас в теме
(9)
1. Это пример из реальной ситуации. Пока не проиндексировали, был плавающий план запросов, который мы наблюдали. Почему СКЛ так делает ответа у меня нет (существенное влияние оказывает нагрузка на сервере).
2. Как они обосновали такое заявление? Почему 100 000, а не 90 000? Сказали верьте нам на слово? По факту они иногда что-то говорят, а потом меняют позицию.
51. Sapiens_bru 4 03.08.21 12:58 Сейчас в теме
(10) Это видимо были такие курсы. На хороших курсах говорят примерно так "Не нужно бездумно включать индексы в любых ситуациях. Смотрите на результаты без индексов(причем не в моменте а статистически) и включайте индексы там где они действительно нужны"
62. buganov 184 05.08.21 10:21 Сейчас в теме
(9) На курсе говорили про то, что не всегда индекс сработает и что нужно проверять на конкретных данных. Не всегда индекс отработает, но бывает, что очень помогает, хоть и такое случается редко, чаще всего на больших ВТ можно наоборот ухудшить ситуацию, ибо построить индекс тоже стоит ресурсов.
64. ivanov660 2879 05.08.21 10:25 Сейчас в теме
(62)На мой взгляд - вообще всегда надо работать с данными, по которым стоит фильтр (оперативные действия). Если вы конечно пересчитываете себестоимость, то это другая ситуация и решения уже должны быть архитектурные.
12. tolyan_ekb 196 02.08.21 13:28 Сейчас в теме
Спасибо за примеры с кодом и рассуждениями.
ivanov660; +1 Ответить
13. biimmap 317 02.08.21 13:29 Сейчас в теме
Если позволишь я тоже немного прикопаюсь к COM-соединению. Мой текущий проект на COM работает обмен между самописной базой Управленческие табеля и типовыми ЗУПами 2.5; 3.1 + Беларусь и Казахстан. Довольно удобно всё получилось. само чтение данных не так уж долго идёт. Учитывая 6000 сотрудников на выгрузку в самописную базу (именно чтение!) занимает 20 секунд, на выгрузку в ЗУП тоже меньше минуты секунд 50. Данных очень много в обе стороны гуляет. Назад вообще данные об отработанном времени, там главная таблица больше 100 тыс записей.

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

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

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

Продолжение будет?
22. ivanov660 2879 02.08.21 14:26 Сейчас в теме
(20)Мы использовали кеш из Соответствия.
А про таблицы, если вы их используете не забывайте добавлять индексы особенно для составного ключа (в примере УХ, там действительно составной ключ).
23. Sashares 19 02.08.21 15:15 Сейчас в теме
(20) Индексирование имеет смысл если в таблице много строк и/или выполняется многократный поиск.
Количество колонок в этом случае не важно. Просто если колонка одна, то нет смысла использовать именно таблицу значений.
30. adamx 35 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 2879 03.08.21 08:29 Сейчас в теме
(20)Будет, ожидайте. Рассмотрим как это выглядит на плане запросов.
24. adamx 35 02.08.21 15:46 Сейчас в теме
10-й пункт нарушает седьмой. надо в условие оборотного регистра по регистратору добавлять условие.
И самое интересное - отборы не равнозначны? Это точно приемлемое решение в 10-м пункте?
25. ivanov660 2879 02.08.21 15:58 Сейчас в теме
(24)В 10м пункте используется именно соединение, а не отбор. т.е. мы к результирующим данным добавляем поля.
Не рекомендуется соединять между собой несколько виртуальных таблиц. Можно конечно вынести виртуальную таблицу во временную таблицу и потом соединять, но для динамического списка - это будет плохим решением.
29. adamx 35 02.08.21 17:01 Сейчас в теме
(25)
"ВЫБРАТЬ
|	Т.Регистратор КАК Регистратор,
|	РД.ДатаДокументаИБ КАК ДатаДок,
|	РД.НомерДокументаИБ КАК НомерДок,
|	РД.Комментарий КАК КомментарийДок,
|	Т.ЗаказКлиента КАК ЗаказКлиента,
|	Т.СуммаОборот КАК СуммаОборот
|ИЗ
|	РегистрНакопления.РасчетыСКлиентами.Обороты(, , Регистратор, ) КАК Т
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РД
|		ПО Т.Регистратор = РД.Ссылка
|			И (РД.ДополнительнаяЗапись = ЛОЖЬ)"
Показать


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

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

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

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

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

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

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

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

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

А если кому нужен конструктив, то вот, из личного опыта. Никогда не называйте переменные, реквизиты и параметры зарезервированными именами. Г-внокодеров из 1С-центральной поубивать надо за переменные с именем "запрос" или "строка". Потому что существует ряд случаев, когда это аукается большими и неочевидными проблемами. И я сейчас даже не про сом-соединение или работу в "Выполнить" или вызываемое из функций СКД. Я про глюки платформы. В своё время один реквизит формы, названный "ТабличныйДокумент", стоил нашей фирме проваленных сроков по проекту, сорванного контракта, кучи скандалов, судебного преследования и попадания лично РП на 5 лямов. Потому что 8.3.7 начинала ооочень своеобразно себя вести в работе с такой формой. Она спонтанно её переобновляла, кэшировала фрагментами какие-то данные, порой не отрабатывала расположение элементов или запоминание настроек, а в тонком клиенте падала.
Багов в платформе много, подобное ещё может всплыть где угодно. Желающие встать на грабли могут продолжать писать "Структура = Новый Структура".
Aggressorak; Cерый; cdiamond; VirDim; oleganatolievich; +5 Ответить
42. ivanov660 2879 03.08.21 10:05 Сейчас в теме
(40)
1. Коллега, будьте любезны и приведите пару ссылок - статьи в которых приводится разбор примеров по аналогии статьи выше (не будьте голословны).
2. Про стиль кодирования мы с вами обсуждали в предыдущей статье, тут мы говорим совсем про другое.
3. Я выше уже писал, что сеньоры вашего уровня могут спокойно проходить мимо.
4. По факту я вижу как подобного рода статьи меняют качество программистов - на своей команде, при общении с коллегами на конференции, в общении в личном общении. Я рад этому.
5. Я лично всегда поощряю данные статьи и подобные начинания, а гнать хейт по крайней мере не профессионально.
Артано; +1 Ответить
43. Yashazz 4117 03.08.21 10:55 Сейчас в теме
1. Вы не хуже меня знаете, какой на ИС "хороший" поиск. Будет время - разыщу. Не будет - не взыщите. Но что таких полно - факт.
2. А я не про стиль, я про грубые и опасные ошибки, которые начинающий, беря за образец типовую конфу, может совершить.
3. Бывает, я тоже нахожу нечто ранее неизвестное, посему каждую такую публикацию читаю внимательно.
4. Рад за вас, а я вот - напротив, вижу уровень ниже плинтуса.
5. Я просто не понимаю, зачем пережёвывать одно и то же стопицотый раз. Какой смысл писать об этом, если раньше уже писали? Про ту же индексацию временных таблиц - ну уже нереально сколько раз говорено, зачем опять одно и то же? Вы можете вывести универсальный рецепт? Нет, он невозможен. Вы можете досконально расписать, как именно и в каких случаях ведут себя разные СУБД с разными настройками при индексации ВТ? Тоже нет. Всё, что можно сказать, это "ребята, держите ухо востро, вот список факторов, вот инструменты, дальше включайте мозг сами". Нахрена ещё обсасывать?
DJ_Codebase; Артано; +2 Ответить
48. ivanov660 2879 03.08.21 11:54 Сейчас в теме
(43) Согласно вашему комментарию 90% статей инфостарта можно удалить, т.к. уже все расписано было (по крайней мере на ИТС).
49. Yashazz 4117 03.08.21 11:58 Сейчас в теме
(48) Ага! И вот тогда вместо кучи барахла мы бы получили легко отыскиваемые, дельные, нужные и порой уникальные материалы. Но увы.
59. Yashazz 4117 03.08.21 18:58 Сейчас в теме
(48) А согласно вашей позиции, я могу сейчас пойти и запостить повтор того, что, к примеру, год назад уже было. Так?)
44. Артано 719 03.08.21 10:58 Сейчас в теме
(40) Яков, статьи такие будут появляться ровно до тех пор пока косячить не перестанут. Я вот, тоже по этой теме периодически статьи пуляю и про ошибки года три назад писал. Потому что куда ни придёшь хоть бери любой модуль и выписывай новые примеры =)
45. Yashazz 4117 03.08.21 11:09 Сейчас в теме
(44) В этом плане интересно бы исследовать, насколько появление принципиально новых инструментов (система взаимодействия, "кагбэ асинхронность", базы-копии и базы-для-отчётов) влияют на появление новых ошибок и, главное, новых категорий ошибок.
Ошибка ведь что? Когнитивно-перцептивно-психологическое явление, помноженное на технологию. Вот это бы раскопать - повторяются ли , "проецируются" ли старые классические ошибки на новый инструмент, и что может породить качественно иной класс ошибок.
56. Артано 719 03.08.21 14:36 Сейчас в теме
(45) В своих исследованиях приближался к этому вопросу, но не углублялся, копая там, где было достаточно для понимания процессов. Если в общем, то ошибки повторяются всегда. Тут проблема именно в генном коде, а не программном. Просто часть ошибок могут быть формализованы и их легко идентифицировать, иные же не видны пока не наступишь на хорошо спрятанные грабли.
Про принципиально новые классы ошибок, затрудняюсь ответить. Если только ошибки связанные строго с использованием некого нового инструмента, но опять же, причины этих ошибок будут скорее всего одни и те же.
52. savostin.alex 74 03.08.21 13:24 Сейчас в теме
"При записи документа выбираем для заполнения первого получателя" - наверное, перед записью?
53. AntonProgma 34 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 114 03.08.21 14:43 Сейчас в теме
60. RustRR 04.08.21 12:16 Сейчас в теме
13. Использование типа «Любая ссылка»
Решение: 
Не используем тип «Любая ссылка»;

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

См. также

Долго открывается конфигуратор Промо

HighLoad оптимизация v8 1cv8.cf Бесплатно (free)

В ОС Windows Server 2012 бывает полезно выключать службу Dynamic Fair Share Scheduling (DFSS позволяет балансировать и распределять ресурсы между пользователями), чтобы повысить производительность 1С:Предприятие 8 в ряде случаев.

22.04.2015    44060    Gilev.Vyacheslav    1    

Повышение производительности веб-сервисов. Переиспользование сеансов

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

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

20.10.2021    1738    sorter1    2    

Оптимизация проведения документов списания партий в УПП 1.3

HighLoad оптимизация v8 УТ10 УПП1 Бесплатно (free)

Почти в каждой конфигурации УПП 1.3 (возможно, и в УТ 10.3) есть медленный запрос, тормозящий проведение документа списания. Данная публикация раскрывает места вызова данного запроса и приводит пример оптимизации. Пример показывает результаты проведения документа «Реализация товаров и услуг», но метод работает и для других документов списания партий.

09.09.2021    584    info1i    4    

Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности

HighLoad оптимизация Рефакторинг и качество кода Технологический журнал v8 Бесплатно (free)

Расскажем про инструменты, рассмотрим планы запросов, увидим, как отслеживать и бороться с проблемами производительности на боевой базе.

07.09.2021    4212    ivanov660    23    

Видеодемонстрация применения Теста-центра для нагрузочного тестирования конфигураций Промо

HighLoad оптимизация v8 1cv8.cf Бесплатно (free)

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

16.09.2012    36470    Aleksey.Bochkov    29    

Адекватный параллелизм в 1С

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

Параллелизм ускоряет выполнение тяжелых регламентных операций на СУБД, но может негативно влиять на работу многопользовательских учетных систем. О том, как анализировать влияние параллелизма и настраивать его для MS SQL и PostgreSQL, рассказал ведущий разработчик компании ООО МКК «Ваш Инвестор» Вадим Фоминых.

13.08.2021    3642    Shmell    7    

Антипаттерны программирования в 1С

Рефакторинг и качество кода v8 Бесплатно (free)

Поговорим про плохой стиль программирования и рассмотрим 17 часто встречающихся антипаттернов.

19.07.2021    10212    ivanov660    121    

Parameter sniffing и генерация планов для разработчиков 1С

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

Особенности генерации планов запросов. Статья написана по мотивам вебинара Виктора Богачева.

01.06.2021    9069    vasilev2015    17    

Как можно "положить" SQL сервер с помощью обычной консоли запросов 1С Промо

HighLoad оптимизация v8 1cv8.cf Бесплатно (free)

Описано как из 1С, с помощью безобидной на первый взгляд обработки, можно сделать неработоспособным SQL сервер. Предложены меры, позволяющие избежать этого.

22.01.2014    69201    yuraos    112    

Чек-листы для проведения Code Review

Рефакторинг и качество кода v8 1cv8.cf 1С:Франчайзи, автоматизация бизнеса Бесплатно (free)

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

17.05.2021    8296    Alexsandr_Retunskiy    99    

Ускорение реструктуризации больших таблиц. Мой вариант

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

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

28.04.2021    1335    buganov    0    

Поиск причин блокировок СУБД

HighLoad оптимизация v8 v8::blocking 1cv8.cf Бесплатно (free)

Расследование блокировок СУБД. Статья написана по мотивам вебинара Виктора Богачева.

28.04.2021    5791    vasilev2015    13    

Ускоряем списание партий УПП 1.2 / 1.3 / УТ 10.3 Промо

HighLoad оптимизация v8 УТ10 УПП1 Бесплатно (free)

Не секрет, что многие пользователи, использующие партионный учет (а таких очень много, даже среди огромных холдингов, несмотря на пропаганду РАУЗ) при больших нагрузках сталкиваются с резким замедлением списания партий.

21.06.2013    59256    Антон Ширяев    117    

Тонкости эксплуатации, плюшки и особенности Postgres Pro Enterprise

HighLoad оптимизация v8 1cv8.cf Россия Бесплатно (free)

В ходе онлайн-встречи INFOSTART MEETUP Novosibirsk Руководитель ИТ из компании ИнфоСофт Антон Дорошкевич поделился с коллегами тонкостями и опытом работы с Postgresql для 1С. 

22.04.2021    2498    a.doroshkevich    4    

Решение нестандартных проблем производительности на реальных примерах

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

На екатеринбургском Infostart Meetup выступил с докладом архитектор ИС центра разработки ФТО Александр Криулин. Он поделился с коллегами кейсами нестандартных проблем производительности и рассказал о способах их решения.

24.03.2021    5055    AlexKriulin    37    

Соединение вложенными циклами

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

Nested loops и отсутствующие индексы. Статья написана по мотивам вебинара Виктора Богачева.

12.03.2021    3634    vasilev2015    22    

Сравнение скорости работы 1C+MSSQL и файлового варианта Промо

HighLoad оптимизация v8 1cv8.cf Россия Бесплатно (free)

На форумах постоянно задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая? Затем обычно идет «флуд» на несколько десятков страниц. Есть два популярных «течения» в таких форумах — одни говорят что для клиент-серверного варианта это нормально, файловый вариант всегда должен работать быстрее, другие говорят что 1С плохо работает с субд. В результате «баталий и выяснения отношений» на форумах люди расходятся при своих мнения.

19.02.2013    61384    Gilev.Vyacheslav    46    

Долгое воспроизведение звука по RDP с удаленной машины

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

При воспроизведении короткого звука в 38 Кб, сигнализирующего об успешном сканировании, порою происходило подвисание примерно в 5 секунд.

09.02.2021    978    pashamak    2    

Ускорение расчета себестоимости УПП 1.3 в несколько раз

Рефакторинг и качество кода Закрытие периода v8 УПП1 БУ УУ Бесплатно (free)

Как определить причину медленного расчёта себестоимости в УПП 1.3, один из вариантов поиска проблем производительности с помощью инструментов 1С и ускорения расчёта средствами встроенного языка

02.02.2021    3619    RPGrigorev    19    

Реальный кейс по внедрению CodeReview

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

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

20.01.2021    1938    Alexsandr_Retunskiy    3    

Параллельные вычисления в 1С 8 Промо

HighLoad оптимизация v8 1cv8.cf Бесплатно (free)

Решение позволяет ускорять выполнение запросов в 1С 8 в отчетах путем их параллельного выполнения в разных потоках.

11.02.2013    38251    gallam99    19    

Highload-оптимизация 1С: теория и практика на примере консолидированной отчетности группы "Магнит" и розничной аптечной сети "Магнит"

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

Тема оптимизации 1С на больших данных бесконечная и всеобъемлющая, поскольку на производительность влияет целый ряд факторов – количество пользователей, данных, транзакций, неоптимальные запросы и т.д. Об инструментах для локализации проблем производительности и практических кейсах оптимизации рассказал Алексей Олейник, руководитель сектора автоматизации отчетности МСФО компании «Информационные технологии Магнит».

11.01.2021    26268    user662404_itlexusss    14    

Анализ блокировок СУБД: таблица изменений плана обмена 1С

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

Практический пример анализа типичной проблемы ожидания на блокировках СУБД, возникающих при использовании планов обмена 1С. Сервер СУБД: Microsoft SQL Server.

18.12.2020    3615    zhichkin    7    

Операторы перехода в программном коде: использовать или нет?

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

Рассмотрим ситуации использования операторов перехода Перейти (GoTo), Возврат (Return), Прервать (Break), Продолжить (Continue). Как вы считаете - это дурной тон, нормальная практика или зависит от ситуации?

16.11.2020    3876    ivanov660    23    

Ubuntu vs CentOS vs Win2k8 vs Debian: производительность PostgreSQL Промо

Статистика базы данных HighLoad оптимизация v8 Бесплатно (free)

Хотя интернет уже переполнен статьями о "правильной" настройке связки PostgreSQL и 1C 8.2, для подводных камней всегда остается место. При сравнении производительности СУБД PostgreSQL на разных ОС, показатели различаются в разы. Самую большую обиду принесла любимая Ubuntu (человечность). После долгих дней и ночей проведенных за консолью этой ОС, она разочаровала окончательно. Тормоза PostgreSQL в Ubuntu Server. Что с ними делать? Сколько раз можно наступать на грабли?

03.11.2012    45387    madmpro    32    

Чистый кот (Clean cat)

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

От автора легендарного бестселлера "Совершенный кот".

04.11.2020    1906    vasilev2015    25    

Анализ проблем производительности по динамике мониторинга RAS 1C

HighLoad оптимизация v8 1cv8.cf Бесплатно (free)

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

07.10.2020    5064    ivanov660    13    

Ускорение медленной работы строк в 1С на примере 1С:Документооборот КОРП

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

Если у вас в 1С:Документооборот КОРП 2.1.11.5 (часть более старых и новых конфигураций): 1) Долго отправляется почта в формате HTML; 2) Медленно открывается документы внутренние / входящие / исходящие; 3) Тормозит область просмотра или открытие задач. Тогда вам сюда.

02.10.2020    5461    Nykyanen    16    

Доработайте это "немедленно", или как уменьшить доработки конфигурации

Рефакторинг и качество кода v8 Россия Бесплатно (free)

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

25.09.2020    4207    Богатырев Артур    24    

Тест скорости работы мобильной платформы 1С

Мобильная разработка HighLoad оптимизация v8 1cv8.cf Бесплатно (free)

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

14.09.2020    1934    capitan    25    

Метод борьбы с большим количеством комментариев в коде

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

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

08.09.2020    1550    tambu    9    

Нестандартные блокировки при работе с OLAP-нагрузкой

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

Если выполнение отчета мешает работе других пользователей и провоцирует блокировки, даже с учетом «грязного чтения» – ситуация кажется парадоксальной. О том, как расследовать такие проблемы, на конференции Infostart Event 2019 Inception рассказали ведущий программист торгового дома «Петрович» Станислав Щербаков и специалист по производительности компании «СофтПоинт» Александр Денисов.

20.07.2020    2760    Филин    7    

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

Рефакторинг и качество кода v8 Бесплатно (free)

Наличие в 1С-решениях некачественного кода мешает их поддержке и эффективному развитию. Как добиться соблюдения стандартов разработки при написании кода и внедрить бюджетный Code Review с помощью инструментария на основе АПК (Автоматизированной проверки конфигураций) на конференции Infostart Event 2019 Inception рассказал технический руководитель компании Бизнес Лоджик Иван Козлов.

22.06.2020    4159    kozlov.alians    1    

Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию

Рефакторинг и качество кода Сценарное тестирование v8 Бесплатно (free)

Непонимание некоторых базовых вопросов мешает программистам начать применять инструменты тестирования в процессе разработки для 1С. Как разобраться в терминологии и интегрировать процесс тестирования в разработку 1С-решений на конференции Infostart Event 2019 Inception рассказал руководитель отдела разработки компании C.T.Consultants Решитко Дмитрий.

29.05.2020    5299    grumagargler    14    

Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия

HighLoad оптимизация Администрирование СУБД Технологический журнал Структура метаданных v8::Запросы Бесплатно (free)

Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.

24.05.2020    11579    DataReducer    22    

[SQL Server] Использование trace flag 9592 для сжатия траффика в кластере AlwaysOn

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

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

18.05.2020    2688    Aleksey.Bochkov    4    

Эти занимательные временные таблицы

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

Кое-что интересное о временных таблицах и работе платформы 1С с ними.

06.04.2020    16675    YPermitin    0    

Оптимизация запросов 1С посредством индексации временных таблиц. Миф? Тестируем, смотрим, считаем

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

Появилось свободное время, решил проверить на работе индексацию таблиц. Решил поделиться с Вами результатами исследования. Давайте порассуждаем на эту тему? Часто ли вы пользуетесь индексацией в запросах? Платформа 8.3.16.1224

03.04.2020    9135    feva    15    

Как я собрал для себя высокопроизводительный и бесплатный облачный бекенд для 1С на PosgreSQL + PostgREST

HighLoad оптимизация WEB Интеграция с сервисами Мобильная разработка Администрирование веб-серверов v8 Бесплатно (free)

В этой статье я расскажу о проблемах бека для мобильных приложений или другого фронта, который требует производительности, быстрой реакции и отказоустойчивости, и как я решил это благодаря opensource проекту PostgREST и СУБД Postgre SQL 12. Проведу простой тест производительности для сравнения 1С с данным решением. Это может быть полезно всем, кто разрабатывает мобильные приложения либо фронтсайд-приложения для 1С на чем угодно - на мобильной платформе или на нативном языке или на Simple UI. И также обзор новых функций SimpleUI для связи с этим бекендом.

31.03.2020    16178    informa1555    35    

Многострочный контекст событий

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

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

31.03.2020    3911    vasilev2015    11    

Анализ взаимоблокировок

HighLoad оптимизация Технологический журнал v8 v8::blocking Бесплатно (free)

Скрипт Bash, который выводит полную информацию взаимоблокировок по технологическому журналу. Не имеет аналогов в отечественных публикациях.

20.03.2020    7203    vasilev2015    34    

Многопоточность

HighLoad оптимизация Практика программирования v8 Бесплатно (free)

Увеличиваем скорость загрузки данных в 20 раз. Как следует использовать многопоточность и готовый модуль для внедрения.

18.03.2020    8978    kaliuzhnyi    45    

Рефакторинг в редакторе модулей

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

Для тех, кто не пользуется Ctrl+Alt+R. “Контролируемый процесс улучшения кода без написания новой функциональности”, “Равносильное преобразование алгоритмов” и т.п в данной статье НЕ рассматриваются. Тема статьи: замечательные команды из подменю Рефакторинг контекстного меню редактора модулей в конфигураторе. В статье описано, как команды из подменю Рефакторинг помогают при написании кода

10.03.2020    4760    pparshin    5    

Качество кода: Поведенческие паттерны проектирования

Рефакторинг и качество кода v8 Бесплатно (free)

Поговорим про применение паттернов проектирования в разработке на 1С.

03.03.2020    9376    ivanov660    0    

Боремся с запросами в циклах. Мой опыт рефакторинга запросов

Рефакторинг и качество кода v8::Запросы 1cv8.cf Бесплатно (free)

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

02.03.2020    9514    aximo    55    

Планы запросов - это просто! Разбор оптимизаций запросов PostgreSQL на живых примерах

HighLoad оптимизация v8::Запросы Бесплатно (free)

Проблема быстродействия 1С напрямую зависит от производительности запросов. Но как понять механику работы СУБД с помощью плана запроса? Андрей Овсянкин и Никита Грызлов на конференции Infostart Event 2019 Inception подробно рассмотрели алгоритм работы с планом запроса СУБД PostgreSQL, полученным из технологического журнала, и рассказали, на что обратить внимание, чтобы оптимизировать работу системы.

17.02.2020    15163    Evil Beaver    13