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

03.04.17

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

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

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

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

Я бы хотел предложить Вам свой способ решения данной проблемы - он достаточно прост и не требует программирования и прочих заморочек.
Его главное достоинство - простота. Дело в том что, с недавних пор в динамических списках появилась возможность использовать временные таблицы в запросах и как следствие пакетные запросы.
Суть метода заключается в расчете итогов отдельным полем в самом запросе динамического списка и выводе его в каждой строке без отображения, само же поле отборажается через ТекущиеДанные элемента формы в подвале. До появления возможности использовать временные таблицы и пакеты в запросе можно было расчитать только общий итог по динамическому списку который не учитывает пользовательские отборы, из-за этого данный метод практически не использовался, пример такого запроса Вы можете увидеть ниже:
ВЫБРАТЬ
	Документ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 документах
Всем спасибо за внимание.

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16698    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10738    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    9617    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3666    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12082    1    5    

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

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

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

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

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

Еще жду 8.3.11, там будет общение между сервером (фоновые задания) и клиентскими сеансами, не знаю, может там удастся прорваться, поживем увидим ...
21. CheBurator 3119 08.04.17 21:12 Сейчас в теме
(20) так уже ж сделали совсем недавно это самое общение сервера с клиентом
44. Akavi 06.09.23 07:28 Сейчас в теме
Спасибо за Ctrl + "-" (не Num) - возврат после F12
Вот прямо сильно не хватало
(15)
1С перестроила сайт и сылка стала не актуальная.
Актуальная на сегодня: https://wonderland.v8.1c.ru/blog/poluchenie-dannykh-dinamicheskogo-spiska/
22. Vlad_2008 16 09.04.17 15:01 Сейчас в теме
Ну я про пост от 17/03 "Передача информации с сервера", пока написано что "планируется 8.3.11".
23. Vlad_2008 16 10.04.17 14:35 Сейчас в теме
Поковырялся вчера с итогами для документов на 5 000 - летает. Если правильно "КАКать", то верхний запрос отлавливает все: поиск, поиск по полям через ссылку, отбор по любому реквизиту, поиск и отбор по характеристикам, в общем, "загнать в угол" - не вышло.

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

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

Позже погоняю справочник, к-нить иерархический, интересно как там будут фильтры отлавливаться.
41. verniypro 6 01.10.21 14:55 Сейчас в теме
(23) 5000 документов - это очень, очень мало.
42. Vlad_2008 16 04.10.21 16:15 Сейчас в теме
(41) Ого, там был 17-ый год ))

Да мало, делал года два назад тесты на 50 тыс и 100 тыс для документов - нормально, хотя тоже не много. За это время платформа менялась, вроде там что-то еще улучшали, но больше не тестировал.

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

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

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

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

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

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

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

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

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

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

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

P.S. Есть некоторая особенность.
Если устанавливать/снимать Чекбоксы на форме (Вид операции и Организация), то обновление итогов произойдёт только после щелчка мышью в любой ячейке списка.
Кениец; TeMochkiN; Восьмой; Skaredov; noprogrammer; +5 Ответить
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.Ссылка В
			(ВЫБРАТЬ
				ВТОсновнаяТаблица.Ссылка КАК Ссылка
			ИЗ
				ВТОсновнаяТаблица КАК ВТОсновнаяТаблица)
Показать
35. Jungle Murzik 15.11.20 23:20 Сейчас в теме
При поиске по неиндексированным полм выводит некорректные данные.
Поэтому для корректной работы пришлось все поля, по которым я делаю поиск (через Ctrl+F).
Если делать через расширенный поиск, то всё работает ОК.

Также осталась проблема - после поиска Текущиеданные = Неопределено и приходится тыкать на любую стрчку, чтобы обновились итоги. Как решить - пока не разобрался
36. German_Tagil 42 26.02.21 13:43 Сейчас в теме
Запрос работает-
а вот размещение в подвале - нет
не выводится
Разместил под списком как итоги
хотелось бы понять
40. madonov 169 22.09.21 07:44 Сейчас в теме
(36) скорее всего не хватает флага "Использовать всегда" напротив поля динамического списка.
37. EnsTaiN 23.03.21 06:03 Сейчас в теме
Для тех кто сюда попал и не в курсе) Если не нужны сортировка и отбор по этой добавленной колонке, то сейчас есть более простое решение, работающее и на миллион строк.
В запросе ДС добавить поле
"0 КАК Сумма_" - и вывести эту колонку на форму, и для списка добавить событие "СписокПриПолученииДанныхНаСервере".

&НаСервереБезКонтекста
Процедура _СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
	
	Для каждого Стр из Строки Цикл
		
		Данные = Стр.Значение.Данные;
		Данные.Сумма_	= Данные.Ссылка.Товары.Итог("Сумма_");
		
	КонецЦикла;
	
КонецПроцедуры;
Показать


(пример для расширения)
Восьмой; +1 Ответить
38. ImHunter 312 21.09.21 14:28 Сейчас в теме
(37) Жесть... Линейкой по пальцам за такой код.
39. madonov 169 22.09.21 07:38 Сейчас в теме
Сделал по образцу. При установке отборов итоги в подвале не изменяются.
Похоже, что отборы все таки накладываются не на первую, ВТ в запросе, как указано в статье, а на итоговую таблицу выборки.
========================
Сообразил. В первой ВТ были не все поля...

ВЫБРАТЬ
	ДокументБПП_СчетНаОплату.Ссылка КАК Ссылка,
	ДокументБПП_СчетНаОплату.ПометкаУдаления КАК ПометкаУдаления,
	ДокументБПП_СчетНаОплату.Номер КАК Номер,
	ДокументБПП_СчетНаОплату.Дата КАК Дата,
	ДокументБПП_СчетНаОплату.Проведен КАК Проведен,
	ДокументБПП_СчетНаОплату.ПотенциальныйПользователь КАК ПотенциальныйПользователь,
	ДокументБПП_СчетНаОплату.ПериодЦен КАК ПериодЦен,
	ДокументБПП_СчетНаОплату.СрокОплаты КАК СрокОплаты,
	ДокументБПП_СчетНаОплату.НомерСчета КАК НомерСчета,
	ДокументБПП_СчетНаОплату.Заказчик КАК Заказчик,
	ДокументБПП_СчетНаОплату.СуммаПоставкиСНДС КАК СуммаПоставкиСНДС,
	ДокументБПП_СчетНаОплату.СуммаВосстановленияСНДС КАК СуммаВосстановленияСНДС,
	ДокументБПП_СчетНаОплату.СуммаПодключенияСНДС КАК СуммаПодключенияСНДС,
	ДокументБПП_СчетНаОплату.СуммаАвансаНаОбслуживаниеСНДС КАК СуммаАвансаНаОбслуживаниеСНДС,
	ДокументБПП_СчетНаОплату.СуммаТоварыСНДС КАК СуммаТоварыСНДС,
	ДокументБПП_СчетНаОплату.СуммаОбщаяСНДС КАК СуммаОбщаяСНДС,
	ДокументБПП_СчетНаОплату.Ответсвенный КАК Ответсвенный,
	ДокументБПП_СчетНаОплату.ДатаСоздания КАК ДатаСоздания,
	ДокументБПП_СчетНаОплату.ДатаПравки КАК ДатаПравки,
	ДокументБПП_СчетНаОплату.ДСЦ КАК ДСЦ,
	ДокументБПП_СчетНаОплату.ДатаОплаты КАК ДатаОплаты,
	ДокументБПП_СчетНаОплату.ОтказОтОплаты КАК ОтказОтОплаты,
	ДокументБПП_СчетНаОплату.МоментВремени КАК МоментВремени,
	ДокументБПП_СчетНаОплату.ВКСПОбщий КАК ВКСПОбщий,
	1 КАК ВсегоДокументов,
	ВЫБОР
		КОГДА ДокументБПП_СчетНаОплату.ДатаОплаты > ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК ОплаченоДокументов,
	ВЫБОР
		КОГДА ДокументБПП_СчетНаОплату.ОтказОтОплаты
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК ОтказВОплате,
	ВЫБОР
		КОГДА ДокументБПП_СчетНаОплату.ДатаОплаты = ДАТАВРЕМЯ(1, 1, 1)
				И НЕ ДокументБПП_СчетНаОплату.ОтказОтОплаты
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК ОжидающиеОплатыДокументы,
	ДокументБПП_СчетНаОплату.ВКСПОбщий КАК ВсегоКГ,
	ВЫБОР
		КОГДА ДокументБПП_СчетНаОплату.ДатаОплаты > ДАТАВРЕМЯ(1, 1, 1)
			ТОГДА ДокументБПП_СчетНаОплату.ВКСПОбщий
		ИНАЧЕ 0
	КОНЕЦ КАК ОплаченоКГ,
	ВЫБОР
		КОГДА ДокументБПП_СчетНаОплату.ОтказОтОплаты
			ТОГДА ДокументБПП_СчетНаОплату.ВКСПОбщий
		ИНАЧЕ 0
	КОНЕЦ КАК ОтказВОплатеКГ,
	ВЫБОР
		КОГДА ДокументБПП_СчетНаОплату.ДатаОплаты = ДАТАВРЕМЯ(1, 1, 1)
				И НЕ ДокументБПП_СчетНаОплату.ОтказОтОплаты
			ТОГДА ДокументБПП_СчетНаОплату.ВКСПОбщий
		ИНАЧЕ 0
	КОНЕЦ КАК ОжидающиеОплатыКГ
ПОМЕСТИТЬ ВТОсновнаяТаблица
ИЗ
	Документ.БПП_СчетНаОплату КАК ДокументБПП_СчетНаОплату
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	БПП_СчетНаОплату.Ссылка КАК Ссылка,
	БПП_СчетНаОплату.ВерсияДанных КАК ВерсияДанных,
	БПП_СчетНаОплату.ПометкаУдаления КАК ПометкаУдаления,
	БПП_СчетНаОплату.Номер КАК Номер,
	БПП_СчетНаОплату.Дата КАК Дата,
	БПП_СчетНаОплату.Проведен КАК Проведен,
	БПП_СчетНаОплату.ПотенциальныйПользователь КАК ПотенциальныйПользователь,
	БПП_СчетНаОплату.ПериодЦен КАК ПериодЦен,
	БПП_СчетНаОплату.СрокОплаты КАК СрокОплаты,
	БПП_СчетНаОплату.НачалоСопровождения КАК НачалоСопровождения,
	БПП_СчетНаОплату.НомерСчета КАК НомерСчета,
	БПП_СчетНаОплату.Заказчик КАК Заказчик,
	БПП_СчетНаОплату.СуммаПоставкиСНДС КАК СуммаПоставкиСНДС,
	БПП_СчетНаОплату.СуммаВосстановленияСНДС КАК СуммаВосстановленияСНДС,
	БПП_СчетНаОплату.СуммаПодключенияСНДС КАК СуммаПодключенияСНДС,
	БПП_СчетНаОплату.СуммаАвансаНаОбслуживаниеСНДС КАК СуммаАвансаНаОбслуживаниеСНДС,
	БПП_СчетНаОплату.СуммаТоварыСНДС КАК СуммаТоварыСНДС,
	БПП_СчетНаОплату.СуммаОбщаяСНДС КАК СуммаОбщаяСНДС,
	БПП_СчетНаОплату.Ответсвенный КАК Ответсвенный,
	БПП_СчетНаОплату.ДатаСоздания КАК ДатаСоздания,
	БПП_СчетНаОплату.ДатаПравки КАК ДатаПравки,
	БПП_СчетНаОплату.ДСЦ КАК ДСЦ,
	БПП_СчетНаОплату.ДатаОплаты КАК ДатаОплаты,
	БПП_СчетНаОплату.ОтказОтОплаты КАК ОтказОтОплаты,
	БПП_СчетНаОплату.ВКСПОбщий КАК ВКСПОбщий,
	ВложенныйЗапрос.ВсегоДокументов КАК ВсегоДокументов,
	ВложенныйЗапрос.ОплаченоДокументов КАК ОплаченоДокументов,
	ВложенныйЗапрос.ОтказВОплате КАК ОтказаноВОплатеДокументов,
	ВложенныйЗапрос.ОжидающиеОплатыДокументы КАК ОжидающиетОплатыДокументы,
	ВложенныйЗапрос.ВсегоКГ КАК ВсегоКГ,
	ВложенныйЗапрос.ОплаченоКГ КАК ОплаченоКГ,
	ВложенныйЗапрос.ОтказВОплатеКГ КАК ОтказВОплатеКГ,
	ВложенныйЗапрос.ОжидающиеОплатыКГ КАК ОжидающиетОплатыКГ,
	БПП_СвойстваПотенциальныхКлиентов_Итоги.ПП_РИЦ КАК ОИС,
	БПП_СвойстваПотенциальныхКлиентов_Итоги.ПП_МП КАК МП
ИЗ
	Документ.БПП_СчетНаОплату КАК БПП_СчетНаОплату
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ВТОсновнаяТаблица.ВсегоДокументов) КАК ВсегоДокументов,
			СУММА(ВТОсновнаяТаблица.ОплаченоДокументов) КАК ОплаченоДокументов,
			СУММА(ВТОсновнаяТаблица.ОтказВОплате) КАК ОтказВОплате,
			СУММА(ВТОсновнаяТаблица.ОжидающиеОплатыДокументы) КАК ОжидающиеОплатыДокументы,
			СУММА(ВТОсновнаяТаблица.ВсегоКГ) КАК ВсегоКГ,
			СУММА(ВТОсновнаяТаблица.ОплаченоКГ) КАК ОплаченоКГ,
			СУММА(ВТОсновнаяТаблица.ОтказВОплатеКГ) КАК ОтказВОплатеКГ,
			СУММА(ВТОсновнаяТаблица.ОжидающиеОплатыКГ) КАК ОжидающиеОплатыКГ
		ИЗ
			ВТОсновнаяТаблица КАК ВТОсновнаяТаблица) КАК ВложенныйЗапрос
		ПО (ИСТИНА)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БПП_СвойстваПотенциальныхКлиентов_Итоги КАК БПП_СвойстваПотенциальныхКлиентов_Итоги
		ПО БПП_СчетНаОплату.ПотенциальныйПользователь = БПП_СвойстваПотенциальныхКлиентов_Итоги.ПотенциальныйПользователь
ГДЕ
	БПП_СчетНаОплату.Ссылка В
			(ВЫБРАТЬ
				ВТОсновнаяТаблица.Ссылка КАК Ссылка
			ИЗ
				ВТОсновнаяТаблица КАК ВТОсновнаяТаблица)
Показать
43. victor123 03.07.22 22:12 Сейчас в теме
Оставьте свое сообщение