Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: СКД - удалить пустую иерархию

Собственно сабжик (см. рисунок)


Ответ: в формате поля установить ДФ='ММММ гггг'
Вопрос: вывод в скд иерарх спр (иерархия элементов)

Делаю все как у Хрусталевой

"Для того чтобы данный набор данных получал по иерархии всех
родителей, опишем связь набора к самому себе. В конструкто-
ре схемы компоновки данных это делается на закладке Связи
наборов данных. В качестве выражения-источника укажем
МойРодитель, а в качестве выражения-приемника - Номенк-
латура. Таким образом, из каждой записи набора данных будет
получено значение поля МойРодитель, будет осуществлен поиск
полученного значения в поле Номенклатура в этом же наборе
данных, и система рекурсивно получит все записи по иерархии.
Так как в запросе записи получаются только для номенклатуры,
переданной в параметре Ссылка, то в связи укажем, что следует
использовать этот параметр. Так как параметр может принимать
список значений, обозначаем это в связи, установив соответс-
твующий флажок. В этот параметр будет помещено значение
связи источника.
Теперь создадим связь между наборами данных Приход
и Иерархия по полю Номенклатура (рис. 5.49). ..."

Но не работает. все равно выводит лишние записи.
Ответ: А в настройках группировки тип групиировки иерархия можно указать?
Вопрос: Запрос с иерархией

Соединяю 2 таблицы и пытаюсь выбрать данные с иерархией по номенклатуре.
Пока не использовал "ВЫБОР КОГДА" иерархия работала. Теперь выводится без иерархии.
Почему?

ВЫБРАТЬ
    ВЫБОР
        КОГДА ТоварыНаСкладахОстатки.Номенклатура ЕСТЬ НЕ NULL
            ТОГДА ТоварыНаСкладахОстатки.Номенклатура
        ИНАЧЕ ПродажиОбороты.Номенклатура
    КОНЕЦ КАК Номенклатура,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
        ПО ТоварыНаСкладахОстатки.Номенклатура = ПродажиОбороты.Номенклатура
ИТОГИ
    СУММА(КоличествоОстаток),
    СУММА(КоличествоОборот)
ПО
    ОБЩИЕ,
    Номенклатура
Ответ: () Да понятно, что можно.
Думал, есть вариант обойтись без этого, т.к. реальный запрос имеет кучу таблиц и придется долго переписывать только из-за иерархии
Вопрос: [РЕШЕНО] Как вывести номенклатуру с характеристиками в иерархии

Уважаемые эксперты, что-то я растерялся
Комплексная автоматизация-2.2.4.21
Используются характеристики номенклатуры, но есть позиции и без характеристик.
Надо вывести в иерархии справочник номенклатуры с характеристиками.
Пытаюсь сделать с помощью консоли запросов, но не получается.
Запрос такой:
Код:
ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Владелец.Ссылка КАК ВладелецСсылка,
    ХарактеристикиНоменклатуры.НаименованиеПолное КАК НаименованиеПолное,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.ЭтоГруппа КАК ЭтоГруппа
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
        ПО (ХарактеристикиНоменклатуры.Владелец = Номенклатура.Ссылка)

УПОРЯДОЧИТЬ ПО
    ВладелецСсылка ИЕРАРХИЯ
и получаю совсем не то, на что рассчитывал: выдает в общем списке и только ту номенклатуру, у которой есть характеристики.
В чем моя ошибка? Не должно быть левого соединения? Тогда как? И почему без иерархии выводит?
Ответ:
Дальше ничего делать не надо. Надо просто выгрузить в структурированный эксель для неких нужд руководства.
Сделал.
В запросе заменил на УПОРЯДОЧИТЬ по наименованию номенклатуры в иерархии и соединение на полное.
Вопрос: СКД. Произвольная иерархия. Отбор Родитель В (&СписокГрупп)

Доброго времени, уважаемые!

Возникла проблема с реализацией отбора в произвольной иерархии.

В качестве наборов данных используются объекты, где элементы и родители типа строка (так надо из-за сложности отчета). Созданы связи и проверка иерархии по Хрусталевой. Только отбор игнорится совсем - выводится всё дерево.

Подскажите, реализовывали такой отбор с объектами, а не с запросами?
Что могу упускать?

Заранее благодарю.
Ответ: В общем, если нужен отбор по иерархии, где В СКД наборы данных - Объекты, то нужно уже в основном объекте передавать отобранные данные. Хитрости СКД по контролю иерархии для наборов данных объектов не работают!)
Вопрос: Отображение номенклатуры в Иерархии в печатной форме

Добрый день. Есть внешняя обработка, для печати документа. В данный момент она выводит просто список номенклатуры, без иерархии. А как сделать, что бы выводилось все в виде иерархии?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
Функция Печать() Экспорт
    мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
    мВалютаУпрУчета                 = глЗначениеПеременной("ВалютаУправленческогоУчета");
 
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ТоварКод = "Артикул";
    Иначе
        ТоварКод = "Код";
    КонецЕсли;
 
    Если СсылкаНаОбъект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
        ВалютаПересчета = мВалютаРегламентированногоУчета;
    Иначе
        ВалютаПересчета = мВалютаУпрУчета;
    КонецЕсли;
 
    ВалютаПечати = мВалютаРегламентированногоУчета;
    Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);
    Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Номер  КАК НомерДокумента,
    |   Дата   КАК ДатаДокумента,
    |   Дата   КАК ДатаНачалаИнвентаризации,
    |   Организация КАК Руководители,
    |   Организация,
    |   Склад.Представление КАК ПредставлениеСклада
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
    |
    |ГДЕ
    |   ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент";
 
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    
    Запрос.УстановитьПараметр("Курс",            Параметры.Курс);
    Запрос.УстановитьПараметр("Кратность",       Параметры.Кратность);
    Запрос.УстановитьПараметр("ВидСкладаНТТ",    Перечисления.ВидыСкладов.НТТ);
 
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   НомерСтроки КАК Номер,
    |   Номенклатура,
    |   Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |   Номенклатура.Родитель КАК Родитель,
    |   Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |   Номенклатура." + ТоварКод + "   КАК ТоварКод,
    |   ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмеренияНаименование,
    |   ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |   Количество                     КАК ФактКоличество,
    |   КоличествоУчет                 КАК БухКоличество,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
    |       ИНАЧЕ Цена * &Курс / &Кратность
    |   КОНЕЦ КАК Цена,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице
    |       ИНАЧЕ Сумма * &Курс / &Кратность
    |   КОНЕЦ КАК ФактСумма,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
    |       ИНАЧЕ СуммаУчет * &Курс / &Кратность
    |   КОНЕЦ КАК БухСумма,
    |   ХарактеристикаНоменклатуры     КАК Характеристика,
    |   СерияНоменклатуры КАК Серия
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК Товары
    |   
    |ГДЕ
    |   Товары.Ссылка = &ТекущийДокумент
    |   И (Товары.Количество - Товары.КоличествоУчет) <> 0
    |   
    |УПОРЯДОЧИТЬ ПО
    |Товары.Номенклатура.Родитель";
 
    ВыборкаСтрокТовары = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);  //Добавил обход по группировкам
 
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19";
    Макет       = ПолучитьМакет("ИНВ19КОПИЯ");
 
    // Выводим шапку накладной
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
    ОбластьМакета.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
    ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
    ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации;
    ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
 
    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,);
    Руководитель = Руководители.Руководитель;
    Бухгалтер    = Руководители.ГлавныйБухгалтер;
 
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    НомерСтраницы   = 2;
    
    ИтогоРезультатИзлишекКолво   = 0;
    ИтогоРезультатИзлишекСумма   = 0;
    ИтогоРезультатНедостачаКолво = 0;
    ИтогоРезультатНедостачаСумма = 0;
    //Изменение
    ИтогоРезультатРазница = 0; 
    Разность = 0;
    //Конец
 
 
    // Выводим заголовок таблицы
    ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1");
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; 
    ТабДокумент.Вывести(ЗаголовокТаблицы);
 
    КоличествоСтрок = ВыборкаСтрокТовары.Количество();
 
    // Выводим многострочную часть докмента
    ОбластьМакета              = Макет.ПолучитьОбласть("СтрокаТаблицы1");
    ОбластьИтоговПоСтранице    = Макет.ПолучитьОбласть("ИтогоТаблицы1");
    ОбластьПодвала             = Макет.ПолучитьОбласть("Подвал");
    МассивВыводимыхОбластей    = Новый Массив;
    Ном = 0;
    
    Пока ВыборкаСтрокТовары.Следующий() Цикл
        
        Ном = Ном + 1;
        
        Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
            Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;
        
        ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
        ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
        
        Разница     = 0;
        РазницаСумм = 0;
        
        Разница     = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество;
        РазницаСумм = ВыборкаСтрокТовары.ФактСумма      - ВыборкаСтрокТовары.БухСумма;
    
        Если Разница < 0 И РазницаСумм < 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
            //Изменения
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
            //
 
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм);
        ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
            //Изменения
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
            //
        
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм;
        Иначе
            ОбластьМакета.Параметры.РезультатНедостачаКолво = 0;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = 0;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = Разница;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = РазницаСумм;
            //Изменения
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
            //
            ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво   + Разница;
            ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма   + РазницаСумм;
        КонецЕсли;
        //Изменение
        ИтогоРезультатРазница = ИтогоРезультатИзлишекСумма - ИтогоРезультатНедостачаСумма; 
        //Конец
        МассивВыводимыхОбластей.Очистить();
        МассивВыводимыхОбластей.Добавить(ОбластьМакета);
        МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
        Если Ном = КоличествоСтрок Тогда
            МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
        КонецЕсли;
        
        Если НЕ ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, МассивВыводимыхОбластей) Тогда
            
            НомерСтраницы = НомерСтраницы + 1;
            ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            ТабДокумент.Вывести(ЗаголовокТаблицы);
            
        КонецЕсли; 
        
        ТабДокумент.Вывести(ОбластьМакета);
 
    КонецЦикла;
 
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма;
    //Изменение
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатРазница = ИтогоРезультатРазница;    
    //КонецИзменения
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
 
    ОбластьПодвала.Параметры.ФИОБухгалтера =  Бухгалтер;
    ОбластьПодвала.Параметры.Заполнить(Шапка);
    ТабДокумент.Вывести(ОбластьПодвала);
 
    // Зададим параметры макета
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
 
    Возврат ТабДокумент;
 
КонецФункции
Ответ: Сдвинулся еще на шаг. Теперь он показывает группировку, но само имя группы не пишет. Как это можно исправить?

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
Функция Печать() Экспорт
    мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
    мВалютаУпрУчета                 = глЗначениеПеременной("ВалютаУправленческогоУчета");
 
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ТоварКод = "Артикул";
    Иначе
        ТоварКод = "Код";
    КонецЕсли;
 
    Если СсылкаНаОбъект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
        ВалютаПересчета = мВалютаРегламентированногоУчета;
    Иначе
        ВалютаПересчета = мВалютаУпрУчета;
    КонецЕсли;
 
    ВалютаПечати = мВалютаРегламентированногоУчета;
    Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);
    Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Номер  КАК НомерДокумента,
    |   Дата   КАК ДатаДокумента,
    |   Дата   КАК ДатаНачалаИнвентаризации,
    |   Организация КАК Руководители,
    |   Организация,
    |   Склад.Представление КАК ПредставлениеСклада
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
    |
    |ГДЕ
    |   ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент";
 
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    
    Запрос.УстановитьПараметр("Курс",            Параметры.Курс);
    Запрос.УстановитьПараметр("Кратность",       Параметры.Кратность);
    Запрос.УстановитьПараметр("ВидСкладаНТТ",    Перечисления.ВидыСкладов.НТТ);
 
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   НомерСтроки КАК Номер,
    |   Номенклатура,
    |   Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    |   Номенклатура.Родитель КАК Родитель,
    |   Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |   Номенклатура." + ТоварКод + "   КАК ТоварКод,
    |   ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмеренияНаименование,
    |   ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |   Количество                     КАК ФактКоличество,
    |   КоличествоУчет                 КАК БухКоличество,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
    |       ИНАЧЕ Цена * &Курс / &Кратность
    |   КОНЕЦ КАК Цена,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице
    |       ИНАЧЕ Сумма * &Курс / &Кратность
    |   КОНЕЦ КАК ФактСумма,
    |   ВЫБОР
    |       КОГДА Ссылка.Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
    |       ИНАЧЕ СуммаУчет * &Курс / &Кратность
    |   КОНЕЦ КАК БухСумма,
    |   ХарактеристикаНоменклатуры     КАК Характеристика,
    |   СерияНоменклатуры КАК Серия
    |ИЗ
    |   Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК Товары
    |   
    |ГДЕ
    |   Товары.Ссылка = &ТекущийДокумент
    |   И (Товары.Количество - Товары.КоличествоУчет) <> 0
    |   
    |УПОРЯДОЧИТЬ ПО
    |Товары.Номенклатура.Родитель
    |ИТОГИ ПО ОБЩИЕ,
    |    Номенклатура ИЕРАРХИЯ";
 
    Результат = Запрос.Выполнить();
    ВыборкаСтрокТовары = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 
    
 
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19";
    Макет       = ПолучитьМакет("ИНВ19КОПИЯ");
 
 
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
    ОбластьМакета.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
    ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
    ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации;
    ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
 
    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,);
    Руководитель = Руководители.Руководитель;
    Бухгалтер    = Руководители.ГлавныйБухгалтер;
 
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    НомерСтраницы   = 2;
    
    ИтогоРезультатИзлишекКолво   = 0;
    ИтогоРезультатИзлишекСумма   = 0;
    ИтогоРезультатНедостачаКолво = 0;
    ИтогоРезультатНедостачаСумма = 0;
    ИтогоРезультатРазница = 0; 
    Разность = 0;
 
 
    // Выводим заголовок таблицы
    ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1");
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; 
    ТабДокумент.Вывести(ЗаголовокТаблицы);
 
    КоличествоСтрок = ВыборкаСтрокТовары.Количество();
 
    // Выводим многострочную часть докмента
    //ОбластьМакетаГр            = Макет.ПолучитьОбласть("СтрокаГруппы");    //Заккоментировал
    //ОбластьМакета              = Макет.ПолучитьОбласть("СтрокаТаблицы1");
    ОбластьИтоговПоСтранице    = Макет.ПолучитьОбласть("ИтогоТаблицы1");
    ОбластьПодвала             = Макет.ПолучитьОбласть("Подвал");
    МассивВыводимыхОбластей    = Новый Массив;
    Ном = 0;
    
    //Изменения Выведение по группам!!!!!
 
    ВыборкаСтрокТовары.Следующий();
    ТабДокумент.НачатьАвтогруппировкуСтрок();
    
    ВыборкаНоменклатуры = ВыборкаСтрокТовары.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаНоменклатуры.Следующий() Цикл
        
        Ном = Ном + 1;
 
        Если ВыборкаНоменклатуры.Номенклатура.ЭтоГруппа Тогда
            ОбластьМакета = Макет.ПолучитьОбласть("СтрокаГруппы");
        Иначе
            ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы1");
        КонецЕсли;
        
        ОбластьМакета.Параметры.Заполнить(ВыборкаНоменклатуры);
        
        РодительНоменклатуры = ВыборкаНоменклатуры.Родитель;
        
        УровеньИерархии = 0;
        Пока ЗначениеЗаполнено(РодительНоменклатуры) Цикл
            УровеньИерархии = УровеньИерархии +1;
            РодительНоменклатуры = РодительНоменклатуры.Родитель;
        КонецЦикла;       
        ТабДокумент.Вывести(ОбластьМакета,УровеньИерархии); 
    КонецЦикла;
        ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
 
        Пока ВыборкаСтрокТовары.Следующий() Цикл
        
        Разница     = 0;
        РазницаСумм = 0;
        
        Разница     = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество;      //
        РазницаСумм = ВыборкаСтрокТовары.ФактСумма      - ВыборкаСтрокТовары.БухСумма;        //
    
        Если Разница < 0 И РазницаСумм < 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
        
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
        
 
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм);
        ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда
            ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = 0;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = 0;
 
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
    
        
            ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
            ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм;
        Иначе
            ОбластьМакета.Параметры.РезультатНедостачаКолво = 0;
            ОбластьМакета.Параметры.РезультатНедостачаСумма = 0;
            ОбластьМакета.Параметры.РезультатИзлишекКолво   = Разница;
            ОбластьМакета.Параметры.РезультатИзлишекСумма   = РазницаСумм;
    
            ОбластьМакета.Параметры.Разность =  РазницаСумм;
        
            ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво   + Разница;
            ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма   + РазницаСумм;
        КонецЕсли;
    
        ИтогоРезультатРазница = ИтогоРезультатИзлишекСумма - ИтогоРезультатНедостачаСумма; 
 
        МассивВыводимыхОбластей.Очистить();
        МассивВыводимыхОбластей.Добавить(ОбластьМакета);
        МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
        Если Ном = КоличествоСтрок Тогда
            МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
        КонецЕсли;
        
        Если НЕ ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, МассивВыводимыхОбластей) Тогда
            
            НомерСтраницы = НомерСтраницы + 1;
            ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            ТабДокумент.Вывести(ЗаголовокТаблицы);
            
        КонецЕсли; 
        
        ТабДокумент.Вывести(ОбластьМакета);
 
    КонецЦикла;
 
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекКолво   = ИтогоРезультатИзлишекКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекСумма   = ИтогоРезультатИзлишекСумма;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво;
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма;
 
    ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатРазница = ИтогоРезультатРазница;    
 
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
 
    ОбластьПодвала.Параметры.ФИОБухгалтера =  Бухгалтер;
    ОбластьПодвала.Параметры.Заполнить(Шапка);
    ТабДокумент.Вывести(ОбластьПодвала);
 
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
 
    Возврат ТабДокумент;
 
КонецФункции
Вопрос: Соединение по иерархии в запросе

Может кто сталкивался с подобной задачей. Необходимо сделать соединение по иерархии в запросе.
Есть РС соответствий:

ВидНоменклатуры это иерархический справочник. В данном регистре самые верхние группы из справочника ВидНоменклатуры.

Делаю запрос к регистру продажи, например:
Код:
ВЫБРАТЬ
    ПланыПродажОбороты.ВидНоменклатуры,
    ПланыПродажОбороты.КоличествоОборот,
    ПланыПродажОбороты.СтоимостьОборот
ИЗ
    РегистрНакопления.ПланыПродаж.Обороты(&Дата1, &Дата2, Авто, ) КАК ПланыПродажОбороты
Запрос естественно вытаскивает ВидНоменклатуры с нижних уровней. Необходимо связать по ВидНоменклатуры эти таблички, чтоб в запросе вернуть соответствующий НаправлениеДеятальности.

Само собой напрашивается вот такой запрос:
Код:
ВЫБРАТЬ
    ПланыПродажОбороты.ВидНоменклатуры,    
    ПланыПродажОбороты.КоличествоОборот,
    ПланыПродажОбороты.СтоимостьОборот
ИЗ
    РегистрНакопления.ПланыПродаж.Обороты(&Дата1, &Дата2, Авто, ) КАК ПланыПродажОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеНД_ВН КАК СоответствиеНД_ВН
        ПО (ПланыПродажОбороты.ВидНоменклатуры В ИЕРАРХИИ (СоответствиеНД_ВН.ВидНоменклатуры))
Но нет такой запрос сохранить нельзя - ошибка:

Кто-то может помочь?
Ответ:
Как-то так:

Код:
Выбрать Ссылка КАК ВидыНоменклатуры ПОМЕСТИТЬ ВТ_ВидыНоменклатуры ИЗ Справочник.ВидыНоменклатуры ГДЕ ССылка В ИЕРАРХИИ(Выбрать ВидНоменклатуры ИЗ ТабличнаяЧасть) И НЕ Группа;
...........
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВидыНоменклатуры КАК ВидыНоменклатуры
ПО ПланыПродажОбороты.ВидНоменклатуры В ВидыНоменклатуры.ВидНоменклатуры
Вопрос: Иерархия обособленных подразделений в БП Корп 2.0

Настроен обмен между ЗУП 2.5 и БП Корп 2.0. Обмен практически типовой. По сути из ЗУП выгружается только документ "отражение зарплаты в регл. учете".
В ЗУП сейчас есть иерархия подразделений такого вида: у родителя (назовем подразделение А) включен флаг "обособленное подразделение", у самого-же подразделения (подразделение В) этот флаг не установлен. Т.е. структура вида А -> В. При выгрузке в БП КОРП появляется такая-же иерархия, но заметил, что при попытке записи в БП Корп подразделения Б пишется такое сообщение:
"Указанное подразделение является обособленным.
В группу обособленных подразделений может входить только обособленное подразделение". Т.е. конфигурация запрещает внутри обособленного подразделения делать необособленные.
Может кто знает, почему такое ограничение установлено (причем этого ограничения нет в ЗУП). Мне кажется что как раз такая структура более логична, чем когда в обособленных подразделениях внутри тоже обособленные...
Ну и раз это все каким-то образом загрузилось в БП Корп какие глюки из-за этого могут появиться?
К сожалению пока довольно далек от особенностей бух. учета, поэтому если можно, то более понятно объяснить ))
Спасибо.
Ответ: () расчет долей будет неверным, т.к., насколько я помню, во всех запросах во всех условиях в запросах стоит "= &ОбособленноеПодразделение", а не "В ИЕРАРХИИ" и т.п.

() "Когда на практике хотят, чтоб это было не так, то регают в программе обособку"
Это у кого такая практика? У методологов фирмы 1С?
Вот чтоб такой х..ней не  заниматься, а нормально распределять затраты по реально существующим подразделениям внутри обособленного требуется секс с программой.
Вопрос: v7: Не могу правильно отсортировать таблицу значений - путается иерархия

не получается отсортировать таблицу значений
ТЗ.Сортировать("покупатель,номенклатура")

Сортирует не поймешь как.
Пробовал и так ТЗ.Сортировать("покупатель,*номенклатура")
то есть по внутреннему значению. Все равно в некоторых случаях получается ерунда.
Мне надо 
Покупатель №1
1 1-ая верхняя группа номенклатуру
1.1 подгруппа 1
1.2 подгруппа 2
2. 2-я верхняя группа номенклатуры
2.1 подгруппа 1
2.2 подгруппа 2
2.3 подгруппа 3
Покупатель №2
...........
Не получается нужная иерархия никак.
Ответ: ЗЫ: скармливать в ИТЗ нужно плоскую таблицу, без Групп. Потом, в методе группировать, через модификатор & задается, что нужна иерархия. и усё.
Вопрос: Удалить строку в ТЧ

Добрый день! В справочнике есть табличная часть, хочу по условию удалить строку не нужную. Написал код и почему то не работает, понять не могу почему не записывает справочник. В отладчике смотрел все удаляет как надо, начинаю проверять справочник строки не удаленны.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Для Каждого Стр из Таб Цикл  
        ЛСФИО=Справочники.ЛицевыеСчетаАбонентов.НайтиПоКоду(Стр.ЛС);
        Если НЕ ЛСФИО=Справочники.ЛицевыеСчетаАбонентов.ПустаяСсылка() Тогда
            ЛСОб=ЛСФИО.ПолучитьОбъект();
            ФИОЛг=ЛСОб.Льготники.Выгрузить();
            Если ФИОЛг.Количество() > 3 Тогда
                Для Каждого СтрЛГ из ФИОЛг Цикл
                    Если Дата(СтрЛГ.ДатаВыдачи) = Дата("01.01.0001 0:00:00") Тогда
                         ФИОЛг.Удалить(СтрЛГ);
                     КонецЕсли;  
                 КонецЦикла;
            ЛСОб.Записать();
             КонецЕсли;
         КонецЕсли;
     КонецЦикла;
Ответ: GreenkA, этим условия я проверю если больше 3 строк тогда удалить