База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как аккумулировать итоги по ГруппаВид в таблице значений в 1С? › Ответ в теме: Как аккумулировать итоги по ГруппаВид в таблице значений в 1С?
Нужно для накопления итогов по СтрокаВидаГруппы с соответствующим ГруппаВид — сначала найти или создать эту строку в таблице итогов по виду услуги, используя ключ ГруппаВид (составной из группы и вида услуги).
Примерный алгоритм:
1. Формируете ключ ГруппаВид из текущих данных (например, Группа + "|" + ВидУслуги).
2. Пытаетесь найти строку в таблице итогов по виду услуги по этому ключу.
3. Если не нашли — добавляете новую строку и инициализируете поля.
4. Накопляете суммы в найденной/созданной строке.
—
### Пример кода (фрагмент):
|
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 |
// Формируем ключ для строки вида группы КлючВидаГруппы = ГруппаСубконто.Группа + "|" + Строка(ВыборкаДетальныеЗаписи.ВидУслуги); // Пытаемся найти строку в таблице итогов по виду услуги СтрокаВидаГруппы = ТаблицаИтоговВидУслуги.Найти(КлючВидаГруппы, "ГруппаВид"); Если СтрокаВидаГруппы = Неопределено Тогда // Если не нашли, добавляем новую строку СтрокаВидаГруппы = ТаблицаИтоговВидУслуги.Добавить(); СтрокаВидаГруппы.Группа = ГруппаСубконто.Группа; СтрокаВидаГруппы.ВидУслуги = ВыборкаДетальныеЗаписи.ВидУслуги; СтрокаВидаГруппы.ГруппаВид = КлючВидаГруппы; // Инициализация полей СтрокаВидаГруппы.ИтогоСуммаБезНДС_ФизЛица = 0; СтрокаВидаГруппы.ИтогоНДС_ФизЛица = 0; СтрокаВидаГруппы.ИтогоСумма_ФизЛица = 0; СтрокаВидаГруппы.ИтогоСуммаБезНДС_ЮрЛица = 0; СтрокаВидаГруппы.ИтогоНДС_ЮрЛица = 0; СтрокаВидаГруппы.ИтогоСумма_ЮрЛица = 0; КонецЕсли; // Накопление сумм Если ВыборкаДетальныеЗаписи.ЮрФизЛицоУслуги = Перечисления.ЮрФизЛицо.ФизЛицо ИЛИ ВыборкаДетальныеЗаписи.ЮрФизЛицоТовары = Перечисления.ЮрФизЛицо.ФизЛицо Тогда СтрокаВидаГруппы.ИтогоСуммаБезНДС_ФизЛица = СтрокаВидаГруппы.ИтогоСуммаБезНДС_ФизЛица + ВыборкаДетальныеЗаписи.СуммаБезНДС; СтрокаВидаГруппы.ИтогоНДС_ФизЛица = СтрокаВидаГруппы.ИтогоНДС_ФизЛица + ВыборкаДетальныеЗаписи.НДС; СтрокаВидаГруппы.ИтогоСумма_ФизЛица = СтрокаВидаГруппы.ИтогоСумма_ФизЛица + ВыборкаДетальныеЗаписи.Сумма; ИначеЕсли ВыборкаДетальныеЗаписи.ЮрФизЛицоУслуги = Перечисления.ЮрФизЛицо.ЮрЛицо ИЛИ ВыборкаДетальныеЗаписи.ЮрФизЛицоТовары = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда СтрокаВидаГруппы.ИтогоСуммаБезНДС_ЮрЛица = СтрокаВидаГруппы.ИтогоСуммаБезНДС_ЮрЛица + ВыборкаДетальныеЗаписи.СуммаБезНДС; СтрокаВидаГруппы.ИтогоНДС_ЮрЛица = СтрокаВидаГруппы.ИтогоНДС_ЮрЛица + ВыборкаДетальныеЗаписи.НДС; СтрокаВидаГруппы.ИтогоСумма_ЮрЛица = СтрокаВидаГруппы.ИтогоСумма_ЮрЛица + ВыборкаДетальныеЗаписи.Сумма; КонецЕсли; |
—
### Важные моменты:
— Таблица ТаблицаИтоговВидУслуги должна быть создана заранее с колонками:
|
1 2 3 4 5 6 7 8 9 10 |
ТаблицаИтоговВидУслуги = Новый ТаблицаЗначений; ТаблицаИтоговВидУслуги.Колонки.Добавить("Группа", Новый ОписаниеТипов("Строка")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ВидУслуги", Новый ОписаниеТипов("Строка")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ГруппаВид", Новый ОписаниеТипов("Строка")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ИтогоСуммаБезНДС_ФизЛица", Новый ОписаниеТипов("Число")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ИтогоНДС_ФизЛица", Новый ОписаниеТипов("Число")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ИтогоСумма_ФизЛица", Новый ОписаниеТипов("Число")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ИтогоСуммаБезНДС_ЮрЛица", Новый ОписаниеТипов("Число")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ИтогоНДС_ЮрЛица", Новый ОписаниеТипов("Число")); ТаблицаИтоговВидУслуги.Колонки.Добавить("ИтогоСумма_ЮрЛица", Новый ОписаниеТипов("Число")); |
— Используйте составной ключ ГруппаВид для поиска строки, чтобы не было конфликтов.
—
Так вы аккумулируете суммы по ГруппаВид и сможете потом использовать эти итоги.