Очищает набор узлов.
Синтаксис
Очистить()Примеры платформы
Об.ОбменДанными.Получатели.Очистить();Полное описание, параметры и ограничения
НаборУзлов.Очистить (NodeSet.Clear)
НаборУзлов (NodeSet)
Очистить (Clear)
Доступен, начиная с версии 8.0.
Синтаксис:
Очистить()
Описание:
Очищает набор узлов.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Об.ОбменДанными.Получатели.Очистить();
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Получатели и отправитель: подготовить маршрут, не запуская обмен
У нового собственного черновика создадим ручной набор A/B, проверим дубликаты, явное заполнение и момент действия автофлага; отправитель задаётся отдельно, без записи и отправки.
Где и как запускать
Полный обычный клиентский общий модуль УчебныеПолучатели85, только толстый клиент. Пульт отдельно ниже; не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343, конфигурация УчебнаяМаршрутизация85, совместимость НеИспользовать, обычное приложение и толстый клиент. В свойствах корня конфигурации для поддерживаемых режимов запуска выберите Управляемое приложение и обычное приложение, а Основной режим запуска оставьте Обычное приложение: первый выбор делает видимым флаг Клиент (обычное приложение) общего модуля, второй определяет запуск нашего обычного Пульта. Не используйте рабочую УТ/КА/УНФ/БП. Стенд, UI и код здесь не запускались: runtimeVerifiedScenarios=0.
План обмена Уч85Узлы: Распределённая информационная база=Нет, Код Строка(10), переменная длина, наименование 100, уникальность кодов включена. Дополнительный реквизит Уч85Ключ Строка(8), Индексировать. Модули менеджера/объекта пустые, расширений, разделителей, фонового обмена и других сеансов нет.
Справочник Уч85Черновики: неиерархический, код Строка(10), наименование 100, без дополнительных реквизитов и обработчиков. В состав Уч85Узлы включите ТОЛЬКО этот справочник; АвтоРегистрация для него Разрешить. Других планов обмена в стенде нет. Элементы справочника не создавайте и не переносите из рабочих баз.
В стандартном списке своего плана вручную подготовьте ровно три узла. Уже созданному текущему узлу базы задайте Код=00, Наименование=Учебная локальная база, Уч85Ключ=L. Создайте свои A: Код=10, Наименование=Учебный получатель A, ключ A; B: Код=20, Наименование=Учебный получатель B, ключ B. Сохраните только эту собственную подготовку, не выполняйте обмен. Все узлы без пометки удаления, номера сообщений ещё не изменялись.
Создайте неглобальный общий модуль УчебныеПолучатели85: Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, остальные клиентские флаги=Нет. Вставляйте полный модуль одного урока, не внутрь процедуры и не все варианты одновременно.
Обработка УчебныеПолучатели85 → обычная основная форма Пульт → кнопка Выполнить → действие ВыполнитьНажатие. Полный модуль формы дан отдельно. F7 и обновление только собственного стенда; откройте Пульт толстого клиента.
Код читает свои заранее сохранённые узлы; изменения имени полученного объекта и настройки нового черновика остаются в памяти. Нет Записать, регистрации/удаления изменений, создания сообщения, транзакций, сети, файлов и печати. Окна узлов урок формы не открывает.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойКонтекст();
Свои = ПолучитьСвоюПодготовку();
Черновик = Справочники.Уч85Черновики.СоздатьЭлемент();
Черновик.Наименование = "Учебный черновик маршрута — не записывать";
Параметры = Черновик.ОбменДанными;
Получатели = Параметры.Получатели;
Если ТипЗнч(Получатели) <> Тип("НаборУзлов") Тогда
ВызватьИсключение "Получатели — настоящий набор узлов плана, не массив и не XML DOM";
КонецЕсли;
Получатели.АвтоЗаполнение = Ложь;
Получатели.Очистить();
Если Получатели.АвтоЗаполнение Или Получатели.Количество() <> 0 Тогда
ВызватьИсключение "Нужен явный ручной режим собственной пустой коллекции";
КонецЕсли;
Получатели.Добавить(Свои.A);
Получатели.Добавить(Свои.B);
Получатели.Добавить(Свои.A);
Если Получатели.Количество() <> 2 Или Не Получатели.Содержит(Свои.A) Или Не Получатели.Содержит(Свои.B) Тогда
ВызватьИсключение "Повторное Добавить A не должно создать третий элемент";
КонецЕсли;
Получатели.Удалить(Свои.A);
Если Получатели.Количество() <> 1 Или Получатели.Содержит(Свои.A) Или Не Получатели.Содержит(Свои.B) Тогда
ВызватьИсключение "Удалить принимает ссылку на A и оставляет только B";
КонецЕсли;
Получатели.Очистить();
Если Получатели.Количество() <> 0 Тогда
ВызватьИсключение "Очистка касается только получателей собственного черновика";
КонецЕсли;
Получатели.Заполнить();
Если Не Получатели.Содержит(Свои.A) Или Не Получатели.Содержит(Свои.B) Тогда
ВызватьИсключение "Явное Заполнить должно включить собственные подготовленные удалённые A/B";
КонецЕсли;
ЧислоПриОбходе = 0;
Для Каждого Узел Из Получатели Цикл
Если Узел <> Свои.A И Узел <> Свои.B И Узел <> Свои.L Тогда
ВызватьИсключение "Получатель не принадлежит единственному собственному плану";
КонецЕсли;
ЧислоПриОбходе = ЧислоПриОбходе + 1;
КонецЦикла;
Если ЧислоПриОбходе <> Получатели.Количество() Тогда
ВызватьИсключение "Количество и реальный обход получателей должны совпасть";
КонецЕсли;
Сообщить(СтрШаблон("Явное Заполнить при АвтоЗаполнение=Ложь: %1 получателей; текущий L присутствует=%2. Порядок и включение L не зашиты.",
Получатели.Количество(), Получатели.Содержит(Свои.L)));
НачальныйОтправитель = Параметры.Отправитель;
Если НачальныйОтправитель <> Неопределено Тогда
ВызватьИсключение "Нужен свежий собственный черновик без уже назначенного отправителя";
КонецЕсли;
Параметры.Отправитель = Свои.A;
Если Параметры.Отправитель <> Свои.A Тогда
ВызватьИсключение "Отправитель задаётся настоящей ссылкой на собственный A";
КонецЕсли;
Получатели.Очистить();
Получатели.Добавить(Свои.B);
Получатели.АвтоЗаполнение = Истина;
Если Не Получатели.АвтоЗаполнение Или Получатели.Количество() <> 1 Или Не Получатели.Содержит(Свои.B) Тогда
ВызватьИсключение "Включение флага не является выполненным ПередЗаписью или немедленной отправкой";
КонецЕсли;
Получатели.АвтоЗаполнение = Ложь;
Параметры.Отправитель = НачальныйОтправитель;
Если Получатели.АвтоЗаполнение Или Параметры.Отправитель <> Неопределено Тогда
ВызватьИсключение "Свой черновик возвращён в ручной режим без отправителя";
КонецЕсли;
Сообщить("Остался ручной маршрут B в незаписанном черновике. Отправитель A проверен и сброшен. Изменения не зарегистрированы, обмен не запускался.");
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебнаяМаршрутизация85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСвоюПодготовку()
Менеджер = ПланыОбмена.Уч85Узлы;
Если Метаданные.ПланыОбмена.Количество() <> 1 Тогда
ВызватьИсключение "В новом стенде должен быть только собственный Уч85Узлы";
КонецЕсли;
Состав = Метаданные.ПланыОбмена.Уч85Узлы.Состав;
ЭлементСостава = Состав.Найти(Метаданные.Справочники.Уч85Черновики);
Если Состав.Количество() <> 1 Или ЭлементСостава = Неопределено Тогда
ВызватьИсключение "В составе своего плана должен быть только Уч85Черновики";
КонецЕсли;
Если ЭлементСостава.АвтоРегистрация <> АвтоРегистрацияИзменений.Разрешить Тогда
ВызватьИсключение "Для собственной проверки Заполнить требуется разрешённая авторегистрация";
КонецЕсли;
Текущий = Менеджер.ЭтотУзел();
A = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "A");
B = Менеджер.НайтиПоРеквизиту("Уч85Ключ", "B");
Если Текущий.Пустая() Или A.Пустая() Или B.Пустая() Или A = B Или A = Текущий Или B = Текущий Тогда
ВызватьИсключение "Нужны три разные настоящие ссылки своего плана";
КонецЕсли;
Если Текущий.Уч85Ключ <> "L" Или Текущий.Код <> "00" Или Текущий.Наименование <> "Учебная локальная база"
Или A.Код <> "10" Или A.Наименование <> "Учебный получатель A"
Или B.Код <> "20" Или B.Наименование <> "Учебный получатель B" Тогда
ВызватьИсключение "Не совпала собственная подготовка узлов L,A,B";
КонецЕсли;
Выборка = Менеджер.Выбрать();
Ссылки = Новый Массив;
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Или (Выборка.Ссылка <> Текущий И Выборка.Ссылка <> A И Выборка.Ссылка <> B)
Или Ссылки.Найти(Выборка.Ссылка) <> Неопределено Тогда
ВызватьИсключение "Лишний, помеченный или повторный узел нового стенда";
КонецЕсли;
Ссылки.Добавить(Выборка.Ссылка);
КонецЦикла;
Если Ссылки.Количество() <> 3 Тогда
ВызватьИсключение "В своём плане должны существовать только L,A,B";
КонецЕсли;
Возврат Новый Структура("Менеджер,L,A,B", Менеджер, Текущий, A, B);
КонецФункцииУчебныеПолучатели85.Пульт
УчебнаяМаршрутизация85 → Обработки → УчебныеПолучатели85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеПолучатели85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
ЭтотУзел возвращает предопределённую ссылку именно своей базы. Она проверяется как L и отличается от своих сохранённых A/B; текущий узел не выдумывается новым UUID и не объявляется главным узлом РИБ.
Проверяем состав единственного собственного плана и АвтоРегистрация=Разрешить у Уч85Черновики. СоздатьЭлемент создаёт настоящий новый объект справочника в памяти, но по справке не записывает его в базу.
ОбменДанными и Получатели readonly-свойства: получаем настоящий изменяемый НаборУзлов, не переприсваиваем свойства и не вызываем несуществующий конструктор набора. Этот НаборУзлов относится к планам обмена, не к XML DOM.
АвтоЗаполнение=Ложь выключает будущее автоматическое заполнение перед ПередЗаписью. Сначала очищаем только набор своего нового объекта; Добавить A/B/A даёт два получателя, потому что повтор не добавляется.
Содержит проверяет вхождение настоящей ссылки. Удалить принимает ссылку A, не индекс 0; после удаления остаётся B. Очистить затем даёт ноль, не удаляя сами узлы плана.
Явный Заполнить вызывается даже при АвтоЗаполнение=Ложь. Он использует узлы планов с авторегистрацией для этого объекта; проверяем свои A/B, допустимость всех ссылок и совпадение размера с реальным обходом. Наличие L и порядок не зашиваются — сообщаем фактическое состояние.
Отправитель=ссылка A обозначает источник полученного изменения, а не клиентское приложение/логин. По справке при будущей записи это исключает обратную регистрацию отправителю. Здесь записи нет, поэтому исключение регистрации не выдаётся за испытанный результат.
После явной ручной настройки только B ставим АвтоЗаполнение=Истина. Само присваивание не является вызовом ПередЗаписью или отправкой: состав ещё один B. Затем выключаем автофлаг и возвращаем прежний Неопределено у свежего отправителя.
В конце существует только свой незаписанный черновик с ручным получателем B. Нет ЗарегистрироватьИзменения, сообщений обмена, соединений или удаления регистраций; закрытие Пульта не сохраняет этот локальный объект.
Как проверить результат
Будущий тест: F7 → свой Пульт → Выполнить. Ручная последовательность размеров: 0, 2 после A/B/A, 1 после удаления A, 0 после очистки.
Явное Заполнить при выключенном автофлаге должно включить подготовленные A/B; размер и присутствие L выводятся фактически, порядок не предполагается.
Присваивание Отправитель=A возвращает именно свою ссылку A; после опыта снова Неопределено. Не проверяйте реальную регистрацию записью объекта в этом уроке.
При включении автофлага ручной набор ещё содержит один B. Автоматический вызов перед записью не происходил, немедленная отправка не ожидается.
Повторное нажатие создаёт новый объект и проходит те же контрольные точки. Список своего справочника должен оставаться пустым; здесь реальная база и UI ещё не проверены.
Ожидаемый результат
Будущий результат: полный жизненный цикл своего набора получателей, проверенные ручной/автофлаг и отправитель; ни записи черновика, ни обмена.
На что обратить внимание
Получатели — настройка будущей регистрации, не подтверждение доставки данных. Авторегистрация, регистрация изменений, запись сообщения и доставка — отдельные этапы.
АвтоЗаполнение управляет автоматическим вызовом Заполнить перед обработчиком ПередЗаписью. Ложь не запрещает явный вызов Заполнить, Истина не запускает сеть.
В состав объекта могут входить несколько планов. Здесь намеренно один собственный план с одним собственным каталогом; чужая конфигурация этим стендом не моделируется.
Отправитель не является единственным получателем. Свойство используется при будущей записи полученного изменения; в этом уроке реальная регистрация не выполняется.
ЭтотУзел не равен ГлавныйУзел РИБ. План здесь не РИБ; текущая база и источник полученного сообщения также разные понятия.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.