|   |   | 
| 
 | 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с++ и свернуть (или как там оно называется) - полностью решает задачу     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |