Идентифицирует приложение (информационную базу или область данных информационной базы) в системе взаимодействия. При сравнении идентификаторов средствами встроенного языка сравнение выполняется по значению идентификаторов.
Полное описание, параметры и ограничения
ИдентификаторПриложенияСистемыВзаимодействия (CollaborationSystemApplicationID)
ИдентификаторПриложенияСистемыВзаимодействия (CollaborationSystemApplicationID)
Доступен, начиная с версии 8.3.13.
Конструкторы:
По умолчанию
Описание:
Идентифицирует приложение (информационную базу или область данных информационной базы) в системе взаимодействия.
При сравнении идентификаторов средствами встроенного языка сравнение выполняется по значению идентификаторов.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.13.
Методическая информация
Практические примеры
Свой список меток приложений в памяти: план 125, исключение 75, очистка 0
Создать настоящие типизированные локальные метки и собственную коллекцию, проверить сравнение по значению, вычислить план по её полному составу и реально перечитать результат удаления и очистки. Регистрация приложений не нужна и не подтверждается.
Где и как запускать
Полный неглобальный клиентский общий модуль ПланПриложений85Клиент; &НаКлиенте и #Если ТолстыйКлиентУправляемоеПриложение во всех функциях. Только собственный локальный план в памяти толстого управляемого клиента 8.5.1.1343.
Подготовка
Будущий ручной опыт: создайте свою новую небольшую пустую учебную конфигурацию на платформе 8.5.1.1343. Основной режим запуска — Управляемое приложение, режим совместимости — Не использовать. Рабочая база, VM, отдельный пользователь, UUID-метки конфигурации и сервер системы взаимодействия не нужны. Здесь запуск 1С не выполнялся.
Общие → Общие модули → создайте ПланПриложений85Клиент. Клиент (управляемое приложение) = Да; Сервер, Глобальный, Привилегированный, Вызов сервера, Клиент (обычное приложение), Внешнее соединение = Нет. Повторное использование возвращаемых значений = Не использовать. Основной блок вставьте целиком в пустой модуль, не внутрь другой процедуры.
Общие → Общие формы → создайте управляемую ПланПриложений85. Добавьте реквизит РезультатПлана85: Строка, Длина = 0 (неограниченная). Выведите многострочное поле с ПутьКДанным = РезультатПлана85 и ТолькоПросмотр = Да.
В свойствах формы установите АвтоматическоеСохранениеДанныхВНастройках = АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках = СохранениеДанныхФормыВНастройках.НеИспользовать. Это два разных перечисления, не значения Булево. Обработчики сохранения и ПриОткрытии не создавайте.
В форме → Команды создайте РассчитатьПлан85, Действие = РассчитатьПлан85. Для ИспользованиеТекущейСтроки и ИспользованиеВыделенныхСтрок вручную выберите НеИспользует; команда не связана с таблицей и получает только штатный параметр Команда. Добавьте кнопку этой команды. Второй блок вставьте целиком в пустой модуль формы вместо пустого автоматически созданного одноимённого обработчика.
Общие → Общие команды → создайте ОткрытьПланПриложений85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы и отметьте видимость. Третий блок вставьте целиком в модуль этой общей команды. Настоящие два параметра обработчика передаёт платформа, не вызывайте его вручную.
Проверьте свою конфигурацию для толстого управляемого клиента и сервера, сохраните её и обновите только учебную базу. Запустите толстый управляемый клиент 8.5.1.1343, общей командой откройте свою форму и нажмите РассчитатьПлан85. До нажатия расчёт не запускается.
Строки OWN85:plan:A и OWN85:plan:B — только собственные локальные учебные метки. Не заменяйте их идентификаторами рабочей ИБ или чужого приложения. Конструктор не проверяет корректность идентификатора; этот пример не удостоверяет формат, регистрацию или существование приложения. Если он не примет метку или проверки не пройдут, результат — СТОП.
Коллекция и все расчёты остаются в памяти клиента. ОткрытьФорму штатно обращается к серверной части своей учебной базы для открытия формы; это не вызов менеджера системы взаимодействия. Учебный расчёт не регистрирует ИБ, ничего не отправляет и не пишет в базу, файлы или системные настройки.
&НаКлиенте
Функция ВыполнитьПлан85() Экспорт
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Попытка
МеткаА85 = "OWN85:plan:A";
МеткаБ85 = "OWN85:plan:B";
ИдентификаторА85 = Новый ИдентификаторПриложенияСистемыВзаимодействия(МеткаА85);
ИдентификаторБ85 = Новый ИдентификаторПриложенияСистемыВзаимодействия(МеткаБ85);
ПовторныйА85 = Новый ИдентификаторПриложенияСистемыВзаимодействия(МеткаА85);
Если ТипЗнч(ИдентификаторА85) <> Тип("ИдентификаторПриложенияСистемыВзаимодействия")
Или ТипЗнч(ИдентификаторБ85) <> Тип("ИдентификаторПриложенияСистемыВзаимодействия")
Или ТипЗнч(ПовторныйА85) <> Тип("ИдентификаторПриложенияСистемыВзаимодействия")
Или ИдентификаторА85 = ИдентификаторБ85 Или ПовторныйА85 <> ИдентификаторА85 Тогда
ВызватьИсключение "Не подтверждены типы и сравнение собственных локальных меток";
КонецЕсли;
Список85 = Новый КоллекцияИдентификаторовПриложенийСистемыВзаимодействия;
Начало85 = ПрочитатьСвойПлан85(Список85, ИдентификаторА85, ИдентификаторБ85, Ложь, Ложь);
Если Начало85.Количество <> 0 Или Начало85.Сумма <> 0 Тогда
ВызватьИсключение "Новая собственная коллекция не подтвердила пустое состояние";
КонецЕсли;
Список85.Добавить(ИдентификаторА85);
Список85.Добавить(ИдентификаторБ85);
ПолныйПлан85 = ПрочитатьСвойПлан85(Список85, ИдентификаторА85, ИдентификаторБ85, Истина, Истина);
Если ПолныйПлан85.Количество <> 2 Или ПолныйПлан85.Сумма <> 125 Тогда
ВызватьИсключение "Две прочитанные метки не дали собственный план 125";
КонецЕсли;
Список85.Удалить(ИдентификаторА85);
СокращённыйПлан85 = ПрочитатьСвойПлан85(Список85, ИдентификаторА85, ИдентификаторБ85, Ложь, Истина);
Если СокращённыйПлан85.Количество <> 1 Или СокращённыйПлан85.Сумма <> 75 Тогда
ВызватьИсключение "После удаления А фактический список не дал один Б и сумму 75";
КонецЕсли;
Список85.Очистить();
ПустойПлан85 = ПрочитатьСвойПлан85(Список85, ИдентификаторА85, ИдентификаторБ85, Ложь, Ложь);
Если ПустойПлан85.Количество <> 0 Или ПустойПлан85.Сумма <> 0 Тогда
ВызватьИсключение "Очищенный собственный список не подтвердил пустое состояние";
КонецЕсли;
Возврат "Прочитанный план: " + Строка(ПолныйПлан85.Количество) + " метки, сумма " + Строка(ПолныйПлан85.Сумма)
+ "; после удаления А: " + Строка(СокращённыйПлан85.Количество) + " метка, сумма " + Строка(СокращённыйПлан85.Сумма)
+ "; после очистки: " + Строка(ПустойПлан85.Количество) + " меток, сумма " + Строка(ПустойПлан85.Сумма);
Исключение
Возврат "СТОП. Локальные типы, состав или вычисление не подтверждены; успешного плана нет";
КонецПопытки;
#Иначе
Возврат "СТОП. Для этого примера нужен толстый управляемый клиент";
#КонецЕсли
КонецФункции
&НаКлиенте
Функция ПрочитатьСвойПлан85(Знач Список85, Знач ИдентификаторА85, Знач ИдентификаторБ85, Знач ОжидаетсяА85, Знач ОжидаетсяБ85)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Если ТипЗнч(Список85) <> Тип("КоллекцияИдентификаторовПриложенийСистемыВзаимодействия")
Или ТипЗнч(ИдентификаторА85) <> Тип("ИдентификаторПриложенияСистемыВзаимодействия")
Или ТипЗнч(ИдентификаторБ85) <> Тип("ИдентификаторПриложенияСистемыВзаимодействия")
Или ИдентификаторА85 = ИдентификаторБ85
Или ТипЗнч(ОжидаетсяА85) <> Тип("Булево") Или ТипЗнч(ОжидаетсяБ85) <> Тип("Булево") Тогда
ВызватьИсключение "Нужны собственная коллекция и две разные типизированные метки";
КонецЕсли;
ПрочитанноеКоличество85 = Список85.Количество();
Если ТипЗнч(ПрочитанноеКоличество85) <> Тип("Число") Или ПрочитанноеКоличество85 < 0 Тогда
ВызватьИсключение "Количество элементов не является допустимым фактическим числом";
КонецЕсли;
НайденА85 = Ложь;
НайденБ85 = Ложь;
Обойдено85 = 0;
Сумма85 = 0;
Для Каждого Элемент85 Из Список85 Цикл
Если ТипЗнч(Элемент85) <> Тип("ИдентификаторПриложенияСистемыВзаимодействия") Тогда
ВызватьИсключение "Обход вернул элемент другого типа";
КонецЕсли;
Если Элемент85 = ИдентификаторА85 Тогда
Если НайденА85 Тогда
ВызватьИсключение "В собственном плане неожиданно повторяется А";
КонецЕсли;
НайденА85 = Истина;
Сумма85 = Сумма85 + 50;
ИначеЕсли Элемент85 = ИдентификаторБ85 Тогда
Если НайденБ85 Тогда
ВызватьИсключение "В собственном плане неожиданно повторяется Б";
КонецЕсли;
НайденБ85 = Истина;
Сумма85 = Сумма85 + 75;
Иначе
ВызватьИсключение "В собственном списке появилась неизвестная метка";
КонецЕсли;
Обойдено85 = Обойдено85 + 1;
КонецЦикла;
Если Обойдено85 <> ПрочитанноеКоличество85
Или НайденА85 <> ОжидаетсяА85 Или НайденБ85 <> ОжидаетсяБ85 Тогда
ВызватьИсключение "Полный обход и фактическое количество не подтвердили ожидаемый состав";
КонецЕсли;
Возврат Новый Структура("Количество,Сумма", ПрочитанноеКоличество85, Сумма85);
#Иначе
ВызватьИсключение "Обход этой коллекции разрешён уроком только в толстом управляемом клиенте";
#КонецЕсли
КонецФункцииПолный модуль своей формы ПланПриложений85
Общие → Общие формы → ПланПриложений85 → пустой модуль; настоящая команда РассчитатьПлан85 связана через Действие.
&НаКлиенте, толстый управляемый клиент; genuine КомандаФормы и собственное имя формы, два режима НеИспользовать. Прямой вызов своего клиентского общего модуля без RPC расчёта.
&НаКлиенте
Процедура РассчитатьПлан85(Команда)
РезультатПлана85 = "";
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Попытка
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "РассчитатьПлан85"
Или ИмяФормы <> "ОбщаяФорма.ПланПриложений85"
Или АвтоматическоеСохранениеДанныхВНастройках <> АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать
Или СохранениеДанныхВНастройках <> СохранениеДанныхФормыВНастройках.НеИспользовать Тогда
ВызватьИсключение "Нужна своя настоящая команда и форма без сохранения данных в настройках";
КонецЕсли;
Получено85 = ПланПриложений85Клиент.ВыполнитьПлан85();
Если ТипЗнч(Получено85) <> Тип("Строка") Или Получено85 = "" Тогда
ВызватьИсключение "Клиентский модуль не вернул строковый результат";
КонецЕсли;
РезультатПлана85 = Получено85;
Исключение
РезультатПлана85 = "СТОП. Собственный маршрут формы или результат не подтверждены";
КонецПопытки;
#Иначе
РезультатПлана85 = "СТОП. Откройте свою учебную базу толстым управляемым клиентом";
#КонецЕсли
КонецПроцедурыПолный модуль своей общей команды ОткрытьПланПриложений85
Общие → Общие команды → ОткрытьПланПриложений85 → пустой модуль команды; без параметра, включена в свой учебный интерфейс.
&НаКлиенте, толстый управляемый клиент; настоящий ОбработкаКоманды с двумя штатными параметрами. Открывает только свою общую форму, штатное открытие обращается к своей серверной части.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Если ПараметрКоманды <> Неопределено
Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
ВызватьИсключение "Используйте свою настоящую общую команду без параметра";
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ПланПриложений85");
#Иначе
ВызватьИсключение "Нужен толстый управляемый клиент";
#КонецЕсли
КонецПроцедурыРазбор по шагам
Конструктор создаёт три настоящих значения: А, Б и повторный А из той же собственной строки. Проверки используют фактические типы и документированное сравнение по значению: А и Б различаются, два А равны. Это не проверка зарегистрированных приложений.
Новая собственная коллекция сначала проверяется чтением Количество и полным обходом. Начальные нули не назначаются ей как результат и не считаются гарантированными без наблюдения.
Добавить получает именно созданные native А и Б. Проверяющая функция читает количество и обходит каждый фактический элемент, проверяя тип, известное значение и отсутствие повторов в этом конкретном плане. Порядок элементов не важен.
При реальном А к сумме прибавляется 50, при реальном Б — 75. Поэтому сумма 125 получается из прочитанного состава. Своя Структура содержит прочитанное количество и вычисленную сумму, а не обещание результата метода коллекции.
Удалить получает свой А. Новый полный обход должен найти только Б и вычислить 75. Передача правильного аргумента сама по себе не подтверждает удаление.
Очистить касается только этой созданной коллекции в памяти. Новый Количество и пустой полный обход должны согласованно дать ноль элементов и сумму ноль. Серверные приложения этим не удаляются.
Форма показывает строку из фактических результатов трёх проверенных состояний. Исключение или неожиданный тип/состав дают СТОП. Обычное повторное нажатие создаёт полностью новые локальные значения и коллекцию; старый частичный опыт не продолжается.
Как проверить результат
В своей учебной базе откройте форму настоящей общей командой. До нажатия РассчитатьПлан85 поле ещё не содержит расчёта. После будущего успешного запуска ожидайте: 2 метки, сумма 125; после удаления А — 1 метка, сумма 75; после очистки — 0 меток, сумма 0.
В отладчике после создания трёх идентификаторов проверьте их настоящие типы. Сравните А с повторным А и с Б средствами встроенного языка. Не подменяйте значения Строкой или УникальнымИдентификатором.
Остановитесь после каждого из четырёх ПрочитатьСвойПлан85. Проверьте возвращённые числовые поля: сначала 0/0, затем 2/125, затем 1/75, затем 0/0. Сумма рассчитывается внутри полного обхода, а количество читается у штатной коллекции.
Только в копии собственного учебного модуля временно замените МеткаБ85 на ту же строку, что МеткаА85. Сравнение должно остановить опыт до создания и заполнения коллекции. Результат 125 появиться не должен.
Отдельный опыт в своей копии: удалите строку Добавить(ИдентификаторБ85), оставив ожидание двух меток. После добавления А новый состав и сумма 50 не проходят проверку; сообщение — СТОП. Верните строку вручную.
Отдельный опыт в своей копии: вместо Удалить(ИдентификаторА85) передайте ИдентификаторБ85. После операции останется А с суммой 50, поэтому ожидание Б и 75 должно остановить опыт. Не проверяйте такие изменения в рабочей базе.
Повторное нормальное нажатие снова создаёт собственную новую коллекцию и должно пройти те же наблюдения. Ни регистрация приложения, ни изменение списка на сервере, ни устойчивое сохранение этим не проверяются. Компиляция и выполнение здесь ещё не проводились.
Ожидаемый результат
При будущем успешном ручном запуске строка содержит фактически прочитанные количества и вычисленные суммы: 2/125 → 1/75 → 0/0. Очищается только созданная локальная коллекция. Зарегистрированные приложения и сервер не проверяются и не изменяются; запуск 1С здесь не выполнялся.
На что обратить внимание
Среди клиентских контекстов эта коллекция доступна толстому клиенту. Директива &НаКлиенте сама по себе не исключает тонкий клиент: поэтому каждое тело основного модуля дополнительно заключено в #Если ТолстыйКлиентУправляемоеПриложение. Тонкий компилятор не должен видеть неподдерживаемый конструктор.
У коллекции доступность шире, чем у типа её элемента. Этот урок не использует внешнее соединение: доступность идентификатора приложения там не заявлена. Не переносите пример в COM, сервер или мобильный клиент по доступности только одной страницы.
Корректность строки конструктором не проверяется, а отдельная грамматика и регистрация не гарантируются. Полученный local ID — только типизированная метка в собственном плане, не удостоверение действующего приложения.
Штатного Find/Найти у этой коллекции нет. У Содержит установленная справка не объявляет тип возвращаемого значения; урок его не вызывает и не предполагает Булево. Состав проверяется документированным полным обходом.
Мы не предполагаем порядок, индексы или поведение повторного Добавить. Повторный А нужен только для проверки value equality и не добавляется в коллекцию. Проверка дублей относится к нашему ожидаемому составу, не к общему обещанию платформы.
Добавить, Удалить и Очистить вызываются без присваивания результата. Их эффект подтверждают новые фактические количество и полный обход. Удаление или очистка собственного местного списка ничего не отменяют на сервере.
Имя формы, имя настоящей команды и два режима НеИспользовать помогают не перепутать учебный маршрут. Это не механизм защиты от подделки вызова, не доказательство владения ИБ и не гарантия скрытых внутренних действий платформы.
Основной общий модуль клиентский и неглобальный; серверная копия расчёта не нужна. Штатное открытие собственной формы может обратиться к своей серверной части и завершиться ошибкой. Такой отказ не считается выполненным расчётом.
Ни VM, ни согласие на системные операции, ни автоматический запуск, ни флаги попыток не нужны для этого чисто локального списка. При повторном нажатии создаются новые объекты, а не ремонтируются или повторно публикуются старые.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.