Последние сообщения

#51
7.7 / Re: Как ускорить вывод таблицы...
Последний ответ от trad - 18 ноября 2025, 09:09
Убрать автовысоту строк таблицы, сделать ее фиксированной
#52
7.7 / Re: Как ускорить вывод таблицы...
Последний ответ от ADirks - 18 ноября 2025, 07:30
Вот такой вот есть простенький тест
#53
7.7 / Как ускорить вывод таблицы (mo...
Последний ответ от Харлампий Дымба - 17 ноября 2025, 23:49
Может кто разбирался в теме или ссылкой поделится.
Ну вот любят построить отчет на 10000+ строк и на 20+ колонок, да с расшифровкой.
Понятно, что всё содержимое ячеек я готовлю в модуле, и в макет вывожу уже строковое значение. Но всё равно львиная доля времени формирования отчета тратится именно на вывод макета.
Какой способ вывода в moxel самый быстрый?
#54
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от trad - 16 ноября 2025, 21:00
ВсеВошедшиеВЗапрос применять можно для шахматок
#55
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от Харлампий Дымба - 16 ноября 2025, 18:40
Ну просто много тонкостей в зависимости от того по чему строится запрос. Например, "Обрабатывать НеПомеченныеНаУдаление" - работает для  запроса к справочнику, но игнорится для запроса к регистру. "Все" и "Все ВошедшиеВЗапрос" - тоже по разному работают для справочников и для регистров, а также в зависимости от фильтров. Расписывать все варианты на три страницы - нет общественного запроса.

Что касается регистра - ты же все правильно расписал выше сам - (1)строится запрос к остаткам регистра и (2)потом полученная выборка добивается товарами с нулевыми остаткам - если есть "Все" или "Все ВошедшиеВЗапрос".
И вот тут важно - если запрос к остаткам регистра (1) пустой, то добивания (2) не происходит.

Цитата: Злоп от 16 ноября 2025, 16:01По-прежнему непонятно что такое все вошедшие в запрос
Для регистров (2 склада, 3 товара, удовлетворяющих отбору по Условие()):

//Только то, что есть на остатках
Группировка Склад Без групп;
Группировка Номенклатура Без групп;

|Склад     |Товар     |Остаток     
Склад1Товар110
Склад1Товар215
Склад2Товар120

//по каждому складу, добиваем полный список товаров
Группировка Склад Без групп;
Группировка Номенклатура Без групп Все;

|Склад     |Товар     |Остаток     
Склад1Товар110
Склад1Товар215
Склад1Товар30
Склад2Товар120
Склад2Товар20
Склад2Товар30

//По каждому складу добиваем список товаров теми, что есть на остатках и на других складах из запроса
Группировка Склад Без групп;
Группировка Номенклатура Без групп Все ВошедшиеВЗапрос;

|Склад     |Товар     |Остаток     
Склад1Товар110
Склад1Товар215
Склад2Товар120
Склад2Товар20


#56
7.7 / Re: КОПИЛКА: здесь всякие редк...
Последний ответ от amo|obs - 16 ноября 2025, 17:22
Не добавляется в список значений значение неопределенного типа данных!
#57
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от Злоп - 16 ноября 2025, 16:01
Да как сто вывести я как-то соображу.
По-прежнему непонятно что такое все вошедшие в запрос
#58
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от Харлампий Дымба - 16 ноября 2025, 13:43
А, ну да. Затупил в том плане, что Склады можно не укладывать в список.
//Товар - k-ая группировка из n
Пока Запрос.Группировка(1) = 1 Цикл
..
Пока Запрос.Группировка(k-1) = 1 Цикл
 Для СчетчикТоваров = 1 По СписокТоваров.РазмерСписка () Цикл
  ТекТовар = СписокТоваров.ПолучитьЗначение(СчетчикТоваров);
  Если Запрос.Получить(Запрос.ЗначениеГруппировки(1)..,Запрос.ЗначениеГруппировки(k-1), ТекТовар ,,,,,,) = 1 Тогда
   //отрабатываешь нижележащие группировки по товару с остатком
   Пока Запрос.Группировка(k+1) = 1 Цикл
    ..
    Пока Запрос.Группирока(n) = 1 Цикл
     //дошли до конца
    КонецЦикла;
    ..
   Запрос.Получить(Запрос.ЗначениеГруппировки(1)..,Запрос.ЗначениеГруппировки(k-1);//вернемся на начало выборки по товару
  Иначе
   //отрабатываешь товар без остатка
  КонецЕсли;
 КонецЦикла;
КонецЦикла;     
..
КонецЦИкла;

Цитата: Злоп от 15 ноября 2025, 00:26как черным запросом получить отчет по остаткам товаров из списка, когда по всем товарам в списке - нет остатков?
Ты хочешь получить пустографку со складами и товарами? А как тогда определить какие склады должны быть в этой пустографке, если остатка нет ни по одному?
Ну а так - в случае, если выборка по остаткам оказалась пуста, делай вторую выборку по справочнику товаров (и складов?), где для товаров(не для складов!) используй "без групп все ВошедшиеВЗапрос". Можно даже и функции свои добавить (типа "Функция КонОстКоличество = Сумма(0);"), чтобы структура выборки оказалась идентична той, что по остаткам - тогда у тебя обход группировок не будет различаться.

#59
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от Злоп - 16 ноября 2025, 03:11
какой-то адский ад
если группировок больше - мутузить кучу циклов или писать универсальную какую-то рекурсию.. по получению данных? что-то это как-то не очень...
#60
7.7 / Re: Все ВошедшиеВзапрос - пояс...
Последний ответ от Харлампий Дымба - 16 ноября 2025, 01:25
Все и Все ВошедшиеВЗапрос - почти всегда злобное зло. Всегда избегать - если надо, распишу.

Цитата: Злоп от 15 ноября 2025, 00:26И как это сделать?
//1. Убрать слово Все из запроса;
//2. СписокТоваров - содержит твою специфкацию на 5 позиций.

СписокСкладов = СоздатьОбъект("СписокЗначений");
Пока Запрос.Группировка(1)  = 1 Цикл
 СписокСкладов.ДобавитьЗначение(Запрос.Склад);
КонецЦикла;
Для СчетчикСкладов = 1 По СписокСкладов.РазмерСписка() Цикл
 ТекСклад = СписокСкладов.ПолучитьЗначение(СчетчикСкладов);
 Для СчетчикТоваров = 1 По СписокТоваров.РазмерСписка () Цикл
  ТекТовар = СписокТоваров.ПолучитьЗначение(СчетчикТоваров);
  Запрос.вНачалоВыборки();//люблю перестраховаться 
  Если Запрос.Получить(ТекСклад, ТекТовар) = 1 Тогда
   //отрабатываешь остаток
  Иначе
   //отрабатываешь пустой остаток
  КонецЕсли;
 КонецЦикла;
КонецЦикла;

+Можно чуть поускорять запрос.