Итоги в динамическом списке

Публикация № 605743

Разработка - Работа с интерфейсом

46
Как быстро посчитать итоги в динамическом списке

Добрый день, коллеги.

Сегодня столкнулся с необходимостью в динамическом списке посчитать итоги по колонкам, покопавшись на форумах, понял, что тема достаточно старая, и решения ее весьма разнообразные.

Я бы хотел предложить Вам свой способ решения данной проблемы - он достаточно прост и не требует программирования и прочих заморочек.
Его главное достоинство - простота. Дело в том что, с недавних пор в динамических списках появилась возможность использовать временные таблицы в запросах и как следствие пакетные запросы.
Суть метода заключается в расчете итогов отдельным полем в самом запросе динамического списка и выводе его в каждой строке без отображения, само же поле отборажается через ТекущиеДанные элемента формы в подвале. До появления возможности использовать временные таблицы и пакеты в запросе можно было расчитать только общий итог по динамическому списку который не учитывает пользовательские отборы, из-за этого данный метод практически не использовался, пример такого запроса Вы можете увидеть ниже:
ВЫБРАТЬ
	Документ1.Ссылка КАК Ссылка,
	Документ1.ВерсияДанных КАК ВерсияДанных,
	Документ1.ПометкаУдаления КАК ПометкаУдаления,
	Документ1.Номер КАК Номер,
	Документ1.Дата КАК Дата,
	Документ1.Проведен КАК Проведен,
	Документ1.СуммаДокумента КАК СуммаДокумента,
	ВложенныйЗапрос.СуммаДокументаИтог КАК СуммаДокументаИтог
ИЗ
	Документ.Документ1 КАК Документ1,
	(ВЫБРАТЬ
		СУММА(Документ1.СуммаДокумента) КАК СуммаДокументаИтог
	ИЗ
		Документ.Документ1 КАК Документ1) КАК ВложенныйЗапрос

С появлением возможности использовать временные таблицы и пакетных запросов мы получили возможность расчитывать итоги в динамических списках с учетом наложенных на них отборов, без каких либо сложностей,  но тут нужно отметить следующие особенности:  
1) отборы динамического списка будут установленны на самый первый запрос в пакете
2) выбрать основную таблицу можно будет только из физических таблиц присутствующих в последнем запросе пакета - далее покажу на примере.
Итак, есть некий динамический список с полями числового типа, и требуется по ним рассчитать итоги, в моем примере это некий документ, у которого есть колонка "СуммаДокумента" (см. скриншот):
1-й вариант запроса будет не даст нам возможность указать Документ1 в качестве основной таблицы, как следствие с динамическим списком не будет возможности работать  стандартным способом и не будет динамического чтения данных, однако он будет учитывать итоги с учетом отборов. Я покажу его в качестве примера того как делать не нужно:
ВЫБРАТЬ
	Документ1.Ссылка КАК Ссылка,
	Документ1.ВерсияДанных КАК ВерсияДанных,
	Документ1.ПометкаУдаления КАК ПометкаУдаления,
	Документ1.Номер КАК Номер,
	Документ1.Дата КАК Дата,
	Документ1.Проведен КАК Проведен,
	Документ1.СуммаДокумента КАК СуммаДокумента
ПОМЕСТИТЬ ВТОсновнаяТаблица
ИЗ
	Документ.Документ1 КАК Документ1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТОсновнаяТаблица.Ссылка КАК Ссылка,
	ВТОсновнаяТаблица.ВерсияДанных КАК ВерсияДанных,
	ВТОсновнаяТаблица.ПометкаУдаления КАК ПометкаУдаления,
	ВТОсновнаяТаблица.Номер КАК Номер,
	ВТОсновнаяТаблица.Дата КАК Дата,
	ВТОсновнаяТаблица.Проведен КАК Проведен,
	ВТОсновнаяТаблица.СуммаДокумента КАК СуммаДокумента,
	ВложенныйЗапрос.СуммаДокументаИтоги КАК СуммаДокументаИтоги
ИЗ
	ВТОсновнаяТаблица КАК ВТОсновнаяТаблица
		{ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ВТОсновнаяТаблица.СуммаДокумента) КАК СуммаДокументаИтоги
		ИЗ
			ВТОсновнаяТаблица КАК ВТОсновнаяТаблица) КАК ВложенныйЗапрос
		ПО (ИСТИНА)}

2-й вариант запроса - это собственно запрос, который будет работать корректно в наших динамических списках: 

ВЫБРАТЬ
	Документ1.Ссылка КАК Ссылка,
	Документ1.ВерсияДанных КАК ВерсияДанных,
	Документ1.ПометкаУдаления КАК ПометкаУдаления,
	Документ1.Номер КАК Номер,
	Документ1.Дата КАК Дата,
	Документ1.Проведен КАК Проведен,
	Документ1.СуммаДокумента КАК СуммаДокумента
ПОМЕСТИТЬ ВТОсновнаяТаблица
ИЗ
	Документ.Документ1 КАК Документ1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Документ1.Ссылка КАК Ссылка,
	Документ1.ВерсияДанных КАК ВерсияДанных,
	Документ1.ПометкаУдаления КАК ПометкаУдаления,
	Документ1.Номер КАК Номер,
	Документ1.Дата КАК Дата,
	Документ1.Проведен КАК Проведен,
	Документ1.СуммаДокумента КАК СуммаДокумента,
	ВложенныйЗапрос.СуммаДокументаИтог КАК СуммаДокументаИтог
ИЗ
	Документ.Документ1 КАК Документ1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ВТОсновнаяТаблица.СуммаДокумента) КАК СуммаДокументаИтог
		ИЗ
			ВТОсновнаяТаблица КАК ВТОсновнаяТаблица) КАК ВложенныйЗапрос
		ПО (ИСТИНА)
ГДЕ
	Документ1.Ссылка В
			(ВЫБРАТЬ
				ВТОсновнаяТаблица.Ссылка КАК Ссылка
			ИЗ
				ВТОсновнаяТаблица КАК ВТОсновнаяТаблица)

Первым запросом мы читаем данные основной таблицы с учетом пользовательских отборов, вторым запросом мы делаем сразу несколько вещей
1) мы указываем динамическому списку, какая таблица у нас может быть в качестве основной,  и тут же фильтруем её по данным временной таблицы
2) считаем итоги временной таблицы, в которой данные уже отфильтрованны нужным нам образом
3) поля с итогами присоединяем внутреним соединениям к основной таблице
Далее нам остается в свойствах динамического списка у данного поля утановить "использовать всегда" (на форму поля итогов просто не выводим).
И для каждой колонки, в которой нужно рассчитать итоги, указываем ПутьКДаннымПодвала из данных форм со ссылкой на нужное нам поле итога.
Результат работы выглядит так:
Конечно, у данного метода есть свои особенности, но все же на текущий момент это достаточно простой и быстрый способ получить итоги в динамических списках.
Пример расчета итогов в 10 колонках на 50000 документах
Всем спасибо за внимание.
46

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. kolya_tlt 11 03.04.17 15:29 Сейчас в теме
(0) кажется вам не нужно условие в крайнем пакете
2. Восьмой 46 03.04.17 16:50 Сейчас в теме
(1) ошибаетесь коллега - без этого условия у вас перестанет работать фильтр.
3. herfis 283 03.04.17 17:26 Сейчас в теме
Поправьте, если я чего-то недопонял.
Открытие динамического списка документов без отборов и ограничения по периоду приведет к засовыванию всей таблицы документов во временную таблицу?
4. Восьмой 46 03.04.17 19:42 Сейчас в теме
(3) увы да, в первую таблицу всегда будет засовываться вся таблица, а вторая будет читать только соответствующую порцию из этой ВТ т.е. на клиента возвращается именно считанная порция а не все таблица.
Возможно я сейчас ляпнул глупость так как мои познания SQL далеки от идеала, но судя по профайлеру и поведению платформы все это работает примерно так.
Я был бы признателен гуру SQL если они на примере данных профайлера объяснили мне что происходит при таком запросе динамического списка и какие здесь могут быть подводные камни.
На моих тестах в 10 колонок итогов в 50000 документах с учетом различных отборов и без, все считаются достаточно быстро.
5. Восьмой 46 03.04.17 19:46 Сейчас в теме
(4) Отображение на форме при скролинге, обновлении данных формы, и.т.д - не вызывает сильных тормозов.
6. kolya_tlt 11 04.04.17 09:05 Сейчас в теме
(4) именно поэтому в платформе и нет нормального механизма по итогам списков документов, потому как без перебора всех документов сумму не подсчитать.
у нас, например, 50к документов создаётся за 5 дней. поставьте эксперимент на 1млн документов
7. herfis 283 04.04.17 09:31 Сейчас в теме
(4) Проблема в том, что такое решение прикапывает лопатой основную идею динамического списка (как и получение общих итогов в принципе) - сделать производительность динамического списка фактически независящей от размера таблицы, которую он отображает (если работать в рамках индексов). С ростом размера таблицы и производительность и потребление ресурсов будут ощутимо ухудшаться.
На карманных базах можно издеваться над эффективностью почти как угодно - запаса прочности хватает.
Но в промышленных базах десятки миллионов записей - это обыденность даже для таблиц документов. Где даже банальный запрос получения количества записей в таблице выполняется ощутимое время.
Когда поработаешь с большими потоками информации и посмотришь на возникающие на глазах проблемы - поневоле в первую очередь начинаешь задумываться в том числе и о масштабируемости.
Решение не лишено остроумности, но, к сожалению, плохо масштабируемо.
ИМХО, овчинка не стоит выделки. Если кому-то так уж важны общие итоги, то разумным компромиссом выглядит их получение "по кнопке". А это проще и логичнее делать через СКД.
dj_serega; N!ghtmare; Dach; user620589_pletnev; Amadeuc404; mickey.1cx; Stim213; +7 Ответить
8. sisdrou 22 04.04.17 10:02 Сейчас в теме
Добрый день. пожалуйста поясните, а для чего это нужно ? Список динамический, что дает вам сумма в итогах, список постоянно изменяем? Ну если вы отбор только наложите и будете точно знать, понимать количество нужных документов. В учетных системах я не встречал практико - применение этому.
9. herfis 283 04.04.17 11:10 Сейчас в теме
(8) Итоги по списку с установленными отборами имеют практический смысл. Это же очевидно.
Другое дело, что
1) если эти данные имеют самостоятельную ценность, то для этого обычно отчеты используются
2) если эти данные часть бизнес-процесса, влияющего на документооборот, то обычно такие бизнес-процессы автоматизируются более полно в рамках какого-нить рабочего стола на это заточенного
Просто пользователи в решении своих потребностей отталкиваются от того что имеют и редко способны самостоятельно сформулировать внятное техзадание.
dj_serega; Dach; zqzq; kolya_tlt; necropunk; h00k; Восьмой; +7 Ответить
10. starik-2005 1960 04.04.17 11:16 Сейчас в теме
(9)
сформулировать внятное техзадание
Это не пользователей дело, а постановщика задачи. Пользователь должен сформулировать то, как он для себя это видит, а бизнес должен провести аудит и понять, а нужно ли это вообще и как это лучше сделать в комплексе. Хотелки отдельного пользователя могут иметь место там, где решение и разрабатывается для этого отдельного пользователя. Когда решение разрабатывается для бизнеса, то пользователь получает функционал, проанализированный бизнесом и включенный в решение бизнесом, а не пользователем.
11. herfis 283 04.04.17 11:25 Сейчас в теме
(10) Ок. Некорректно выразился. Читать как "редко способны самостоятельно сформулировать внятные технические требования".
13. Восьмой 46 04.04.17 12:11 Сейчас в теме
(10) Если мы говорим про разработку тиражных решений то я с Вами полностью согласен. Но реальность такова что практически все тиражные решения всегда затачивались и будут затачиваются под хотелки определенной группы пользователей - проводить аудит, что-то решать, думать "а оно нам надо" - для бизнеса это зачастую дорого и не интересно - бизнесу важен результат в установленных для него рамках - поэтому Бизнес рано или поздно нанимает "отдельно программиста" на которого сыплются все хотелки этого бизнеса.
12. Восьмой 46 04.04.17 11:56 Сейчас в теме
Добрый день коллеги! Большое спасибо за поддержку и за интерес!
Статья предназначается в первую очередь для ТЕХ кому это нужно.
По моему опыту в большинстве случаев это капризы пользователей, не нравится им работать с отчетами и они некоторые вещи хотят видеть сразу в списках, например суммы по отобранным документам ит.д . Тут даже не всегда получается объяснить не рациональность таких требований, а можно и работы лишиться в некоторых случаях. Если мы говорим про базы где производительность критерий номер 1 то да такой подход скорее фишка нежели что-то полезное - если же мы говорим про базы КФИС то тут это будет иметь смысл так как критерий номер 1 уже не производительность а максимально возможное количество аналитики (инталев тому пример) которую хотят видеть сразу на форме и не лезть в 100500 отчетов, и не жать дополнительные кнопки.
Как бы то ни было - у людей возникает потребности в итогах динамических списков , а решения которые находят для этого разработчики весьма изощрённые - собственно им и посвящается.
14. herfis 283 04.04.17 12:42 Сейчас в теме
(12) Хозяин-барин. Только проблема в том, что очень сложно провести границу достаточности масштабируемости.
Сегодня у вас все довольны. А завтра подрастает документооборот или просто база проживет несколько лет. И у всех начинает все глючить и подтормаживать то тут то там, потому что конфа нафарширована костылями без оглядки на масштабируемость. И стоило ли бизнесу пришедшее в негодность решение, требующее больших затрат на оптимизацию (в том числе потому, что авторов давно уж нет) того года условно "красивой жизни" - большой и жирный вопрос. Бизнес вполне умеет слушать, если говорить с ним на языке денег и предлагать разумные альтернативы.
15. Vlad_2008 12 05.04.17 17:32 Сейчас в теме
Тоже считаю, что динамический список должен оставаться динамическим, а итоги можно считать по кнопке. Как вариант, вместо кнопки можно прицепиться к какому-либо событию, хотя их мало: ПриАктивизацииСтроки, ПриАктивизацииЯчейки. Конечно, можно еще и обработку ожидания прикрутить, а к ней, в свою очередь, тоже сделать кнопку Вкл/Выкл, ну чтобы можно было отключать ожидание и не производить постоянные вычисления.

Сами итоги считать через СКД, как написано (уже давно) тут: http://v8.1c.ru/o7/201404list/index.htm

Причем, настройки можно анализировать и принимать соответствующие решения о необходимости пересчета итогов вообще, а также по этим настройкам можно узнать для каких полей нам нужно это делать, а для каких нет.
neo-ti; dj_serega; ABudnikov; dabu-dabu; CSiER; +5 Ответить
16. Восьмой 46 05.04.17 17:43 Сейчас в теме
(15) За наводку на статью спасибо - не знал что так можно. Сразу возникает вопрос - есть возможность быстро отловить момент изменения настроек динамического списка, или тут все-таки танцы с бубнами?
17. kolya_tlt 11 06.04.17 09:02 Сейчас в теме
(16) ПриОбновленииСоставаПользовательскихНастроекНаСервере вам разве не подходит ?
18. the1 388 06.04.17 09:50 Сейчас в теме
(17) ПриОбновленииСоставаПользовательскихНастроекНаСервереИмениНу­ралиеваБорисаГеоргиевича же! Не вводите людей в заблуждение, коллега!
Lo1jke; maXon777; savinsva; +3 Ответить
19. kolya_tlt 11 06.04.17 10:45 Сейчас в теме
(18) Евгений Ваганович, первое апреля прошло, заберите гонорар, увидимся через год
20. Vlad_2008 12 06.04.17 15:25 Сейчас в теме
(16) Увы нету, только танцы.

Я, как правило, делаю кнопку, по которой, после установки фильтров, пользователь делает необходимые расчеты. Иногда, вешаю обработку на событие "ПриАктивизацииСтроки", но обработчик этот глючный и не всегда срабатывает, например, после Ctrl+F в списке остается одна строка - событие есть, меняем условие поиска при котором у нас остается опять одна строка (другая) - события нет. Поэтому, добавляю обработчик и для "ПриАктивизацииЯчейки", т.е. сместились в строке - событие есть, короче, танцы.

Вот, в 8.3.10 пообещали обработчик "ПриПолученииДанныхНаСервере", сначала обрадовался ... но, обломали, вызов не контекстный, форму поменять нельзя, можно только строчки оформить, причем искать (сортировка, отбор и т.д.) по таким "данным" (их тама нету) бессмысленно.

Еще жду 8.3.11, там будет общение между сервером (фоновые задания) и клиентскими сеансами, не знаю, может там удастся прорваться, поживем увидим ...
21. CheBurator 3399 08.04.17 21:12 Сейчас в теме
(20) так уже ж сделали совсем недавно это самое общение сервера с клиентом
22. Vlad_2008 12 09.04.17 15:01 Сейчас в теме
Ну я про пост от 17/03 "Передача информации с сервера", пока написано что "планируется 8.3.11".
23. Vlad_2008 12 10.04.17 14:35 Сейчас в теме
Поковырялся вчера с итогами для документов на 5 000 - летает. Если правильно "КАКать", то верхний запрос отлавливает все: поиск, поиск по полям через ссылку, отбор по любому реквизиту, поиск и отбор по характеристикам, в общем, "загнать в угол" - не вышло.

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

Небольшой косяк есть, это когда после поиска получаем пустой список, а потом что-то ищем и строки в списке есть, но нет активной строки, тогда имеем ТекущиеДанные = Неопределено и сумма итога не отображается, ес-но при переходе в список сумма появляется, но это фигня.

Позже погоняю справочник, к-нить иерархический, интересно как там будут фильтры отлавливаться.
24. nvv1970 17.04.17 01:04 Сейчас в теме
Формировать новую ВТ на 1 млрд записей при каждом скролинге - алескапут.
Может для этих целей вообще отказаться от динамического списка?? ДС в высоконагруженых системах - зло.

Если рассматривать ваши запросы, то поясните для чего нужна ВТ вообще? почему нельзя просто присоединить только готовую сумму из подзапроса?
Если требуется, то для наложения на подзапрос условий прописать в нем {где ...}. Кажется должно работать.
25. igormiro 691 19.04.17 10:04 Сейчас в теме
Вот рабочий запрос без Вт ВЫБРАТЬ
РаспоряжениеНаОтгрузку.Ссылка КАК Ссылка,
	РаспоряжениеНаОтгрузку.ПометкаУдаления КАК ПометкаУдаления,
	РаспоряжениеНаОтгрузку.Номер КАК Номер,
	РаспоряжениеНаОтгрузку.Проведен КАК Проведен,
	РаспоряжениеНаОтгрузку.СуммаДокумента КАК СуммаДокумента,
	ВложенныйЗапрос.СуммаДокументаИтог КАК СуммаДокументаИтог,
	РаспоряжениеНаОтгрузку.Дата КАК Дата
ИЗ
	Документ.РаспоряжениеНаОтгрузку КАК РаспоряжениеНаОтгрузку
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ВТОсновнаяТаблица.СуммаДокумента) КАК СуммаДокументаИтог
		ИЗ
			Документ.РаспоряжениеНаОтгрузку КАК ВТОсновнаяТаблица
		{ГДЕ
			ВТОсновнаяТаблица.Ссылка.* как Ссылка}) КАК ВложенныйЗапрос
		ПО (ИСТИНА)
		
		{ГДЕ
			РаспоряжениеНаОтгрузку.Ссылка.* как Ссылка}
Показать
26. zqzq 16 05.06.17 10:14 Сейчас в теме
(25) Идея интересная, но тогда нужно все поля убрать, краме ссылки и итогов, а на форму вытягивать уже через ссылку, например Ссылка.Дата, Ссылка.Номер и т.д. чтобы отборы корректно работали
ВЫБРАТЬ	
	Т.Ссылка КАК Ссылка,
	ВложенныйЗапрос.СуммаДокументаИтог КАК СуммаДокументаИтог
ИЗ
    Документ.Т КАК Т
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СУММА(П.СуммаДокумента) КАК СуммаДокументаИтог
        ИЗ
            Документ.Т КАК П
        {ГДЕ
            П.Ссылка.* как Ссылка}) КАК ВложенныйЗапрос
        ПО (ИСТИНА)
{ГДЕ
    Т.Ссылка.* как Ссылка}
Показать
27. PerlAmutor 45 06.06.17 06:15 Сейчас в теме
Поправьте ошибку:
1-й вариант запроса будет не даст нам возможность указать Документ1
28. Rokky78 23 11.07.17 16:46 Сейчас в теме
(0) Интересное решение. Попытался применить в своей задаче. Мне нужно при перемещении по списку номенклатуры формировать другой ДС (остатки). Почти все получилось, но для ДС остатков свойства "ТекущаяСтрока", "ТекущиеДанные" = Неопределено. Поэтому итоги в подвале не показывает. Сами поля рассчитываются и присоединяются нормально. Не получается их загнать в подвал.
Может подскажете, как у ДС сделать какую-либо (в моем случае не важно) строку текущей?
29. KAV2 08.11.17 03:47 Сейчас в теме
Большое спасибо за идею и подробное объяснение. Однако вот смотрю исходный запрос, генерируемый платформой и вижу что для основной выборки (второй запрос) делается отбор для порицонного считывания (по 25 записей), тогда как для первого запроса, где создается временная таблица такого отбора не делается (правда все равно, устанавливаются отоборы установленные пользователем). Поэтому мне кажется, все равно будем получать тяжелый запрос. Что думаете по этому поводу? Или может я не правильно понимаю что происходит?
30. getnight 42 27.06.18 11:57 Сейчас в теме
Надеюсь автор (или кто нибудь из местных гуру по динамическим спискам) сможет мне помочь.

Проблема описана тут https://forum.infostart.ru/forum9/topic194967
31. insurgut 196 24.01.19 14:05 Сейчас в теме
Только у меня на деле ничего не работает? Нужно на форме заказа разместить список оплат по нему, и в подвале вывести итог. Сделал 1 в 1 - в подвал ничего не выводится.
32. insurgut 196 24.01.19 19:58 Сейчас в теме
В итоге забил на динамический список и сделал таблицу значений на форме, которую заполняю при открытии формы документа...

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ПоступлениеНаСчет.Ссылка КАК ДокументОплаты,
	                      |	ПоступлениеНаСчет.СуммаДокумента КАК СуммаДокумента
	                      |ИЗ
	                      |	Документ.ПоступлениеНаСчет КАК ПоступлениеНаСчет
	                      |ГДЕ
	                      |	ПоступлениеНаСчет.ДокументОснование = &ДокументОснование
	                      |	И ПоступлениеНаСчет.Проведен
	                      |
	                      |УПОРЯДОЧИТЬ ПО
	                      |	ПоступлениеНаСчет.Дата,
	                      |	ПоступлениеНаСчет.Ссылка");
	Запрос.УстановитьПараметр("ДокументОснование", Объект.Ссылка);
	ТаблицаОплат.Загрузить(Запрос.Выполнить().Выгрузить());
	Элементы.ТаблицаОплатСуммаДокумента.ТекстПодвала = ТаблицаОплат.Итог("СуммаДокумента");
	
КонецПроцедуры
Показать
33. robomicky 21.02.19 02:50 Сейчас в теме
Чисто для проверки работы ПолучитьИсполняемуюСхемуКомпоновкиДанных()

Сделал расширение для формы списка документа Комплектация номенклатуры и
добавил в расширение Форму списка Комплектации, далее:

1. реквизит КоличествоИтог (Тип Число)
2. Использование Подвал - Да
3. Для колонки Количество - Текст подвала "Итого:" и Путь к данным новый реквизит КоличествоИтог
4. В модуль формы добавил код:

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
ОпределитьКоличествоКоличествоИтог();
КонецПроцедуры

&НаСервере
Процедура ОпределитьКоличествоКоличествоИтог()
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема,Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КоличествоИтог = Результат.Итог("Количество");
КонецПроцедуры

&НаКлиенте
Процедура Расш1_СписокПриАктивизацииЯчейкиПосле(Элемент)
ОпределитьКоличествоКоличествоИтог();
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ИзменитьВыделенныеПосле(Команда)
ОпределитьКоличествоКоличествоИтог();
КонецПроцедуры

Итоги в подвале показываются.

P.S. Есть некоторая особенность.
Если устанавливать/снимать Чекбоксы на форме (Вид операции и Организация), то обновление итогов произойдёт только после щелчка мышью в любой ячейке списка.
noprogrammer; +1 Ответить
34. user1012691 05.04.19 14:12 Сейчас в теме
Можно уточнить, если нужно добавить условие для расчета итога по колонке
ГДЕ Документ1.ПометкаУдаления = ЛОЖЬ
, то помеченные на удаление документы не показываются в списке. Есть возможность исправить это? Пример:
ВЫБРАТЬ
	Документ1.Ссылка КАК Ссылка,
	Документ1.ВерсияДанных КАК ВерсияДанных,
	Документ1.ПометкаУдаления КАК ПометкаУдаления,
	Документ1.Номер КАК Номер,
	Документ1.Дата КАК Дата,
	Документ1.Проведен КАК Проведен,
	Документ1.СуммаДокумента КАК СуммаДокумента
ПОМЕСТИТЬ ВТОсновнаяТаблица
ИЗ
	Документ.Документ1 КАК Документ1
ГДЕ Документ1.ПометкаУдаления = ЛОЖЬ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Документ1.Ссылка КАК Ссылка,
	Документ1.ВерсияДанных КАК ВерсияДанных,
	Документ1.ПометкаУдаления КАК ПометкаУдаления,
	Документ1.Номер КАК Номер,
	Документ1.Дата КАК Дата,
	Документ1.Проведен КАК Проведен,
	Документ1.СуммаДокумента КАК СуммаДокумента,
	ВложенныйЗапрос.СуммаДокументаИтог КАК СуммаДокументаИтог
ИЗ
	Документ.Документ1 КАК Документ1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ВТОсновнаяТаблица.СуммаДокумента) КАК СуммаДокументаИтог
		ИЗ
			ВТОсновнаяТаблица КАК ВТОсновнаяТаблица) КАК ВложенныйЗапрос
		ПО (ИСТИНА)
ГДЕ
	Документ1.Ссылка В
			(ВЫБРАТЬ
				ВТОсновнаяТаблица.Ссылка КАК Ссылка
			ИЗ
				ВТОсновнаяТаблица КАК ВТОсновнаяТаблица)
Показать
Оставьте свое сообщение

См. также

Создание асинхронных виджетов 65

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Описание нескольких способов создания асинхронных виджетов для 1С:Предприятия. Рассматриваются способы с использованием HTTP-сервисов и фоновых заданий.

16.10.2019    1146    YPermitin    10       

Формы. Трудности программной работы 69

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Бесплатно (free) Работа с интерфейсом

Рассматриваем основные подводные камни, с которыми приходится сталкиваться при программной работе с формами, а также способы обхода самых частых проблем.

06.10.2019    3323    YPermitin    20       

Лайфхаки 1С (часть 1). Настройки отчетов и печатных форм 1С 33

Статья Программист Пользователь Стажер Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

Статья рассчитана на пользователей или программистов, которые только начинают работать с 1С, для максимально быстрого ознакомления с интерфейсом программы. В статье приведены лайфхаки, которые позволят вам быстро и эффективно научиться настраивать отчёты и печатные в среде программных продуктов 1С. Полученные знания значительно упростят взаимодействие с интерфейсом 1С и повысят продуктивность работы оператора.

02.10.2019    3935    VachKirp    8       

Добавляем виджет "Задачи от меня" в Документооборот 2.1 22

Статья Программист Нет файла v8 v8::Бизнес-процессы ДО Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Небольшая доработка Документооборота 2.1 для возможности добавления виджета "Задачи от меня" в обработку Текущие дела.

25.09.2019    1513    Sergey_Borisovi4    2       

[Механизм интерфейса] Часы 54

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом Практика программирования Разработка

Добавляем цифровые часы на форму, как бонус рассмотрим вариант и с аналоговыми.

26.08.2019    3072    rpgshnik    33       

Произвольная начальная страница через расширение (программно) 41

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Установка своей формы произвольному пользователю на начальную страницу.

14.08.2019    2505    nagaitseff    11       

Подходы, методы и инструменты UX/UI для разработки эффективных интерфейсов на 1С 31

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Интерфейсам в 1С обычно уделяют мало внимания. Это в итоге снижает востребованность платформы, делает ее неконкурентной, лишает большой доли рынка. Как не потерять старых клиентов и привлекать новых с помощью интерфейсов, а главное – как сделать «правильный» интерфейс, рассказал участникам конференции Infostart Event 2018 Education управляющий партнер и основатель консалтинговой группы WiseAdvice Иван Тягунов.

07.08.2019    4493    IvanAT1981    14       

Пользовательские настройки системы компоновки данных 85

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

Работа с отчетами в пользовательском режиме, формы отчетов. Понятие пользовательских настроек в отчетах на СКД. Определение состава пользовательских настроек для разделов в целом и для отдельных элементов, для всего отчета и для отдельных группировок. Видимость функциональных опций в отчетах на СКД.

09.07.2019    6161    ids79    0       

Подсистема "Варианты отчетов". Используете ли Вы ее правильно? 210

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом БСП (Библиотека стандартных подсистем)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    14164    YPermitin    49       

Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП 91

Статья Программист Нет файла v8 v8::УФ v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования Работа с интерфейсом Разработка

В данной статье рассмотрим механизм работы с расшифровкой отчета, созданного при помощи системы компоновки данных, в управляемом приложении. Показывать буду на примере реальной задачи. Условие: использовать имеющиеся в конфигурации механизмы БСП, с минимальными и "правильными" изменениями. Расшифровка должны быть двух видов на каждом поле: 1. Открывать ссылочный объект 2. Открывать новую форму с детализацией табличной части документа. Собственно ради второго пункта и писалась статья, в основном для себя, чтобы не забыть.

14.05.2019    7340    Viktor_Ermakov    6       

Свой макет оформления отчета 33

Статья Программист Нет файла v8 v8::СКД Россия Windows Бесплатно (free) Работа с интерфейсом

Пример создания и оформления и применения своего (пользовательского ) макета оформления для СКД.

24.04.2019    4495    olegpkc    5       

Динамический вывод таблицы значений на форму 35

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Вывести на форму таблицу значений, а потом на её место другую, третью, четвёртую? Не вопрос.

11.01.2019    5640    Vlad1917    26       

Прикладной пример переработки стандартной формы РМК - Розница 74

Статья Программист Нет файла v8 Розница УУ Кассовые операции Розничная торговля Бесплатно (free) Работа с интерфейсом

Простой пример, как с помощью программного изменения шрифтов элементов формы достичь наилучшего результата отображения на примере формы РМК.

04.10.2018    10804    asdfgcom    56       

Cправочная информация. Картинки. 16

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Справочную информацию мало кто любит писать, но вот захотелось. И что с этим делать?

06.06.2018    6372    aspirator23    2       

Итоги в динамическом списке 47

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Предлагаю вариант, как быстро сделать итоги в динамическом списке, например в форме списка журнала документов.

28.05.2018    8964    CXY    16       

Программное управление обычными формами документов и справочников в УПП/КА 32

Статья Программист Нет файла v8 v8::УФ КА1 УПП1 Россия Бесплатно (free) Работа с интерфейсом

Если с программным изменением управляемых форм 1С все более или менее понятно, то с программированием обычных форм примеров не так уж много в сети. А уж примеров готовых решений совсем не видно. В данной статье я покажу, как можно реализовать аналог "управляемых" форм в своих конфигурациях с обычными формами и забыть о сложностях обновлений форм.

09.05.2018    8399    dima_home    7       

Решение проблемы отображения интерфейса Такси на экранах с маленьким разрешением 26

Статья Программист Нет файла v8 v8::УФ Беларусь Windows Бесплатно (free) Работа с интерфейсом

Решение возникшей проблемы при переходе с интерфейса 8.2 на интерфейс Такси на экранах с маленьким разрешением.

06.04.2018    9751    Drak87    18       

Красивые графики. Пошаговая инструкция (Highstock) 122

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Данный подход опробован на библиотеках: Нighcharts и Highstock. Для работы будет необходима 1С и браузер Google Chrome. Чукча не писатель (первая публикация).

22.11.2017    14159    Degrement    20       

Меняем стандартную форму выбора для реквизита формы на свою форму с запросом 51

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Алгоритм действий для смены стандартной формы выбора для реквизита формы на свою форму со своей выборкой данных и возвратом нескольких параметров в вызывающую форму

30.09.2017    15764    ah7777777    24       

"Мигаем" интерфейсом, или цепочки асинхронных вызовов 71

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

Как, не блокируя интерфейс, привлечь внимание пользователя к интерфейсным элементам. Или, попросту говоря, "мигнуть" чем-то.

06.09.2017    12596    Chrizt    13       

"Восстановить положение окна" - не помогает. Как я решил проблему. 28

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Как получилось решить проблему глюков отображения формы документа.

28.05.2017    46512    niko11s    44       

Как добавить/убрать кота в отчет? 78

Статья Программист Нет файла v8 БП3.0 Бесплатно (free) Работа с интерфейсом

Кот в отчете: кому-то нравится, кого-то жутко бесит. Как избавиться, заменить, оставить (нужное подчеркнуть)?

12.05.2017    23084    starik-2005    16       

Исправление проблем со встраиванием внешних отчетов в УНФ 1.6 12

Статья Программист Нет файла v8 УНФ Россия Бесплатно (free) Работа с интерфейсом

В УНФ 1.6 (тестил на версии 1.6.7.43) существуют следующие проблемы: 1. при встраивании доп. отчета в базу, он не отображается, пока не собьешь фильтр подсистемы 2. при встраивании доп. отчета в базу, отсутствует команда «Дополнительные отчеты» (по аналогии с командной «Дополнительные обработки») . В статье описывается решение перечисленных проблем.

16.11.2016    11459    TheRealStanly    3       

Как "перемотать" динамический список в начало при открытии? (или некоторые нюансы получения данных динамического списка) 57

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

В современных интерфейсах (новостях, социальных сетях и прочим) принято размещать новые данные сверху, более старые - внизу. К сожалению, в 1C сделано несколько по-другому - по умолчанию списки документов отсортированы по возрастанию даты и далее возможно два варианта: либо список при открытии проматывается в конец, либо список может запоминать "последнюю" текущую строку.

03.11.2016    19058    Fragster    25       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом Универсальные функции

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

27.09.2016    16878    serg_infostart    15       

Автоматическое добавление новых реквизитов на форму (УФ) 38

Статья Программист Нет файла v8 v8::УФ Бесплатно (free) Работа с интерфейсом Универсальные функции

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

03.08.2016    16213    Патриот    23       

Управляемые формы: Поле HTML Документа и веб-клиент 57

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Взаимодействие javascript и интерфейса 1С дает огромные возможности для реализации нестандартных функций. Раньше можно было напрямую вызывать функции JavaScript через DOM объект document Поля HTML документа. В современных браузерах эта возможность ушла. Более того, в веб-клиенте появляется тип ВнешнийОбъект, который вообще нигде не описан. На Инфостарте были предложения вызывать JavaScript через fireEvent, но это очень неудобно. Предлагаю свой вариант решения.

18.07.2016    24139    compguru    10       

Как вывести динамическое представление для пустого значения (в таблице)? 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

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

29.03.2016    9710    weissfeuer    9       

Выделение документов в динамическом списке 20

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Допустим, пользователю конфигурации на управляемых формах захотелось выделять документы в списке привычным образом и производить какие-то манипуляции с выделенными документами. Например, делать на их основании какие-то документы.

01.02.2016    15776    Sardukar    7       

Три приёма, позволяющие сделать интерфейс конфигураций 1С на управляемых формах удобнее при большом шрифте 52

Статья Программист Нет файла v8 УНФ ERP2 БП3.0 Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

С появлением управляемых форм вообще и БП 3.0 в частности пользователи, которые не хотят портить своё зрение рассматриванием мелкого шрифта, оказались в невыгодном положении. Многих элементов на экране в "тяжёлых" документах вообще оказалось не видно. Все попытки решить вопрос штатными средствами настройки предприятия оказались неэффективны. Вот несколько приёмов, которые буквально в два щелчка мышкой и парой строк кода помогут решить проблему.

05.11.2015    14999    H-Labs    11       

Как скрыть "пустые группы" в списке выбора справочника при отборе 46

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Когда требуется открыть список справочника с отбором, например, по определённой группе, видны также все остальные группы с пустым содержимым. Мой способ избавления от ненужных групп ниже.

29.10.2015    25590    shevelyov    25       

Открытие форм нескольких новых документов в тонком и толстом клиенте, УФ 23

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Если Вам необходимо создать несколько документов, а затем открыть их формы для пользователя.

1 стартмани

29.09.2015    18023    Wezoowy    13       

Параметры сеанса. 47

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Параметры сеанса - это объекты метаданных конфигурации. Поговорим об их назначении и принципах работы с ними.

06.09.2015    55398    niko11s    8       

Шкала в строке состояния 51

Статья Программист Нет файла v8 Windows Бесплатно (free) Работа с интерфейсом

Простая шкала, не требующая дополнительных форм и элементов управления

31.08.2015    13446    Ivon    26       

Назначение сочетания клавиш для кнопок командной панели (Обычные формы) 13

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Назначение сочетания клавиш кнопкам командной панели Формы списка/выбора для любой конфигурации (Обычные формы)

07.08.2015    15101    bld    7       

Развитие управляемого интерфейса в 1С 8.2 - 1С 8.3 55

Статья Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Математика и алгоритмы Работа с интерфейсом

К управляемым формам, которые появились в 8.2, я до сих пор относился презрительно. Считал это неудачной попыткой 1С следовать модным тенденциям в разработке интерфейсов и прогибом для возможности работать через браузер. Я считал, что 1С пожертвовала простотой разработки в угоду веб-доступу. Но после курсов Арутюнова Сергея по управляемому интерфейсу в июле 2015 года в УЦ1 я поменял ненависть на любовь. Звучит парадоксально, но это так. А теперь подробнее…

27.07.2015    35032    fixin    103       

Идея или как сохранить ЦВЕТ, ШРИФТ, ОФОРМЛЕНИЕ пользователя 25

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Простой и оригинальный способ сохранять ЦВЕТОВУЮ СХЕМУ и ОФОРМЛЕНИЕ пользователей. Как сохранить ЦВЕТ

22.06.2015    21441    Tatitutu    12       

Недокументированное использование стандартных обработок из меню "Все функции". 903

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов ...).

19.06.2015    100546    ekaruk    121       

Быстрый ввод строковых значений в поля составного типа 64

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Когда нужно дать пользователю возможность вводить с клавиатуры строковые значения в поле ввода составного типа

04.06.2015    17213    Cyberhawk    14       

Личный опыт эскплуатации интерфейса "Такси" 11

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Уважаемые коллеги, предлагаю вам мой личный опыт использования интерфейса "Такси"

07.02.2015    15353    Marik    30       

Как перенести форму документа (справочника, ...) из одного документа (справочника, ...) в другой похожий документ (справочник, ...) 54

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

При попытке изменить Тип Реквизита «Объект» все элементы формы теряли путь к данным, ладно бы «поля ввода» (можно было выбрать заново «путь к данным»), но с табличными частями вообще труба, при выборе в «Таблице» все колонки в этом элементе банально удалялись. Можно, конечно, потратить кучу времени и вручную продублировать все то, что есть в форме оригинала, но я нашел другой путь!

26.11.2014    14281    RomanBor    18       

Создание интерфейса со всеми блокировками прав пользователя 20

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Создание интерфейса (напр. Продавец) со всеми блокировками прав пользователя (доступ к конфигуратору, меню Операции, Все функции, правам пользователей в меню сервис и др.)

10.10.2014    12336    ~ADm!t_@vd~    8       

Свернуть с учетом уровня дерево значений на управляемой форме 11

Статья Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Работа с интерфейсом

Набор процедур, которые сворачивают дерево значений на управляемой форме до определенного уровня

03.10.2014    12999    ivashka    2       

Добавление дополнительных отчетов и обработок в тонком клиенте. 44

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Для того чтобы добавить дополнительную обработку или отчет в тонкий клиент нужно в модули отчета или обработки прописать одну процедуру и две функции.

30.09.2014    62957    John_d    14