| 
    
        
     
     | 
    
  | 
v7: Загадочный код в отчете | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        zenon46    
     27.11.18 
            ✎
    17:16 
 | 
         
        Уважаемые форумчане.
 
        Есть некий отчет по формированию прайс-листа, разбираюсь как работает, и никак не пойму для чего автор использовал сию конструкцию. На входе имеется ТЗ в которой лежат элементы справочника номенклатуры и группы этого же справочника, сортирована ТЗ по наименованию. Поз = ТабЗнач.КоличествоСтрок(); Удалить2 = 1; Удалить1 = 1; Пока Поз > 0 Цикл ТабЗнач.ПолучитьСтрокуПоНомеру(Поз); Если ТабЗнач.Товар.ЭтоГруппа()=0 Тогда Удалить2 = 0; Удалить1 = 0; Иначе Если (ТабЗнач.Товар.Уровень() = 2) Тогда Если Удалить2 = 1 Тогда ТабЗнач.УдалитьСтроку(); Иначе Удалить2 = 1; КонецЕсли ИначеЕсли (ТабЗнач.Товар.Уровень() = 1) Тогда Если Удалить1 = 1 Тогда ТабЗнач.УдалитьСтроку(); Иначе Удалить1 = 1; КонецЕсли; КонецЕсли КонецЕсли; Поз = Поз - 1; КонецЦикла;  | 
|||
| 
    1
    
        Вафель    
     27.11.18 
            ✎
    17:18 
 | 
         
        удаляет уровень 2 и 1     
         | 
|||
| 
    2
    
        VladZ    
     27.11.18 
            ✎
    17:20 
 | 
         
        +1 причем не просто удаляет, а "витиевато".     
         | 
|||
| 
    3
    
        zenon46    
     27.11.18 
            ✎
    17:21 
 | 
         
        (1) да но справочник имеет 5 уровней, никак не могу понять логику этих действий.     
         | 
|||
| 
    4
    
        Масянька    
     27.11.18 
            ✎
    17:23 
 | 
         
        (3) 1 и 2 уровень что содержат? Причем (если не гоню) - обрабатывается только группа "Товар".
 
        Вот в Товар следующее что?  | 
|||
| 
    5
    
        КонецЦикла    
     27.11.18 
            ✎
    17:23 
 | 
         
        Наиболее наглядно удаление строк в ТиС прописано, в подготовке таблицы
 
        Если работает и не раздражает можно оставить :)  | 
|||
| 
    6
    
        Sserj    
     27.11.18 
            ✎
    17:38 
 | 
         
        (0) Судя по всему код удаляет группы 1 и 2 уровня в которых нет элементов, оставляя нижележащие группы.     
         | 
|||
| 
    7
    
        zenon46    
     27.11.18 
            ✎
    18:38 
 | 
         
        (6) видимо это была специфика "их" базы, т.к. у меня например 5 вложений в номенклатуре.     
         | 
|||
| 
    8
    
        zenon46    
     27.11.18 
            ✎
    18:56 
 | 
         
        (6) по каким строчкам, сделали вывод что "в которых нет элементов" ?     
         | 
|||
| 
    9
    
        Sserj    
     27.11.18 
            ✎
    18:57 
 | 
         
        (7) 5 вложений именно элементов или только групп?
 
        Тут получается примерно так: Группа1Уровень1 Группа2Уровень2 Группа3Уровень3 ЭлементУровень4 .. Группа4Уровень1 Группа5Уровень2 Группа6Уровень3 ЭлементУровень2 ЭлементУровень2 Вот тут удалятся Группа1Уровень1,Группа2Уровень2 останется Группа3Уровень3 Но в то же время останутся Группа5Уровень2, так как в ней есть элемент ЭлементУровень2 и Группа4Уровень1 так как в ней есть ЭлементУровень2.  | 
|||
| 
    10
    
        Sserj    
     27.11.18 
            ✎
    19:00 
 | 
         
        (8)        
 
        Если ТабЗнач.Товар.ЭтоГруппа()=0 Тогда Удалить2 = 0; Удалить1 = 0; ... Когда встречается товар флаги удаления сбрасываются и первая встретившаяся группа не будет удалена а только переставит флаг в 1. И так далее, следующий товар опять сбросит флаг. Но эта логика должна опираться на то что таблица изначально отсортирована по иерархии.  | 
|||
| 
    11
    
        ikea    
     27.11.18 
            ✎
    19:53 
 | 
         
        (0) Удаляет в ТЗ только группы 2-го и 1-го уровня, кроме последних по сортировке. Т.е. в ТЗ останется одна группа 2-го уровня и одна группа 1-го уровня (последние отсортированные по наименованию), все элементы и все группы уровень которых 3 и  более.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |