1с изменять способ редактирования

1с динамический список редактирование в списке

Реализовано в версии 8.3.10.2168.

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

Однако такая универсальность имеет и оборотную сторону. Желание «показать сразу всё» может приводить вас к значительному усложнению запроса. В результате вы будете получать неэффективные планы выполнения и, как результат, снижение производительности при отображении и пролистывании списка.

Кроме этого есть ряд прикладных задач, в которых алгоритм отбора и оформления данных списка довольно сложен. В этих случаях возможностей произвольного запроса и условного оформления просто не хватает. Хочется иметь более «свободный» и более «точный» инструмент, который позволит сделать «что угодно» и «только там, где нужно».

Событие ПриПолученииДанныхНаСервере

Специально для этих целей мы реализовали новый обработчик ПриПолученииДанныхНаСервере(). Он добавлен в расширение таблицы, отображающей динамический список.

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

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

Вы можете изменить данные, находящиеся в этих строках, или применить к ячейкам собственное оформление. Доступны такие возможности оформления как ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение, Видимость, Доступность, Отображать, Текст и Формат.

Также, при необходимости, вы можете посмотреть и проанализировать копию полных настроек динамического списка. Но изменить настройки вы не сможете.

Простейший сценарий использования

Проще всего понять назначение этого обработчика на примере. Пример заключается в том, чтобы в списке товаров показать их остатки из регистра накопления. Количество меньше некоторого значения выделить красным цветом.

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

Теперь она решается так. Стандартный запрос списка не усложняется, в него добавляется только фиктивное поле Остаток.

А в обработчике ПриПолученииДанныхНаСервере() только для полученных строк вычисляются остатки. И тут же маленькие остатки выделяются красным.

Здесь, методом ПолучитьКлючи(), из коллекции строк динамического списка вы получаете их ключи (ссылки), и передаёте эти ключи в запрос остатков.

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

Читайте также:  Легкий способ вязать арматуру

В результате пользователь видит следующий список:

В чём преимущество такого варианта?

Во-первых, запрос списка остаётся простым. Или он не остаётся простым, но количество соединений в нём уменьшается. А это значит, что для него, с большой долей вероятности, будет построен хороший план.

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

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

Ограничения на изменяемые и добавляемые поля

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

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

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

Кроме этого, возможно, в некоторых сценариях имеет смысл визуально выделить такие колонки в таблице, чтобы пользователи видели, что эти колонки «особенные», не такие, как все.

личный блог

Динамический список появился на платформе 8, как отдельный тип данных. Основан он на системе компановки данных и из коробки уже предлагает много «вкусностей» — полнотекстовый поиск, сортировку, отбор, поле поиска, условное оформление. В общем при правильном применении можно убить много зайцев, при помощи динамического списка. Чаще всего его применяют для отображения данных из БД.

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

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

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

Читайте также:  Различные способы определения ускорения свободного падения

В 8.1 для многих объектов (справочники, регистры сведений и т.п.) в свойствах можно было настроить способ редактирования записей/элементов: в диалоге или в списке или обоими способами

В 8.2 эту возможность убрали из целей производительности, Максим Радченко пишет в своей книге:

В версии 8.2 не поддерживается режим редактирования ссылочных данных информационной базы в списке. Данные можно редактировать только в форме.

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

Это относится ко всем таблицам, источником данных которых является динамический список.

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

В обычных формах, программно можно установить режим редактирования в списке

Для Регистра Сведений или Справочника — открыть палитру Свойства — закладка — представление — установить способ редактирования В Списке

Источник

1С 8.x : Как включить режим редактирования записей в списке?

В 8.1 для многих объектов (справочники, регистры сведений и т.п.) в свойствах можно было настроить способ редактирования записей/элементов: в диалоге или в списке или обоими способами

В 8.2 эту возможность убрали из целей производительности, Максим Радченко пишет в своей книге:

В версии 8.2 не поддерживается режим редактирования ссылочных данных информационной базы в списке. Данные можно редактировать только в форме.

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

Это относится ко всем таблицам, источником данных которых является динамический список.

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

В обычных формах, программно можно установить режим редактирования в списке

Для Регистра Сведений или Справочника — открыть палитру Свойства — закладка — представление — установить способ редактирования В Списке

Похожие FAQ

Еще в этой же категории

Как получить строки табличного поля, отобранные отбором? 4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров

Источник

Особенности редактирования колонок табличного поля

Для уведомления о начале или окончании редактирования строки в табличном поле предназначены два события : ПередНачаломИзменения() и ПередОкончаниемРедактирования() .

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

Читайте также:  Лучший способ раскрутить та

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

Если же необходимо отслеживать изменение данных в ячейке строки табличного поля, находящегося в состоянии редактирования, то можно воспользоваться событием ПриИзменении() элемента управления, связанного с редактируемой ячейкой. Обработчик данного события вызывается после изменения значения в элементе управления при переходе от одной редактируемой ячейки табличного поля к другой.

Источник

как дать право на редактирование только определенного реквизита документа?

Например, Пользователю с ролью Пользователь1 дать право на изменение реквизита Комментарий в записанных документах Реализация товаров и услуг. Для всех остальных реквизитов право на изменение должно быть закрыто.

Типовыми средствами или через «замочек с конфы снять»?

если типовыми невозможно (что приоритетно)
то кодом, все равно замок снят, новая роль создана

Платформа 8.2 позволяет такое настроить в ролях. Реквизиты могут быть открыты на просмотр и редактирование.

С реквизитами пробовала, двумя способами, оба не сработали.
При настройке роли в Док-те РТиУ Реквизиты, а заодно и Табличные части ставлю на просмотр, реквизит Комментарий на просмотр и редактирование.
Но права на сам документ РТиУ перебивают все настройки прав отдельных реквизитов
1.Если у него галки на Чтение, Добавление, Изменение, Провендение, Просмотр, ВводПоСтроке (а у Комментария — редактирование) —
то в 1С не редактируеися ни одно поле, в тч и Комментарий

2. Если в документе добавляем галку Редактирование, интер.измен,инт.пров, инт,отмена(а у всех реквизитов (кроме Комментария) просмотр), то в 1С редактируются все рквизиты, и кол-во и пр

Источник

Оцените статью
Разные способы