- Работа со свойством текущие данные 1С
- Варианты получения свойства Текущие данные 1С
- СКД: скрываем нужные группы (блоки) по требованию пользователя
- Управление видимостью ячеек табличного поля
- Свойства ТекущиеДанные и ТекущаяСтрока
- Заметки из Зазеркалья
- Событие ПриПолученииДанныхНаСервере
- Простейший сценарий использования
- Ограничения на изменяемые и добавляемые поля
Работа со свойством текущие данные 1С
ТекущиеДанные — свойство таблицы формы, предоставляющее доступ к данным текущей строки. Оно может быть представлено тремя типами данных (в зависимости от источника таблицы формы): ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева. По сути, в каждом из этих случаев, текущие данные 1с представляют из себя структуру текущей строки таблицы формы.
Вся информация, представленная в статье, относится только к управляемому приложению.
Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:
- Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
- Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции.
Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда. - В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.
- При помощи свойства ТекущиеДанные можно не только читать, но и изменять информацию. Исключение — таблица формы, источником которой является динамический список. В этом случае изменение текущих данных, не приведет к изменению строки таблицы.
Варианты получения свойства Текущие данные 1С
В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.
Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром Элемент. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:
Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.
Источник
СКД: скрываем нужные группы (блоки) по требованию пользователя
Цель: реализовать возможность скрывать блок колонок пользователем в отчёте, как показано на рисунках:
Отчёт выполнен на базе схемы компоновки данных (СКД).
Написан запрос, для выборки нужных данных. Он индивидуален, поэтому его нет смысла представлять.
Описание самого «увлекательного» процесса настройки СКД представлено ниже.
В параметры СКД вынесены необходимые параметры:
В данном случае, — Аналитика, ОбъектЭксплуатации и Управленческий.
В настройках СКД отчёт состоит из двух группировок: дополнительной информации и детальных записей.
В дополнительной информации выводится заголовок отчёта, а в детальных записях — его данные.
Обратим внимание, что в настройках отчёта необходимо вывести параметры: Аналитика, Объект эксплуатации и Управленческие аналитики.
Это показана на рисунке:
Зададим первоначальные значения этих параметров. В нашем случае, значение принимает следующий вид: «Ложь».
В детальных записях (вкладка Выбранные поля) выведены колонки отчёта и созданы группы, которые, в зависимости от выбранных пользователем параметров, будут выводиться в отчёт:
Не забываем, что эти параметры необходимо включить в пользовательские настройки:
На этом «увлекательный» процесс закончен. Перейдём к написанию кода для реализации скрытия нужных блоков (полный текст процедур можно найти после описания).
Достаточно много времени заняла отладка кода, чтобы попасть в нужный блок и установить свойство «Использование».
Все манипуляции будут проходить в модуле объекта отчёта, в процедуре «ПриКомпоновкеРезультата».
Итак, что мы делаем:
1) получаем пользовательские настройки элементов и структуры отчёта
2) создаём параметры видимости колонок
3) для удобства отладки вынесли названия выводимых заголовков (блоков)
4) перебираем параметры отчёта, получаем текущие значения видимости и обращаемся именно к нужному блоку отчёта с детальными записями. Если выбираемый блок относится к группе с заголовком «Расшифровки», а именно в этом блоке содержатся скрываемые колонки, то применяем процедуру «ОтображениеБлокаКолонок» для манипуляций с видимостью
5) манипуляции с видимостью заключаются в том, что в зависимости от установленного значения параметра видимости, свойство «Использование» принимает необходимое значение.
Источник
Управление видимостью ячеек табличного поля
В табличном поле существует возможность изменять видимость отдельных ячеек при отображении данных . Для этого необходимо использовать обработчик события ПриВыводеСтроки() табличного поля . Параметрами данного события являются объекты типа ОформлениеСтроки и ДанныеСтроки . Объект ОформлениеСтроки имеет свойство Ячейки — коллекцию ячеек отображаемой строки . Каждая ячейка в этой коллекции является объектом типа ОформлениеЯчейки , который содержит свойства , влияющие на отображение ячеек . Для установки видимости отдельных ячеек отображаемой строки необходимо использовать свойство Видимость ячейки отображаемой строки . При установке данного свойства в Ложь табличное поле не будет отображать содержимое соответствующей ячейки табличного поля . Также стоит отметить , что если все ячейки , находящиеся в одной строке составной колонки , имеют выключенное свойство Видимость , то такая строка не будет отображена табличным полем . Объект ДанныеСтроки содержит коллекцию значений текущей строки , соответствующую коллекции колонок отображаемого динамического списка .
Поясним использование данного свойства на следующем примере . Пусть существует журнал документов ДокументыПокупателей (реквизит формы ЖурналДокументовСписок ) , у которого имеются графы Контрагент ( тип СправочникСсылка.Контрагенты ) и Информация (тип СправочникСсылка.ДоговорыВзаиморасчетов) . Колонки , отображающие значения данных граф, объединены в одну составную колонку , причем колонка Информация находится под колонкой Контрагент . Необходимо отображать значения указанных граф только если они не являются пустыми . Тем самым , строки табличного поля , у которых заполнены значения обоих граф , будут отображаться в две строки и в одну строку в противном случае .
Для этого необходимо при обработке события ПриВыводеСтроки() устанавливать видимость ячейкам , отображающим значения соответствующих граф :
Для того чтобы в шапке табличного поля составная колонка отображалась как единственная колонка, необходимо для колонки Информация сбросить свойство » Отображать в шапке » в палитре свойств . Также в нашем примере для колонки Контрагент устанавливается текст шапки » Контрагент / Информация «, указывающий , что в данной колонке отображаются значения граф Контрагент и Информация .
Необходимо помнить , что так как журнал документов является динамическим списком , то возможно удаление табличным полем колонок , у которых которых сброшено свойство Видимость . Если при обработке события ПриВыводеСтроки() произойдет обращение к таким колонкам , то возникнет ошибка времени выполнения . Для того чтобы определенные колонки не удалялись табличным полем, необходимо запретить данным колонкам удаление из динамического списка при изменении их видимости в табличном поле . Для этого необходимо при обработке события формы ПриОткрытии() добавить их в динамический список и запретить им удаление :
Более подробно ознакомиться с отличиями работы табличного поля при отображении динамических списков можно в разделе Особенности работы табличного поля с динамическими списками.
Источник
Свойства ТекущиеДанные и ТекущаяСтрока
Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока . Отличие между этими свойствами состоит в том, что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля, а свойство ТекущаяСтрока содержит значение, идентифицирующее строку.
Следует отметить, что свойство ТекущиеДанные содержит коллекцию значений текущей строки, соответствующую коллекции колонок отображаемого динамического списка, при этом если нужного поля нет в текущих данных, то его можно добавить в коллекцию полей списка используя метод Добавить() коллекции колонок списка.
Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.
Следует понимать, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.
Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля. Например, приведенный ниже фрагмент текста программы является неэффективным:
Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные . Правильный фрагмент приведен ниже:
Если есть идентификатор текущей строки (т.е. свойство ТекущаяСтрока ), можно получить ТекущиеДанные . И наоборот:
Источник
Заметки из Зазеркалья
Реализовано в версии 8.3.10.2168.
Как вы знаете, динамический список удобен и полезен для быстрого показа больших списков. Он довольно гибок, позволяет вам изменять стандартный запрос, и даже создавать собственный сложный запрос. Благодаря этому у вас есть возможность выводить в списке разные дополнительные данные, связанные с основными данными списка.
Однако такая универсальность имеет и оборотную сторону. Желание «показать сразу всё» может приводить вас к значительному усложнению запроса. В результате вы будете получать неэффективные планы выполнения и, как результат, снижение производительности при отображении и пролистывании списка.
Кроме этого есть ряд прикладных задач, в которых алгоритм отбора и оформления данных списка довольно сложен. В этих случаях возможностей произвольного запроса и условного оформления просто не хватает. Хочется иметь более «свободный» и более «точный» инструмент, который позволит сделать «что угодно» и «только там, где нужно».
Событие ПриПолученииДанныхНаСервере
Специально для этих целей мы реализовали новый обработчик ПриПолученииДанныхНаСервере(). Он добавлен в расширение таблицы, отображающей динамический список.
Этот обработчик вызывается на сервере после того, как динамический список получил и оформил для отображения очередную порцию данных.
Важная особенность заключается в том, что в этом обработчике недоступен контекст формы. Вы можете оперировать только коллекцией тех строк списка, которые получены из базы, уже отобраны и оформлены в соответствии с настройками динамического списка.
Вы можете изменить данные, находящиеся в этих строках, или применить к ячейкам собственное оформление. Доступны такие возможности оформления как ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение, Видимость, Доступность, Отображать, Текст и Формат.
Также, при необходимости, вы можете посмотреть и проанализировать копию полных настроек динамического списка. Но изменить настройки вы не сможете.
Простейший сценарий использования
Проще всего понять назначение этого обработчика на примере. Пример заключается в том, чтобы в списке товаров показать их остатки из регистра накопления. Количество меньше некоторого значения выделить красным цветом.
До сих пор эта задача решалась левым соединением в запросе динамического списка, и условным оформлением списка, устанавливаемым в конфигураторе.
Теперь она решается так. Стандартный запрос списка не усложняется, в него добавляется только фиктивное поле Остаток.
А в обработчике ПриПолученииДанныхНаСервере() только для полученных строк вычисляются остатки. И тут же маленькие остатки выделяются красным.
Здесь, методом ПолучитьКлючи(), из коллекции строк динамического списка вы получаете их ключи (ссылки), и передаёте эти ключи в запрос остатков.
Затем, при обходе результатов запроса, вы получаете нужные строки по ключу, в колонку Остаток помещаете значение, и устанавливаете оформление этого поля, если нужно.
В результате пользователь видит следующий список:
В чём преимущество такого варианта?
Во-первых, запрос списка остаётся простым. Или он не остаётся простым, но количество соединений в нём уменьшается. А это значит, что для него, с большой долей вероятности, будет построен хороший план.
Во-вторых, получение остатков в обработчике будет выполняться только один раз, в то время как запрос списка может быть выполнен несколько раз (в зависимости от настроек списка и сценария листания).
И, в-третьих, новый обработчик выполняется уже после того, как основные данные получены из базы и прошли проверку прав. Это значит, что в некоторых сценариях получение связанных данных в обработчике можно выполнять в привилегированном режиме, без проверки прав. Это ускоряет работу списка.
Ограничения на изменяемые и добавляемые поля
Тот факт, что в обработчике вы можете изменить значения полей списка, несет в себе особенность, которую нужно всегда учитывать.
Если не предпринять дополнительных мер, то пользователь может быть сильно удивлён результатами группировки, сортировки или отбора (в том числе и поиска) по тем полям, которые вы изменили. Ведь эти действия будут выполняться по исходным данным, получаемым запросом, а не по тем данным, которые видит пользователь.
Поэтому в тех случаях, когда вы изменяете значения полей, не забывайте исключить их из группировки, порядка и отбора. Специально для этого мы реализовали три новых метода.
Кроме этого, возможно, в некоторых сценариях имеет смысл визуально выделить такие колонки в таблице, чтобы пользователи видели, что эти колонки «особенные», не такие, как все.
Источник