ДанныеФормыЭлементКоллекции.Свойство

Методы · Property

Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство.

Синтаксис

Свойство(<Ключ>, <НайденноеЗначение>)
Полное описание, параметры и ограничения

ДанныеФормыЭлементКоллекции.Свойство (FormDataCollectionItem.Property)

ДанныеФормыЭлементКоллекции (FormDataCollectionItem)

Свойство (Property)

Доступен, начиная с версии 8.2.

Синтаксис:
Свойство(<Ключ>, <НайденноеЗначение>)
Параметры:

<Ключ> (обязательный)
Тип: Строка.
Ключ для поиска свойства.

<НайденноеЗначение> (необязательный)
Тип: Произвольный.
Содержит найденное значение. Если ключа нет в структуре, то возвращается Неопределено.
Возвращаемое значение:
Тип: Булево.
Истина - ключ найден; Ложь в противном случае.
Описание:

Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Исходный номер строки и сообщение в конкретной форме

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

Где и как запускать

Полный модуль управляемой формы УчебныеДанныеФорм85 → Обработки → УчебныеДанные85 → Формы → Пульт. Сервер с контекстом; в 1С не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу платформы 8.5.1.1343 с конфигурацией УчебныеДанныеФорм85, совместимость НеИспользовать, управляемое приложение. Не используйте УТ, КА, УНФ, БП или рабочую базу. Здесь 1С не запускалась: runtimeVerifiedScenarios=0.

  2. В своей конфигурации создайте обработку УчебныеДанные85. Реквизит Примечание — Строка (80); табличная часть Строки: Код — Строка (8), Товар — Строка (64), Количество — Число (10,0). Обработчики модуля объекта оставьте пустыми. Эти данные существуют в экземпляре обработки в памяти, не в справочнике или документе.

  3. Создайте у обработки пустую управляемую основную форму Пульт. Для первых четырёх уроков удалите автоматически предложенный реквизит Объект и его элементы, если мастер их создал: у формы не должно быть основного реквизита. Не добавляйте учебные реквизиты и таблицы вручную — модуль создаёт их пакетно при создании формы.

  4. В форме создайте команду Выполнить, действие Выполнить; перетащите команду на форму кнопкой. Событию ПриСозданииНаСервере назначьте одноимённую процедуру. Вставляйте ПОЛНЫЙ модуль выбранного урока целиком вместо предыдущего, не пять модулей одновременно и не внутрь обработчика.

  5. Сделайте F7 и обновление только своей учебной базы; откройте Пульт из списка собственных обработок в тонком либо управляемом толстом клиенте. Не выбирайте команды сохранения обработки, печати или записи объектов. Кнопка вызывает сервер с контекстом формы, обычные ТаблицаЗначений и объект обработки на тонкий клиент не передаются.

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПроверитьСвойКонтекст();
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("Уч85Черновик", Новый ОписаниеТипов("ОбработкаОбъект.УчебныеДанные85")));
    ЭтотОбъект.ИзменитьРеквизиты(Реквизиты);
    Поле = ЭтотОбъект.Элементы.Добавить("Уч85Примечание", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "Уч85Черновик.Примечание";
    Поле.Заголовок = "Примечание собственного черновика";
    Поле.ТолькоПросмотр = Истина;
    Таблица = ЭтотОбъект.Элементы.Добавить("Уч85Строки", Тип("ТаблицаФормы"));
    Таблица.ПутьКДанным = "Уч85Черновик.Строки";
    Таблица.ТолькоПросмотр = Истина;
    Для Каждого ИмяКолонки Из СтрРазделить("Код,Товар,Количество", ",") Цикл
        Поле = ЭтотОбъект.Элементы.Добавить("Уч85" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
        Поле.Вид = ВидПоляФормы.ПолеВвода;
        Поле.ПутьКДанным = "Уч85Черновик.Строки." + ИмяКолонки;
        Поле.Заголовок = ИмяКолонки;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Выполнить(Команда)
    Сообщить(ВыполнитьНаСервере());
КонецПроцедуры

&НаСервере
Функция ВыполнитьНаСервере()
    ПроверитьСвойКонтекст();
    Черновик = СоздатьСвойЧерновик();
    ИсходныйНомерКниги = Черновик.Строки[0].НомерСтроки;
    ИсходныйНомерКоробки = Черновик.Строки[2].НомерСтроки;
    ЭтотОбъект.ЗначениеВРеквизитФормы(Черновик, "Уч85Черновик");
    СтрокиФормы = ЭтотОбъект.Уч85Черновик.Строки;
    КнигаФормы = СтрокиФормы.Получить(0);
    Если ТипЗнч(КнигаФормы) <> Тип("ДанныеФормыЭлементКоллекции") Тогда
        ВызватьИсключение "Нужна строка модели настоящей табличной части";
    КонецЕсли;
    КоличествоКниг = Неопределено;
    Если Не КнигаФормы.Свойство("Количество", КоличествоКниг) Или КоличествоКниг <> 3 Тогда
        ВызватьИсключение "Свойство возвращает признак, а значение — через второй параметр";
    КонецЕсли;
    ОтсутствующееЗначение = "не результат";
    Если КнигаФормы.Свойство("Уч85НесуществующееПоле", ОтсутствующееЗначение)
        Или ОтсутствующееЗначение <> Неопределено Тогда
        ВызватьИсключение "Для отсутствующего собственного поля нужны Ложь и Неопределено";
    КонецЕсли;
    Если КнигаФормы.ИсходныйНомерСтроки <> ИсходныйНомерКниги
        Или СтрокиФормы[2].ИсходныйНомерСтроки <> ИсходныйНомерКоробки Тогда
        ВызватьИсключение "Исходные номера сравниваются с настоящим объектом до перестановки";
    КонецЕсли;
    СтрокиФормы.Сдвинуть(2, -2);
    Если СтрокиФормы[0].Код <> "C" Или СтрокиФормы[0].ИсходныйНомерСтроки <> ИсходныйНомерКоробки Тогда
        ВызватьИсключение "Позиция 0 — не исходный номер строки перенесённой Коробки";
    КонецЕсли;
    Преобразованный = ДанныеФормыВЗначение(ЭтотОбъект.Уч85Черновик, Тип("ОбработкаОбъект.УчебныеДанные85"));
    Связь = Новый Структура("ИдентификаторФормы,ИмяРеквизита", ЭтотОбъект.УникальныйИдентификатор, "Уч85Черновик");
    УстановитьСоответствиеОбъектаИФормы(Преобразованный, Связь);
    ПолученнаяСвязь = ПолучитьСоответствиеОбъектаИФормы(Преобразованный);
    Если ТипЗнч(ПолученнаяСвязь) <> Тип("Структура")
        Или ПолученнаяСвязь.ИдентификаторФормы <> ЭтотОбъект.УникальныйИдентификатор
        Или ПолученнаяСвязь.ИмяРеквизита <> "Уч85Черновик" Тогда
        ВызватьИсключение "Связь должна вести в конкретный экземпляр своей формы";
    КонецЕсли;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Учебный контроль: Коробка перенесена в начало; количество 2. Ошибки записи нет, запись не выполнялась.";
    Сообщение.Поле = "Строки[0].Количество";
    Сообщение.УстановитьДанные(Преобразованный);
    Сообщение.ИдентификаторНазначения = ПолученнаяСвязь.ИдентификаторФормы;
    Сообщение.Сообщить();
    Возврат СтрШаблон("Порядок C,A,B. Исходный номер Коробки %1, позиция в форме 0; Книга %2. Сообщение направлено в свой Уч85Черновик.",
        ИсходныйНомерКоробки, ИсходныйНомерКниги);
КонецФункции

&НаСервереБезКонтекста
Функция СоздатьСвойЧерновик()
    Черновик = Обработки.УчебныеДанные85.Создать();
    Черновик.Примечание = "Только учебный черновик";
    Для Каждого СтрокаДанных Из СтрРазделить("A|Книга|3;B|Ручка|1;C|Коробка|2", ";") Цикл
        Части = СтрРазделить(СтрокаДанных, "|");
        Строка = Черновик.Строки.Добавить();
        Строка.Код = Части[0];
        Строка.Товар = Части[1];
        Строка.Количество = Число(Части[2]);
    КонецЦикла;
    Возврат Черновик;
КонецФункции

&НаСервереБезКонтекста
Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеДанныеФорм85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. СоздатьСвойЧерновик использует менеджер своей обработки, заполняет Примечание и три строки A/Книга/3, B/Ручка/1, C/Коробка/2. Объект не записывается; форма не получает основной реквизит и не блокирует документ.

  2. Сохраняем настоящие НомерСтроки Книги и Коробки из исходного объекта. Затем весь объект превращается в Уч85Черновик через метод формы. Именно табличная часть даёт определённый справкой смысл ИсходныйНомерСтроки.

  3. Свойство("Количество", значение) даёт Булево, а 3 помещает во второй аргумент. Для заранее отсутствующего собственного поля проверяем сразу Ложь и Неопределено, не принимаем старую строку переменной за результат.

  4. ИсходныйНомерСтроки только читается и сравнивается с реальным исходным объектом. Переносим позицию 2 на -2: Коробка становится первой, но исходный номер относится к её старой строке, не текущему индексу 0.

  5. Для сообщения преобразуем ВСЕГО Уч85Черновик в конкретный ОбработкаОбъект.УчебныеДанные85. Табличную часть отдельно в прикладной объект получать этим глобальным методом запрещено справкой.

  6. Структура соответствия имеет ключи ИдентификаторФормы и ИмяРеквизита; UUID берётся у реальной текущей формы, имя реквизита Уч85Черновик существует. Setter получает структуру, не строку; getter возвращает структуру, оба её значения проверяются.

  7. УстановитьДанные связывает сообщение с преобразованным объектом. Поле Строки[0].Количество — путь ВНУТРИ этого объекта, не повторный Уч85Черновик.Строки. UUID в ИдентификаторНазначения направляет сообщение в нужный экземпляр.

  8. Сообщение контрольное, не ошибка проведения. После перестановки показывает количество Коробки 2; никакие проверки заполнения, запись или проведение не вызываются. Внешний вид привязки предстоит проверить вручную.

Как проверить результат

  1. Будущий тест: F7, Выполнить. Порядок C,A,B; количество Книги через Свойство равно 3; неизвестное поле даёт Ложь и Неопределено.

  2. Исходные номера совпадают с настоящими номерами объекта до преобразования. Коробка после сдвига имеет индекс 0, но её сохранённый исходный номер не подменяется нулём.

  3. Getter соответствия должен вернуть UUID именно открытого Пульта и строку Уч85Черновик. Одна совпадающая строка без проверки UUID недостаточна.

  4. Контрольное сообщение должно быть адресовано своей форме и полю Количество строки Коробки. Реальная подсветка/переход не проверены автоматическими тестами; проверьте в своём клиенте.

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

Ожидаемый результат

Будущий результат: порядок C,A,B, исходные номера отдельно от индексов, проверенная структура соответствия и контрольное сообщение своей форме.

На что обратить внимание

  1. ИсходныйНомерСтроки имеет описанный смысл для коллекции из табличной части. Обычная ТаблицаЗначений не заменяет её в этом опыте; readonly-свойство не присваивается.

  2. Номер строки, индекс в коллекции и идентификатор строки формы — разные понятия. Перестановка не создаёт устойчивый идентификатор записи базы.

  3. Соответствие доступно, пока существует зарегистрированный объект. Его структура не является сериализованной ссылкой, не сохраняется в базе и не используется после уничтожения объекта.

  4. Справка setter/getter упоминает внешнее соединение, но для UI нужен настоящий экземпляр формы. Внешнее соединение и произвольный новый UUID здесь не имитируются.

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

Не хотите разбираться сами?

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

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.