Почему вообще работает мой запрос? или Ещё раз о планах запросов

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

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

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

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

Формулировку задачи и тексты запросов из публикации-первоисточника я немного отредактировал.

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

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

Вариант 1
ВЫБРАТЬ
    ПриобретениеТоваровУслугТовары.Номенклатура,
    ПриобретениеТоваровУслугТовары.Характеристика,
    ПриобретениеТоваровУслугТовары.Ссылка.Дата,
    ПриобретениеТоваровУслугТовары.Цена
ИЗ
    Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
ГДЕ
    ПриобретениеТоваровУслугТовары.Ссылка В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                ПриобретениеТоваровУслугТоварыУсловие.Ссылка
            ИЗ
                Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТоварыУсловие
            ГДЕ
                ПриобретениеТоваровУслугТоварыУсловие.Номенклатура = ПриобретениеТоваровУслугТовары.Номенклатура
                И ПриобретениеТоваровУслугТоварыУсловие.Характеристика = ПриобретениеТоваровУслугТовары.Характеристика
            УПОРЯДОЧИТЬ ПО
                ПриобретениеТоваровУслугТоварыУсловие.Ссылка.Дата УБЫВ)

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

Вариант 2
ВЫБРАТЬ
	ПриобретениеТоваровУслугТовары.Номенклатура,
	ПриобретениеТоваровУслугТовары.Характеристика,
	МАКСИМУМ(ПриобретениеТоваровУслугТовары.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ВТ_Последние
ИЗ
	Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
СГРУППИРОВАТЬ ПО
	ПриобретениеТоваровУслугТовары.Номенклатура,
	ПриобретениеТоваровУслугТовары.Характеристика
ИНДЕКСИРОВАТЬ ПО
	Номенклатура,
	Характеристика,
	Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_Последние.Номенклатура,
	ВТ_Последние.Характеристика,
	ВТ_Последние.Дата,
	ПриобретениеТоваровУслугТовары.Цена
ИЗ
	ВТ_Последние КАК ВТ_Последние
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
		ПО ВТ_Последние.Номенклатура = ПриобретениеТоваровУслугТовары.Номенклатура
			И ВТ_Последние.Характеристика = ПриобретениеТоваровУслугТовары.Характеристика
			И ВТ_Последние.Дата = ПриобретениеТоваровУслугТовары.Ссылка.Дата
Вариант 3
ВЫБРАТЬ
	ПриобретениеТоваровУслугТовары.Номенклатура,
	ПриобретениеТоваровУслугТовары.Характеристика,
	ПриобретениеТоваровУслугТовары.Ссылка.Дата,
	ПриобретениеТоваровУслугТовары.Цена
ИЗ
	Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПриобретениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
			ПриобретениеТоваровУслугТовары.Характеристика КАК Характеристика,
			МАКСИМУМ(ПриобретениеТоваровУслугТовары.Ссылка.Дата) КАК Дата
		ИЗ
			Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
		СГРУППИРОВАТЬ ПО
			ПриобретениеТоваровУслугТовары.Номенклатура,
			ПриобретениеТоваровУслугТовары.Характеристика) КАК ВложенныйЗапрос
		ПО ПриобретениеТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.Номенклатура
			И ПриобретениеТоваровУслугТовары.Характеристика = ВложенныйЗапрос.Характеристика
			И ПриобретениеТоваровУслугТовары.Ссылка.Дата = ВложенныйЗапрос.Дата

 

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

Важно понимать, что для построения плана выполнения СУБД использует не только текст запроса, но и структуру метаданных (наличие индексов), а также статистику по самим данным.

Если говорить о запросах 1С, то для них существуют рекомендации по оптимизации, которые опираются на типичные планы выполнения, выбираемые СУБД в тех или иных случаях.

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

Итак, как же нам получить план запроса? Для этого мы воспользуемся подсистемой Расширенных событий (Extended Events) MS SQL Server, а также обычной консолью запросов, опубликованной на 1С:ИТС.

Начнём с настройки SQL-сервера. Открываем Management Studio и в дереве объектов переходим на ветвь Управление -> Расширенные события -> Сеансы. Создаём новый сеанс (без использования мастера). В окне нового сеанса задаём его имя и на странице "События" выбираем единственное событие - query_post_execution_showplan.

Для события query_post_execution_showplan устанавливаем параметры: ставим галочку напротив поля "sql_text". Также можем установить фильтр по названию базы.

Теперь нам нужно запустить созданный сеанс и открыть окно его данных. Это делается из контекстного меню сеанса (команды "Запустить сеанс" и "Наблюдать за данными, передаваемыми в режиме реального времени").

Выполним запрос в консоли запросов 1С и подождём пока в таблице данных сеанса появится соответствующее нашему запросу событие:

Здесь мы можем увидеть фактический текст запроса, который выполняет СУБД, и посмотреть его план в графическом формате. Откроем план выполнения запроса №1:

 

Эти же самые данные консоль запросов 1С может получить из технологического журнала. Для этого поставьте галочку "Показывать план выполнения запроса" на форме консоли, выполните запрос и нажмите "Открыть".

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

Итак, что же мы можем сказать о запросе №1, зная план его выполнения?

Прежде всего то, что для основного соединения таблиц (выделено на плане запроса) используется способ "Вложенные циклы" ("Nested Loops"). Между какими таблицами происходит соединение? Между таблицами Документ.ПриобретениеТоваровУслуг.Товары (назовём её "верхняя" по расположению на плане) и производной таблицей, формируемой посредством некоторых операций (назовём эту таблицу "нижняя").

Самое время сказать несколько слов о том, что из себя представляет соединение "Nested Loops". Представим себе цикл по всем записям одной из таблиц ("внешней"), на каждой итерации которого осуществляется цикл по всем записям другой таблицы ("внутренней"). Если в ходе такого перебора обнаруживается соответствие условиям соединения, то текущие записи обеих таблиц заносятся в результирующую таблицу. Это и называется вложенными циклами.

Обычно на момент начала выполнения операции соединения обе таблицы уже сформированы, но что происходит в нашем случае? Для того, чтобы сформировать нижнюю (внутреннюю) таблицу нам нужно выполнить отбор по номенклатуре и характеристике (см. текст запроса), значения которых передаются из верхней (внешней) таблицы. Кроме того, нам нужно отсортировать нижнюю таблицу по дате. И это на каждой итерации цикла, то-есть 406 раз!

Упрощенный алгоритм выполнения запроса №1 (псевдокод)
Таблица1 = Документ.ПриобретениеТоваровУслуг.Товары;
Таблица2 = Документ.ПриобретениеТоваровУслуг.Товары;

Результат = Новый Таблица();
Для Каждого Строка1 Из Таблица1 Цикл	
	ВнутренняяТаблица = Таблица2.Отбор(Строка1.Номенклатура, Строка1.Характеристика);
	ВнутренняяТаблица = ВнутренняяТаблица.Сортировать(Дата);
	ВнутренняяТаблица = ВнутренняяТаблица.ПолучитьСтроку(1);
	ВнутренняяТаблица = ВнутренняяТаблица.Отбор(Строка1.Ссылка); // Остаётся 1 или 0 строк		

	Для Каждого Строка2 Из ВнутренняяТаблица Цикл	
		Если Строка1.Ссылка = Строка2.Ссылка
				И Строка1.Номенклатура = Строка2.Номенклатура
				И Строка1.Характеристика = Строка2.Характеристика Тогда			
			Результат.Добавить(Строка1, Строка2);
		КонецЕсли;		
	КонецЦикла;
КонецЦикла;

 

Не сложно догадаться, что вариант запроса №1 не является самым оптимальным из предложенных. Теперь посмотрим на планы выполнения остальных запросов.

 
 План выполнения запроса №2
 
 План выполнения запроса №3

 

Имена объектов метаданных 1С и количество строк в таблицах получены с помощью консоли запросов 1С.

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

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

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

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Evg-Lylyk 2891 10.06.19 20:04 Сейчас в теме
2. json 2629 10.06.19 21:32 Сейчас в теме
(1) твоя реклама уже стала навящивой.
В каждой бочке ты уже со своей консолью.

Делай продукт так, чтобы его рекомендовали другие, как это делает Tormozit c его инструментами разработчика, которому большой респект.
А самопиар - это штука спорная, уважения не вызывает
Zero_nv; АлександрЯрославичъ; mivari; andrvyst; CyberCerber; wowik; +6 Ответить
10. OerlandHue 13.06.19 04:39 Сейчас в теме
(2)
навящивой.
В каждой бочке ты уже со своей консолью.

Делай продукт так, чтобы его рекомендовали другие, как это делает Tormozit c его инструментами разработчика, которому большой респект.

Нормальная тема самопиар. Как вы предлагаете узнать о продукте, если о нем никто не рассказывает.
Evg-Lylyk; +1 Ответить
11. json 2629 13.06.19 06:37 Сейчас в теме
(10)
Обсуждение данного вопроса не имеет отношения к данной публикации.

Считаю неправильным холиварить на эту тему в комментариях к данной статье
12. Evg-Lylyk 2891 13.06.19 09:21 Сейчас в теме
(11) Ссылка которую я привел Анализ планов запросов
3. wowik 757 11.06.19 09:18 Сейчас в теме
4. capitan 1622 11.06.19 09:34 Сейчас в теме
За одно только оформление можно плюс поставить )
5. androidT1C 73 11.06.19 10:09 Сейчас в теме
"Управление -> Расширенные события -> Сеансы."

А что делать. если нет пункта "Расширенные события" после раскрытия плюсика на ветке "Управление"? MS SQL 2008.
7. e][tend 11.06.19 11:28 Сейчас в теме
(5) Хотел сказать что расширенные события появились в более поздних версиях SQL Server начиная с 12, потом проверил и понял, что народ и 2008 как то их использует.
9. DataReducer 221 11.06.19 16:37 Сейчас в теме
(5) SQL Server 2008 - это первая версия, в которой появилась подсистема Расширенных событий, но, к сожалению, ещё без графического интерфейса. В этой версии можно использовать SQL Server Profiler. Как его задействовать описано здесь: https://infostart.ru/public/965250/, но кроме событий RPC:Completed и SQL:BatchCompleted нужно включить ещё событие ShowplanXMLStatisticsProfile.
6. kuzyara 1013 11.06.19 10:23 Сейчас в теме
не рассказывают о том, как его получить
Как это не рассказывают?

Анализ запросов с помощью SQL Profiler
https://infostart.ru/public/291874/
Отлавливаем запрос 1С в profiler на MS SQL
https://infostart.ru/public/965250/
SQL Server Profiler. В картинках, для самых маленьких
https://infostart.ru/public/663708/
и по Extended Events есть..
https://infostart.ru/public/1056294/
asdf_88; OerlandHue; Дмитрий74Чел; Evg-Lylyk; +4 Ответить
8. DataReducer 221 11.06.19 12:16 Сейчас в теме
(6) 1 ссылка - статья с уже битыми ссылками на изображения
2 ссылка - статья про то как получить фактический текст запроса в Профайлере, планы запроса не упоминаются
3 ссылка - заметки про всё и ни о чём
4 ссылка - отличная (!!!) статья про сбор статистики по запросам, но без использования графических средств
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

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

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

22.04.2020    3197    23    infostart    2    

Обработка кодом результата запроса в Консоли запросов 9000

Консоль запросов v8::Запросы Бесплатно (free)

Пять вариантов обработки кодом в консоли запросов 9000: простое выполнение, построчно без индикации, построчно с индикацией, простое в фоне, построчно в фоне с индикацией.

вчера в 09:00    328    0    kuza2000    4    

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

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

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

24.05.2020    4149    0    DataReducer    22    

СКД. Использование Менеджера временных таблиц в системе компоновки

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

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

29.04.2020    3767    0    the1    27    

Онлайн-курс "1С:Специалист-консультант по "1С:Зарплата и управление персоналом" 22-25 июня 2020 года Промо

Решение задач на 1С:Специалист Бухгалтерский учет Зарплата Управление персоналом (HRM) v8 v8::СПР ЗУП3.x БУ УУ Бесплатно (free)

Спрос на специалистов по внедрению "1С:Зарплата и управление персоналом 8" с каждым днем растет. Станьте одним из востребованных специалистов - пройдите обучение по актуальной редакции 1C:ЗУП 3.1.

13200 руб.

14.06.2018    10046    3    5    

Работа с запросами в 1С СКД. Отладка СКД

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

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    2145    0    ProfessionStore    2    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

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

Почему при отборе по контрагенту наш отчет работает неправильно. Посмотрим на примере другого отчета, в котором нам нужно выбрать данные из расходных накладных и связанные с номенклатурой данные по ВСЕМ заявкам.

13.04.2020    3668    0    ProfessionStore    4    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

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

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

12.04.2020    2755    0    ProfessionStore    11    

Подсистема "Инструменты разработчика" v5.35 Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Интегрированный набор инструментов разработчика: - консоль кода - консоль запросов - консоль построителя отчетов - консоль компоновки данных - консоль заданий - конструктор запроса - справочник алгоритмов - исследователь объектов - интерфейсная панель - настройка журнала регистрации - анализ журнала регистрации - настройка техножурнала - анализ техножурнала - подбор и обработка объектов - редактор объекта БД - редактор констант - редактор параметров сеанса - редактор изменений по плану обмена - редактор пользователей - редактор предопределенных - редактор хранилищ настроек - динамический список - поиск дублей и замена ссылок - контекстная подсказка - синтакс-помощник - поиск битых ссылок - поиск ссылок на объект - структура хранения БД - удаление объектов с контролем ссылок - и прочее

23.09.2007    476022    4340    tormozit    2665    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

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

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

11.04.2020    3161    0    ProfessionStore    8    

Работа с запросами в 1С СКД. Язык выражений СКД и подмена запросов

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

Хотя эта статья называется «Работа с запросами в 1С СКД», нельзя не упомянуть про язык выражений СКД. Да – у системы компоновки данных есть свой язык! Это не язык платформы 1С, это не язык запросов. Это еще один язык, который используется 1С в СКД для обработки полученного набора (ов) данных.

11.04.2020    3687    0    ProfessionStore    22    

Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД

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

Все тонкости использования расширения языка запросов 1С для СКД вы можете изучить по ссылкам, которые приведены в предыдущей статье. Здесь мы рассмотрим конкретные кейсы применения данного расширения.

10.04.2020    3546    0    ProfessionStore    4    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Администрирование данных 1С Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    57854    0    user700211_a.straltsou    27    

Запросы 1С СКД. Возможности и ограничения

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

В этом цикле статей мы рассмотрим особенности работы системы компоновки данных с запросами в 1С.

10.04.2020    4542    0    ProfessionStore    14    

Управляемая консоль отчетов – новый функциональный инструмент для работы с запросами и СКД в управляемых формах

Прочие инструменты разработчика Консоль запросов v8::УФ v8::Запросы v8::СКД Бесплатно (free)

Консоль запросов и СКД – один из наиболее часто используемых программистом инструментов. Как с его помощью можно упростить разработку, в своем докладе на конференции Infostart Event 2019 Inception рассказал Евгений Люлюк, ведущий программист компании GLT.

06.04.2020    4838    0    Evg-Lylyk    0    

Копирование числовых ячеек из 1С в Excel Промо

Загрузка и выгрузка в Excel Администрирование данных 1С v8 1cv8.cf Бесплатно (free)

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

15.01.2019    20194    0    itriot11    22    

Нумерация строк в запросе методами платформы

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

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

09.01.2020    6401    0    user602678_maxipunchik    24    

Налогообложение сотрудников, работающих по ГПХ (доработка 1С:Зарплата и управление персоналом КОРП, редакция 3.1)

Зарплата Практика программирования v8::СПР v8::Запросы ЗУП3.x Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Цель этой статьи - быстро доработать ЗУП для налогообложения сотрудников, работающих по ГПХ. Эта статья решает задачи, связанные с отсутствием в ЗУП функционала по обложению налогом работников ГПХ. На вопросы ниже вы найдете ответ в статье и решите эту задачу. Как настроить ЗУП 3, чтобы по договору ГПХ начислялись страховые взносы? У нас ситуация: есть договор ГПХ с одним человеком, который носит систематический характер и надо по нему начислять взносы, но ЗУП 3 не начисляет.

26.11.2019    3100    0    Lupeykin    7    

Группировка данных в запросе (СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ])

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

Для группировки данных в языке запросов 1С существуют конструкции СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ]. Для новичков назначение этих конструкций не всегда очевидно, попробуем разобраться на примерах, для чего предназначена каждая из них и в чем отличие от аналогичных конструкций в языке SQL.

19.09.2019    13862    0    sertak    9    

Обмен данными. Консистентность vs Многопоточность Промо

Интеграция v8 1cv8.cf Бесплатно (free)

Рассмотрим теоретические основы обмена данными. Какие бывают обмены, какие гарантии при этом даются, зачем идти на компромиссы и что при этом может пойти не так. Есть ли идеальная схема?

03.09.2019    10492    0    m-rv    1    

Количество NULL в запросе

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

При определении количества элементов в виде "NULL" в результирующей таблице запроса нам возвращается значение "0".

17.09.2019    3097    0    toxilamer    18    

Выборка дней рождения

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

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

26.06.2019    2916    0    user654641_yaga_m    6    

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

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

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

11.06.2019    21402    0    dmurk    144    

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

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

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

10.12.2016    34178    0    unichkin    45    

Работа с запросами. Получение последней цены товара из табличной части документа. Несколько вариантов

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

На нескольких собеседованиях это спрашивали, решил поделиться. Обычно я использую вариант №2. Остальные варианты нашел в интернете.

05.06.2019    5209    0    wowik    26    

Нюансы преобразования запроса СКД

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

Описание некоторых нюансов преобразования запроса в СКД.

31.05.2019    12101    0    waol    14    

Групповая обработка (Управляемая консоль отчетов)

Обработка документов Инструментарий разработчика Обработка справочников v8 v8::УФ v8::Запросы 1cv8.cf 1С:Франчайзи, автоматизация бизнеса Бесплатно (free)

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

13.05.2019    8349    0    Evg-Lylyk    10    

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

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

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

15.10.2018    26152    0    tormozit    100    

Не вполне очевидные приемы в конструкторе запросов

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

Приёмы работы с конструктором запросов (4 приёма).

23.04.2019    4188    0    ignor    2    

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

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

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

16.04.2019    17773    0    m-rv    17    

Excel vs 1С: битва с неожиданным исходом

Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Финансовые Управленческие v8 1cv8.cf Россия Бесплатно (free)

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    33774    0    bolefirenko    116    

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

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

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

20.09.2012    73676    0    tormozit    129    

Заметки по SQL: Запрос, получающий изменения ресурса в регистрах сведений по датам изменения за период

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

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

11.04.2019    4395    0    IVC_goal    11    

Альтернативный вариант расчета возраста (лет, месяцев, дней) запросом

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

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

11.04.2019    3406    0    lex_hrabovskyi    12    

Заметки по SQL: Генерация ряда дат и данные из периодических регистров на каждый день

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

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

05.03.2019    4315    0    IVC_goal    0    

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

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

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

11.07.2007    44767    0    tormozit    38    

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

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

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

10.11.2018    30603    0    ids79    40    

Отладка запроса с содержимым временных таблиц (управляемые формы)

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

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

01.11.2018    15182    0    Evg-Lylyk    55    

Из Excel в 1С запросом

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

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

14.08.2018    18722    0    m-rv    5    

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

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

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

10.09.2017    40524    0    tormozit    72    

Зачем запросу план и кто его выполняет?

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

Как определить, почему запрос выполняется слишком долго? Что происходит с запросом на стороне сервера баз данных? В статье приводится объяснение, что такое план запроса и для чего он нужен. А также говорится о том, в чем разница между потоком операторов и потоком данных, как работает оптимизатор и зачем нужна статистика.

09.08.2018    22286    0    Dem1urg    45    

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

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

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

25.07.2018    26245    0    grumagargler    26    

Повышаем эффективность разработки правил обмена

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

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    26136    0    olegtymko    47    

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

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

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

25.04.2019    14163    0    m-rv    2    

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

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

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

01.06.2018    27426    0    m-rv    21    

Строим графы средствами 1С (без GraphViz)

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

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    22874    0    slozhenikin_com    20    

Распределение расходов пропорционально продажам

Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Практика программирования Финансовый учет и бюджетирование (FRP) Учет доходов и расходов v8 v8::ОУ УТ10 УУ Бесплатно (free)

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    17009    0    Rustig    9    

Как настроить правильную техподдержку (helpdesk, service desk на коленке) Промо

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени v8 УУ Бесплатно (free)

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

24.04.2019    14907    0    siddy    0    

Универсальный обмен между идентичными конфигурациями через REST интерфейс OData. Часть І: Справочники

Перенос данных из 1C8 в 1C8 v8 Бесплатно (free)

Сейчас все чаще интеграции различных конфигураций проектируются через HTTP-сервисы - они и работают быстрее, и "войти" в режим отладки гораздо проще, тем самым обойдя "черный ящик" универсального обмена через xml, например. Более года назад я начал работать в компании, в которой разработчики работали с конфигурациями 1С в режиме совместимости еще 8.2.16 (менять режим совместимости в типичных базах мы не хотели) - а как Вы наверное знаете, если интересовались HTTP-сервисами в 1С, их использование в режиме совместимости 8.3.4 и ниже недопустимо - и здесь я уже не надеялся на разработку и использование HTTP-сервисов. Но позже меня заинтересовал такой "сервис" как REST интерфейс OData, так как его можно использовать не меняя режим совместимости конфигурации - именно он и стал для меня идеальным вариантом решения "нетривиальных" задач.

11.05.2018    21094    0    V.Stavinsky    11    

Генерация временного ряда запросом

Универсальные функции v8 v8::Запросы 1cv8.cf Бесплатно (free)

Способ генерации последовательности дат средствами языка запроса 1С.

07.05.2018    8108    0    dim_zal    6    

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

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

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

24.04.2018    42890    0    avfed@rambler.ru    26    

Минимализмы 3

Практика программирования Универсальные функции v8 Бесплатно (free)

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    43860    0    ildarovich    45