1С СКД. Использование менеджера временных таблиц.
ฝัง
- เผยแพร่เมื่อ 8 ก.พ. 2025
- Рассматривается использование менеджера временных таблиц при формировании отчета на СКД для оптимизации запросов к серверу баз данных. Пример замены запроса в наборах данных на общую временную таблицу с использованием regex.
Если вам нравится то что я делаю,
вы можете поддержать канал =)
карта мир сбер. 2202 2067 4136 1385
Телеграмм t.me/FastAbout1s
Dzen dzen.ru/fastab...
ВК fastabo...
Материалы из видео
#скдМенеджерВременнойТаблицы
#1сСкдМенеджерВременныхТаблиц
#1суроки
#видеоурок1с
#бесплатныеуроки1с
Случайно нашел ваши видео. Очень на уровне! Продолжайте в том же духе!
Спасибо! =)
я в захваті! яка чудова манера викладання, чітке подання. дуже вдячна авторові відео!
Дякую за відгук =)
Интересно, новая для меня возможность. Я раньше выходил из ситуации передачей таблицы значений в качестве параметра запроса в СКД
Да, стало проще
Подписался на тебя, так как сейчас учусь на 1С-программиста, что могу сказать сейчас по поводу твоих видео - интересно, конечно, но пока ничего не понятно ☺. Но видно, что ты круто соображаешь в этой теме 👍
Спасибо! =) Если вы только начинаете учится, будет сложновато для восприятия. Но скоро, дойдете и до этого уровня, если не бросите учиться. В реальной работе это точно пригодится.
@@fastAbout1s сколько вы уже в 1С-е?
10 лет
@@fastAbout1s а лет вам сколько, если не секрет?
38
Спасибо за ролик. Я бы предположил что данная технология полезна не столько для отчётов, сколько для использования СКД для пользовательских отборов или для решений подобных "печати этикеток и ценников" в типовой ут.
Теоретически можно найти разные применения
ничего не понял, но очень интересно
Пните в нужном направлении, как решить задачу с помощью СКД (и можно ли вообще): есть два комплекта Комплект1 = болт+гайка, и Комплект2 = болт+шайба. На складе 10 болтов, 10 гаек и 10 шайб. Можно ли с помощью СКД получить отчет который покажет что на складе
10 Комплект1 и 10 шайб
или (не важно)
10 Комплект2 и 10 гаек?
Можно. Но получается не особо просто. Сделать первую временную таблицу, в ней соединить таблицу остатков с таблицей комплектующий и высчитать количество комплекста. Потом еще раз соединиться с остатками и высчитать сколько осталось. На словах сложно объяснить, проще запрос написать.
ВЫБРАТЬ
КомплКомплектующие.Ссылка КАК Комплект,
МИНИМУМ(ОстОстатки.КолОстаток / КомплКомплектующие.Кол) КАК КолвоКомплекта
ПОМЕСТИТЬ втКомплекты
ИЗ
Справочник.Компл.Комплектующие КАК КомплКомплектующие
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Ост.Остатки КАК ОстОстатки
ПО КомплКомплектующие.Ном = ОстОстатки.Ном
СГРУППИРОВАТЬ ПО
КомплКомплектующие.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втКомплекты.Комплект КАК Комплект,
ОстОстатки.Ном КАК Ном,
втКомплекты.КолвоКомплекта КАК КолвоКомплекта,
ОстОстатки.КолОстаток - ЕСТЬNULL(КомплКомплектующие.Кол, 0) * ЕСТЬNULL(втКомплекты.КолвоКомплекта, 0) КАК Остаток
ИЗ
втКомплекты КАК втКомплекты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Ост.Остатки КАК ОстОстатки
ПО (ИСТИНА)
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Компл.Комплектующие КАК КомплКомплектующие
ПО (ОстОстатки.Ном = КомплКомплектующие.Ном)
И втКомплекты.Комплект = КомплКомплектующие.Ссылка
В структуре отчета сделать две группировки, комплекск и для его ресурса КолвоКомплекта агрегатная функция МАКСИМУМ или МИНИМУМ все равно. И вложенные делатальные записи. Тогда в обчете будет такой вывод: Комплект, кол-во комплекста который можно собрать из остатков и под комплектом остаток, который остался после сборки каждого коплекта
@@fastAbout1s насколько я понял выведутся в отчет оба комплекта, а в том-то и задача, что бы вывелся один комплект (любой) плюс "номенклатура", которая оказалась лишней, что бы у продажников не возникло ложное "ощущение", что они могу продать оба комплекта одновременно. Продажа идет исключительно в комплектах, при этом и производство из этого отчета должно понимать, что они "накосячили" и не укомплектовали 10 комплектов болтами, при производстве 10-ти болтов им все равно какой из комплектов на складе не укомплектован.
По моему не целесообразно тратить время на решение таких задач чисто на запросе. Запросом надо вытянуть данные, сколько остатков, сколько можно собрать комплектов, а потом уже кодом дописать более сложные проверки. Ну если хочется вывести это на СКД, то передать уже готовый расчёт в СКД через объект таблица значений. Возможно и можно придумать чисто на запросе, но вопрос в оправданности себестоимости такой разработки. Если день думать как его сделать, и потом его ещё сложно будет поддерживать и дорабатывать другим программистам. Я против решений, когда в запрос загоняют сложную логику. Это сложнее потом читать и дорабатывать. К тому же, чем сложнее запрос, тем больше вероятности что планировщик подберет менее оптимальный план выполннения, так как ему будет сложно понять большой и сложный запрос. И в целом он будет выполняться дольго. В итоге одни минусы: Писать такие запросы - дольше, поминать и дорабатывать - дольше, выполняться они будут дольше, потому что на сложные запросы планировкищу сложнее подобрать хороший план запроса.
Из стандартов разработки от 1С:
"2. С другой стороны, не следует пытаться любой ценой перенести выполнение задачи в СУБД. СУБД обычно оптимизирует и выполняет простые запросы более эффективно, чем сложные.
2.1. Следует рассмотреть альтернативные меры:
по подготовке различных (более простых, частных) текстов запроса в зависимости от предусловий и значений параметров запроса - вместо отправки в СУБД одного большого универсального запроса;
по более эффективной постобработке данных, выбранных запросом из СУБД, на стороне сервера 1С:Предприятия средствами встроенного языка.
2.2. При разработке запросов нужно быть уверенным, что они использует эффективные планы выполнения запросов. Для сложных запросов СУБД с высокой вероятностью выберет неправильный план выполнения запроса, что особенно актуально для СУБД DB2, PostgreSQL и Oracle.
Поэтому не следует неоправданно усложнять запрос"