|
Изменение сортировки в индексируемой ТЗ | ☑ | ||
---|---|---|---|---|
0
ASU_Diamond
15.03.16
✎
15:07
|
Есть ТЗ со следующей структурой:
Номенклатура, НомДок, ДатаДок, Количество, Использовано. Дальше идет поиск по ТЗ. ТЗ.Индексы.Добавить("Номенклатура"); Для каждого Стр Из лТЗ_Результата Цикл Отбор=Новый Структура; Отбор.Вставить("Номенклатура",Стр.Номенклатура); НайденныеСтроки=ТЗ.НайтиСтроки(Отбор); Для каждого СтрДок Из НайденныеСтрокиЦикл КоличествоВзять=Мин(Количество,СтрДок.Количество-СтрДок.Использовано); Если КоличествоВзять<=0 Тогда Продолжить; КонецЕсли; СтрДок.Использовано=СтрДок.Использовано+КоличествоВзять; КонецЦикла; КонецЦикла; Когда идет отбор, то первый раз выборка выходит с сортировкой как в ТЗ, во второй раз строка, в которой изменилось "Использовано" становится в конец выборки. Если ТЗ не индексировать, то сортировка в выборке не изменяется. В чём проблема и как её обойти? |
|||
1
Ёпрст
15.03.16
✎
15:21
|
второй раз, это как ?
|
|||
2
Ёпрст
15.03.16
✎
15:22
|
есть куча строк с одной номенклатурой в исходной ТЗ ?
|
|||
3
ASU_Diamond
15.03.16
✎
15:24
|
(2) да, во второй ТЗ то же несколько строк.
|
|||
4
George Wheels
15.03.16
✎
15:27
|
Вместо Продолжить нужно Прервать.
|
|||
5
Ёпрст
15.03.16
✎
15:29
|
(4) не угадал, это если бы было отсорировано по количеству, то да, прервать, а так, продолжить
|
|||
6
Ёпрст
15.03.16
✎
15:29
|
отсортировано
|
|||
7
ASU_Diamond
15.03.16
✎
15:33
|
ну там ещё в цикле пропущена строка
Количество=Количество-КоличествоВзять |
|||
8
Ёпрст
15.03.16
✎
15:37
|
Ну, можешь делать через Скопировать подсунув туда найденныестроки + нужная сотрировка.
|
|||
9
Ёпрст
15.03.16
✎
15:37
|
сортировка
|
|||
10
Ёпрст
15.03.16
✎
15:37
|
и тогда ужо Прервать
|
|||
11
ASU_Diamond
15.03.16
✎
15:43
|
(8) я так понимаю что это баг платформы? придется обходить его (по смыслу можно по другому сделать), но тогда код усложняется и может потеряться выигрыш в скорости...
|
|||
12
George Wheels
15.03.16
✎
15:43
|
ТЗ.Индексы.Добавить("Номенклатура");
Индекс не уникальный. Не знаю как там 1С работает, но похоже она как-то последний изменённый элемент ставит в конец индекса. |
|||
13
ASU_Diamond
16.03.16
✎
07:23
|
(12) индексируемые поля не изменялись - выборка не должна меняться. Чисто логически.
|
|||
14
George Wheels
16.03.16
✎
08:29
|
В лТЗ_Результата каждая номенклатура встречается только один раз?
|
|||
15
mistеr
16.03.16
✎
09:32
|
(0) Выборкой ты называешь результат ТЗ.НайтиСтроки()? Это массив. И порядок элементов в этом массиве не определен, его никто не гарантировал. Так что проблема в твоих неоправданных ожиданиях. Перепиши алгоритм, чтобы не зависел от этого порядка.
|
|||
16
ASU_Diamond
16.03.16
✎
10:29
|
(14) нет
(15) а как же то, что программа должна на один и тот же запрос выдавать одинаковый результат? |
|||
17
mistеr
16.03.16
✎
10:39
|
(16) Далеко не всякая программа.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |