|
v7: Реализация получение значений из ТЗ по условию. | ☑ | ||
---|---|---|---|---|
0
brenli
07.03.18
✎
09:42
|
Все привет.
Есть ТЗ которая сгруппирована по "товару", затем по "документам" (реализации). Далее отсортирована по товару+ и документам- , в результате получилось что ПОСЛЕДНИЙ по дате документ реализации для каждой позиции ПЕРВЫЙ относительно остальных документов. Так вот нужно получить только уникальные значения по каждому товару с последним по дате документом реализации. Пример: 1) [Носки] - [Реализация 10 от 29.09.17] <--- 2) [Носки] - [Реализация 9 от 20.09.17] 3) [Носки] - [Реализация 8 от 20.09.17] 4) [Трусы] - [Реализация 18 от 30.09.17] <--- 5) [Трусы] - [Реализация 13 от 30.09.17] 6) [Трусы] - [Реализация 11 от 01.09.17] 7) [Колготки] - [Реализация 10 от 29.09.17] <--- 8) [Колготки] - [Реализация 6 от 05.08.17] 9) [Колготки] - [Реализация 2 от 03.08.17] Нужно получать только 1 строки по каждой позиции. Кроме алгоритма переборки с сравнивания следующей строки с предыдущей как то можно красиво вывести первые уникальные значения по каждому товару? Есть способы и идеи? |
|||
1
2S
07.03.18
✎
09:43
|
читаешь темы, как-будто в прошлое попал
|
|||
2
brenli
07.03.18
✎
09:44
|
(1) Ностальгируйте наздоровье)
|
|||
3
2S
07.03.18
✎
09:44
|
выгрузить в отдельное ТЗ, свернуть его по номенклатуре.
Дальше писать? |
|||
4
brenli
07.03.18
✎
09:45
|
(3) нет , спасибо
|
|||
5
brenli
07.03.18
✎
19:40
|
(3)
ИндексНайдено = 0; Для Сч = 1 По СписокТоваров.РазмерСписка() Цикл ТЗ.НайтиЗначение(СписокТоваров.ПолучитьЗначение(Сч),ИндексНайдено,"Товар"); Сообщить(" "+ТЗ.ПолучитьЗначение(ИндексНайдено,"Товар")+" "+ТЗ.ПолучитьЗначение(ИндексНайдено,"ТекДок")); КонецЦикла; Так подразумевалось? Если да тогда другой вопрос. Почему то поиск всегда возвращает строку с номером 1. Хотя товар для поиска реально перебирается. Почему так? Не могу сообразить |
|||
6
Kigo_Kigo
07.03.18
✎
19:55
|
(5) А на размер списка не ругается? если это ТЗ, то там КоличествоСтрок()
|
|||
7
brenli
07.03.18
✎
19:57
|
(6) Все заробило... переменную ИндексНайдено воткнул внутрь цикла...
Получается копия переменной создается внутри цикла |
|||
8
ikea
07.03.18
✎
21:56
|
Индексированная таблица в помощь.
|
|||
9
Ёпрст
08.03.18
✎
00:25
|
(7) не так. В ИндексНайдено возвращается номер найденной строки, на следующей итерации цикла поиск будет в этой же строке, если только не "обнулишь" эту переменную.
|
|||
10
Sserj
08.03.18
✎
10:05
|
А зачем вообще все это, если уже отсортировано товар/документ.
Думаешь свернуть и куча "найтизначение" будет быстрее одного прохода? текущийТовар = ""; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если НЕ (ТЗ.Товар = текущийТовар) Тогда текущийТовар = ТЗ.Товар; Сообщить(текущийТовар + " Последний документ: " + тз.ТекДок); КонецЕсли; КонецЦикла; |
|||
11
spectre1978
08.03.18
✎
19:02
|
(0) Вообще говоря, никто не запрещает делать вложенные таблицы значений, т.е. таблицы, у которых есть колонка типа ТаблицаЗначений. Если вы откажетесь от плоской таблицы и сделаете так, то проблем с поиском у вас не будет.
|
|||
12
Cool_Profi
08.03.18
✎
19:03
|
1с++ и свернуть (или как там оно называется) - полностью решает задачу
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |