Имя: Пароль:
1C
1C 7.7
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с++ и свернуть (или как там оно называется) - полностью решает задачу