Дополнительные параметры событий элемента управления в табличном поле. Эти параметры появляются у любого элемента управления, расположенного в табличном поле.
Полное описание, параметры и ограничения
Расширение элементов управления, расположенных в табличном поле (Extension for controls located in a table box)
Расширение элементов управления, расположенных в табличном поле (Extension for controls located in a table box)
Доступен, начиная с версии 8.0.
Свойства:
Значение (Value)
ТипЗначения (ValueType)
Методы:
ПолучитьДействие (GetAction)
УстановитьДействие (SetAction)
События:
<Имя события> (<Event name>)
Описание:
Дополнительные параметры событий элемента управления в табличном поле. Эти параметры появляются у любого элемента управления, расположенного в табличном поле.
Доступность:
Толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Обработать реальный ввод в несвязанной колонке и пересчитать свою строку
Полный модуль собственной обычной формы: реальные элементы правильного контекста, точные свойства/события и подробная проверка UI/RAM без запуска1С при подготовке справочника.
Где и как запускать
Полный модуль обычной формы ОпытЭлементов85 в новом стенде УчебныеРасширенияЭлементов85. Только толстый Windows-клиент с обычными формами; не управляемый/серверный модуль.
Подготовка
Новая пустая конфигурация УчебныеРасширенияЭлементов85, платформа8.5.1.1343, обычное приложение и толстый Windows-клиент с обычными формами. Не управляемая форма, не серверный модуль, не рабочая УТ/КА/УНФ.
Обработки → ОпытЭлементов85: реквизит СогласенНаСвоюФорму85 Булево и для табличного урока Товары85 ТаблицаЗначений. Создайте обычную форму Форма; основной код — полный модуль этой формы.
На главной панели заранее разместите флажок Подтверждение85, Данные=СогласенНаСвоюФорму85, и обычную кнопку УчебнаяКоманда85. Расположите их выше будущих учебных полей; форму/панель сделайте достаточного размера не менее120×70 логических единиц.
Свяжите ПриОткрытии формы с одноимённой процедурой без параметров. Нажатие УчебнаяКоманда85 в редакторе не назначайте: полный код задаёт Новый Действие с точным именем экспортной процедуры.
У обработчика Нажатие обычной кнопки в форме есть первый параметр Элемент, хотя базовая страница Кнопка.Нажатие показывает Нажатие(). Это добавление расширения элемента, расположенного в форме; не убирайте параметр.
Для системного урока Режим85 НЕ создавайте заранее. Настоящий ПолеВвода добавляется через ЭлементыФормы.Добавить, ни с реквизитом обработки, ни с документом не связывается. ТипЗначения задаёт именно РежимЗаписиДокумента, затем расширение ДоступныеЗначения ограничивает реальные значения.
Для панельного урока Контейнер85/Первое85/Второе85 НЕ создавайте заранее. Это три собственных динамических элемента: настоящая вложенная Панель и два ПолеВвода на ней. Ни поле, ни таблица не назначается владельцем формы.
Координаты/ширина/высота — логические единицы относительно собственной панели, не пиксели экрана. Первый редактор имеет6/6/68/6 и правую привязку к своей панели шириной80; второй расположен ниже.
Для табличного урока добавьте только ТабличноеПоле Таблица85 с Данные=Товары85. Остальные его колонки создаёт код; заранее настроенные колонки рабочей формы не используются.
Доплата85 — новая отдельная колонка интерфейса, не колонка ТаблицаЗначений Товары85; её Данные не назначаются. ТипЗначения разрешается менять только у этого несвязанного редактора, не у связанных Наименование/Количество/Цена/Сумма.
ПриИзменении поля ввода в колонке имеет первый параметр Элемент от расширения табличного поля; базовый ПриИзменении() дополнительных параметров не имеет. Экспортная ДоплатаИзменена85(Элемент) назначается реальному редактору, напрямую вручную не вызывается.
Каждый урок — отдельная новая форма или полная замена её модуля; одноимённые ПриОткрытии не склеиваются. Переменные состояния обычного модуля формы не переносите в общий серверный модуль.
F7 и обновление только своего стенда. Откройте собственную форму, подтвердите флажком опыт и выполните будущие ручные проверки. Системный режим записи в данном уроке лишь выбранное значение интерфейса: документов и проведения нет.
runtimeVerifiedScenarios=0:1С/GUI здесь не запускались, поля/события/привязки реально не выполнялись, базы/метаданные конфигураций не изменялись и новые резервные копии/архивы не создавались.
Перем СчётчикИзменений85;
Процедура ПриОткрытии()
ПроверитьСвойСтенд85();
СогласенНаСвоюФорму85 = Ложь;
СчётчикИзменений85 = 0;
Товары85 = Новый ТаблицаЗначений;
Товары85.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Товары85.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Товары85.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Товары85.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Книга = Товары85.Добавить();
Книга.Наименование = "Книга";
Книга.Количество = 3;
Книга.Цена = 250;
Книга.Сумма = 750;
Ручка = Товары85.Добавить();
Ручка.Наименование = "Ручка";
Ручка.Количество = 1;
Ручка.Цена = 50;
Ручка.Сумма = 50;
Таблица = ЭтаФорма.ЭлементыФормы.Таблица85;
Таблица.СоздатьКолонки();
Таблица.АвтоВводНовойСтроки = Ложь;
Таблица.ИзменятьСоставСтрок = Ложь;
Колонка = Таблица.Колонки.Добавить("Доплата85", "Разовая доплата 0–100");
Колонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
Редактор = Колонка.ЭлементУправления;
Если ТипЗнч(Редактор) <> Тип("ПолеВвода") Тогда
ВызватьИсключение "Нужен настоящий редактор своей новой несвязанной колонки";
КонецЕсли;
Редактор.ТипЗначения = Новый ОписаниеТипов("Число");
Если Не Редактор.ТипЗначения.СодержитТип(Тип("Число")) Тогда
ВызватьИсключение "Тип несвязанного редактора должен допускать число";
КонецЕсли;
Редактор.УстановитьДействие("ПриИзменении", Новый Действие("ДоплатаИзменена85"));
Назначенное = Редактор.ПолучитьДействие("ПриИзменении");
Если ТипЗнч(Назначенное) <> Тип("Действие") Тогда
ВызватьИсключение "Настоящее действие редактора не получено";
КонецЕсли;
Таблица.ТекущаяСтрока = Товары85[0];
Таблица.ТекущаяКолонка = Колонка;
ЭтаФорма.ЭлементыФормы.УчебнаяКоманда85.УстановитьДействие("Нажатие", Новый Действие("ПроверитьСобытие85"));
Сообщить("После согласия введите10 в Доплата85 у Книги и выйдите из ячейки. ПриИзменении должен дать сумму760. Сам обработчик напрямую не вызывается.");
КонецПроцедуры
Процедура ДоплатаИзменена85(Элемент) Экспорт
ПроверитьСогласие85();
Таблица = ЭтаФорма.ЭлементыФормы.Таблица85;
Колонка = Таблица.Колонки.Найти("Доплата85");
Если Колонка = Неопределено Тогда
ВызватьИсключение "Нет собственной несвязанной колонки";
КонецЕсли;
Если Элемент <> Колонка.ЭлементУправления Тогда
ВызватьИсключение "Событие пришло не от собственного редактора";
КонецЕсли;
СтрокаТовара = Таблица.ТекущиеДанные;
Если СтрокаТовара = Неопределено Тогда
ВызватьИсключение "Для события нужна настоящая текущая строка";
КонецЕсли;
Если Товары85.Индекс(СтрокаТовара) = -1 Тогда
ВызватьИсключение "Строка не относится к собственной таблице в памяти";
КонецЕсли;
Доплата = Элемент.Значение;
Если ТипЗнч(Доплата) <> Тип("Число") Тогда
ВызватьИсключение "Значение реального редактора должно быть числом";
КонецЕсли;
Если Доплата < 0 Или Доплата > 100 Тогда
Элемент.Значение = 0;
ВызватьИсключение "Доплата вне0–100, своё значение редактора сброшено, сумма не изменялась";
КонецЕсли;
Доплата = Окр(Доплата, 2);
Элемент.Значение = Доплата;
СтрокаТовара.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена + Доплата;
СчётчикИзменений85 = СчётчикИзменений85 + 1;
Сообщить(СтрокаТовара.Наименование + ": разовая доплата=" + Строка(Доплата)
+ "; сумма=" + Строка(СтрокаТовара.Сумма) + "; реальных событий=" + Строка(СчётчикИзменений85));
КонецПроцедуры
Процедура ПроверитьСобытие85(Элемент) Экспорт
ПроверитьСогласие85();
Если Товары85.Количество() <> 2 Или СчётчикИзменений85 <> 1
Или Товары85[0].Наименование <> "Книга" Или Товары85[0].Сумма <> 760
Или Товары85[1].Сумма <> 50 Тогда
ВызватьИсключение "Для первой проверки нужен один реальный ввод10 у Книги и суммы760/50";
КонецЕсли;
Сообщить("Реальное событие редактора и пересчёт только своих RAM-данных подтверждены. Разовая несвязанная ячейка не считается сохранённым реквизитом товара.");
КонецПроцедуры
Процедура ПроверитьСвойСтенд85()
КонецПроцедуры
Процедура ПроверитьСогласие85()
ПроверитьСвойСтенд85();
Если Не СогласенНаСвоюФорму85 Тогда
ВызватьИсключение "Подтвердите опыт только со своей новой обычной формой";
КонецЕсли;
КонецПроцедурыРазбор по шагам
В RAM создаются две собственные строки Книга750 и Ручка50, Таблица85 связывается только с этой таблицей.
СоздатьКолонки формирует связанные колонки, Доплата85 добавляется отдельно и с данными не связывается.
Настоящий редактор получается из ЭлементУправления; только его свободный ТипЗначения задаётся числовым.
ПриИзменении назначается реальному редактору, ПолучитьДействие проверяет объект Действие, не выдуманное имя свойства.
Будущий ввод10 и выход из ячейки вызывают экспортную процедуру с одним первым параметром Элемент.
Обработчик проверяет собственный редактор/строку, читает Значение, нормализует до2 знаков и пересчитывает свою сумму.
Отдельная кнопка проверяет один реальный вызов и суммы760/50; сам обработчик программно не вызывается.
Как проверить результат
Доплата85 отсутствует в схеме Товары85 и является несвязанной колонкой интерфейса.
ТипЗначения числовой, действие назначено реальному редактору.
Ввод10 у Книги вызывает ровно одно событие и сумму760.
Ручка остаётся50, всего две собственные строки.
Несвязанная разовая ячейка не выдаётся за сохранённый реквизит или запись базы.
Ожидаемый результат
Ожидаемые результаты относятся только к будущему отдельно разрешённому ручному опыту в собственном толстом клиенте. runtimeVerifiedScenarios=0.
На что обратить внимание
Три расширения с внутренним названием Расширение — разные контексты: системное перечисление в поле, расположение на панели и редактор колонки. Это не устанавливаемые расширения конфигурации CFE.
Новый Расширение не существует. Дополнительные члены появляются у настоящего элемента нужного вида/местоположения. Поля и панель создаются документированным ЭлементыФормы.Добавить, редактор колонки получается из ЭлементУправления.
ДоступныеЗначения — именно СписокЗначений для системного перечисления, не общий СписокВыбора строкового статуса. Порядок списка соответствует порядку выбора; пустой список означает все значения, не запрет всех.
Ограничение клиента не является бизнес-правом. Код не записывает документ и не подтверждает возможность проведения; выбранное РежимЗаписиДокумента только учебное значение.
ТипЗначения самостоятельного поля меняется лишь без связи с данными. Значение передаётся самим системным перечислением, не его текстовым представлением.
Владельцем своей формы не назначается поле ввода или таблица: такая роль делает некоторые свойства расширения панели/формы недоступными. Код предназначен обычной собственной форме обработки.
ПолучитьПривязку принимает пять обязательных аргументов: границу и переменные для объектов/границ. Это не функция, возвращающая структуру; прочитанная реальная привязка сравнивается со своей панелью.
УстановитьПривязку с одной границей снимает её привязки. Перед геометрией сбрасываются четыре старые привязки, затем справа задаётся своя жёсткая привязка.
Реальная компоновка зависит от темы/масштаба. Урок проверяет изменение ширины в логических единицах с допуском0.5, но не выдаёт статический аудит за реальную проверку пикселей.
АктивизироватьПоУмолчанию в установленной RU-справке помечено Только чтение, хотя примечание обсуждает установку. Код только читает реальный Булево-признак; текущий фокус меняется через ТекущийЭлемент, не запись в readonly.
ПорядокОбхода задаёт маршрут фокуса, ПорядокОтображения — перекрытие элементов. Их нельзя подменять индексом коллекции или значением своего товара.
Видимость скрывает собственное поле, но не удаляет значение и не защищает данные. Свертка допускается лишь для поддерживаемого вида/направления; здесь второе ПолеВвода сворачивается вниз.
Значение редактора колонки относится к текущему вводу. У несвязанной Доплата85 нет сохранённого значения в каждой строке ТаблицаЗначений; это демонстрация разового пересчёта, не готовая долговременная модель наценок.
Запись ТипЗначения редактора запрещена у связанных колонок. Для изменения типов данных меняют собственную схему ТаблицаЗначений отдельно, а не свойства связанной ячейки.
ПолучитьДействие возвращает Действие, не строку имени процедуры. Проверка типа подтверждает наличие назначенного объекта; реальную работу доказывает отдельный будущий ввод и счётчик события.
Программное присваивание Значение не вызывает ПриИзменении. Код не имитирует событие прямым вызовом обработчика и не обещает рекурсивный повтор из-за нормализации числа.
Экспортный обработчик реального события имеет точную сигнатуру: Элемент передаётся первым расширением формы/табличного поля. Не путайте базовую справку события с итоговой сигнатурой в месте размещения.
В табличном уроке проверяется принадлежность текущей строки своей таблице. Количество/цена/сумма живут только в RAM; никаких объектов базы, SQL-записей или документов нет.
Для первой проверки нужно ровно одно интерактивное изменение доплаты10 у Книги. Если изменили другую строку/несколько значений, переоткройте свою форму для исходного состояния.
Статические проверки не запускают интерфейс1С: runtimeVerifiedScenarios=0. Новых архивов/резервных копий нет; ограничения GUI и события требуют отдельного разрешённого ручного опыта.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.