Оптимизатор запроса. Часть первая

Публикация № 1172359

Разработка - Практика программирования

запрос СУБД оптимизатор SQL индекс соединения выборка

Работа оптимизатора запроса является ключевой для обработки данных. Знание того, как оптимизатор выстраивает свою стратегию, отлично помогает при построении запросов.

Оптимизатор запросов. Часть первая. Статья из серии статей о СУБД.

ВСТУПЛЕНИЕ.

Данный цикл статей посвящен рассмотрению  устройства системы управления базами данных (СУБД). Хотя данное пособие не ставит целью ознакомить читателя с какой-то конкретной СУБД, опираться мы будем, в основном, на СУБД MS SQL. Для того, чтобы процесс обучения был понятен, я постараюсь вводить термины и определения постепенно, по мере углубления в материал.

Введение

Работа оптимизатора запроса является ключевой для обработки данных. Знание того, как оптимизатор выстраивает свою стратегию, отлично помогает при построении запросов.  

Для лучшего понимания статьи, необходимо понимать, что такое индексы (кластерные, некластерные), понимание языка манипулирования данными (DML  T-SQL).  Знать из чего состоит запрос, а именно: Условие; Соединения; Выражения в запросе; Вложенные запросы.

Что такое оптимизатор.

Когда выбираются данные из базы, движок СУБД пытается наилучшим (наиболее быстрым, менее затратным) образом использовать ресурсы. Эту работу выполняет оптимизатор запросов.  Задача оптимизатора – это рассмотрение наилучшей стратегии обработки данных. В качестве результата, оптимизатор выдает «План выполнения запроса». При выборе стратегии оптимизатор учитывает очень много факторов – это индексы, условия в запросе (подробно рассмотрим далее) и, так называемую, статистику или, как ее еще называют, статистические данные, содержащую такую информацию как диаграмма состояния таблиц.

Работа оптимизатора.

Работа оптимизатора состоит из нескольких этапов:

  1. Синтаксический разбор запроса. На этом этапе запрос проверяется правильность написания запроса. Если запрос написан правильно, то строится дерево, на основании текста запроса. Затем проверяется наличие объектов, к которым обращается запрос. После этого, строится окончательное дерево с идентификаторами объектов.
  2. Компиляция запроса. Дерево компилируется и передается на следующий этап.
  3. Оптимизация запроса. Оптимизатор анализирует входящее дерево. Ищет аргументы поиска и критерии соединения. Затем решает, какие индексы использовать, какой будет порядок соединения таблиц. И выбирает наилучшую стратегию.
  4. Исполнение запроса. Сохранение плана запроса и его исполнение

Этапы работы оптимизатора

  1. Анализ запроса
  2. Выбор индексов
  3. Выбор порядка выполнения операций соединения
  4. Выбор метода выполнения операций соединения

1. Анализ запроса. Это первый этап, на котором определяются:

  1. Аргументы поиска.
  2. Операторы OR (ИЛИ).
  3. Критерии соединения.

 

Запомните эту последовательность. Разбор происходит именно в такой последовательности. Наиболее значимым для нас, будет Аргумент поиска.

Что такое аргумент поиска? – Это та часть запроса, которая используется в условии и ограничивает конечную выборку данных. Аргументами поиска являются: условие отбора на равенство, операции больше/меньше, операции вхождения в множество. Основным назначением аргументов поиска является возможность использования индексов для ускорения выборки данных.

Например: Год рождения = 1980 - равенство

Годовой доход >= 1 000 000 рублей, - операции Больше равно

Год рождения = 1980 И Рост >= 175см – Логическое умножение и операции Больше равно

Место рождения В (Москва, Воронеж) – вхождение в множество

Что не входит в аргументы поиска? – Операции неравенства, операции отрицания и выражения в левой части условия.

Пример: Год рождения НЕ РАВНО 1980 - неравенство

Место рождения НЕ В (Москва, Нью-Йорк, Воронеж) – оператор отрицания

Годовой доход * 10  >= 1 000 000 – выражение в левой части

Кстати, во многих случаях достаточно произвести небольшие манипуляции с запросом и результат может ускориться в разы. Вернувшись к нашему примеру, если мы переделаем условие: Годовой доход * 10  >= 1 000 000 на Годовой доход >= 100 000, то есть заменим выражение в левой части на простую выборку, то получим аргумент, который может использовать индекс. Так происходит потому, что выражения рассчитываются после выборки и потом на них накладывается условие. Тоже самое и с отрицанием: сначала необходимо выбрать данные и только потом, сравнивая с условием, откинуть ненужное. Поэтому там, где нет аргументов поиска, происходит сканирование таблицы (описано далее). Если же в условии стоит равенство, то его можно отобрать по индексу (если он установлен). Запомните это правило. Если есть возможность – используйте равенство.

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

Критерии соединения – это, фактически, выбор порядка выполнения операций соединения и выбор метода выполнения операций соединения, которые и будут рассмотрены далее.                     

2.Выбор индексов. Это второй этап работы оптимизатора. На этом этапе оптимизатор ищет наличие индекса/ов, используя аргументы поиска, и решает - использовать индекс или нет. Выбор решения зависит от селективности выражения и статистических данных. Селективность – это отношение количества выбираемых строк, к общему количеству строк в таблице.

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

2.1.Селективность выражения с индексированным столбцом.

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

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

2.2.Статистические данные. Существуют статистические данные индекса и статистические данные столбца. Давайте рассмотрим их подробней.

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

 

2.2.2.Статистические данные столбца. Система может создавать статистику для столбца, точно также, как она создает статистику для индекса. Это бывает, когда столбец используется в условии WHERE (ГДЕ). Такая статистика может помочь при выборке по составному условию. Например, когда одно поле индексировано, а второе не имеет индекса, но имеет статистику. Тогда при выборке можно использовать помимо индекса еще и статистику поля.

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

3. Выбор порядка выполнения операций соединения. Некоторые считают, что порядок соединения таблиц будет таким же, как он описан в запросе. Если честно, то это никак не влияет на то, в каком порядке таблицы будут соединяться. Оптимизатор принимает решение на основе многих факторов. Это и количество строк в выборке каждой таблицы, и степень сложности выборки строк, и плотность данных в станицах  и т.д. Некоторые СУБД позволяют использовать подсказки для оптимизатора (hints), в которых можно приказать оптимизатору соединять таблицы в определенном порядке. Но это тема не для данной статьи.

4. Выбор метода выполнения операций соединения. Соединения таблиц может выполняться следующими методами:

4.1. Вложенный цикл (nested loops)

4.2. Соединение слиянием (merge connection)

4.3. Соединение хешированием (hash connection)

Вложенный цикл. Использование вложенного цикла основано на полном переборе строк таблиц. То есть, выбирая строку одной таблицы, перебираются все строки соединяемой таблицы. Можно заметить, что если таблицы не проиндексированы, то выборка будет очень накладной. Если в одной таблице N строк, а в соединяемой K строк, то результат прохода = N * K, то есть первая таблица будет сканирована один раз, а соединяемая столько раз, сколько строк в первой таблице. При полном переборе строки сначала сравниваются и, если они соответствуют условию соединения, попадают в результирующий набор

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

Соединение хешированием.  

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

1. Значение соединяемого столбца из строки компонуемого ввода сохраняется в определенном сегменте хеша в зависимости от числа, возвращаемого алгоритмом хеширования.

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

3. Каждое значение соединяемого столбца строки из контрольного ввода обрабатывается с использованием того же самого алгоритма хеширования.

4. Соответствующие строки извлекаются из каждого сегмента хеша и затем используются для создания результирующего набора.

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

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

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. buganov 153 24.12.19 08:11 Сейчас в теме
Вот как то и статья, вроде, нужная, а как то написана сухо, что ли. Тысячу раз мусолена тема оптимизатора. Про SARG и соединения еще больше, тем более, что их всего то три.
Никаких примеров, а особоважные примеры не вида SELECT T.Fld1 From dbo.MegaTab T, а что то более экзотическое ,сложное и на пальцах показать, почему оптимизатор выбрал такой план и как такие вещи разгребать. А так статья и джунам не подойдет, ибо не доросли еще до такой магии, и синьорам не подойдет, ибо они и так это все уже знают. А интересующиеся миды и так уже читали, вникали, разбираются.
Извините за критику, я за качество статей, а не за количество.
Alexx48; dominatorwarr; wowik; mult1c; Tsuzik; GoR1313; +6 Ответить
2. darkdan77 305 24.12.19 09:48 Сейчас в теме
Александру Буганову. Полностью согласен с вами. На самом деле выставлял две части, но вторую заставили переработать (это я сейчас оправдываюсь). Там, как раз примеры. После доработки, выставлю. Насчет сильно большой экзотики не обещаю, потому, что хочется простого объяснения. Хотя... надо подумать. Если вам будет нетрудно прочесть еще раз, буду рад. И еще больше рад буду критике. У вас она конкретна.
P.S. Если есть интерес создать что-то вроде группы единомышленников, пишите. Можно вместе поработать над статьями
user774630; +1 Ответить
3. strek_ivan 74 25.12.19 10:14 Сейчас в теме
Полезная статья, материал изложен ёмко и без лишней воды.
Данис, в продолжение хотелось бы видеть примеры запросов с планом запроса и вариантами оптимизации.
Дмитрий74Чел; +1 Ответить
4. darkdan77 305 25.12.19 11:15 Сейчас в теме
(3) strek_ivan .

Я, как раз, перерабатываю две статьи по оптимизации и статьи по индексам. Будут примеры (MS SQL). Постараюсь вычистить заумное, потом выставлю. Не думал, что это столько отнимает времени. Могу разослать оповещение, как будет готово (напишите, если нужно, просто так беспокоить не стану). Спасибо за комментарий
5. strek_ivan 74 25.12.19 16:27 Сейчас в теме
(4) darkdan77,

Хорошая и полезная статья требует грамотного разложения по полочкам, и именно на наведение такой "красоты" уходит время. Поэтому не нужно удивляться, что вместо 1 часа был потрачен целый день. :)

Слишком заумных моментов в вашей статье я не заметил, но примеры нужны обязательно, чтобы у читателя хоть что-то закрепилось в голове! Было бы удобно, если примеры запросов (вместе с тестовыми данными) были размещены в отдельной демо-базе (при желании читатель сможет приобрести её за Стартмани).

Да, я с удовольствием прочту продолжение по теме "оптимизации запроса" даже в черновом варианте. Если у самого будет время, готов оказать поддержку.

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

Давайте писать запросы со знанием дела!
6. darkdan77 305 26.12.19 06:36 Сейчас в теме
(5) Как доделаю, оповещу обязательно. Правда, до Нового 2020 года могу не успеть.

Всех с Наступающим Новым годом!!! Всем здоровья, удачи, богатства и славы!!!
7. darkdan77 305 30.12.19 13:22 Сейчас в теме
(5) Черновой вариант есть. Пишите адреса е-майл, кому выслать.
8. Cyberhawk 120 20.01.20 17:45 Сейчас в теме
строки соединяемых таблиц предварительно физически упорядочены по полю соединения
А что означает "физически"? И как этого добиться?
9. darkdan77 305 21.01.20 07:05 Сейчас в теме
(8) Физическое упорядочивание - это когда записи, следуют друг за другом последовательно. Не все поля можно физически упорядочить. Представьте, что у вас есть поле "Код" типа число. Тогда вы можете упорядочить это поле от 1 до количества записей. Добиться такого упорядочивания можно путем создания кластерного индекса.

P.S. Если быть честным, то физического упорядочивания, с точки зрения физики, - нет. Когда мы работаем с каким-либо программным обеспечением, то уровень, на котором мы работаем, называется логическим, а все что ниже, ближе к железу и до чего нам не дотянуться без спец. средств, то мы называем физическим уровнем.
10. Cyberhawk 120 21.01.20 08:44 Сейчас в теме
(9) Где должны быть отсортированы строки соединяемых таблиц? В реальных таблицах (таблицах БД) изначально? Или в соединяемых таблицах (если, например, это соединение временных таблиц, в которые выбраны записи из реальных)? Или достаточно, чтобы строки в принципе могли быть упорядочены (т.е. просто подходящее поле соединения чтоб было), но делать самостоятельно это не нужно?
11. darkdan77 305 21.01.20 10:31 Сейчас в теме
(10) Существуют два пути получения отсортированных входных потоков соединения слиянием: мы можем явно отсортировать входной поток (используя оператор сортировки) или возможно чтение строк из индекса. Как правило, план запроса, использующий для сортировки индекс, будет обходиться дешевле, чем план запроса с явной сортировкой. При использовании индекса (кластерного) данные УЖЕ будут упорядочены (таблицы БД, тут ничего не надо сортировать). В случае, когда вы сортируете (сами добавляете в выборку сортировку) - это ЯВНАЯ сортировка. Еще одно: соединение слиянием требует, как минимум, одного предиката и наличия отсортированных данных по ключу соединения. К примеру, соединяем Табл1.Поле1 и Табл2.Поле1. В обоих таблицах Поле1 должно быть отсортировано (упорядочено). Запускаются два потока, которые считывают значения из Поля1 обеих таблиц и сравниваются между собой. Если значения равны, то записываем в таблицу выборки, если не равны, то удаляем меньшее значение (в выборку не попадает) и сдвигаем на одну строчку таблицу, в которой удалили запись (вернее не удалили, а пропустили/не добавили в таблицу выборки).

P.S. Я действительно написал эту статью, мягко сказать, сжато. Сейчас готовится вторая часть. Там заглянем глубже в оптимизатор. Если этот ответ не слишком развернут, напишите. Я постараюсь ответить более развернуто. Или что еще лучше, разложу такие действия по статьям
12. Cyberhawk 120 21.01.20 10:51 Сейчас в теме
(11)
Если этот ответ не слишком развернут
Из написанного так и осталось неясным назначение слова "физически" в статье. Складывается ощущение, что если его убрать, то смысл никак не меняется, а значит оно просто лишнее.
13. darkdan77 305 21.01.20 13:10 Сейчас в теме
(12) В данном случае, физически - это таблицы и индексы БД и их проекция в оперативной памяти. Упорядочивание по полю кластерного индекса - это первый случай. Второй случай - это упорядочивание в оперативной памяти, когда сделана выборка таблицы. ОБА этих случая, опять же повторюсь, для нашего уровня работы, называются физическими. То есть, считается, что уровень СУБД (прослойка кода между нами и операционной системой), для нас - физический. Без этого упоминания, получается, что у нас есть возможность регулировать порядок записей в таблице как нам хочется, а это не так.
15. Cyberhawk 120 21.01.20 13:17 Сейчас в теме
(13)
у нас есть возможность регулировать порядок записей в таблице как нам хочется, а это не так
Почему не так? Что мне мешает отсортировать оба входа перед соединением?
16. darkdan77 305 21.01.20 14:12 Сейчас в теме
(15) Регулировкой порядком записей занимается движок СУБД. Мы можем дать команду на упорядочивание, но само упорядочивание мы не делаем.
17. Cyberhawk 120 21.01.20 14:43 Сейчас в теме
(16) А какой еще бывает вариант упорядочивания, помимо "физического"?
18. darkdan77 305 21.01.20 15:12 Сейчас в теме
(17) Бывает еще логический. Когда мы получаем выборку и делаем с ней то, что нам нужно
19. Cyberhawk 120 21.01.20 15:23 Сейчас в теме
(18) Упорядочивание входов (двух таблиц) перед их соединением - это физическое или логическое упорядочивание?
20. darkdan77 305 21.01.20 16:13 Сейчас в теме
21. Cyberhawk 120 21.01.20 16:24 Сейчас в теме
(20) А мы можем сделать какое-то еще (кроме физического) упорядочивание входов (двух таблиц) перед их соединением?
22. darkdan77 305 21.01.20 16:43 Сейчас в теме
(21) Можно сгруппировать. Можно проиндексировать саму выборку.

P.S. Только это не значит, что надо бросаться в омут с головой. Иногда это улучшает выборку, но не всегда. Представьте, что вы читаете книгу, в которой есть ссылки на другой источник. Если вам надо прочитать несколько глав и сделать несколько переходов к другому источнику, то это - одна ситуация. Здесь можно использовать оглавление (индекс), И упорядочить не помешает. А если вам надо прочитать всю книгу? Стоит ли обращаться к оглавлению? То есть, взяли оглавление, нашли первую главу, перешли к ней, прочитали, потом опять к оглавлению, нашли вторую главу и т.д.
Оставьте свое сообщение

См. также

Использование программных перечислений, ч.1: строковые константы Промо

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

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    36816    unichkin    46    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

27.01.2020    22200    ids79    26    

Оптимизатор запросов. Вторая часть

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

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

23.01.2020    6234    darkdan77    59    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.01.2020    20684    John_d    22    

Вспомогательные инструкции в коде 1С Промо

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

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

15.10.2018    29337    tormozit    100    

Последовательности событий. Шпаргалка

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    15442    kuzyara    33    

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    16284    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

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

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    7886    Sibars    19    

Оформление и рефакторинг сложных логических выражений Промо

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

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    77216    tormozit    131    

Таблица значений. Нюансы

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

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

01.10.2019    30323    Yashazz    50    

[Шпаргалка] Программное создание элементов формы

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

Программное создание практически всех популярных элементов формы.

06.09.2019    43901    rpgshnik    63    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    45463    ids79    54    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    47513    tormozit    40    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    26243    YPermitin    24    

Три костыля. Сказ про фокусы в коде

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

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

03.09.2019    24862    YPermitin    80    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    30114    ids79    16    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

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

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    43847    tormozit    74    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    72437    ids79    49    

Фоновое выполнение кода в 1С - это просто

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

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

02.08.2019    31672    avalakh    22    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    21654    json    13    

Выгрузка документа по условию Промо

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

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    15858    m-rv    2    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    53523    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    33876    ids79    27    

Регистры сведений. За кулисами

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    25157    YPermitin    14    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    19875    m-rv    17    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19301    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

02.07.2019    41870    ids79    17    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    49007    ids79    25    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    29999    m-rv    21    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

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

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    23969    dmurk    144    

Регистры накопления. Структура хранения в базе данных

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

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    40465    YPermitin    30    

Выполнение внешней обработки в фоновом задании

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    28439    Eret1k    23    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

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

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

05.12.2017    27998    itriot11    34    

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    34284    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    26570    ellavs    88    

Трюки с внешними источниками данных

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    30420    YPermitin    53    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    75518    Serginio    108    

Ошибки при работе с хранилищем конфигурации и способы их решения

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

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    36144    Смешной 1С    27    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    20994    Vladimir Litvinenko    27    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    33734    ids79    40    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    36991    ids79    9    

Тестер: частые вопросы Промо

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

Ошибкам бой - тесты норма жизни!

25.07.2018    28887    grumagargler    28    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    25791    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

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

14.12.2018    39601    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    35898    ids79    40    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

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

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

04.09.2017    51818    m-rv    61    

Программное заполнение пользовательских параметров и отборов СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

13.11.2018    44152    Unk92    21