Тип: Произвольный. Содержит значение ключа текущей строки группировки.
Полное описание, параметры и ограничения
СтрокаГруппировкиДинамическогоСписка.Ключ (DynamicListGroupRow.Key)
СтрокаГруппировкиДинамическогоСписка (DynamicListGroupRow)
Ключ (Key)
Доступен, начиная с версии 8.2.
Использование:
Только чтение.
Описание:
Тип: Произвольный.
Содержит значение ключа текущей строки группировки.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Свой список складов и карта: реальные строки, оформление, группировки и два профиля формы
В собственной пустой CF literal списокA/B/C и memory карта содержат2/3/5 наборов. Native server callback проверяет реальные строки/ячеечное оформление; команда отличает group row от склада, проверяетB3 и строит собственную карту с подсветкой без записей в базу.
Где и как запускать
1С8.5.1.1343 Windows, thin managed Такси; MAIN полностью в собственной ОбщаяФорма.КартаСкладов85. Event633 server без контекста exact3 без Элемент; map factories/server layout только server, client RowData/GroupRow только из собственной таблицы. Actual runtime0.
Подготовка
Только собственная Windows VM/учебная среда. Вручную создайте новую пустую файловую ИБ C:\1c-labs\OwnWarehouseMap85_a4536051-2ab1-43da-827a-fd3e7f77bd76\IB, CF УчебнаяКартаСкладов85; платформа8.5.1.1343, управляемое приложение, тонкий клиент, интерфейс Такси, совместимость НеИспользовать. Это инструкция, здесь actual1С/CF/DB/UI/network/OS/fixtures/runtime0.
UUID a4536051-2ab1-43da-827a-fd3e7f77bd76 — только собственная метка пути/данных, не UUID ИБ. Native File-строка должна точно совпасть с guard; никакой нормализации, Srvr/Ref или ослабления проверки. Не используйте текущие УТ/КА/УНФ/БП/скопированную рабочую CF.
Единственная роль Карта85ПолныеПрава имеет Администрирование для native ПолучитьПользователей, использование двух своих commons и одной формы. Единственный пользователь ИБ Карта85Ученик с этой ролью: actual authenticated UUID сравнивается с единственным native user-array entry. Никаких лицензий/секретов/чужих пользователей код не читает.
CF содержит ровно одну общую форму КартаСкладов85 и два общих модуля КартаСтенд85/КартаДанные85. Прикладных справочников, документов, регистров, отчетов, обработок, заданий, разделителей, внешних источников и расширений нет. Одна собственная сессия. Код не выполняет DBwrites и не создаёт эти metadata автоматически.
Оба commons: Сервер=True; КлиентУправляемоеПриложение=False; КлиентОбычноеПриложение=False; ВызовСервера=False; Глобальный=False; Привилегированный=False; повторное использование НеИспользовать. В КартаСтенд85 вставьте полностью GUARD, в КартаДанные85 полностью MEMORY. Их вызывают только server form routines/native server callback.
ОбщаяФорма.КартаСкладов85 — управляемая общая форма без основного прикладного реквизита. Реквизиты: Список85 ДинамическийСписок, Карта85 ГеографическаяСхема, ВыбранныйКод85 Строка1, Широкий85 Булево(False), Остановка85 Булево(False), Статус85 Строка1000. Дополнительные реквизиты СохраняемыеДанные=False, пользователь не редактирует code/flags/map; карта хранит native сериализуемый тип.
Создайте группу Страницы85 вида Страницы; внутри страницы СписокСтраница85 и КартаСтраница85. На первой ТаблицаФормы Склады85, ПутьКДанным=Список85. Показывайте все6 собственных колонок Код85/Регион85/Количество85/Широта85/Долгота85/Метка85 с точными соответствующими путями данных. Количество85 обязательно видима. Таблица только для чтения, без стандартных создания/записи/удаления/копирования прикладных объектов.
На второй странице ПолеФормы КартаПоле85: Вид=ПолеГеографическойСхемы, ПутьКДанным=Карта85. Это настоящая metadata factory managed geo extension, не конструктор расширения. Не привязывайте ordinary поле или другое scalar значение. Статус85 показывайте отдельным только-чтение полем.
Группа Команды85 вида КоманднаяПанель находится вне страниц и содержит ровно две собственные команды Показать85 и ИзменитьПрофиль85. Действие команды → одноимённая процедура(Команда), кнопка → собственная команда. Group factory определяет CommandBar extension; страницы получают Pages extension своим видом. Никакого native callback вручную.
Вставьте целиком FORM. Native ПриСозданииНаСервере(Отказ,СтандартнаяОбработка)2 назначьте в событии формы. Таблица Склады85 → ПриПолученииДанныхНаСервере → СкладыПриПолученииДанныхНаСервере85(ИмяЭлемента,Настройки,Строки)3. Это специальное event633: &НаСервереБезКонтекста, НЕТ generic первого Элемент. ПриАктивизацииСтроки359 не назначается: из него запрещены context server RPC и изменения вызывающих сервер свойств.
Первый server OnCreate сам задаёт literal UNION ALL запрос3 строк без ИЗ/ссылок на таблицы БД, пустую ОсновнаяТаблица и native группировку по Регион85. Не создавайте ключи из порядкового номера/кода: actual key callback берется из KeyAndValue, а current row из настоящей таблицы. Пользовательские настройки автоматически не сохраняются; не подменяйте source/query.
В модуль управляемого приложения вставьте полностью APPLICATION с native ПриНачалеРаботыСистемы0. Вручную обновите свою конфигурацию и запустите свой тонкий Windows-клиент Такси. Actual создание/запуск/кнопки здесь не выполнялись. Сервер guard проверяет реальное КлиентскоеПриложение.ТекущийВариантИнтерфейса(), полученное из global readonly ClientApplication11223, а не ручной параметр профиля.
В callback коллекция Строки существует только до выхода из event633. Не сохраняйте её/строки/оформления в globals/requisites и не обращайтесь позже. Batch может содержать1..3 detail rows, не группировки; это не доказательство полной выборки или GUI-visible всех3. Оформляются только реально видимые native ячейки Количество85, scalar данные строк не изменяются.
Исходник содержит полностью copyable literal query и native Map factory: свои A/North/2/55/37, B/North/3/55.1/37.2, C/South/5/55.2/37.4. Реальных складов/географии/продаж нет. NewSchema→Layers.Add(pointType)→Objects.Add→GeographicCoordinates, series.Count/GetValue читают native2/3/5, итог10. Карта не скачивает слой/файл и не печатается.
Выберите видимую leaf строкуB, затем настоящую команду Показать85. Native client RowData3468 возвращает actual DataFormStruct либо отсутствие. Client копирует только6 scalar полей; server независимо сравнивает все типы и own значения до нового candidateMap. ПодсветкаB — наша color policy, НЕ native selectedGeoObject; native quantityB3 и общий итог10 проверяются до и после form assignment.
При выборе группировки команда показывает bounded actual native ancestry: GroupName/opaque Key/Parent. Arbitrary Key не считается строкой склада/фильтром, имя не угадывается из поля группировки, Parent не объявляется всегда Undefined. Группировка не изменяет карту; выберите именно leaf. Отсутствие строки/неизвестный код/неверная метка/изменённые числа вызывают честный отказ.
Две реальные server layout policies: поле шириной36/60 символов, высотой12/20 строк; максимумы48/80 символов с AutoMax=False, stretch False/True, output Запретить, своя рамка, Left/Right command alignment, Top/Left tabs. Native MaxHeight10729 тоже задаётся в символах — это не те же единицы, что Height8683. Max0 означал бы неограниченность, здесь явно положительные max. Readback props не доказывает renderer/pixels. Такси нужен BorderColor8712: в интерфейсе8.5 этот цвет не применяется; version8.5-only AppearanceMode14085 и mobile-only свойства намеренно исключены.
Проверьте самостоятельно настоящий B3/итог10, source/profile readback и UI на обеих страницах. Проверки здесь статические, не компилятор1С и не render proof. При ошибке callback обработка прекращается исключением; form commands дополнительно sticky-stop client+server. Изменение UI может быть частичным, не atomic/rollback. Код не снимает stop, не выполняет retry/cleanup/backups. Отчёт об успешном runtime до ручного протокола запрещён.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КартаСтенд85.ПроверитьСвойСтенд85();
ПроверитьСвоиЭлементы85();
Список85.ПроизвольныйЗапрос = Истина;
Список85.ОсновнаяТаблица = "";
Список85.ДинамическоеСчитываниеДанных = Ложь;
Список85.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
Список85.ТекстЗапроса = КартаДанные85.ТекстСвоиСклады85();
Если Список85.Группировка.Элементы.Количество() <> 0 Тогда
Отказ = Истина;
ВызватьИсключение "Неожиданная исходная группировка своего нового списка.";
КонецЕсли;
Группа = Список85.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
Группа.Поле = Новый ПолеКомпоновкиДанных("Регион85");
Группа.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
Группа.Использование = Истина;
Если Список85.ОсновнаяТаблица <> "" Или Не Список85.ПроизвольныйЗапрос
Или Список85.ДинамическоеСчитываниеДанных Или Список85.АвтоматическоеСохранениеПользовательскихНастроек
Или Список85.ТекстЗапроса <> КартаДанные85.ТекстСвоиСклады85()
Или Список85.Группировка.Элементы.Количество() <> 1
Или Строка(Группа.Поле) <> "Регион85" Или Не Группа.Использование Тогда
Отказ = Истина;
ВызватьИсключение "Actual list settings не совпали с собственной literal подготовкой.";
КонецЕсли;
ВыбранныйКод85 = "";
Карта85 = КартаДанные85.СоздатьКарту85(ВыбранныйКод85);
КартаДанные85.ПроверитьКарту85(Карта85, ВыбранныйКод85);
ПрименитьПрофиль85(Ложь);
Статус85 = "Три своих склада:2+3+5=10. Выберите leaf-строкуB и нажмите Показать85.";
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвоиЭлементы85()
КартаСтенд85.ПроверитьСвойСтенд85();
ПолеКарты = Элементы.Найти("КартаПоле85");
Панель = Элементы.Найти("Команды85");
Страницы = Элементы.Найти("Страницы85");
Таблица = Элементы.Найти("Склады85");
Если ТипЗнч(ПолеКарты) <> Тип("ПолеФормы") Или ТипЗнч(Панель) <> Тип("ГруппаФормы")
Или ТипЗнч(Страницы) <> Тип("ГруппаФормы") Или ТипЗнч(Таблица) <> Тип("ТаблицаФормы") Тогда
ВызватьИсключение "Не совпали actual own form-control factories.";
КонецЕсли;
Если ПолеКарты.Имя <> "КартаПоле85" Или ПолеКарты.Вид <> ВидПоляФормы.ПолеГеографическойСхемы
Или ПолеКарты.ПутьКДанным <> "Карта85" Или Панель.Имя <> "Команды85"
Или Панель.Вид <> ВидГруппыФормы.КоманднаяПанель Или Страницы.Имя <> "Страницы85"
Или Страницы.Вид <> ВидГруппыФормы.Страницы Или Таблица.Имя <> "Склады85"
Или Таблица.ПутьКДанным <> "Список85" Тогда
ВызватьИсключение "Изменён own control type/name/view/data path; чужие элементы не меняем.";
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СкладыПриПолученииДанныхНаСервере85(ИмяЭлемента, Настройки, Строки)
КартаСтенд85.ПроверитьСвойСтенд85();
Если ИмяЭлемента <> "Склады85" Или ТипЗнч(Настройки) <> Тип("НастройкиКомпоновкиДанных")
Или ТипЗнч(Строки) <> Тип("СтрокиДинамическогоСписка") Тогда
ВызватьИсключение "Не совпали actual native source event633 и типы его3 аргументов.";
КонецЕсли;
Если Строки.Количество() < 1 Или Строки.Количество() > 3 Тогда
ВызватьИсключение "Недопустимое количество полученных собственных detail rows.";
КонецЕсли;
Увиденные = Новый Соответствие;
Для Каждого Пара Из Строки Цикл
СтрокаСписка = Строки.Получить(Пара.Ключ);
Если ТипЗнч(СтрокаСписка) <> Тип("СтрокаДинамическогоСписка") Или СтрокаСписка <> Пара.Значение Тогда
ВызватьИсключение "Actual native key→row source не совпал.";
КонецЕсли;
Данные = СтрокаСписка.Данные;
Проверенные = КартаДанные85.ПроверитьСтроку85(Данные);
Если Увиденные.Получить(Проверенные.Код85) <> Неопределено Тогда
ВызватьИсключение "Повтор собственной detail строки в actual callback batch.";
КонецЕсли;
Увиденные.Вставить(Проверенные.Код85, Истина);
Оформления = СтрокаСписка.Оформление;
Если ТипЗнч(Оформления) <> Тип("ОформленияЯчеекДинамическогоСписка") Или Оформления.Количество() < 1 Тогда
ВызватьИсключение "Нет actual visible cell appearances.";
КонецЕсли;
ЕстьКоличество = Ложь;
Посчитано = 0;
Для Каждого ПараОформления Из Оформления Цикл
Посчитано = Посчитано + 1;
Если ПараОформления.Ключ = "Количество85" Тогда
ЕстьКоличество = Истина;
КонецЕсли;
КонецЦикла;
Если Посчитано <> Оформления.Количество() Или Не ЕстьКоличество Тогда
ВызватьИсключение "Количество85 должно быть настоящей видимой колонкой собственной таблицы.";
КонецЕсли;
Оформление = Оформления.Получить("Количество85");
Если ТипЗнч(Оформление) <> Тип("ОформлениеЯчейкиДинамическогоСписка") Тогда
ВызватьИсключение "Не получено actual native оформление количества.";
КонецЕсли;
ИмяПараметра = Новый ПараметрКомпоновкиДанных("ЦветФона");
Доступный = Оформление.ДоступныеПараметры.НайтиПараметр(ИмяПараметра);
Если Доступный = Неопределено Или Не Доступный.ТипЗначения.СодержитТип(Тип("Цвет")) Тогда
ВызватьИсключение "Actual доступный параметр ЦветФона не поддерживает Цвет.";
КонецЕсли;
ЦветКоличество = ?(Проверенные.Количество85 >= 3, Новый Цвет(223, 241, 227), Новый Цвет(240, 245, 250));
Оформление.УстановитьЗначениеПараметра(ИмяПараметра, ЦветКоличество);
РеальныйПараметр = Оформления.Получить("Количество85").НайтиЗначениеПараметра(ИмяПараметра);
Если РеальныйПараметр = Неопределено Или Не РеальныйПараметр.Использование
Или РеальныйПараметр.Значение <> ЦветКоличество Тогда
ВызватьИсключение "Fresh actual cell appearance readback не совпал.";
КонецЕсли;
КартаДанные85.ПроверитьСтроку85(Строки.Получить(Пара.Ключ).Данные);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Показать85(Команда)
Если Остановка85 Или ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда <> Команды.Показать85 Тогда
ВызватьИсключение "Нужна собственная команда незаблокированной формы.";
КонецЕсли;
Попытка
Текущая = Элементы.Склады85.ТекущаяСтрока;
Если ТипЗнч(Текущая) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Путь = "";
Глубина = 0;
Группировка = Текущая;
Пока Группировка <> Неопределено Цикл
Если ТипЗнч(Группировка) <> Тип("СтрокаГруппировкиДинамическогоСписка") Или Глубина >= 4 Тогда
ВызватьИсключение "Неожиданная actual group ancestry; arbitrary key не интерпретируем как склад.";
КонецЕсли;
ИмяГруппы = Группировка.ИмяГруппировки;
КлючГруппы = Группировка.Ключ;
Если ТипЗнч(ИмяГруппы) <> Тип("Строка") Или ПустаяСтрока(ИмяГруппы) Или СтрДлина(ИмяГруппы) > 100 Тогда
ВызватьИсключение "Недопустимое actual native имя группировки.";
КонецЕсли;
Путь = Путь + ?(Глубина = 0, "", " ← ") + ИмяГруппы + ":" + Лев(Строка(КлючГруппы), 80);
Глубина = Глубина + 1;
Группировка = Группировка.РодительскаяГруппировка;
КонецЦикла;
Статус85 = "Выбрана группировка, не склад. Карта сохраняется. Actual path: " + Путь;
Возврат;
КонецЕсли;
Если ТипЗнч(Текущая) <> Тип("Число") Тогда
ВызватьИсключение "Выберите actual leaf строку своего списка, не отсутствующую или чужую ссылку.";
КонецЕсли;
Данные = Элементы.Склады85.ДанныеСтроки(Текущая);
Если ТипЗнч(Данные) <> Тип("ДанныеФормыСтруктура") Тогда
ВызватьИсключение "Native RowData вернул отсутствие строки, не fabricate данные.";
КонецЕсли;
Передача = Новый Структура;
Для Каждого Имя Из СтрРазделить("Код85,Регион85,Количество85,Широта85,Долгота85,Метка85", ",") Цикл
Значение = Неопределено;
Если Не Данные.Свойство(Имя, Значение) Тогда
ВызватьИсключение "Не получено собственное actual поле " + Имя;
КонецЕсли;
Передача.Вставить(Имя, Значение);
КонецЦикла;
ПоказатьНаСервере85(Новый ФиксированнаяСтруктура(Передача));
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: исход последней операции проверяет человек; повтор не разрешён.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ПоказатьНаСервере85(Передача)
Если Остановка85 Тогда
ВызватьИсключение "Форма остановлена.";
КонецЕсли;
Попытка
КартаСтенд85.ПроверитьСвойСтенд85();
ПроверитьСвоиЭлементы85();
КартаДанные85.ПроверитьКарту85(Карта85, ВыбранныйКод85);
Проверенные = КартаДанные85.ПроверитьСтроку85(Передача);
Кандидат = КартаДанные85.СоздатьКарту85(Проверенные.Код85);
КартаДанные85.ПроверитьКарту85(Кандидат, Проверенные.Код85);
Карта85 = Кандидат;
ВыбранныйКод85 = Проверенные.Код85;
КартаДанные85.ПроверитьКарту85(Карта85, ВыбранныйКод85);
Статус85 = "Склад " + Проверенные.Код85 + ": " + Строка(Проверенные.Количество85) + "; полный native итог10. Подсветка — наша политика цвета, не native selection.";
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьПрофиль85(Команда)
Если Остановка85 Или ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда <> Команды.ИзменитьПрофиль85 Тогда
ВызватьИсключение "Нужна собственная команда незаблокированной формы.";
КонецЕсли;
Попытка
ПрименитьПрофиль85(Не Широкий85);
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: профиль мог измениться частично; автоматического восстановления нет.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ПрименитьПрофиль85(Широкий)
Если Остановка85 Или ТипЗнч(Широкий) <> Тип("Булево") Тогда
ВызватьИсключение "Форма остановлена либо передан неизвестный профиль.";
КонецЕсли;
Попытка
КартаСтенд85.ПроверитьСвойСтенд85();
ПроверитьСвоиЭлементы85();
КартаДанные85.ПроверитьКарту85(Карта85, ВыбранныйКод85);
ПолеКарты = Элементы.КартаПоле85;
ПолеКарты.АвтоМаксимальнаяВысота = Ложь;
ПолеКарты.АвтоМаксимальнаяШирина = Ложь;
ПолеКарты.Вывод = ИспользованиеВывода.Запретить;
ПолеКарты.Высота = ?(Широкий, 20, 12);
ПолеКарты.Ширина = ?(Широкий, 60, 36);
ПолеКарты.МаксимальнаяВысота = ?(Широкий, 80, 48);
ПолеКарты.МаксимальнаяШирина = ?(Широкий, 80, 48);
ПолеКарты.РастягиватьПоВертикали = Широкий;
ПолеКарты.РастягиватьПоГоризонтали = Широкий;
ПолеКарты.ЦветРамки = ?(Широкий, Новый Цвет(90, 110, 130), Новый Цвет(150, 165, 180));
Панель = Элементы.Команды85;
Панель.ГоризонтальноеПоложение = ?(Широкий, ГоризонтальноеПоложениеЭлемента.Право, ГоризонтальноеПоложениеЭлемента.Лево);
Страницы = Элементы.Страницы85;
Страницы.ОтображениеСтраниц = ?(Широкий, ОтображениеСтраницФормы.ЗакладкиСлеваГоризонтально, ОтображениеСтраницФормы.ЗакладкиСверху);
ПолеКарты = Элементы.КартаПоле85;
Панель = Элементы.Команды85;
Страницы = Элементы.Страницы85;
ПроверитьСвоиЭлементы85();
Если ПолеКарты.АвтоМаксимальнаяВысота Или ПолеКарты.АвтоМаксимальнаяШирина
Или ПолеКарты.Вывод <> ИспользованиеВывода.Запретить
Или ПолеКарты.Высота <> ?(Широкий, 20, 12) Или ПолеКарты.Ширина <> ?(Широкий, 60, 36)
Или ПолеКарты.МаксимальнаяВысота <> ?(Широкий, 80, 48) Или ПолеКарты.МаксимальнаяШирина <> ?(Широкий, 80, 48)
Или ПолеКарты.РастягиватьПоВертикали <> Широкий Или ПолеКарты.РастягиватьПоГоризонтали <> Широкий
Или ПолеКарты.ЦветРамки <> ?(Широкий, Новый Цвет(90, 110, 130), Новый Цвет(150, 165, 180))
Или Панель.ГоризонтальноеПоложение <> ?(Широкий, ГоризонтальноеПоложениеЭлемента.Право, ГоризонтальноеПоложениеЭлемента.Лево)
Или Страницы.ОтображениеСтраниц <> ?(Широкий, ОтображениеСтраницФормы.ЗакладкиСлеваГоризонтально, ОтображениеСтраницФормы.ЗакладкиСверху) Тогда
ВызватьИсключение "Fresh actual controls readback профиля не совпал.";
КонецЕсли;
КартаДанные85.ПроверитьКарту85(Карта85, ВыбранныйКод85);
Широкий85 = Широкий;
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыGUARD — полный серверный scope своей CF/пользователя/Такси
Своя CF → Общие → Общие модули → КартаСтенд85 → Модуль.
Неглобальный непривилегированный server-only ОбщийМодуль.КартаСтенд85, ВызовСервера=False; global native ClientApplication доступен Server, exact authenticated own user.
Процедура ПроверитьСвойСтенд85() Экспорт
Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnWarehouseMap85_a4536051-2ab1-43da-827a-fd3e7f77bd76\IB"";" Тогда
ВызватьИсключение "Нужна новая собственная файловая ИБ с точным именем и адресом.";
КонецЕсли;
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Или КлиентскоеПриложение.ТекущийВариантИнтерфейса() <> ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
ВызватьИсключение "Разрешена только платформа8.5.1.1343, отсутствие совместимости и Такси.";
КонецЕсли;
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0
Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0
Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0
Или Метаданные.Отчеты.Количество() <> 0 Или Метаданные.Обработки.Количество() <> 0
Или Метаданные.ОбщиеФормы.Количество() <> 1 Или Метаданные.ОбщиеФормы.Найти("КартаСкладов85") = Неопределено
Или Метаданные.ОбщиеМодули.Количество() <> 2 Или Метаданные.ОбщиеМодули.Найти("КартаСтенд85") = Неопределено
Или Метаданные.ОбщиеМодули.Найти("КартаДанные85") = Неопределено Тогда
ВызватьИсключение "Нужна своя пустая CF с одной указанной формой и двумя своими модулями.";
КонецЕсли;
Если РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.БазаДанных).Количество() <> 0 Тогда
ВызватьИсключение "В собственном стенде расширений быть не должно.";
КонецЕсли;
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Если Пользователь = Неопределено Или Пользователи.Количество() <> 1 Тогда
ВызватьИсключение "Нужен один реальный собственный пользователь ИБ.";
КонецЕсли;
Если Пользователь.Имя <> "Карта85Ученик" Или Пользователи[0].Имя <> Пользователь.Имя
Или Пользователи[0].УникальныйИдентификатор <> Пользователь.УникальныйИдентификатор Тогда
ВызватьИсключение "Не совпал actual UUID единственного аутентифицированного пользователя.";
КонецЕсли;
КонецПроцедурыMEMORY — полный literal source, own scalar validator и native map factory/readback
Своя CF → Общие → Общие модули → КартаДанные85 → Модуль.
Неглобальный непривилегированный server-only ОбщийМодуль.КартаДанные85, ВызовСервера=False. Только память, реальные native GeoSchema/Layer/Points/Series; ни DBwrites, ни GeoSchema.Update thick-only.
Функция СвоиСклады85() Экспорт
КартаСтенд85.ПроверитьСвойСтенд85();
Склады = Новый ТаблицаЗначений;
Склады.Колонки.Добавить("Код85", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1)));
Склады.Колонки.Добавить("Регион85", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(5)));
Склады.Колонки.Добавить("Количество85", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 0, ДопустимыйЗнак.Неотрицательный)));
Склады.Колонки.Добавить("Широта85", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(6, 1)));
Склады.Колонки.Добавить("Долгота85", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(6, 1)));
Склады.Колонки.Добавить("Метка85", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36)));
Для Индекс = 0 По 2 Цикл
Запись = Склады.Добавить();
Запись.Код85 = ?(Индекс = 0, "A", ?(Индекс = 1, "B", "C"));
Запись.Регион85 = ?(Индекс < 2, "North", "South");
Запись.Количество85 = ?(Индекс = 0, 2, ?(Индекс = 1, 3, 5));
Запись.Широта85 = 55 + Индекс / 10;
Запись.Долгота85 = 37 + Индекс / 5;
Запись.Метка85 = "a4536051-2ab1-43da-827a-fd3e7f77bd76";
КонецЦикла;
Возврат Склады;
КонецФункции
Функция ТекстСвоиСклады85() Экспорт
КартаСтенд85.ПроверитьСвойСтенд85();
Возврат "ВЫБРАТЬ ВЫРАЗИТЬ(""A"" КАК СТРОКА(1)) КАК Код85,
| ВЫРАЗИТЬ(""North"" КАК СТРОКА(5)) КАК Регион85,
| ВЫРАЗИТЬ(2 КАК ЧИСЛО(3,0)) КАК Количество85,
| ВЫРАЗИТЬ(55 КАК ЧИСЛО(6,1)) КАК Широта85,
| ВЫРАЗИТЬ(37 КАК ЧИСЛО(6,1)) КАК Долгота85,
| ВЫРАЗИТЬ(""a4536051-2ab1-43da-827a-fd3e7f77bd76"" КАК СТРОКА(36)) КАК Метка85
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ВЫРАЗИТЬ(""B"" КАК СТРОКА(1)), ВЫРАЗИТЬ(""North"" КАК СТРОКА(5)),
| ВЫРАЗИТЬ(3 КАК ЧИСЛО(3,0)), ВЫРАЗИТЬ(55.1 КАК ЧИСЛО(6,1)), ВЫРАЗИТЬ(37.2 КАК ЧИСЛО(6,1)),
| ВЫРАЗИТЬ(""a4536051-2ab1-43da-827a-fd3e7f77bd76"" КАК СТРОКА(36))
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ВЫРАЗИТЬ(""C"" КАК СТРОКА(1)), ВЫРАЗИТЬ(""South"" КАК СТРОКА(5)),
| ВЫРАЗИТЬ(5 КАК ЧИСЛО(3,0)), ВЫРАЗИТЬ(55.2 КАК ЧИСЛО(6,1)), ВЫРАЗИТЬ(37.4 КАК ЧИСЛО(6,1)),
| ВЫРАЗИТЬ(""a4536051-2ab1-43da-827a-fd3e7f77bd76"" КАК СТРОКА(36))";
КонецФункции
Функция ПроверитьСтроку85(Данные) Экспорт
КартаСтенд85.ПроверитьСвойСтенд85();
Если ТипЗнч(Данные) <> Тип("ДанныеФормыСтруктура") И ТипЗнч(Данные) <> Тип("ФиксированнаяСтруктура") Тогда
ВызватьИсключение "Ожидаются реальные данные своей leaf-строки либо её собственный scalar snapshot.";
КонецЕсли;
Склады = СвоиСклады85();
Код = Неопределено;
Если Не Данные.Свойство("Код85", Код) Или ТипЗнч(Код) <> Тип("Строка") Тогда
ВызватьИсключение "В native данных отсутствует строковый свой код.";
КонецЕсли;
СвойСклад = Склады.Найти(Код, "Код85");
Если СвойСклад = Неопределено Тогда
ВызватьИсключение "Чужой код склада не принимается.";
КонецЕсли;
Для Каждого Колонка Из Склады.Колонки Цикл
Значение = Неопределено;
Если Не Данные.Свойство(Колонка.Имя, Значение)
Или ТипЗнч(Значение) <> ТипЗнч(СвойСклад[Колонка.Имя])
Или Значение <> СвойСклад[Колонка.Имя] Тогда
ВызватьИсключение "Не совпало собственное typed значение " + Колонка.Имя;
КонецЕсли;
КонецЦикла;
Возврат Новый ФиксированнаяСтруктура("Код85,Регион85,Количество85,Широта85,Долгота85,Метка85",
СвойСклад.Код85, СвойСклад.Регион85, СвойСклад.Количество85, СвойСклад.Широта85, СвойСклад.Долгота85, СвойСклад.Метка85);
КонецФункции
Функция СоздатьКарту85(ВыбранныйКод) Экспорт
КартаСтенд85.ПроверитьСвойСтенд85();
Склады = СвоиСклады85();
Если ТипЗнч(ВыбранныйКод) <> Тип("Строка")
Или (ВыбранныйКод <> "" И Склады.Найти(ВыбранныйКод, "Код85") = Неопределено) Тогда
ВызватьИсключение "Нельзя подсветить неизвестный склад.";
КонецЕсли;
Схема = Новый ГеографическаяСхема;
Схема.Проекция = ТипПроекцииГеографическойСхемы.ЦилиндрическаяРавноудаленнаяПроекция;
Слой = Схема.Слои.Добавить("СвоиСклады85", Тип("ТочечныйОбъектГеографическойСхемы"));
Слой.Текст = "Три вымышленных склада";
Слой.Видимость = Истина;
Слой.РазрешитьВыбор = Ложь;
Серия = Слой.Серии.Добавить("Количество85");
Серия.Текст = "Количество учебных наборов";
Серия.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст;
Серия.Формат = "ЧДЦ=0;ЧГ=0";
Для Каждого Склад Из Склады Цикл
Точка = Слой.Объекты.Добавить();
Точка.Значение = Склад.Код85;
Точка.Координаты = Новый ГеографическиеКоординаты(Склад.Широта85, Склад.Долгота85, 0);
Точка.Видимость = Истина;
Точка.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
Точка.Маркер = ТипМаркераГеографическойСхемы.БольшойКруг;
Точка.Цвет = ?(Склад.Код85 = ВыбранныйКод, Новый Цвет(220, 105, 20), Новый Цвет(35, 110, 180));
Точка.ОтображатьДанные = Истина;
Слой.УстановитьЗначение(Точка, Серия, Склад.Количество85);
КонецЦикла;
ПроверитьКарту85(Схема, ВыбранныйКод);
Возврат Схема;
КонецФункции
Процедура ПроверитьКарту85(Схема, ВыбранныйКод) Экспорт
КартаСтенд85.ПроверитьСвойСтенд85();
Склады = СвоиСклады85();
Если ТипЗнч(Схема) <> Тип("ГеографическаяСхема")
Или Схема.Проекция <> ТипПроекцииГеографическойСхемы.ЦилиндрическаяРавноудаленнаяПроекция
Или Схема.Слои.Количество() <> 1 Тогда
ВызватьИсключение "Не совпала своя actual географическая схема.";
КонецЕсли;
Слой = Схема.Слои.Получить(0);
Если Слой.Имя <> "СвоиСклады85" Или Слой.ТипОбъектов <> Тип("ТочечныйОбъектГеографическойСхемы")
Или Слой.Объекты.Количество() <> 3 Или Слой.Серии.Количество() <> 1
Или Не Слой.Видимость Или Слой.РазрешитьВыбор Тогда
ВызватьИсключение "Изменён состав или режим своего слоя.";
КонецЕсли;
Серия = Слой.Серии.Получить(0);
Если Серия.Имя <> "Количество85" Или Серия.ТипОтображения <> ТипОтображенияСерииСлояГеографическойСхемы.Текст
Или Серия.Формат <> "ЧДЦ=0;ЧГ=0" Тогда
ВызватьИсключение "Изменена собственная actual серия.";
КонецЕсли;
Всего = 0;
Для Индекс = 0 По 2 Цикл
Точка = Слой.Объекты.Получить(Индекс);
Склад = Склады.Получить(Индекс);
Если ТипЗнч(Точка) <> Тип("ТочечныйОбъектГеографическойСхемы")
Или Точка.Слой <> Слой Или Точка.Значение <> Склад.Код85
Или Точка.Координаты.Широта <> Склад.Широта85 Или Точка.Координаты.Долгота <> Склад.Долгота85
Или Точка.Координаты.Высота <> 0 Или Не Точка.Видимость Или Не Точка.ОтображатьДанные
Или Точка.ТипОтрисовки <> ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер
Или Точка.Маркер <> ТипМаркераГеографическойСхемы.БольшойКруг
Или Точка.Цвет <> ?(Склад.Код85 = ВыбранныйКод, Новый Цвет(220, 105, 20), Новый Цвет(35, 110, 180)) Тогда
ВызватьИсключение "Изменены actual данные/координаты/подсветка своей точки.";
КонецЕсли;
ЧислоСерии = Слой.ПолучитьЗначение(Точка, Серия);
Если ТипЗнч(ЧислоСерии) <> Тип("ЗначениеСерииСлояГеографическойСхемы")
Или ЧислоСерии.Объект <> Точка Или ЧислоСерии.Серия <> Серия
Или ТипЗнч(ЧислоСерии.Значение) <> Тип("Число") Или ЧислоСерии.Значение <> Склад.Количество85 Тогда
ВызватьИсключение "Native value readback своей серии не совпал.";
КонецЕсли;
Всего = Всего + ЧислоСерии.Значение;
КонецЦикла;
Если Всего <> 10 Тогда
ВызватьИсключение "Сумма реально прочитанных native значений не равна10.";
КонецЕсли;
КонецПроцедурыAPPLICATION — полный штатный старт собственной managed формы
Своя CF → Открыть модуль управляемого приложения → весь APPLICATION.
Модуль управляемого приложения, thin client, native ПриНачалеРаботыСистемы0; не ручной callback.
Процедура ПриНачалеРаботыСистемы()
ОткрытьФорму("ОбщаяФорма.КартаСкладов85");
КонецПроцедурыРазбор по шагам
Вручную подготовьте собственную CF/форму/два модуля по полным metadata выше. После будущего штатного OnCreate actual список группируется по региону и собственная native карта получает3 точки/серия2,3,5→10.
При реальном получении строк платформа сама вызовет event633. Actual keys→native Rows.Get→typed scalar whitelist; native visible appearances.Count/Get→available ЦветФона→SetParameter и fresh native readback. Поддерживается частичный batch, source numbers неизменны.
Выберите строку группировки и нажмите Показать85: native GroupName/opaqueKey/Parent дают диагностический путь, но не выдуманный код склада. Карта не меняется. Выберите leafB и нажмите ту же реальную команду.
Client RowData actual own row→6scalar snapshot→server own typed comparison; новый native кандидат полностью проверяется, затем назначается форме и читается повторно. B подсвечен, его серия3, общий прочитанный native итог10.
Нажмите ИзменитьПрофиль85: server применяет explicit own geometry/output/frame/alignment/tabs, повторно берет native controls для readback. Map3points/coordinates/series/highlight повторно проверяется. Повторная команда возвращает компактный профиль без изменения данных.
При неправильном source/типе/коде/значении/форме/профиле прекращайте ручной тест. Client+server command catches сохраняют stop и повторно выбрасывают ошибку; нет автоматического rollback UI или DB writes. Сохраните свой ручной протокол отдельно.
Как проверить результат
Статически: PRIMARY24 только реально использующиеся scope; whole4BSL/core/all5native и exact installed raw, callbacks/context/readonly/arity/factories/whitespace/case/masked aliases. Не BSL compiler/runtime proof.
Вручную: actual callback keys не guessed indices; 1..3 detailrows, no saved native Rows references; Count/Get только visibleQty; fresh native parameter readback и unchanged typed scalar source.
Вручную: native GroupRow не считается leaf; unknown opaque group key не фильтрует карту, реальный Parent chain ограничен4. Native RowData отсутствие не заменяется literal структурой.
Вручную: native Map3points/полные координаты/flags/цвет/серия2,3,5→10, после B native value3 и неизменная сумма10; before/candidate/fresh-form readback. Not native geo selection/pixel proof.
Вручную: оба профиля fresh native property values верны; Height строки, Width/MaxHeight/MaxWidth символы, output policy не права доступа/шифрование; actual source/map unchanged после layout.
Ожидаемый результат
Ожидаемый будущий ручной результат: три вымышленных склада2+3+5=10, реальные native cell appearance, group-vs-leaf различены, B подсвечен при native значении3/итоге10; два профиля формы без DBwrites. RuntimeVerified=False; actual1C/CF/GUI/DB/network/files/OS0, backups0.
На что обратить внимание
У native event633 нет generic первого Элемент. Rows/Data/Appearances допустимы только на сервере в этом callback и живут только во время него; частичный batch не выдаётся за все строки UI.
RO containers Data/Appearance и коллекции не присваиваются; меняется native own child оформление, не standard source реквизиты и не базовые scalar значения.
GroupRow.Key arbitrary, не гарантирован String/Structure/Array. Данный урок только показывает bounded actual diagnostic path, не строит по opaque ключу SQL/отбор/новый reference. Native parent Undefined не угадывается.
Native RowData client-only и может вернуть Undefined. Не вызывайте из server common/OnActivateRow context RPC; команда читает actual текущую строку и server отдельно сверяет scalar whitelist.
NewGeoSchema и layer.Add available server, но GeoSchema.Update4106 thick-only: сервер/тонкий клиент его не использует. Нет Show/PNG/print/OS artifacts. Перенос старого thick кода запрещён.
Рамка managed geo BorderColor8712 не применяется в интерфейсеVersion8.5: только own actualTaxi guard. CommandBar.AppearanceMode14085 и mobile current-row/page-state/display-importance не добавлены ради coverage.
Geometry props описывают политику размещения, не координаты карты и не измеренный renderer. MaxHeight chars vs Height rows прямо различены. Fresh parent controls/readback не утверждает одинаковый физический размер на любом DPI/шрифте.
Native quantity series values не служат доказательством реального склада/продажи; это созданные в памяти own literals. Выделение цветом — политика приложения, не географическая native selection.
UI assignment/layout может быть частичным. Catch+stop+rethrow не обещает atomicity, rollback или синхронизацию каждого свойства клиента при ошибке. Не повторяйте автоматически, не ослабляйте guard.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.