Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 22:26

Как сложить значения Столбца "Объем"

Автор anton.kislov, 07 окт 2013, 09:54

0 Пользователей и 1 гость просматривают эту тему.

acanta

Обнулить Итог непосредственно перед циклом пробовали?
Вы в объем загоняете отформатированные строки? Объем является "ценой"? Что мешает в таблицу добавить колонку с готовым объем*количество тип число и воспользоваться штатным ИТОГО()?

anton.kislov

Цитата: mixqn от 08 окт 2013, 10:09
ПриПолученииДанных отрабатывает несколько раз, кажется, 2 раза ( я уже писал на форуме, можно поискать по истории) - первый раз для первой строки, потом для всех остальных.
Не суть важно, 2, 3 или 4 раза отрабатывает событие, факт в том, что не 1 раз, и при каждом срабатывании события обрабатывается только часть строк.

Что это значит для нас? Это значит, что мы не можем получать итог в этой процедуре. Нужен более хитрый алгоритм. Должна быть переменная модуля, в которой мы накапливаем итог. Я подобные задачи решал, но примера "под рукой" нет. Попробуйте подумать в этом направлении: проанализируйте, сколько в точности раз отрабатывает ПриПолученииДанных, для каких строк и на основе этого продумайте алгоритм.
Если время позволит, позже постараюсь пример подготовить и выложить.
Добавлено: 08 окт 2013, 10:14


нашел ту тему про ПриПолученииДанных, там есть обработка для демонстрации, в общем, почитайте
Прочитал, посмотрел..
действительно я ошибся в вызове Итога ПриПолученииДанных - не выйдет..
Впринципе, можно передать значение Итог переменной, а ту вызвать в процедуре Подвала..
Одним словом буду пробовать

mixqn

Цитата: acanta от 08 окт 2013, 10:38Что мешает в таблицу добавить колонку с готовым объем*количество тип число и воспользоваться штатным ИТОГО()?
Вероятно, вы сами не решали подобных задач, поэтому возникают такие вопросы.
Объясню: у табличного поля заполнено свойство "данные" - не важно, что это в данном случае (вероятно, табличная часть документа), факт в том, что Данные - не таблица значений, а некий объект конфигурации.
Если данные - объект, добавить произвольную колонку с данными вы не сможете. Поэтому при выводе данных в колонку заполняется не значение, а текст в ячейке. Таким образом, имеем колонку без значений, заполненную текстовыми значениями. Итог в этом случае работать не будет.

Поэтому делать надо так, как я писал ранее: завести переменную модуля, продумать алгоритм накопления в ней итога и момент вывода итога.

anton.kislov

Цитата: acanta от 08 окт 2013, 10:38
Обнулить Итог непосредственно перед циклом пробовали?
Вы в объем загоняете отформатированные строки? Объем является "ценой"? Что мешает в таблицу добавить колонку с готовым объем*количество тип число и воспользоваться штатным ИТОГО()?
обнулить вначале пробовал...не помогает..
Новая колонка - не вариант, так как нужно видеть Объем общего заказанного товара, а не пользоваться калькулятором...
Объем является числом.
Добавлено: 08 окт 2013, 10:49


Цитата: mixqn от 08 окт 2013, 10:45
Цитата: acanta от 08 окт 2013, 10:38Что мешает в таблицу добавить колонку с готовым объем*количество тип число и воспользоваться штатным ИТОГО()?
Вероятно, вы сами не решали подобных задач, поэтому возникают такие вопросы.
Объясню: у табличного поля заполнено свойство "данные" - не важно, что это в данном случае (вероятно, табличная часть документа), факт в том, что Данные - не таблица значений, а некий объект конфигурации.
Если данные - объект, добавить произвольную колонку с данными вы не сможете. Поэтому при выводе данных в колонку заполняется не значение, а текст в ячейке. Таким образом, имеем колонку без значений, заполненную текстовыми значениями. Итог в этом случае работать не будет.

Поэтому делать надо так, как я писал ранее: завести переменную модуля, продумать алгоритм накопления в ней итога и момент вывода итога.
верно..
накидаю вариант, мне кажется решение пришло))) точнее я так делал, но для другой цели, и вывел именно одни данные, просто удалил этот код...счас буду вспоминать где бэкап лежит кодов)) думаю все не так тяжко как сначала показалось

Dethmontt

А можно узнать зачем видеть итог не по всей таблице, а только по той части что уместилась на экран?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

anton.kislov

Цитата: Dethmontt от 08 окт 2013, 17:08
А можно узнать зачем видеть итог не по всей таблице, а только по той части что уместилась на экран?
имеено по всей таблице, точнее по всему столбцу табличной части и нужно видеть

GRADUS

Цитата: anton.kislov от 07 окт 2013, 10:37

Дело в том, что данные (объем и вес) у меня хранятся в Массиве, который я получаю запросом, а потом расставляю согласно номенклатурам...

Если ты даже знаешь где у тебя хранятся данные, какие могут быть еще проблемы? Засовываешь в любое событие которое будет завязано на изменение/ обновление ТЧ расчет суммы из массива и помещаешь в переменную.

Либо при "расстановке" номенклатурам объема ведешь еще одну переменную "объемобщий"

acanta

Для этого нужно иметь две таблицы номенклатуры - одну видимую, "картинку" (кстати, она может редактироваться пользователем? строки удаляться?) и вторую -программную копию с дополнительными колонками с информацией и возможностью получения итога. Пытаться обходить каждый раз при обновлении экрана видимую и пересчитывать - будет тормознее чем иметь готовые две..

mixqn

Нашел (как и обещал ранее по теме), как это делал я в свое время.
Выложить код полностью не смогу, да и смысла нет, поскольку он огромен (модуль формы – около 2200 строк) – там документ по планированию заказов на основе потребности с не самыми простыми алгоритмами расчета. Расчетных колонок (то есть таких, данные в которых не хранятся, а выводятся в виде текста) там около 4 или 5 – не стал сейчас вникать в детали.

В общем, не суть, я отвлекся от темы ))). Попробую изложить основные идеи, которые я там использовал и которые можно было бы применить в данном случае:
  • Значения расчетных полей выводятся текстом, как тут выше по теме и было изложено в событии ПриПолученииДанных
  • Расчет итоговых значений расчетных полей вынесен в отдельную процедуру – ОбновитьИтогиРасчетныхПолей. Суть процедуры: собрать данные расчетных полей по всей таблице, то есть по сути, пробежаться в цикле по строкам таблицы, рассчитать значения нужных полей для каждой строки и прибавить к сумматорам. Полученные итоги выводятся в подвал соответствующих колонок. Сама процедура вызывается по разным событиям, как минимум (что нужно в данном конкретном случае, в данной теме):
  • ПриОткрытии с проверкой НЕ ЭтоНовый() - первоначальное заполнение при открытии для сохраненного объекта
  • ПриОкончанииРедактирования - или другое событие изменения данных таблице
События приведены для примера, в конкретных обстоятельствах могут использоваться другие варианты. Например, ПриСменеСтраницы, ПриИзменении и т.д. и т.п. Основная идея в том, что нужно:
  • первоначально заполнить таблицу по сохраненным данным
  • обновлять таблицу при изменении данных
.

свою процедуру выкладывать не буду, упростил ее, заменил имена переменных с целью схематично показать суть дела:
Процедура ОбновитьИтогиРасчетныхПолей()
Если Не ТаблицаДокумента.Количество() Тогда
Возврат
КонецЕсли;

РасчетныйПараметр1 = 0;
РасчетныйПараметр2 = 0;
РасчетныйПараметр3 = 0;
РасчетныйПараметр4 = 0;
Для каждого СтрТаб Из ТаблицаДокумента Цикл
РасчетныйПараметр1 = РасчетныйПараметр1 + 1; // вместо + 1 реальный алгоритм расчета
РасчетныйПараметр2 = РасчетныйПараметр2 + 1; // вместо + 1 реальный алгоритм расчета
РасчетныйПараметр3 = РасчетныйПараметр3 + 1; // вместо + 1 реальный алгоритм расчета
РасчетныйПараметр4 = РасчетныйПараметр4 + 1; // вместо + 1 реальный алгоритм расчета
КонецЦикла;
ЭлементыФормы.ТаблицаДокумента.Колонки.РасчетныйПараметр1.ТекстПодвала = Формат(РасчетныйПараметр1, "ЧЦ=15; ЧДЦ=3");
ЭлементыФормы.ТаблицаДокумента.Колонки.РасчетныйПараметр2.ТекстПодвала = Формат(РасчетныйПараметр2, "ЧЦ=15; ЧДЦ=2");
ЭлементыФормы.ТаблицаДокумента.Колонки.РасчетныйПараметр3.ТекстПодвала = Формат(РасчетныйПараметр3, "ЧЦ=15; ЧДЦ=2");
ЭлементыФормы.ТаблицаДокумента.Колонки.РасчетныйПараметр4.ТекстПодвала = Формат(РасчетныйПараметр4, "ЧЦ=15; ЧДЦ=2");

КонецПроцедуры

ospov11789

Цитата: anton.kislov от 07 окт 2013, 09:54
Добавил в подвал документа надпись ИтогоОбъем
Рядом хотел добавить СуммуОбъемов по данным столбца Объем, сделать как автосумма..

Подскажите как это сделать?
Добавбте реквизит в основую часть документа и в форме измените путь данных на подвал. Вто и все

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск