Как сделать итог по колонке в 1С
Продолжаем изучать программирование в системе 1С Предприятие. Сегодня поговорим о том, как подсчитать итоги по колонке в табличной части. Нам нужно чтобы итог подсчитывался автоматически.
В предыдущих статья я рассказывал, как создать новый документ потом мы с вами написали пару процедур для автоматического подсчета суммы в табличной части. Теперь сделаем итог для этой колонки. Сегодня в примере я буду использовать тот же документ, который мы создали ранее. Поэтому советую вам ознакомиться с предыдущими статья, Создание документа, Подсчет итогов в строке табличной части.
Авто подсчёт итогов по колонке в табличной части 1С
И так преступим, запускаем 1С в режиме конфигуратора. Далее переходим в созданный ранее документ. Открываем его и переходим на вкладку формы и открываем её.
В окне формы нужно кликнуть два раза на табличную часть справа должно появиться окно свойств таблицы. В нем ищем пункт Подвал и ставим галочку.
После чего на форме в табличной части снизу должен появиться подвал.
Теперь на нужно чтобы в колонке Сумма подсчитывался итого. Для этого на вкладке Элементы ищем пункт с Название МатериалыСумма и кликаем на нем два раза. Справа появиться свойства поля в них ищем пункт
ТекстПодвала и вписываем Итого. А в пункте ПутьКДаннымПОдвала кликаем на три точечки.
В открывшемся окне нужно выбрать ИтогоСумма.
Теперь запускаем отладку и проверяем считается ли итог по колонке в табличной части документа.
Вот мы и сделали автоматический подсчет итогов по колонке. Таким образом можно подсчитать итого во всех колонках и в любых документах.
Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.
Источник
Итоги в табличной части с учетом отбора (управляемая форма)
Данная публикация навеяна ностальгией по отборам в конфигурациях на обычных формах (ЗУП2.5, УПП3.1 и т.п.), где в контекстном меню можно было отобраться по выделенному значению и получить итоги в подвале с учетом этого отбора.
В управляемых формах также есть отборы (Найти, найти в найденном), но к сожалению, итоги не зависят от отборов. Данная публикация — некий костыль, позволяющий создать подобный механизм.
Сразу оговорюсь, решение не оптимальное, комфортно работать можно только с табличными частями, где количество строк не более 1-2 тыс. (при отмене отбора загружается первоначальная таблица с приблизительной оценкой по 1 секунде на каждую тысячу строк)
Зато реализация достаточно простая, ниже код для документа Отражение зарплаты в бухучете из ЗУП 3.1:
В форме документа должен быть реквизит АдресХранилища (строка) и контекстные кнопки ОтборПоЗначениюТекущейКолонки и ОтключитьОтбор
&НаСервере
Процедура ОтборПоЗначениюВТекущейКолонкеНаСервере ( Ключ , Значение )
ОригиналТЗ = Объект . НачисленнаяЗарплатаИВзносы . Выгрузить ();
Структура = Новый Структура ( Ключ , Значение );
ТЗ = Объект . НачисленнаяЗарплатаИВзносы . Выгрузить ( Структура );
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( ТЗ );
Если АдресХранилища = «» Тогда
АдресХранилища = ПоместитьВоВременноеХранилище ( ОригиналТЗ , ЭтаФорма . УникальныйИдентификатор );
ИначеЕсли ТипЗнч ( ПолучитьИзВременногоХранилища ( АдресХранилища )) = Тип ( «Структура» )
Или ПолучитьИзВременногоХранилища ( АдресХранилища )= Неопределено Тогда
АдресХранилища = ПоместитьВоВременноеХранилище ( ОригиналТЗ , ЭтаФорма . УникальныйИдентификатор );
КонецЕсли;
&НаКлиенте
Процедура ОтборПоЗначениюВТекущейКолонке ( Команда )
ПолеОтбора = Прав ( Элементы . НачисленнаяЗарплатаИВзносы . ТекущийЭлемент . Имя , СтрДлина ( Элементы . НачисленнаяЗарплатаИВзносы . ТекущийЭлемент . Имя ) — СтрДлина ( ЭтаФорма . ТекущийЭлемент . Имя ));
ПолеОтбора = ?( ПолеОтбора = «Сотрудник» , «ФизическоеЛицо» , ПолеОтбора ); //В ЗУП3.1 док ОтражениеЗарплатыВБухучете Поле ввода НачисленнаяЗарплатаИВзносыСотрудник, хотя данные — физлицо
ОтборПоЗначениюВТекущейКолонкеНаСервере ( ПолеОтбора , Элементы . НачисленнаяЗарплатаИВзносы . ТекущиеДанные [ ПолеОтбора ]);
//Проверка на изменение ТЧ при отборе (призаписи и проведении)
&НаСервере
Процедура ПроверитьТаблицу ()
Оригинал = ПолучитьИзВременногоХранилища ( АдресХранилища );
Если ТипЗнч ( Оригинал ) = Тип ( «ТаблицаЗначений» ) И
Оригинал . Количество () <> Объект . НачисленнаяЗарплатаИВзносы . Количество () Тогда
Объект . НачисленнаяЗарплатаИВзносы . Загрузить ( Оригинал );
КонецЕсли;
КонецПроцедуры
//. стандартный код процедуры
КонецПроцедуры
//. стандартный код процедуры
КонецПроцедуры
//. стандартный код процедуры
КонецПроцедуры
Во вложении этот код в виде расширения для ЗУП3.1. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.15.1778), Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.10.309), тонкий клиент.
Источник
Итог в подвале по программно добавленой колонке для ТЧ объекта.
Типовой алгоритм добавляет программно колонки для ТЧ документа.
Если для добавляемого поля на форме сделать:
, то вываливается ошибка установки значения.
— работает в типовом коде.
Каким образом можно вывести итог по такой колонке в подвал?
(11) Ага) Итого в подвале считаются только по реквизитам ТЧ. Реквизиты данных форм автоматом не рассчитываются, над руками
Для сч = 1 По 12 Цикл
Элементы[«НачисленияЗначение» + сч].ТекстПодвала = Объект.Начисления.Итог(«Значение» + сч);
Напиши процедуру обновления итогов подвала и вперед)
В общем, в моем случае решилось вот таким образом.
Что делать в случае заполнения ТЧ дополнительной обработкой — остается вопросом.
При этом ПутьКДанным = «Объект.Начисления», НомерПоказателя = от 1 до 12
(4)Т.е. нужно создать еще один реквизит формы, в него каким-то образом присваивать значение итога и сделать
А это когда происходит?
(11) Ага) Итого в подвале считаются только по реквизитам ТЧ. Реквизиты данных форм автоматом не рассчитываются, над руками
Для сч = 1 По 12 Цикл
Элементы[«НачисленияЗначение» + сч].ТекстПодвала = Объект.Начисления.Итог(«Значение» + сч);
Напиши процедуру обновления итогов подвала и вперед)
В общем, в моем случае решилось вот таким образом.
Что делать в случае заполнения ТЧ дополнительной обработкой — остается вопросом.
Источник
Как выдавать в итоги по строкам таблицы ресурсы, отличные от ресурсов в колонках таблицы
Иногда возникает потребность вывести в таблице некоторые ресурсы только в итоге по строкам. Например, требуется вывести в колонках таблицы номенклатуру с указанием суммы оборота и суммы по количеству проданной номенклатуры, а в итоге по строке требуется видеть только итог по сумме.
Если просто добавить в настройки таблицу, и указать, что нужно выводить ресурсы Сумма оборот и Количество оборот,
то результат отчета будет следующим:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | Итого | ||||
Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | |
Алекс-2002 | 2,00 | 480,00 | 2,00 | 560,00 | 4,00 | 1 040,00 | ||
Завод РТИ | 1,00 | 240,00 | 1,00 | 280,00 | 2,00 | 520,00 | ||
Русская одежда | 1,00 | 120,00 | 1,00 | 140,00 | 2,00 | 260,00 | ||
Эльбрус | 2,00 | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 6,00 | 1 320,00 |
Итого | 2,00 | 280,00 | 6,00 | 1 320,00 | 6,00 | 1 540,00 | 14,00 | 3 140,00 |
Для того чтобы итог по строке содержал только определенный ресурс, можно воспользоваться детальными записями, в которых выводятся только ресурсы (см. раздел «Особенности использования детальных записей»).
Для этого, добавим в колонки группировку без полей группировки:
Результат исполнения такого отчета:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | Итого | ||||||
Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | |
Алекс-2002 | 2,00 | 480,00 | 2,00 | 560,00 | 4,00 | 1 040,00 | 4,00 | 1 040,00 | ||
Завод РТИ | 1,00 | 240,00 | 1,00 | 280,00 | 2,00 | 520,00 | 2,00 | 520,00 | ||
Русская одежда | 1,00 | 120,00 | 1,00 | 140,00 | 2,00 | 260,00 | 2,00 | 260,00 | ||
Эльбрус | 2,00 | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 6,00 | 1 320,00 | 6,00 | 1 320,00 |
Итого | 2,00 | 280,00 | 6,00 | 1 320,00 | 6,00 | 1 540,00 | 14,00 | 3 140,00 | 14,00 | 3 140,00 |
Мы добились того, что в правой части таблицы появился еще один итог по строке, в котором выводятся все ресурсы.
Нам требуется, чтобы в итоге по строке выводилось только поле «Сумма оборот», поэтому перейдем в выбранные поля только что добавленной нами группировки (в конструкторе схемы компоновки данных для этого нужно выделить группировку и переключить текущие редактируемые настройки на «Детальные записи»).
В выбранных полях нашей группировки добавим поле СуммаОборот, и удалим авто поле, т.к. мы точно знаем, какие поля нам нужны.
Результат такого отчета будет выглядеть так:
Контрагент | 1С:Бухгалтерия 7.7 Стандартная версия | 1С:Бухгалтерия ПРОФ версия 7.7 | 1С:Торговля и Склад 7.7 Проф | Итого | |||||
Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Количество оборот | Сумма оборот | Сумма оборот | |
Алекс-2002 | 2,00 | 480,00 | 2,00 | 560,00 | 4,00 | 1 040,00 | 1 040,00 | ||
Завод РТИ | 1,00 | 240,00 | 1,00 | 280,00 | 2,00 | 520,00 | 520,00 | ||
Русская одежда | 1,00 | 120,00 | 1,00 | 140,00 | 2,00 | 260,00 | 260,00 | ||
Эльбрус | 2,00 | 280,00 | 2,00 | 480,00 | 2,00 | 560,00 | 6,00 | 1 320,00 | 1 320,00 |
Итого | 2,00 | 280,00 | 6,00 | 1 320,00 | 6,00 | 1 540,00 | 14,00 | 3 140,00 | 3 140,00 |
Теперь, для того, чтобы итог по строке не выдавался два раза, уберем вывод общего итога из группировки Номенклатура. Для этого установим параметр вывода «Расположение общих итогов» в значение «Нет».
Источник