Как читать чужой код? Часть 3. Разбор и доработка запросов

Публикация № 1516536 20.09.21

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

Чужой код чтение кода доработать чужой исправить оптимизация проверка помощь разработка запрос программный интерфейс

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

Сразу напишу вопросы, которые в статье не будут рассматриваться:

1. Разбор и отладка правил конвертации

2. Отладка фоновых заданий. 

3. Отладка асинхронных вызовов.

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

 

Кейс 5. Как разобрать и доработать запрос.

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

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

1. Запрос выдает не все данные, которые необходимы. Бывает, эта задача звучит так: Раньше работало нормально, а сейчас неверный результат заполнения чего-нибудь (документа, отчета, обработки).

2. Нужно добавить "несколько полей". 

3. Нужно, чтобы попадала и вот такая-то информация (в документ, движения, отчет, обработку).

4. Оптимизация работы запроса.

5. Нужно к существующему запросу добавить добавленный регистр(ы). 

Возможно, есть ещё какие-то сценарии доработки... Но главное - понять, какие шаги помогут разобраться в запросе!

1. Главное, что следует помнить, результат запроса - это таблица. Получилась эта таблица из других таблиц. Это означает, что при работе с запросами должна быть ассоциация работы с Excel. Ведь с Excel многие умеют работать! Например, условия запроса ни что иное как фильтр, который Вы наверняка с лёгкостью сможете накладывать в Excel.

2. Если таблицы большие (много колонок и много строк), представить себе результат запроса в голове очень сложно! Это должно мотивировать информацию либо записывать, либо распечатывать, либо сохранять в Excel и анализировать данные там. Конечно призыв печатать таблицы в 10 тыс и более записей можно поднять на смех... Это помогает, если запрос сложный, но его результатом является 100-200 записей. Такие данные вполне помещаются на 2х А4. Я использую сохранение данных в Excel и через наложение фильтров (включается Данные->Фильтры->Автофильтр) принимаю решение, какие данные из этой таблицы мне нужны, и какие отборы требуется наложить (или связи, если присоединяем к другой таблице). 

ВАЖНО: Не пытайтесь в голове представить, как выглядит результат запроса! Обязательно его выводите одним из предложенных ниже способов. Никогда Вы не сможете осознать, как отработали все связи, условия, как выглядят поля, которые получены через оператор ВЫБОР...КОГДА.

3. Выгрузить данные в таблицу можно следующими способами:

а. Если у Вас есть переменная с типом РезультаЗапроса, то нажмите Shift+F9 и напишите РезультатЗапроса.Выгрузить(). Результатом будет таблица значений.

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

Эти 2 способа помогут, если Вы работаете НЕ с временными таблицами, а с результирующим запросом.

Если необходимо посмотреть данные временной таблицы, можно воспользоваться одним из способов... Но здесь требуется обязательно использование объекта МенеджерВременныхТаблиц.

в. У менеджера временных таблиц есть свойство Таблицы. Когда Вы его просмотрите. то увидите что нумерация идёт с нуля. Чтоб посмотреть временную таблицу, нам требуется знать её номер! 

Далее необходимо нажать Shift+F9 и написать текст:

Запрос.МенеджерВременныхТаблиц.Таблицы[<НомерТаблицы>].ПолучитьДанные().Выгрузить(). 

На эту тему есть отдельные статьи, сильно расписывать не буду.

г. Написать простой запрос для получения таблицы из результата запроса:

 Запрос = Новый Запрос;
 
 Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
 
 Запрос.Текст = "ВЫБРАТЬ
                | *
                |ИЗ
                | " + ИмяВТ + " КАК ВТ";
 
 // Результат запроса возвращаем в качестве таблицы
 // значений для удобного просмотра. В случае
 // возникновения ошибки возвращаем ее описание
 Если ЗначениеЗаполнено(Сортировка) Тогда
     Запрос.Текст = Запрос.Текст + "
 	 |
 	 |УПОРЯДОЧИТЬ ПО
 	 |" + Сортировка; 
 КонецЕсли; 

 РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Советую таблицу сохранить как печатную форму. Это можно сделать в отладчике через Shift+F9, у Вас должен быть тип ТаблицаЗначений. Потом F2 - показать значение. Когда откроется таблица справа вверху есть пиктограмма "Вывести список". Выбираем список нужных полей и жмём ОК. После закрытия формы просмотра результатов увидим заполненный данными запроса макет в конфигураторе.

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

В результате описанных действий мы получили некоторую визуализацию данных. Следующая задача - разобраться с условиями и связями, которые влияют на попадание записей в результирующий запрос. Наверняка возникает вопрос: и что я должен увидеть в регистрах? Ответ очень прост: какие измерение, ресурсы, реквизиты заполнены и, главное, какими значениями. Здесь важно выполнить некоторый анализ данных. Со временем некоторые поля регистра становятся не используемыми и не заполняются данными. Например, В ЗУПе есть интервальные регистры. Так вот "ПустойИнтервал" уже не используется, т.к. изменился принцип создания записей в этих регистрах и пустых интервалов не стало! Это можно увидеть только зайдя в регистр. Т.к. смотря на него в конфигураторе сразу возникает желание написать условие "НЕ ПустойИнтервал". На самом деле это условие ничем не поможет, т.к. поле больше не используется!

Как известно, условия накладываются в следующей последовательности:

-- Сначала в параметрах виртуальных таблиц (если они используются в запросе)

-- Далее в связях между таблицами. Связи определяют, какие данные будут присоединены к основной таблице запроса.

-- В последнюю очередь работают условия в блоке после слова "ГДЕ". ВАЖНО: Эти условия накладываются уже на результат запроса, т.е. после объединения таблиц

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

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

Далее вносим какие-то изменения в запрос, запускаем отладчик, и получаем таблицу уже после Ваших изменений. Полученную таблицу также сохраняем в *.mxl.

Далее в 1С есть специальный пункт меню Файл->Сравнить файлы. В первый выбираем до изменений, во второй после, поле "Как" заполняем значением "Табличный документ". Жмём ОК и увидим разницу. Советую проверять эту разницу как можно детальней, т.е. как можно больше строк проанализировать и понять правильность их изменения. Часто бывает так, что неверная запись в запросе имеет 4-х значный порядковый номер! Если записей очень много (более 10 тыс.) советую пролистать на середину, там проверить пару тысяч записей, потом в конец и с конца проверить пару тысяч записей. Это позволит найти все ошибки в результате выполнения доработанного запроса.

6. Обратим внимание на главную таблицу запроса. В блоке соединений она слева и в тексте запроса и в конструкторе запросов. Если данные выбираются не из физической таблицы и не из временной, а из виртуальной таблицы, на это нужно обратить особое внимание. Виртуальные таблицы нигде не хранятся. Как известно, они формируются платформой в момент исполнения запроса. Состав записей в этой таблице зависит от параметров виртуальной таблицы. Чтоб разобраться какие данные она выдаёт нужно сделать 3 действия:

а. Написать (скопировать) отдельный запрос с теми же параметрами без соединений с другими таблицами и без блока условий "ГДЕ". Результат запроса просматриваем и анализируем как описано выше. Это позволит понять, как выглядит главная таблица запроса без всяких дополнений.

б. Стереть в скопированном запросе параметры виртуальных таблиц. Стереть нужно все кроме периода. Так Вы увидите какие записи отфильтрованы параметрами виртуальных таблиц. 

в. Почитать в статье об используемой виртуальной таблице! Сделать это надо сразу! Несмотря на то, что я написал последним пунктом. Ибо если Вы не знаете назначение таблицы, только чудо может Вам помочь написать или исправить написанный запрос!

7. Теперь тем же способом изучим влияние условий в секции "ГДЕ" на результат запроса. Иногда условия настолько сложны и их так много, что даже опытным разработчикам не очевидно, какое из условий удаляет из результата нужную запись. В такой ситуации делаем следующие действия:

а. Комментируем все условия и смотрим на "грязный" результат запроса. Убеждаемся, что в нём есть нужные записи. 

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

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

8. Осталось проанализировать соединения. Самое простое соединение - ЛЕВОЕ. Причина в том, что левое соединение не уменьшает количество записей. НО! Если в связях задать недостаточное количество условий, то количество записей может увеличиться. Поиск дублей это одна из задач, с которой сталкиваются разработчики. Самый простой способ дописать "РАЗЛИЧНЫЕ" после слова "ВЫБРАТЬ". Но способ костыльный и не всегда спасает! Поэтому надо разбираться в соединениях! Вот какие действия нужно предпринять:

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

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

в. Если это не получается, советую воспользоваться группировкой результата запроса. Она уберёт лишние записи. По влиянию на результат запроса конструкция "ВЫБРАТЬ РАЗЛИЧНЫЕ" и "СГРУППИРОВАТЬ ПО" совпадают, если группировку сделать по всем полям запроса. НО! Группировка позволяет к некоторым полям применять агрегатные функции. Это может быть полезно с точки зрения результата и показывает, что запрос был осознанно написан автором. Выбор различных чаще показывает нежелание разбираться в запросе и костыльный вариант решения задачи.

г. Как разобраться с другими видами соединений? Разберём ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Это соединение предназначено для фильтрации данных. Многие не профи разработчики его используют повсеместно вместо условий в конструкции "ГДЕ". Такое использование часто на практике приводит к потере нужных записей. Связано это с тем, что мы не можем спрогнозировать мысленно как отработает соединение на всех записях запроса. Возникает эта проблема при больших размерах таблиц. Как минимум для проверки таких запросов рекомендую использовать ЛЕВОЕ СОЕДИНЕНИЕ, а лишние записи фильтровать условием НЕ ЕСТЬ NULL. Причём сначала нужно увидеть результат соединения, проверить много записей (как описано выше), а потом уже накладывать условие. Часто именно в результате такой проверки и придумываются условия, которые нужно наложить. 

ВАЖНО: Если условия накладывать в связях и использовать ВНУТРЕННЕЕ СОЕДИНЕНИЕ, Вы не увидите, какие записи исключаются из результата запроса. Использование этого соединения оправдано для небольших таблиц, когда точно известно какие записи есть в каждой из таблиц и какие записи будут исключены. Если принято решение использовать этот вид соединения, необходимо проверять его через ЛЕВОЕ СОЕДИНЕНИЕ с условием НЕ ЕСТЬ NULL.

Замена внутреннего соединения на левое помимо проверки обычно позволяет и разобраться в таком запросе. Начинают отображаться скрываемые записи и через сравнение таблиц можно увидеть что поменялось.

9. Осталось разобраться с конструкциями ПОЛНОЕ СОЕДИНЕНИЕ и ОБЪЕДИНИТЬ ВСЕ. Рассмотрю эти конструкции вместе, т.к. обе конструкции приводят к появлению лишних записей и нужно крайне аккуратно ими пользоваться. Более того, конструкция ПОЛНОЕ СОЕДИНЕНИЕ помимо того что они лишние, создаёт их с полями со значением NULL. Рассмотрим действия, которые с одной стороны помогут разобраться в запросе, а с другой не наделать ошибок при использовании этих конструкций. Вот что важно знать:

а. Конструкцию ПОЛНОЕ СОЕДИНЕНИЕ использовать как можно реже, когда нет возможности решить задачу по-другому.

б. Не путать эти конструкции между собой! Соединение предназначено для схлопывания совпадающих по условиям связей записей и добавления записей из обеих таблиц, которые не соответствуют условиям связи. При использовании соединения нам неважно, сколько полей в соединяемых таблицах! Мы берем только необходимые нам поля и всё. Например, есть 2 таблицы по 200 записей. 150 записей по условиям связи совпали. Это значит, что в результате запроса будет 250 записей. 

в. Вторая конструкция предназначена для объединения таблиц с однотипной информацией. Более того, количество и тип значения полей в объединяемых запросах должны совпадать. Количество должно совпадать обязательно, а тип значения желательно! Здесь нет никаких условий уже. Если взять те же таблицы по 200 записей, то итоговое количество записей будет 400. Если в конструкторе запроса в одном из запросов не указать значение поля, автоматически подставится значение NULL. Следовательно, если видите в тексте объединяемого запроса NULL необходимо задуматься, вдруг это ошибка и данное поле можно заменить на нормальное значение. Если в первом запросе поле примитивного типа, значит необходимо заменить на пустое значение примитивного типа. (Ложь, 0, "", Дата(1,1,1,0,0,0)). Если далее поля будут суммироваться, то хотя бы ошибки не будет. 

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

д. Если в запросе с "ОБЪЕДИНИТЬ ВСЕ" много объединяемых запросов, то понять, из какого запроса запись, очень сложно! Это является проблемой, когда в получившейся таблице есть неверные или лишние записи. Чтоб это исправить, необходимо понять, какой из объединяемых запросов выдал эту запись. Для этого необходимо добавить во все запросы первым поле "НомерЗапроса". Т.е. добавить строку "1 КАК НомерЗапроса,". В результирующем запросе можно будет понять, какие записи из какого запроса попали. Далее уже можно будет разобрать отдельный запрос, как это описано выше. Смотрим на условия, соединения, изучаем исходные таблицы и т.д. 

е. Как уже писал, при использовании "ПОЛНОЕ СОЕДИНЕНИЕ" могут появиться в некоторых полях значения NULL. Это значение появится в двух случаях:

-- Если в правой таблице по условиям связи не находится записи, то все поля, получаемые из правой таблицы будут иметь значение NULL. Необходимо воспользоваться функцией ЕСТЬNULL и продумать, чем заменить значение NULL.

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

ВАЖНО:

Из этого следует, что ВСЕ поля запроса при использовании "ПОЛНОЕ СОЕДИНЕНИЕ" должны быть обработаны с помощью функции ЕСТЬNULL. При разборе чужих запросов часто сталкиваюсь с ошибками из-за того, что эту функцию не используют. 

Та же проблема есть при использовании "ЛЕВОЕ СОЕДИНЕНИЕ". Все поля из правой таблицы должны быть обработаны функцией ЕСТЬNULL.

Т.к. при использовании "ВНУТРЕННЕЕ СОЕДИНЕНИЕ" попадают только записи, которые есть в обеих таблицах, значение NULL появиться в запросе не может! Значит использовать функцию ЕСТЬNULL на всякий случай не нужно! Это уже будет выглядеть как непонимание работы соединений. 

Некоторые приёмы, для облегчения разбора запросов:

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

2. Посмотрите, где используется результат запроса? Его используют обычно так:

-- Для заполнения таблиц/табличных частей

-- Для формирования движений

-- Для проверки правильности каких-то данных

-- Запросы для заполнения отчетов и регламентированной отчетности.

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

3. Проверяйте в отладчике каждую временную таблицу или каждый написанный запрос. Это позволит вовремя заметить ошибку, устранить её сразу и далее написать верные запросы. Если пропустить ошибку и обнаружить её через пару недель, то будете заново разбираться в своём же запросе

4. Если текст запроса собирается в разных процедурах, найдите место, где он уже собран полностью, и через Shift+F9 посмотрите полный текст запроса. Рекомендую его скопировать и закинуть в конструктор запросов. Далее последовательно открывайте отладчиком временные таблицы и анализируйте запрос, который их получает. 

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

Осталось рассмотреть особенности разбора запроса для его оптимизации.

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

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

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

-- Если есть потребность обратиться во вложенном запросе к физической таблице - желательно, чтоб эта таблица была маленькой, до 1000 записей. Например, справочник Организации, Подразделения, Склады и т.д. 

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

3. При использовании виртуальных таблиц остаточного регистра накопления не нужно без надобности использовать таблицу ОстаткиИОбороты. Её формирование занимает некоторое время, даже если использованы отборы в параметрах виртуальных таблиц.

4. Есть простые правила при наложении условий и связей:

-- Не использовать конструкцию ИЛИ в условиях и связях если используются физические или виртуальные таблицы. Конструкция ИЛИ отключает использование индексов.

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

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

5. Старайтесь не использовать разыменовывание полей. Если необходимо вытащить поля справочника Организации, то можно не делать ЛЕВОЕ СОЕДИНЕНИЕ, т.к. присоединяемая таблица маленькая. Вряд ли возникнут сложности с таким запросом. Но если необходимо вытащить поля справочников Номенклатура, Сотрудники и т.п. обязательно добавлять таблицу справочника в запрос и связывать по Ссылке левым соединением.

6. Отдельно напишу, что разыменовывание полей составного типа может привести к сильному замедлению работы, в каких-то случаях даже к серьёзным тормозам всего сервера! Делать так ЗАПРЕЩЕНО! Необходимо присоединять нужную таблицу левым соединением. 

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

Наверное есть ещё какие-то ситуации, в которых нужно оптимизировать запросы... Описал самые критичные случаи. Есть главное правило: соблюдайте стандарты разработки 1С и проблем в коде у Вас не будет. Для запросов это правило работает где-то в 90% случаев. Но на больших объёмах данных бывают ситуации когда лучше нарушить стандарт, чтоб запрос работал быстрее. Этот кейс рассматривать не стану, т.к. нарушать правила надо осознанно и очень аккуратно!

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

Остальные части доступны по ссылкам:

Часть 1. Общие вопросы. Доработка чужого кода. Code review.

Часть 2. Доработка типовой конфигурации. Обновление доработанной типовой конфигурации.

Часть 4. Программный интерфейс. Исправление чужих доработок.

Добавляйте себе в избранное,  ставьте "+". Статья разрабатывалась 1,5 месяца, а опыт копился 18 лет!

 

Также напомню о своих предыдущих публикациях, в особенности про статью об архитекторе. Текст статьи полностью переработан, сглажены углы. Будет интересно, даже если уже читали. Вот ссылки:

1. Кто такой архитектор. Редакция 2!

2. Пример работы с файлами odt в клиент-серверной модели работы

3. Использование ПоказатьВопрос() в событии НачалоВыбора()

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. hiduk 110 20.09.21 15:40 Сейчас в теме
Не увидел про консоль запросов - на мой взгляд очень удобный механизм.
2. biimmap 317 20.09.21 15:49 Сейчас в теме
(1) Не готов разделить Ваш взгляд. В своей практике им не пользуюсь, потому и не описал. Всё таки статья про мой личный опыт. Есть много способов других посмотреть результат.

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

С другой стороны и не возражаю против того, когда его используют. Дело вкуса и привычек. Главное, чтоб смотрели на результат запроса до и после изменений. А как это будут делать не столь важно. Я предложил свои способы.
3. ritchie 20.09.21 17:43 Сейчас в теме
(2)
>Если нужны временные таблицы, которые формируются где-то вне процедуры/функции, консоль не >подходит
Что это значит?НЕ использовать консоль?
Самое простое добавть в запрос
; выбрать * из НужнаяВременнаяТаблица
4. biimmap 317 20.09.21 18:46 Сейчас в теме
(3) Что использовать, а что нет - каждый решает сам. Ещё раз повторюсь, что я не использую. Но никому не навязываю свой подход.

Откуда ж выбирать планируете, если временные таблицы программным интерфейсом получаются?
5. gybson 20.09.21 19:43 Сейчас в теме
(4) В отладчике можно посмотреть и скопировать текст запроса. Временные таблицы добавить в пакет тоже не огромная проблема.
6. biimmap 317 20.09.21 19:47 Сейчас в теме
(5) Не спорю. А задайте себе вопрос: ЗАЧЕМ? Если там же в отладчике можно и продолжить разбор запроса! Появляется лишнее звено в работе, для обслуживания которого нужно потратить время.

И вот далеко не всегда закинуть таблицы в пакет можно легко! Не отговариваю... Просто обдумайте выхлоп от Ваших действий.
8. gybson 20.09.21 20:36 Сейчас в теме
(6) чтобы не копировать таблицы в эксель, например. В консоли сразу будет видно, что какая-то из временных таблиц пустая и соединение с ней дает пустой результат, например. И в принципе при разработке запроса удобнее его разрабатывать на живых данных, а не абстрактно.
9. biimmap 317 20.09.21 20:42 Сейчас в теме
(8) Если почитать внимательно, то в Эксель таблицы предлагаю выводить для их анализа. И анализ не на пустоту таблицы. Вторая причина вывода - сравнить до и после. Я понял, что Вы фанат консоли. Уверен не одинокий фанат)))

Как раз в отладчике я и смотрю всё без консоли, чтоб на реальных данных. Я не пишу отчеты, мне не для этого нужно запросы смотреть. Обычно меняю сложную логику расчетов в документах, либо пишу сложные обработки. В тексте упоминал, что разработку веду только в отладчике и только на реальных данных. никакие тестовые примеры не признаю.
23. SirStefan 47 23.09.21 17:29 Сейчас в теме
(6), в Инструментарии Разработчика одной строчкой в табло запрос со всеми таблицами переносится из отладчика в консоль запросов. Зачем? Чтобы иметь возможность изменять запрос и смотреть что получится. Это гораздо удобнее, стоит попробовать.
24. biimmap 317 23.09.21 17:36 Сейчас в теме
(23) Вы невнимательно читали, когда я писал, что временные таблицы динамически формируются в разных функциях в разных модулях... Чем мне поможет консоль здесь?

!!!Для всех фанатов консоли напишу!!!: когда был ЗУП 2.5 и УПП, я тоже ей пользовался в древние времена. Но там запрос располагался в одной процедуре, его не надо было собирать по 10 модулям. Потом, когда коллеги подсказали, что можно написать процедуру ПолучитьВТ, больше ни разу не пользовался без потери для скорости и качества разработки!
20. Rustig 1293 22.09.21 10:01 Сейчас в теме
(5) автор статьи, Павел, забыл написать, что в основном он работает с ЗУПовскими запросами - портянками запросов, которые складываются программно... Его метод имеет право на жизнь....
26. gybson 27.09.21 20:09 Сейчас в теме
(20)проведение документов в ERP и УТ такая-же портянка. Но собрать то ее надо один раз всего. Конечно печально, когда по ходу дела туда таблицы значений могут подкладывать, но это не так сложно переделать на временную таблицу. Зато сразу можем работать с условиями и отборами и все на живых данных. Да и создание нового запроса изначально удобнее вести в консоли, а это не такая и редкая задача =)

Особенно радует, что текст под замену в запросах оформляют параметром и часто можно его так и оставить "неопределено".
19. Rustig 1293 22.09.21 09:58 Сейчас в теме
(1) вы какой консолью пользуетесь? и с какими конфигурациями работаете? и с какими блоками учета?
21. biimmap 317 22.09.21 10:16 Сейчас в теме
(19) Ты вроде написал, что моя специфика - ЗУП. Я правда не вижу плюсов в консоли))) Поэтому просто в отладчике всё разбираю. Вставляю в свой код ПолучитьВТ() и довольно быстро всё анализирую.
22. Rustig 1293 22.09.21 10:30 Сейчас в теме
(21) Павел, ты явно ошибся. Я не тебе вопрос задал про консоль.
25. hiduk 110 24.09.21 10:14 Сейчас в теме
(19) Обработка "Запросник", Автор доработок: Тезин Владимир. Бухгалтерия предприятия 3, УПП. С ЗУП-ом признаюсь, дело не имею.
7. gybson 20.09.21 20:18 Сейчас в теме
Типовой код в УТ =))

"|	АналитикаУчетаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование,"


Да, формирование печатной формы, не очень серьезная нагрузка.

Но и далее видим

"|	Остатки.АналитикаУчетаНоменклатуры.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения," в процедуре ЗапросРаспределенияРезервовПоТаблицеОстатков


И там полно такого кругом и даже в расчете НДС и везде вообще.

И для примера берем запросы

ВЫБРАТЬ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура.ЕдиницаИзмерения) КАК АналитикаУчетаНоменклатурыНоменклатураЕдиницаИзмерения
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты КАК ВыручкаИСебестоимостьПродажОбороты

и

ВЫБРАТЬ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура2.ЕдиницаИзмерения) КАК АналитикаУчетаНоменклатурыНоменклатураЕдиницаИзмерения
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты КАК ВыручкаИСебестоимостьПродажОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура2
			ПО КлючиАналитикиУчетаНоменклатуры.Номенклатура = Номенклатура2.Ссылка
		ПО (ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка)
Показать


Разницы в скорости почти никакой и первый в среднем быстрее даже. В выборке 29к записей

Отчет "Выручка и себестоимость продаж"

"КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)"
- а ведь ссылка тут это то самое поле составного типа.

Итого, с точкой в целом можно не заморачиваться и никто уже этого и не делает в типовых.
10. biimmap 317 20.09.21 20:46 Сейчас в теме
(7) Т.к. сам работал в 1С... Знаю что код тестируется на предмет временных затрат. Возможно коллеги сумел как-то сделать оптимальным то, что считают грубой ошибкой. Это можете на конференции спросить, Вам ответят сами разработчики.

Так писать можно, если разыменовывается небольшая таблица. Конечно, справочник Номенклатура таковой не назовёшь... Но всё же не стану пропагандировать такой способ. Ну и кстати место это в отчете! К отчетам обычно меньше требований предъявляется. Попробуйте найти подобное в алгоритмах проведения или расчета себестоимости... Вряд ли.
11. gybson 20.09.21 21:42 Сейчас в теме
(10) Не боги горшки обжигают =) Берем "Управление холдингом", в нем регистр "ЛимитыПоБюджетам". Это оборотный регистр. Как коллеги из 1С получают из него остатки в отчете по лимитам? Ну правильно, берут временную таблицу без указания периода и складывают-вычитают нужные обороты. И тут заказчик просит добавить столбец с лимитом на определенную дату.

Да просто там же посмотреть Функция ВыполнитьКонтрольЛимитов(Запрос) в модуле КонтрольУХБюджетныеЛимиты. Запрос прям ух
12. biimmap 317 20.09.21 21:49 Сейчас в теме
(11) УХ и ЕРП (КА, УТ) пишут разные отделы) В каждом отделе свои подходы
13. gybson 21.09.21 08:57 Сейчас в теме
(12)У Вас рекомендации для какого отдела? :)

Тогда уж стоит отдельно упомянуть и о виртуальных таблицах регистров бухгалтерии, где неумелый запрос может не выполниться вообще никогда.
rybolovlev_ms; +1 Ответить
14. biimmap 317 21.09.21 09:46 Сейчас в теме
(13) Для всех вроде бы))) Старался писать без привязке к конфигурации. Только в разборе программного интерфейса писал про ЗУП, но в остальных конфигурациях тот же подход.
15. bulpi 188 21.09.21 12:42 Сейчас в теме
" Но если необходимо вытащить поля справочников Номенклатура, Сотрудники и т.п. обязательно добавлять таблицу справочника в запрос и связывать по Ссылке левым соединением."

ИМХО, sql сам добавит таблицу, и результирующий план запроса будет одинаковым. А текст запроса проще и компактнее.
16. alex_sayan 21.09.21 18:19 Сейчас в теме
вакансиях есть требование - умение читать чужой код


По-моему самое нелепое из всех требований. Нужно уметь писать простой и понятный код. Нужно наводить порядок, а не искать тех, кто сможет жить в беспорядке
17. biimmap 317 21.09.21 19:13 Сейчас в теме
(16) Что ж в нём нелепого? У всех разное время уходит на разбор кода. А есть начинающие спецы, которые сложные моменты в принципе не могут разобрать. Так что требование норм, наряду с умением писать нормальный код.
18. alex_sayan 22.09.21 08:08 Сейчас в теме
(17) это требование звучит как "умение находить вещи в заваленном шкафу". Первостепенным должно быть наведение порядка, а не умение приспосабливаться к беспорядку
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

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

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

12.12.2020    4742    Eugen-S    23    

СКД: 5 советов, как сделать лучше

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

Несколько примеров решения задач с использованием разных подходов

27.10.2021    4807    Neti    19    

Как читать чужой код? Часть 4. Программный интерфейс. Исправление чужих доработок

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

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

20.09.2021    1537    biimmap    7    

Как читать чужой код? Часть 2. Доработка типовой конфигурации. Обновление доработанной типовой конфигурации

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

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и главное как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

20.09.2021    1697    biimmap    24    

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

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

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

27.01.2016    86085    Serginio    116    

Как читать чужой код? Часть 1. Общие вопросы. Доработка чужого кода. Code review

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

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

20.09.2021    6228    biimmap    55    

Полезные примеры СКД, ч.2

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

Еще несколько примеров решения задач в СКД.

06.04.2021    11108    Neti    8    

Неочевидные нюансы записи управляемой формы

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

Разберем несколько нюансов записи управляемой формы.

02.04.2021    13437    SeiOkami    54    

Звуковое управление в 1С 8.3 Промо

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

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7351    velemir    33    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    43113    rayastar    51    

Пример работы с файлами odt в клиент-серверной модели работы

Практика программирования v8 1cv8.cf Абонемент ($m)

Возникла задача, реализовать печатные формы из шаблонов в формате ODT (Open Office). Особенность задачи заключалась в том, что шаблоны хранятся в виде файлов на сервере. Печать должна выполняться через веб-клиент. По выбору пользователя заполненный шаблон выводится либо в ODT либо PDF. Столкнулся с дефицитом информации по этой теме. По этой причине в самой статье опишу подход к решению задачи и особенности, связанные с работой на сервере и веб-клиенте. Прикладываю обработку, в которой все реализовано. Вам останется только отредактировать 2 функции, в которых указан список параметров шаблона. Остальной код универсальный и не зависит от конфигурации. Данная доработка выполнялась в самописной конфигурации и не требует наличия БСП. Сразу напишу, что размышления о том, что можно поместить шаблон в конфигурацию и выполнить всё на клиенте совсем не уместны. Разработка велась на платформе 8.3.16, на более ранних версиях также должна работать.

1 стартмани

01.02.2021    3097    7    biimmap    1    

Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)

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

Покажу точки входа для доработки "типового" проведения документов в ERP для регистров оперативного учета. Рассмотрим три основные ситуации: нужно изменить имеющееся проведение документа; нужно сделать записи в существующие регистры; нужно с нуля описать алгоритм проведения в добавленный регистр. Пример реализован на 1С:ERP Управление предприятием 2 (2.5.4.120)

10.01.2021    11193    BuriyLesha    10    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

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

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    9093    comol    31    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

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

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

30.08.2020    20726    quazare    34    

Возможности работы со строками при помощи БСП, которые должен знать каждый программист

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

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

05.07.2020    14187    quazare    37    

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

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

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

10.12.2016    41232    unichkin    74    

Серверные вызовы, которые нельзя вызывать

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

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    9511    SeiOkami    34    

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    82256    user5300    24    

Конвертация расширения cfe в конфигурацию сf руками

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

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

18.03.2020    11069    wtlz    35    

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

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

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

15.10.2018    36315    tormozit    106    

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

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

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

27.01.2020    67427    ids79    27    

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

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

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

15.01.2020    44517    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

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

30.12.2019    36282    kuzyara    38    

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

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

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

20.09.2012    82988    tormozit    131    

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

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

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

02.12.2019    24699    YPermitin    63    

Обновление релиза измененной типовой конфигурации

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

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

29.11.2019    15527    John_d    76    

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

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

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

22.11.2019    12513    Sibars    19    

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

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

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

11.07.2007    54681    tormozit    51    

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

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

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

01.10.2019    53968    Yashazz    56    

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

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

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

06.09.2019    105569    rpgshnik    77    

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

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

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

05.09.2019    79231    ids79    56    

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

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

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

10.09.2017    51477    tormozit    74    

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

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

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

05.09.2019    47533    YPermitin    25    

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

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

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

03.09.2019    30353    YPermitin    81    

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

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

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

17.08.2019    45702    ids79    22    

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

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

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

25.04.2019    18092    m-rv    3    

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

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

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

08.08.2019    155992    ids79    75    

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

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

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

02.08.2019    61943    avalakh    27    

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

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

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

31.07.2019    42788    json    17    

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

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

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

16.04.2019    23455    m-rv    18    

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

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

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

26.07.2019    107827    ids79    17    

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

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

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

17.07.2019    49106    ids79    27    

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

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

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

09.07.2019    34340    YPermitin    15    

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

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

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

01.06.2018    37293    m-rv    23    

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

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

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

04.07.2019    22656    SeiOkami    53    

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

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

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

02.07.2019    86061    ids79    18    

Регистры накопления. Виртуальные таблицы. Часть №2: "Остатки" и "Остатки и обороты"

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

Описание работы платформы 1С:Предприятие 8.2 с виртуальными таблицами регистров накопления "Остатки" и "Остатки и обороты". Анализ SQL-запрос при работе с виртуальными таблицами

22.05.2019    45402    YPermitin    8    

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

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

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

05.12.2017    30836    itriot11    34    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

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

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    47107    YPermitin    8