Как посчитать итог в 1с
Форум
При наличии в системе 1С:Предприятие компоненты «Бухгалтерский учет» система автоматически реализует специальный механизм работы с бухгалтерскими итогами. Данный механизм обеспечивает хранение, динамический пересчет бухгалтерских итогов и их извлечение средствами встроенного языка.
Изменение бухгалтерских итогов может производиться только проводками бухгалтерских операций.
Хранение итогов поддерживается системой с детализацией до месяца. В итогах хранятся остатки и обороты по счетам с детализацией по субконто и обороты между счетами (без детализации по субконто).
Обращение к бухгалтерским итогам выполняется при помощи агрегатного объекта типа «БухгалтерскиеИтоги». Объект может работать в трех режимах:
- работа с основными итогами,
- работа с временными итогами,
- работа в режиме запроса.
Объект типа «БухгалтерскиеИтоги» при создании функцией «СоздатьОбъект()» работает в первом режиме. Переключение в другие режимы производится функциями «Рассчитать()» и «ВыполнитьЗапрос()».
Функции «ИспользоватьПланСчетов()» и «ИспользоватьРазделитель Учета()» позволяют назначить план счетов и разделитель учета по которым будут выдаваться итоги.
В пункте меню «Управление бухгалтерскими итогами» в системе «1С:Предприятие» устанавливается последний рассчитанный период. В режиме работы с основными итогами осуществляется доступ только к итогам по рассчитанный месяц включительно.
Функции работы с итогами:
Параметры: – счет, = 1 – сумма, 2 – валютная сумма, 3 – количество, – значение типа “Справочник.Валюты”, – значение первого субконто счета, – значение второго субконто счета и т.д.
Для получения остатков и оборотов по счетам, имеющим субсчета, используются аналогичные функции: СНДР(), СКДР(), СКДР(), СККР().
Чтобы получить итоги на любую дату нужно выполнять временный расчет (временный, потому что он хранится только во время существования переменной типа «БухгалтерскиеИтоги») с помощью функции
В параметре можно задать в виде строки список счетов, разделенных запятой или точкой с запятой, по которым будет делаться расчет. Если параметр = 1, то расчет будет делаться только по счетам, иначе по счетам и субконто.
Для получения большего количества итогов (обороты и остатки по разным видам группировок) используется режим запроса.
Перед выполнением запроса устанавливаются различные фильтры:
Затем выполняется сам запрос функцией ВыполнитьЗапрос( ,,,, ,,,), которая возвращает 1, если запрос выполнился успешно.
Параметр принимает следующие значения: 1 – остатки и обороты по счетам, 2 – обороты между счетами, 3 – и то и другое.
Продолжаем изучать программирование в системе 1С Предприятие. Сегодня поговорим о том, как подсчитать итоги по колонке в табличной части. Нам нужно чтобы итог подсчитывался автоматически.
В предыдущих статья я рассказывал, как создать новый документ потом мы с вами написали пару процедур для автоматического подсчета суммы в табличной части. Теперь сделаем итог для этой колонки. Сегодня в примере я буду использовать тот же документ, который мы создали ранее. Поэтому советую вам ознакомиться с предыдущими статья, Создание документа, Подсчет итогов в строке табличной части.
Авто подсчёт итогов по колонке в табличной части 1С
И так преступим, запускаем 1С в режиме конфигуратора. Далее переходим в созданный ранее документ. Открываем его и переходим на вкладку формы и открываем её.
В окне формы нужно кликнуть два раза на табличную часть справа должно появиться окно свойств таблицы. В нем ищем пункт Подвал и ставим галочку.
После чего на форме в табличной части снизу должен появиться подвал.
Теперь на нужно чтобы в колонке Сумма подсчитывался итого. Для этого на вкладке Элементы ищем пункт с Название МатериалыСумма и кликаем на нем два раза. Справа появиться свойства поля в них ищем пункт
ТекстПодвала и вписываем Итого. А в пункте ПутьКДаннымПОдвала кликаем на три точечки.
В открывшемся окне нужно выбрать ИтогоСумма.
Теперь запускаем отладку и проверяем считается ли итог по колонке в табличной части документа.
Вот мы и сделали автоматический подсчет итогов по колонке. Таким образом можно подсчитать итого во всех колонках и в любых документах.
Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.
Как рассчитать бухгалтерские итоги 1С?
Прежде всего необходимо войти в 1С предприятие на компьютере в монопольном режиме. Затем через меню:
Операции - Управление бухгалтерскими итогами - установить расчет.
По окончании расчета итогов справа от "Расчет итогов установлен по" должен быть текущий квартал. Делать расчет итогов наперед на несколько кварталов не надо - это лишь замедлит работу программы, т.к. при каждой бухгалтерской операции будет происходить пересчет будущих итогов.
Похожие статьи
Светлана » 07.04.2022 09:07
Здравствуйие! при установке расчета по 2 квартал выскакивает ошибка потом еще две, не устанавливается новй период, что делать?
Administrator » 07.02.2022 15:47
Светллана » 01.02.2022 12:05
Инна » 13.01.2022 07:30
Administrator » 12.01.2022 16:15
Добрый день! Лучший способ и быстрый - восстановить резервную копию данных. Вы же ее сделали? Затем развернуть в отдельный каталог эту копию и экспериментирова ть с ней.
А вообще похоже, что у вас отключены проводки или был прерван полный пересчет из-за чего за несколько лет итоги сброшены но не посчитаны.
Инна » 11.01.2022 20:02
Administrator » 08.01.2022 01:26
ДОждаться завершения пересчета. в зависимости от размера базы и периода использования перерасчет может занять несколько часов. Прерывать жестко - выключением ПК, закрытием задачи может привести к появлению фатальных ошибок.
Любые операции с итогами должно сопровождаться сначала созданием резервной копии данных.
Инна » 05.01.2022 12:21
Алена » 04.01.2022 12:57
Не проводяться документи з 01.01.22., стоїть 4 квартал до 01.12.21. Установити расчет не можу, бо вікно не активне. Що робити?
Administrator » 08.10.2018 14:03
Olha » 08.10.2018 09:51
Administrator » 03.07.2017 15:09
Вопрос: а если человек случайно выбрал будущие кварталы, но потом сразу исправил на нужный. Ничего страшного?
Это - не проблема, главное, чтобы не было документов проведенных будущей датой (в периоде большем расчетного). В этом случае может возникать ошибка "Существуют более ранние проведенные документы"
serg1 » 01.07.2017 10:53
Вопрос: а если человек случайно выбрал будущие кварталы, но потом сразу исправил на нужный. Ничего страшного?
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)
Автор уроков и преподаватель школы: Владимир Милькин
Ставим цель
Целью этого урока будет:
- Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус.
- Сделать группировку продуктов по их цвету.
- Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.
Создаём новый отчёт
Как и на предыдущих уроках открываем базу "Гастроном" в конфигураторе и создаём новый отчёт через меню "Файл"->"Новый. ":
Вид документа - внешний отчёт:
В форме настройки отчёта пишем имя "Урок3" и нажимаем кнопку "Открыть схему компоновки данных":
Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово":
Добавляем запрос через конструктор
На закладке "Набор данных" нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных - запрос":
Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса:
На вкладке "Таблицы" перетягиваем таблицу "Еда" из первой колонки во вторую:
Выбираем из таблицы "Еда" поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование", "Вкус", "Цвет" и "Калорийность" из второй колонки в третью:
Получилось вот так:
Нажимаем кнопку "ОК" - текст запроса сформировался автоматически:
Формируем настройки представления отчёта
Переходим на закладку "Настройки" и нажимаем на волшебную палочку, чтобы вызвать конструктор настроек:
Выбираем вид отчета "Список. " и нажимаем кнопку "Далее":
Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем "Далее":
Перетаскиваем из левой колонки в правую поле "Цвет" - по нему будет происходить группировка строк в отчёте. Нажимаем "ОК":
А вот и результат работы конструктора. Иерархия нашего отчёта:
- отчёт в целом
- группировка "Цвет"
- детальные записи - строки с названиями еды
Сохраним отчёт (кнопка дискета) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:
Меняем порядок колонок
Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:
Сохраним отчёт и вновь откроем в режиме пользователя:
Отлично, так гораздо лучше.
Подводим итог (сумму) по калорийности
Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.
Для этого существует механизм вычисления ресурсов.
Переходим на вкладку "Ресурсы" и перетаскиваем поле "Калорийность" (мы же по нему собираемся итог подводить) из левой колонки в правую.
При этом в поле выражение выбираем из выпадающего списка "Сумма(Калорийность)", так как итогом будет являться сумма всех входящих в итог элементов:
Сохраняем и формируем отчёт:
У нас появились итоги по каждой из групп и по отчёту в целом.
Подводим итог (среднее) по калорийности
Теперь давайте сделаем так, чтобы в ещё одной колонке выводилась средняя калорийность продуктов по группам и в целом по отчёту.
Трогать уже имеющуюся колонку "Калорийность" нельзя - в неё уже выводится итог-сумма, поэтому заведём ещё одно поле, которое будет являться точной копией поля "Калорийность".
Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей.
Переходим на закладку "Вычисляемые поля" и нажимаем зелёный плюсик:
В колонке "Путь к данным" пишем имя нового поля (слитно, без пробелов). Пусть оно будет называться "СредняяКалорийность", а в колонке "Выражение" пишем имя уже существующего поля, на основании которого будет рассчитываться новое поле. Пишем туда "Калорийность". Колонка "Заголовок" заполнится автоматически.
Мы добавили новое поле ("СредняяКалорийность"), но в отчёте оно само по себе не появится - нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную.
Поступим вторым способом. Для этого переходим на закладку "Настройки", выбираем "Отчет" (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:
Получилось вот так:
Сохраняем и формируем отчет:
Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!
Но мы помним, что конечная цель - посчитать среднюю калорийность по группам и в целом по отчёту.
Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:
При этом в колонке "Выражение" выбираем "Среднее(СредняяКалорийность)":
Сохраняем и формируем отчёт:
Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.
Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность" в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи".
Исправим ошибку. Для этого вернёмся на закладку "Настройки", выберем "Детальные записи" сначала сверху (шаг 2), а затем "Детальные записи" снизу (шаг 3), перейдём на закладку "Выбранные поля" и увидим в её правой колонке элемент "Авто".
Элемент "Авто" - это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.
Чтобы увидеть, что это за поля - нажмём на элемент "Авто" правой кнопкой и выберем пункт "Развернуть":
Элемент "Авто" раскрылся в следующие поля:
А вот и наше поле "СредняяКалорийность", которое попало сюда из пункта "Отчет", когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода:
Сохраним и сформируем отчёт:
То, что надо! Значения "СредняяКалорийность" остались только в группах (цвет) и в итоге по отчёту в целом.
Подводим итог (количество) по вкусам
Ну и напоследок, чтобы закрепить умение подводить итоги, сделаем вывод количества различных вкусов для продуктов каждого цвета.
Ну, например, для белого цвета, это значение будет равно 2 (всего два вкуса "Кислый" и "Сладкий"), а для жёлтого 3 ("Сладкий", "Солёный" и "Кислый").
Переходим на закладку "Ресурсы" и перетаскиваем поле "Вкус" из левой колонки в правую:
В качестве выражения выбираем "Количество(Различные Вкус)":
Сохраняем и формируем отчёт:
Войдите на сайт как ученик
Для учеников
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Сегодня столкнулся с необходимостью в динамическом списке посчитать итоги по колонкам, покопавшись на форумах, понял, что тема достаточно старая, и решения ее весьма разнообразные.
Я бы хотел предложить Вам свой способ решения данной проблемы - он достаточно прост и не требует программирования и прочих заморочек.
Его главное достоинство - простота. Дело в том что, с недавних пор в динамических списках появилась возможность использовать временные таблицы в запросах и как следствие пакетные запросы.
Суть метода заключается в расчете итогов отдельным полем в самом запросе динамического списка и выводе его в каждой строке без отображения, само же поле отборажается через ТекущиеДанные элемента формы в подвале. До появления возможности использовать временные таблицы и пакеты в запросе можно было расчитать только общий итог по динамическому списку который не учитывает пользовательские отборы, из-за этого данный метод практически не использовался, пример такого запроса Вы можете увидеть ниже:
С появлением возможности использовать временные таблицы и пакетных запросов мы получили возможность расчитывать итоги в динамических списках с учетом наложенных на них отборов, без каких либо сложностей, но тут нужно отметить следующие особенности:
2) выбрать основную таблицу можно будет только из физических таблиц присутствующих в последнем запросе пакета - далее покажу на примере.
Итак, есть некий динамический список с полями числового типа, и требуется по ним рассчитать итоги, в моем примере это некий документ, у которого есть колонка "СуммаДокумента" (см. скриншот):
1-й вариант запроса будет не даст нам возможность указать Документ1 в качестве основной таблицы, как следствие с динамическим списком не будет возможности работать стандартным способом и не будет динамического чтения данных, однако он будет учитывать итоги с учетом отборов. Я покажу его в качестве примера того как делать не нужно:
2-й вариант запроса - это собственно запрос, который будет работать корректно в наших динамических списках:
Первым запросом мы читаем данные основной таблицы с учетом пользовательских отборов, вторым запросом мы делаем сразу несколько вещей
1) мы указываем динамическому списку, какая таблица у нас может быть в качестве основной, и тут же фильтруем её по данным временной таблицы
Далее нам остается в свойствах динамического списка у данного поля утановить "использовать всегда" (на форму поля итогов просто не выводим).
И для каждой колонки, в которой нужно рассчитать итоги, указываем ПутьКДаннымПодвала из данных форм со ссылкой на нужное нам поле итога.
Конечно, у данного метода есть свои особенности, но все же на текущий момент это достаточно простой и быстрый способ получить итоги в динамических списках.
Специальные предложения
Поправьте, если я чего-то недопонял.
Открытие динамического списка документов без отборов и ограничения по периоду приведет к засовыванию всей таблицы документов во временную таблицу?
(3) увы да, в первую таблицу всегда будет засовываться вся таблица, а вторая будет читать только соответствующую порцию из этой ВТ т.е. на клиента возвращается именно считанная порция а не все таблица.
Возможно я сейчас ляпнул глупость так как мои познания SQL далеки от идеала, но судя по профайлеру и поведению платформы все это работает примерно так.
Я был бы признателен гуру SQL если они на примере данных профайлера объяснили мне что происходит при таком запросе динамического списка и какие здесь могут быть подводные камни.
На моих тестах в 10 колонок итогов в 50000 документах с учетом различных отборов и без, все считаются достаточно быстро.
(4) Отображение на форме при скролинге, обновлении данных формы, и.т.д - не вызывает сильных тормозов.
(4) именно поэтому в платформе и нет нормального механизма по итогам списков документов, потому как без перебора всех документов сумму не подсчитать.
у нас, например, 50к документов создаётся за 5 дней. поставьте эксперимент на 1млн документов
(4) Проблема в том, что такое решение прикапывает лопатой основную идею динамического списка (как и получение общих итогов в принципе) - сделать производительность динамического списка фактически независящей от размера таблицы, которую он отображает (если работать в рамках индексов). С ростом размера таблицы и производительность и потребление ресурсов будут ощутимо ухудшаться.
На карманных базах можно издеваться над эффективностью почти как угодно - запаса прочности хватает.
Но в промышленных базах десятки миллионов записей - это обыденность даже для таблиц документов. Где даже банальный запрос получения количества записей в таблице выполняется ощутимое время.
Когда поработаешь с большими потоками информации и посмотришь на возникающие на глазах проблемы - поневоле в первую очередь начинаешь задумываться в том числе и о масштабируемости.
Решение не лишено остроумности, но, к сожалению, плохо масштабируемо.
ИМХО, овчинка не стоит выделки. Если кому-то так уж важны общие итоги, то разумным компромиссом выглядит их получение "по кнопке". А это проще и логичнее делать через СКД.
verniypro; dj_serega; N!ghtmare; Dach; user620589_pletnev; Amadeuc404; mickey.1cx; Stim213; + 8 – Ответить
Добрый день. пожалуйста поясните, а для чего это нужно ? Список динамический, что дает вам сумма в итогах, список постоянно изменяем? Ну если вы отбор только наложите и будете точно знать, понимать количество нужных документов. В учетных системах я не встречал практико - применение этому.
(8) Итоги по списку с установленными отборами имеют практический смысл. Это же очевидно.
Другое дело, что
1) если эти данные имеют самостоятельную ценность, то для этого обычно отчеты используются
2) если эти данные часть бизнес-процесса, влияющего на документооборот, то обычно такие бизнес-процессы автоматизируются более полно в рамках какого-нить рабочего стола на это заточенного
Просто пользователи в решении своих потребностей отталкиваются от того что имеют и редко способны самостоятельно сформулировать внятное техзадание.
Это не пользователей дело, а постановщика задачи. Пользователь должен сформулировать то, как он для себя это видит, а бизнес должен провести аудит и понять, а нужно ли это вообще и как это лучше сделать в комплексе. Хотелки отдельного пользователя могут иметь место там, где решение и разрабатывается для этого отдельного пользователя. Когда решение разрабатывается для бизнеса, то пользователь получает функционал, проанализированный бизнесом и включенный в решение бизнесом, а не пользователем.
(10) Ок. Некорректно выразился. Читать как "редко способны самостоятельно сформулировать внятные технические требования".
(10) Если мы говорим про разработку тиражных решений то я с Вами полностью согласен. Но реальность такова что практически все тиражные решения всегда затачивались и будут затачиваются под хотелки определенной группы пользователей - проводить аудит, что-то решать, думать "а оно нам надо" - для бизнеса это зачастую дорого и не интересно - бизнесу важен результат в установленных для него рамках - поэтому Бизнес рано или поздно нанимает "отдельно программиста" на которого сыплются все хотелки этого бизнеса.
Добрый день коллеги! Большое спасибо за поддержку и за интерес!
Статья предназначается в первую очередь для ТЕХ кому это нужно.
По моему опыту в большинстве случаев это капризы пользователей, не нравится им работать с отчетами и они некоторые вещи хотят видеть сразу в списках, например суммы по отобранным документам ит.д . Тут даже не всегда получается объяснить не рациональность таких требований, а можно и работы лишиться в некоторых случаях. Если мы говорим про базы где производительность критерий номер 1 то да такой подход скорее фишка нежели что-то полезное - если же мы говорим про базы КФИС то тут это будет иметь смысл так как критерий номер 1 уже не производительность а максимально возможное количество аналитики (инталев тому пример) которую хотят видеть сразу на форме и не лезть в 100500 отчетов, и не жать дополнительные кнопки.
Как бы то ни было - у людей возникает потребности в итогах динамических списков , а решения которые находят для этого разработчики весьма изощрённые - собственно им и посвящается.
(12) Хозяин-барин. Только проблема в том, что очень сложно провести границу достаточности масштабируемости.
Сегодня у вас все довольны. А завтра подрастает документооборот или просто база проживет несколько лет. И у всех начинает все глючить и подтормаживать то тут то там, потому что конфа нафарширована костылями без оглядки на масштабируемость. И стоило ли бизнесу пришедшее в негодность решение, требующее больших затрат на оптимизацию (в том числе потому, что авторов давно уж нет) того года условно "красивой жизни" - большой и жирный вопрос. Бизнес вполне умеет слушать, если говорить с ним на языке денег и предлагать разумные альтернативы.
Тоже считаю, что динамический список должен оставаться динамическим, а итоги можно считать по кнопке. Как вариант, вместо кнопки можно прицепиться к какому-либо событию, хотя их мало: ПриАктивизацииСтроки, ПриАктивизацииЯчейки. Конечно, можно еще и обработку ожидания прикрутить, а к ней, в свою очередь, тоже сделать кнопку Вкл/Выкл, ну чтобы можно было отключать ожидание и не производить постоянные вычисления.
Причем, настройки можно анализировать и принимать соответствующие решения о необходимости пересчета итогов вообще, а также по этим настройкам можно узнать для каких полей нам нужно это делать, а для каких нет.
(15) За наводку на статью спасибо - не знал что так можно. Сразу возникает вопрос - есть возможность быстро отловить момент изменения настроек динамического списка, или тут все-таки танцы с бубнами?
(17) ПриОбновленииСоставаПользовательскихНастроекНаСервереИмениНу ралиеваБорисаГеоргиевича же! Не вводите людей в заблуждение, коллега!
(16) Увы нету, только танцы.
Я, как правило, делаю кнопку, по которой, после установки фильтров, пользователь делает необходимые расчеты. Иногда, вешаю обработку на событие "ПриАктивизацииСтроки", но обработчик этот глючный и не всегда срабатывает, например, после Ctrl+F в списке остается одна строка - событие есть, меняем условие поиска при котором у нас остается опять одна строка (другая) - события нет. Поэтому, добавляю обработчик и для "ПриАктивизацииЯчейки", т.е. сместились в строке - событие есть, короче, танцы.
Вот, в 8.3.10 пообещали обработчик "ПриПолученииДанныхНаСервере", сначала обрадовался . но, обломали, вызов не контекстный, форму поменять нельзя, можно только строчки оформить, причем искать (сортировка, отбор и т.д.) по таким "данным" (их тама нету) бессмысленно.
Еще жду 8.3.11, там будет общение между сервером (фоновые задания) и клиентскими сеансами, не знаю, может там удастся прорваться, поживем увидим .
Поковырялся вчера с итогами для документов на 5 000 - летает. Если правильно "КАКать", то верхний запрос отлавливает все: поиск, поиск по полям через ссылку, отбор по любому реквизиту, поиск и отбор по характеристикам, в общем, "загнать в угол" - не вышло.
Такого быстродействия не ожидал, если честно. Думаю, что такой подход, идеален, по сравнению с попыткой ловить события активизации в списке документов, что-то там анализировать и выполнять лишние серверные (причем контекстные) вызовы.
Небольшой косяк есть, это когда после поиска получаем пустой список, а потом что-то ищем и строки в списке есть, но нет активной строки, тогда имеем ТекущиеДанные = Неопределено и сумма итога не отображается, ес-но при переходе в список сумма появляется, но это фигня.
Позже погоняю справочник, к-нить иерархический, интересно как там будут фильтры отлавливаться.
Читайте также: