1с сумма в отчете
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)
Автор уроков и преподаватель школы: Владимир Милькин
Ставим цель
Целью этого урока будет:
- Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус.
- Сделать группировку продуктов по их цвету.
- Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.
Создаём новый отчёт
Как и на предыдущих уроках открываем базу "Гастроном" в конфигураторе и создаём новый отчёт через меню "Файл"->"Новый. ":
Вид документа - внешний отчёт:
В форме настройки отчёта пишем имя "Урок3" и нажимаем кнопку "Открыть схему компоновки данных":
Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово":
Добавляем запрос через конструктор
На закладке "Набор данных" нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных - запрос":
Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса:
На вкладке "Таблицы" перетягиваем таблицу "Еда" из первой колонки во вторую:
Выбираем из таблицы "Еда" поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование", "Вкус", "Цвет" и "Калорийность" из второй колонки в третью:
Получилось вот так:
Нажимаем кнопку "ОК" - текст запроса сформировался автоматически:
Формируем настройки представления отчёта
Переходим на закладку "Настройки" и нажимаем на волшебную палочку, чтобы вызвать конструктор настроек:
Выбираем вид отчета "Список. " и нажимаем кнопку "Далее":
Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем "Далее":
Перетаскиваем из левой колонки в правую поле "Цвет" - по нему будет происходить группировка строк в отчёте. Нажимаем "ОК":
А вот и результат работы конструктора. Иерархия нашего отчёта:
- отчёт в целом
- группировка "Цвет"
- детальные записи - строки с названиями еды
Сохраним отчёт (кнопка дискета) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:
Меняем порядок колонок
Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:
Сохраним отчёт и вновь откроем в режиме пользователя:
Отлично, так гораздо лучше.
Подводим итог (сумму) по калорийности
Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.
Для этого существует механизм вычисления ресурсов.
Переходим на вкладку "Ресурсы" и перетаскиваем поле "Калорийность" (мы же по нему собираемся итог подводить) из левой колонки в правую.
При этом в поле выражение выбираем из выпадающего списка "Сумма(Калорийность)", так как итогом будет являться сумма всех входящих в итог элементов:
Сохраняем и формируем отчёт:
У нас появились итоги по каждой из групп и по отчёту в целом.
Подводим итог (среднее) по калорийности
Теперь давайте сделаем так, чтобы в ещё одной колонке выводилась средняя калорийность продуктов по группам и в целом по отчёту.
Трогать уже имеющуюся колонку "Калорийность" нельзя - в неё уже выводится итог-сумма, поэтому заведём ещё одно поле, которое будет являться точной копией поля "Калорийность".
Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей.
Переходим на закладку "Вычисляемые поля" и нажимаем зелёный плюсик:
В колонке "Путь к данным" пишем имя нового поля (слитно, без пробелов). Пусть оно будет называться "СредняяКалорийность", а в колонке "Выражение" пишем имя уже существующего поля, на основании которого будет рассчитываться новое поле. Пишем туда "Калорийность". Колонка "Заголовок" заполнится автоматически.
Мы добавили новое поле ("СредняяКалорийность"), но в отчёте оно само по себе не появится - нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную.
Поступим вторым способом. Для этого переходим на закладку "Настройки", выбираем "Отчет" (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:
Получилось вот так:
Сохраняем и формируем отчет:
Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!
Но мы помним, что конечная цель - посчитать среднюю калорийность по группам и в целом по отчёту.
Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:
При этом в колонке "Выражение" выбираем "Среднее(СредняяКалорийность)":
Сохраняем и формируем отчёт:
Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.
Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность" в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи".
Исправим ошибку. Для этого вернёмся на закладку "Настройки", выберем "Детальные записи" сначала сверху (шаг 2), а затем "Детальные записи" снизу (шаг 3), перейдём на закладку "Выбранные поля" и увидим в её правой колонке элемент "Авто".
Элемент "Авто" - это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.
Чтобы увидеть, что это за поля - нажмём на элемент "Авто" правой кнопкой и выберем пункт "Развернуть":
Элемент "Авто" раскрылся в следующие поля:
А вот и наше поле "СредняяКалорийность", которое попало сюда из пункта "Отчет", когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода:
Сохраним и сформируем отчёт:
То, что надо! Значения "СредняяКалорийность" остались только в группах (цвет) и в итоге по отчёту в целом.
Подводим итог (количество) по вкусам
Ну и напоследок, чтобы закрепить умение подводить итоги, сделаем вывод количества различных вкусов для продуктов каждого цвета.
Ну, например, для белого цвета, это значение будет равно 2 (всего два вкуса "Кислый" и "Сладкий"), а для жёлтого 3 ("Сладкий", "Солёный" и "Кислый").
Переходим на закладку "Ресурсы" и перетаскиваем поле "Вкус" из левой колонки в правую:
В качестве выражения выбираем "Количество(Различные Вкус)":
Сохраняем и формируем отчёт:
Войдите на сайт как ученик
Для учеников
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Как вам, наверное, известно — итоговые суммы не выводятся автоматически в журналах и списках документов. Это связано с особенностью архитектуры программы и динамического чтения из базы данных. При этом часто в работе возникает необходимость быстро посчитать сумму отмеченных документов, не прибегая к отчетам и ручному подсчету. В этой статье мы рассмотрим несколько способов сделать это быстро и элегантно.
Способ 1. Использование встроенного калькулятора
Приведем небольшой пример. Допустим, необходимо посчитать сумму счетов на оплату, выписанных для контрагента за определенный период. Для начала убедимся, что включены функции суммирования во встроенном в 1С калькуляторе. Для этого нужно открыть меню программы. Если флажка напротив пункта нет — необходимо его поставить. После этого кнопки М,М+,М- станут отображаться в верхней части экрана
В списке счетов сделаем отбор по нужному контрагенту и периоду.
В полученном списке документов необходимо установить курсор в колонку с суммой. Это важно и принципиально. Далее необходимо просто отметить мышью нужные позиции, если у вас их не очень много. В случае, когда список большой, для выделения сразу всех элементов — используется комбинация клавиш Ctrl+A. После этого остается нажать на кнопку М которую мы вывели в интерфейсе ранее.
После этого, необходимо открыть встроенный калькулятор (включить его можно через меню, показанном на Рисунке 1) и в поле М будет показана нужная нам сумма выделенных строк.
Способ 2. Расчет суммы методом копирования выделенных строк
Выделяем необходимые строки способом, описанным выше. То есть с учетом нужной колонки. Далее используем контекстное меню или сочетание клавиш CTRL+C и копируем выделенные значения в буфер обмена. После этого открываем новый документ в Excel или OpenOffice и вставляем также через контекстное меню или командой CTRL+V и производим расчет суммы привычным способом.
Обратите внимание, офисные программы могут воспринимать вставленные значения из ячеек не как суммовые поля, а как текст. Поэтому нужно будет либо корректировать настройки, либо воспользоваться третьим способом.
Способ 3. Расчет суммы через сохранение в табличный документ
Воспользуемся другим встроенным в платформу 1С механизмом, а именно возможностью выводить списки в табличный документ. Выделим нужные строки, в отличие от предыдущих способов порядок колонки здесь значения не имеет. Затем в меню Еще выберем пункт Вывести список. Если вам нужна сумма не по всем строкам, а только по выделенным, отметьте пункт Только выделенные.
Далее откроется табличный документ, который можно сохранить в нужный формат. Допустим это будете Excel.
Открыв сохраненный файл в Excel, можно легко посчитать сумму нужны строк, через стандартную функцию суммирования.
На этом все. Приятной и удобной работы!
Подписывайтесь на наши группы в социальных сетях, чтобы не пропустить новые публикации.
Необходимо вычислить сумму значений пользовательского поля в Итоге по отбору.
Оглавление
Отчет выглядит так, сумма считается в колонке "Количество затрат":
Необходимо через пользовательский режим добавить это же поле, но с условием затрат по реквизиту для номенклатуры (статья калькуляции) из документов затрат производства, т.е. выполнить отбор. Сейчас сумма считается по этому полю без отбора, по всем значениям, которые выводятся в этой колонке.
В отчет добавим пользовательское поле, кнопки на форме отчета: "Еще" - "Прочее" - "Изменить вариант отчета". В появившемся окне "Пользовательские поля" - кнопка "Добавить" - "Новое поле выражение. " - "Выражение итоговых записей":
Указывать "Иначе 0" не обязательно.
Этим выражением, мы сказали системе выполнить отбор по интересующей группе справочника "Материальные затраты", элементы которой указаны в документах для номенклатур, затем подсчитать сумму затрат по полю "Количество затрат" соответственно тому, что попало в отбор.
Созданное пользовательское поле добавляем в отчет через кнопку "Настройка" на форме отчета:
Ненужное поле, которое заменили на новое, можно отключить.
Теперь в отчете, затраты по номенклатуре суммируются только в том случае, если для них указана группа статей калькуляции из группы "Материальные затраты":
Изначально, выражение выглядело так:
Выбор
Когда [Статья калькуляции.Группа статей калькуляции.Наименование] = "Материальные затраты"
Тогда Сумма([Количество затрат])
Иначе 0
Конец
В группировке и в Итоге по колонке кол-ва затрат сумма не работала, возвращала 0 (пустые значения). Поэтому функция "Сумма" должна быть вначале выражения.
Это поле добавленное, в стандартной ЕРП нет такого ?
И вот это, вы в общем то исключаете все где вариант исполнения не равно ЗНАЧЕНИЕ(Справочник.ВариантыИсполнения.ПустаяСсылка)
а до этого выбираете эти цены
Взаимисключение так как у вас в результирующей таблице либо NULL будет либо заполнен вариантИсполнения.
(9)Попробуйте так, если я вас правильно понял
ПО СтоимостьТМЦОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И (СтоимостьТМЦОстаткиИОбороты.ВариантИсполнения = ЦеныНоменклатурыСрезПоследних.ВариантИсполнения
| ИЛИ СтоимостьТМЦОстаткиИОбороты.ВариантИсполнения=Неопределено)
круто. Просто небольшой совет:
1) осознать, в какой конифгурации это делается
2) взять консоль запросов и посмотреть, что возвращают промежуточные запросы
3) ну и конечно понять, что значит "не выводится", вполне вероятно, что проблема вовсе не в запросе, а до или после него.
(2)проблема в запросе,уже все перепробовала. В ERP. У некоторой номенклатуры в цене не заполнен вариант исполнения. Поэтому он не берет цену. Не знаю как решить эту проблему.
(11)Надо получить сумму. Взять из регистра сведений цену и умножить на количество. Но бывает так,что Вариант исполнения не заполнен,но цену надо взять
Взять из регистра сведений цену и умножить на количество. Но бывает так,что Вариант исполнения не заполнен,но цену надо взять
С моим запросом ? только у тех у кого заполнено ?
У вас либо это поле составного типа в регистре, так как если бы там была пустая ссылка то он бы показал цену
(22)Так это не тот регистр или вам нужно если в данном регистре пустое ?, блин тогда поменяйте просто
Я думал у вас в регистре ТМЦ поля есть незаполненные
(26)ИЛИ ЦеныНоменклатурыСрезПоследних.ВариантИсполнения = ЗНАЧЕНИЕ(Справочник.ВариантыИсполнения.ПустаяСсылка))
Если так,то недостаточно памяти
(32)Тэкс, вам тогда надо сначала сделать запрос, к ценам и получить цены с вариантами и соответственно с пустыми вариантами, что бы исключить те у которых есть варианты. Можно попробовать вот этот вариант
нет. Пишу эмоциональные тексты, потом понимаю, что написал лишнего. Удалить невозможно - пытаюсь менять в безобидные по тексту.
Вот этот запрос выдает что либо разумное?
Лучше выбрать период поменьше.
(41) Отлично!
А так должен показывать все цены
(49) Попробуйте - если ничего не выдаст вообще , значит у вас в принципе нет стоимости , если Вариант не заполнен.
И значит предыдущий запрос работает корректно ибо "считает только для тех у кого вариант исполнения заполнен", поскольку если вариант не заполнен , то нет стоимости и сумма будут 0.
(54) Во первых не сумму - в этом запросе нет суммы. Мы смотрим просто наличие записей стоимости.
И то что он не показал ее именно и говорит, что НЕТУ у вас в регистре СтоимостьТМЦ нету никкаких записей при вариенте отсутствующем ВариантИсполнения
То есть сумма будет равна 0 по любому
Попробовал проанализировать изменения в конфигурацию под ВариантыИсполнения.
И в голове не укладывается , зачем было столько переписывать, вместо того чтобы создать Характеристику Номенклатуры ВариантИсполнения, которая бы принимала значения те же что в справочнике.
Может я совершенно туплю?
(39)Хуже всего что это в виды цен еще добавили, и теперь виды цен должны быть обязательно заполнено это поле
т.е по срезу последних по идее мы должны полуичить либо Номенклатура, ТипЦены,ВариантИсполнения И вот здесь если мы ставим отбор на тип цены , мы можем получит дофига записей( номенклатура, ВариантИсполнения ), почему или не срабатывает ? ,вот что удивляет т.е соединение идеТ по номенклатуре, но следующее условие должно отработать соеденить должно либо по варианту ВариантИсполнения равен, ИЛИ ЦеныНоменклатурыСрезПоследних.ВариантИсполнения.ВариантИсполнения = ЗНАЧЕНИЕ(Справочник.ВариантыИсполнения.ПустаяСсылка) хотя по идее в ЦеныНоменклатурыСрезПоследних мы можем получить как и наш вариант так и пустую ссылку,и соединит по двум записям как минимум(А ТАК И БУДЕТ потому как если раньше цены заполняли без варианта то в любом случае он получит пустую ссылку), но все равно не понятно почему памяти не хватает ну максимум задвоит записи ( возможно нужно просто скобками обрамить условие
И (СтоимостьТМЦОстаткиИОбороты.ВариантИсполнения = ЦеныНоменклатурыСрезПоследних.ВариантИсполнения
ИЛИ ЦеныНоменклатурыСрезПоследних.ВариантИсполнения.ВариантИсполнения = ЗНАЧЕНИЕ(Справочник.ВариантыИсполнения.ПустаяСсылка)). да а то без скобок он скорее всего считает два первых условия должны выполняться, ИЛИ последнее, что не правильно.
Так мысли вслух
И Посему, в принципе если поставить скобки то запрос отработает, но записи как минимум будут задвоены, и поэтому нужно будет еще условие ВЫБОР ставить и делить цену на два поля, типа как в последнем запросе, и далее вытяшивать если первое поле не нуль то его иначе второе поле. блин гемор еще тот
(40) Будьте оптимистом!
И как минимум радуйтесь, что не в ваших базах такой "гемор".
Одно дело помогать на этом форуме, и совсем другое - разгребать чужие бредовые писалки.
Я попробовал у себя в тестовой базе добавить справочник, и т д и тп. чтобы удобнее было на своей базе настраивать запрос.
Так ведь надо еще всю логику проведения изменять! Плюнул.
Хоть посмотреть бы на того деятеля, кто все это придумал там.
Не легче ли сделать отдельно временную таблицу с ценами номенклатуры ?
(47) таблица ТОЛЬКО с ценами смысла не имеет - ибо они прекрасно берутся из регистра, а вот цены со стоимостью мы и пытаемся сделать
так вот ее то и делаем в (46)
Ее тоже не так-то просто в этой конфе сделать.
(48) Если бы надо было брать цены только по типу цен - то да левым соединение все достается . но тут есть условия по заполненности или незаполненности варианта заполнения см. (44) , поэтому имеет смысл подготовить таблицу с финальными ценами , а не использовать объединение со сложным условием по соединению
(52) я разве говорил , что ее предоставлю ? Я предложил вариант, что нужна таблица с уже подготовленными ценами. В (36) возможно задваивает из -за двойного левого соединения и надо проверять через консольку запросов.
(58) А вот язвить не надо , вроде все культурные люди , и пытаемся помочь , и тут же ловлю претензию от Вас что я что-то должен . Я что-то предложил - Вы возразили - я ответил - не согласны Ок - переживу , Не вам оценивать мои знания. Я написал то, что считал нужным.
Трудно конечно при отсутствии у себя подобной конфигурации что-то оперативно менять.
Пожалуйста покажите что вот этот выдаст
Очень странный результат , хочу посмотреть , совпадают ли у вас варианты в 2 регистрах
(68) соединение по условию в (62) у вас пример запроса так вот вместо последний строки напишите этот код (после союза И)
(63) нет - в последнем 2 вариантаисполнения - из каждого регистра
И видно что мы по прежднему не можем составить нормальную таблицу цен.
Варианты исполнений должны совпадать
Пробуем так
Может вы скажете, ГДЕ тот программист, который все ЭТО придумал?
Ему точно будет плохо спаться.
Проще наверное вернуть к нормальному варианту с Характеристиками Номенклатуры.
Покажте вот тут что задваивает?
ВЫБРАТЬ
СтоимостьТМЦОстаткиИОбороты.Номенклатура КАК Номенклатура,
СтоимостьТМЦОстаткиИОбороты.КолНачальныйОстаток ,
СтоимостьТМЦОстаткиИОбороты.КолКонечныйОстаток ,
СтоимостьТМЦОстаткиИОбороты.ВариантИсполнения КАК ВариантИсполнения,
ЦеныНоменклатурыСрезПоследних.ВариантИсполнения Как ВариантИсполненияЦен,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ТипЦен, "Нет цены") КАК типЦен,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ
РегистрНакопления.СтоимостьТМЦ.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК СтоимостьТМЦОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&ДатаКон,
ТипЦен = &ТипЦен
) КАК ЦеныНоменклатурыСрезПоследних
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура=СтоимостьТМЦОстаткиИОбороты.Номенклатура
И ЦеныНоменклатурыСрезПоследних.ТипЦен=СтоимостьТМЦОстаткиИОбороты.ТипЦен
И ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.ВариантИсполнения <> Значение (Справочник. ВариантыИсполнения.ПустаяСсылка) ТОГДА
ЦеныНоменклатурыСрезПоследних .вариантИсполнения = СтоимостьТМЦОстаткиОбороты.ВариантИсполнения
ИНАЧЕ
ЦеныНоменклатурыСрезПоследних.ВариантИсполнения = Значение (Справочник. ВариантыИсполнения.ПустаяСсылка)
КОНЕЦ
Сегодня решить посмотреть Бухгалтерию КОРП. Нашёл в ней очень интересную штуку: поле в котором показан результат сложения выделенных ячеек печатной формы. Конечно, такую штуку бы правильнее реализовать на уровне платформы. Но коль нет, можно оказывается сделать ручками. Как говориться, и за это богам спасибо.
Вот исходный код из Бухгалтерии КОРП:
Код 1C v 8.х
Подумав немного, я добавил в функцию ещё расчёт среднего и определение количества ячеек с числами. Получилось вот что:
Код 1C v 8.х
Результат на картинке:
Да, чуть не забыл самое главное, функцию надо вызвать в обработчике ПриАктивизацииОбласти поля табличного документа.
Похожие FAQ
Еще в этой же категории
Вывод картинки (изображения) на печать, в макет (табличный документ) 32
// 1-й вариант //Как вывести картинку в табличный документ? ТабДок = Новый ТабличныйДокумент; Макет = ОбработкаОбъект.ПолучитьМакет(" Макет" ); ОбластьКартинки = Макет.ПолучитьОбласть(" ОбластьСКартинкой" ); Картинка = Новый Картинка(ПутьККа Вывести табличный документ в PDF 18
Данный пример работает на платформе выше 8.2.13 Макет = ПолучитьМакет(" Макет" ); ОбластьШапка = Макет.ПолучитьОбласть(" Шапка" ); ТабДок = Новый ТабличныйДокумент; ОбластьШапка.Параметры.НомерДок = Номер; ОбластьШапка.Параметры.ДатаДок = Как программно изменить текст, цвет, фон ячейки или области табличного документа? 7
Ниже приведено несколько полезных шаблонов кода по работе с табличным документом: //Пример получения текста ячейки ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента; ПолеТабДок.Область("R1C2").Текст = спрНоменклатура.Наименование; ПолеТабДок Как в отобразить картинку в табличной части 7
В табличной части есть документы заявки от покупателя, нам нужно добавить картинку для отображения статуса документов заявка - проведен , не проведен, помечен на удаление. //Отобразим картинку Процедура СписокПриВыводеСтроки(Элемент, Оформление Вывод колонтитулов программно ВерхнийКолонтитул, НижнийКолонтитул 6
Колонтитул является специальным текстом, выводимым вверху или внизу каждой страницы при выводе документа на печать. В тексте колонтитула можно использовать следующие управляющие конструкции: > ( >) - при печати в данном месте будет выведен номер ст Посмотреть все в категории Табличный документ
Читайте также: