Имя: Пароль:
1C
1C 7.7
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 и  более.