Форум Кладовочки АЛьФ`а

Обсуждение проектов => Дружественные проекты => Тема начата: Злоп от 06 декабря 2024, 12:01

Название: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Злоп от 06 декабря 2024, 12:01
Вот есть ИТЗ. В ней есть колонки (условно) "товар" и колонка со статусамив товаров, статусы задаются через Перечисление. Пусть это для примера будут перечисление Раз, Два, Три. На один товар, может быть несколько статусов. ИТЗ заполняется из Регистр.ВыгрузитьИтоги().
.
Статусов всего немного, 3 значения.
.
Требуется отсортировать или обеспечить выборку/перебор строк ИТЗ по товарам по "приоритетности" значений перечислений. Сначала должны обрабатываться строки по товару со статусом "Раз", потом этот же товар со статусом "два" итд. Т.е. порядок обработки д.б. такой:
.
ТоварN,Раз
ТоварN,Два
ТоварN,Три
----------
ТоварY,Раз
ТоварY,Два
----------
ТоварХ,Два
----------
ТоварM,Два
ТоварM,Три
----------
.
Сделать доп.колонку числовую и пробежаться по ней и для Раз проставить 1, для Два проставить 2 и потом отсортировать как надо? - как-то не очень красиво и как такое заполнение сделать быстро?
.
Или как еще?
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Djelf от 06 декабря 2024, 12:08
ЛевоеСоединение (https://www.1cpp.ru/docum/icpp/html/IndexedTable.html#leftjoin) с ит с колонками СтатусПеречисление, СтатусЧисло  по  СтатусПеречисление
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Djelf от 06 декабря 2024, 17:23
P.S. я эти чтучки очень хорошо знаю, интенсивно пользовалься ими до выхода 1sqlite в реальный продакшен.
Джойны работают четко, последовательность применения нужно делать так как было бы в запросе - замечательная штука в ИТ.
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Злоп от 07 декабря 2024, 19:57
Я думал мало-мало чтото подобное. На малых выборках разницы по времени простого перебора и проставления 1,2,3 вряд ли будет ощутимо, на больших - хз...
Разве что упрощение кода по заполнению...
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Djelf от 08 декабря 2024, 15:00
А что ты считаешь большими таблицами?  ;D
На табличке в 3кк строк, заполнение левым соединением в 30 раз быстрее, чем перебор. 
249 мс, против 7387мс, а это уже существенно!
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Злоп от 08 декабря 2024, 16:44
Значит, попробую джойном. Если получится.
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Djelf от 08 декабря 2024, 16:57
А самому было попробовать сложно?  :(
Зачем ты перекладываешь тестирование на других людей? 
Ну нет у нас все случаи жизни тестов, нет! 5-10 минут на создание твоего теста ушло... 
Сам мог бы сделать пару дней назад...
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Злоп от 09 декабря 2024, 05:39
Ээээ, как говорила чья-то бабушка
"Дай бог все уметь, но не дай бог самому все делать" ;-)
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Злоп от 10 декабря 2024, 20:12
А если такой вариант?
.
// ТипРезерва - перечисление, три значения
// Порядок - приоритетность по ТипРезерва
   ИТЗзаявки.НоваяКолонка("Порядок"); // для приоритетности распределения остатка по типам резервов
   ИТЗзаявки.ДобавитьИндекс("ТипРезерва","ТипРезерва");
      ИТЗзаявки.УстановитьФильтр(глЗаявкаНеподтвержденная,глЗаявкаНеподтвержденная,"ТипРезерва");
      ИТЗзаявки.ЗаполнитьКолонку("ТипРезерва","Порядок",3);
      ИТЗзаявки.УстановитьФильтр(глЗаявкаНаПоставку,глЗаявкаНаПоставку,"ТипРезерва");
      ИТЗзаявки.ЗаполнитьКолонку("ТипРезерва","Порядок",2);
      ИТЗзаявки.УстановитьФильтр(глЗаявкаНаСклад,глЗаявкаНаСклад,"ТипРезерва");
      ИТЗзаявки.ЗаполнитьКолонку("ТипРезерва","Порядок",1);
   ИТЗзаявки.УдалитьИндекс("ТипРезерва");
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Djelf от 11 декабря 2024, 04:33
Можно и так, но все равно медленее чем левым соединением, а без "*" в колонке индекса медленнее раз в 5.
ИТЗзаявки.ДобавитьИндекс("ТипРезерва","ТипРезерва");
+  ИТЗзаявки.ДобавитьИндекс("ТипРезерва","*ТипРезерва");
Название: Re: ИТЗ: выборочное заполнение колонки в зависимости от другой колонки
Отправлено: Злоп от 11 декабря 2024, 19:12
поправил