ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных.ПолучитьОбъектПоИдентификатору

Методы · GetObjectByID

Получает значения параметров вывода группировки диаграммы компоновки данных, соответствующие переданному идентификатору.

Синтаксис

ПолучитьОбъектПоИдентификатору(<Идентификатор>)
Полное описание, параметры и ограничения

ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных.ПолучитьОбъектПоИдентификатору (DataCompositionChartGroupOutputParameterValues.GetObjectByID)

ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных (DataCompositionChartGroupOutputParameterValues)

ПолучитьОбъектПоИдентификатору (GetObjectByID)

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

Синтаксис:
ПолучитьОбъектПоИдентификатору(<Идентификатор>)
Параметры:

<Идентификатор> (необязательный)
Тип: ИдентификаторКомпоновкиДанных.
Идентификатор объекта.
Возвращаемое значение:
Тип: ЗначениеПараметраКомпоновкиДанных, Неопределено.
Неопределено - объект, для которого был передан идентификатор, не найден или если он не является частью данного объекта.
Описание:

Получает значения параметров вывода группировки диаграммы компоновки данных, соответствующие переданному идентификатору.

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

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

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

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

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

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

Заголовок и лимит диаграммы: owner-local identity и проверенное восстановление

Настроить свой memory-профиль диаграммы2→1→2 и вернуть его только после реального readback; native ID не заменяет принадлежность owner.

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

Полный собственный серверный общий модуль .1343; GLOBAL только для СчетГруппа85. Собственная управляемая форма вызывает конвейер из серверной части. Все native параметры/расшифровка остаются на сервере.

Подготовка

  1. Задача: собственная корзина из трёх товаров. BOOK: 2×250=500; PAPER: 5×50=250; TEA: 3×100=300. Количество10, сумма1050. СКД объединяет товары в категории Офис750/Чай300. Надбавка20% должна дать настоящие900/360 и общий итог1260, затем новый запуск без надбавки возвращает1050.

  2. Вручную создайте НОВУЮ пустую файловую ИБ только по пути C:\1C85_OwnSKDInvoice\27ab6906-e418-43d5-9e74-5aedb8f7449f\IB. Если такой каталог/регистрация уже существуют, остановитесь. UUID в пути — метка собственного стенда, не UUID базы. Здесь создание каталога/CF/пользователя и запуск1С не выполнялись.

  3. Конфигуратор: имя конфигурации СвойСчетСКД85; РежимСовместимости=НеИспользовать; ОсновнойРежимЗапуска=УправляемоеПриложение. Запуск вручную только толстым управляемым клиентом1cv8.exe платформы8.5.1.1343. Тонкий/web-клиент этот урок не поддерживает: APP читает server/thick-only свойства метаданных. Создайте только три общих модуля, одну управляемую общую форму и одну свою роль. Не переносите прикладные объекты, расширения или данные из рабочих конфигураций.

  4. Создайте роль Счет85Администратор с правами Администрирование, АктивныеПользователи и запуска/просмотра собственной формы. Создайте ровно одного настоящего пользователя Счет85Ученик с этой ролью. После обновления своей ИБ закройте Конфигуратор и все другие соединения. Guard сравнит actualUUID этого пользователя и настоящее соединение; placeholder UUID не требуется.

  5. Общие модули СчетГруппа85/СчетДиаграмма85/СчетКонвейер85: СерверДа; оба КлиентНет; ВнешнееСоединениеНет; ВызовСервераНет; ПривилегированныйНет. Только СчетГруппа85 имеет ГлобальныйДа; два других ГлобальныйНет. Только для двух неглобальных задайте ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать: у GLOBAL это свойство настройки недоступно и код его не читает. Вставьте каждый полный модуль из карточки. GLOBAL-функция вызывается самим выражением ресурса СКД; это не RPC с nativeGroupData.

  6. Общая управляемая форма СчетСКД85 без основного реквизита: До85/После85/Вернули85 — ТабличныйДокумент; Статус85 — неограниченная Строка; Остановка85/Завершено85 — Булево, начальноЛожь. Три поля табличного документа связаны с одноимёнными реквизитами и только для просмотра; Статус85 — многострочное readonly-поле. Команда Сформировать85 с Действие=Сформировать85; одна кнопка с Команда=Сформировать85. Вставьте полный FORM_CODE.

  7. В модуль управляемого приложения своей конфигурации вставьте полный APPLICATION_CODE. Настоящее событие ПриНачалеРаботыСистемы()0 открывает только собственную форму. Его не вызывают вручную. После будущего ручного обновления запустите собственный управляемый клиент и один раз нажмите кнопку. Это инструкция будущего прогона, не уже состоявшийся запуск.

  8. ПрочитатьИсточник85 выполняет только собственный литеральный запрос без ИЗ таблиц базы. Каждая из3×5 ячеек проверяется независимо, включая qty×price=amount; native итоги10/1050. Та же строка запроса помещена в native querydataset своей схемы, типы полей взяты из реальных колонок результата.

  9. Ресурс Сумма85 вычисляется глобальной функцией СчетСНадбавкой85(ГрупповаяОбработка(...),ПараметрыДанных.Надбавка85). Это ресурс собственной схемы, не пользовательское поле. ГрупповаяОбработка выдаёт значения ГРУППИРОВОК: две category-строки750/300, а не три товарные строки. CurrentItem — настоящая строка этой таблицы либо Неопределено для общего итога.

  10. У СКД-groupData нет документированного конструктора. Readonly свойства Данные/ТекущийЭлемент/ВременныеДанныеОбработки не назначаются. Во вложенную настоящую структуру временных данных помещается только свой уникально названный снимок. Ранее существовавшее несовместимое состояние приводит к отказу, не Clear или подмене объекта.

  11. Параметр Надбавка85 добавляется только в новую несвязанную коллекцию до LoadSettings; после связывания прочитывается его реальное значение. Макет получает тот же собственный объект расшифровки, который затем передаётся процессору. Четвёртый аргумент Инициализировать=Истина разрешает собственные GLOBAL-функции. Это не разрешение внешней сети и не разрешение пользовательских выражений.

  12. Свой отдельный профиль диаграммы получает настоящие Chart/ChartGroup через native Add(Type)/Add(). После LoadSettings перечитываются actual владельцы и значения Заголовок/КоличествоЗаписей. Их descriptor содержит настоящий owner+child+nativeID. Чужойowner отклоняется ДО lookup; opaqueID не считается глобально уникальным UUID. Лимит2→1→2 и заголовок изменяются только в своём memory-профиле.

  13. Расшифровку наполняет только настоящий native output; вручную её элементы не добавляются. Индекс+[] проверяют принадлежность. Родители проходят проверку фактического типа: собственный item или nativeDetailsID; неизвестные виды/циклы запрещены. GroupDetails.Группировка содержит СТРОКОВЫЙ ИДЕНТИФИКАТОР группировки, который сверяется с настоящим compiledGroup.Идентификатор. Это не compiledGroup.Имя, не UUID элемента расшифровки и не текст Офис/Чай.

  14. Читатель native табличного документа ищет фактические заголовки и проверяет две категории, числовые ресурсы и ровно один общий итог. При ином renderer/layout/пустомGroupProcessing/nativeNULL код остановится с ошибкой; успешный результат не подставляется. Runtime-проверки настоящих форм/графа/общего итога предстоят вручную.

  15. Одна ошибка на server или client границе делает экземпляр формы sticky-stop. Повтор после частичного изменения и слепой rollback не разрешены. Восстановление профиля диаграммы выполняется только после полного readback именно собственного ожидаемого промежуточного состояния; это не обещание атомарности.

  16. Здесь выполняются авторство и статические native/scoped тесты. Реальные1С/CF/DB/UI/сеть/печать/файлы/хранилища/backup0. Параметры диаграммы подтверждают значения настроек, не пиксели/отбор прав/успешность отрисовки; источник и табличный результат проверяются раздельно.

Функция СвойПараметр85(Владелец, Имя)
    Значение = Владелец.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя));
    Если ТипЗнч(Значение) <> Тип("ЗначениеПараметраКомпоновкиДанных")
        Или Строка(Значение.Параметр) <> Имя Или Не Значение.Использование Тогда
        ВызватьИсключение "Не найдено настоящее включённое значение собственного параметра";
    КонецЕсли;
    Возврат Значение;
КонецФункции

Процедура ПроверитьОписание85(Владелец, Описание)
    Если ТипЗнч(Описание) <> Тип("ФиксированнаяСтруктура") Или Описание.Владелец <> Владелец Тогда
        ВызватьИсключение "Чужой owner отклонён до native поиска по непрозрачному идентификатору";
    КонецЕсли;
    Если ТипЗнч(Владелец) <> Тип("ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных")
        И ТипЗнч(Владелец) <> Тип("ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных") Тогда
        ВызватьИсключение "Неизвестный владелец параметров вывода";
    КонецЕсли;
    Если ТипЗнч(Описание.Дочерний) <> Тип("ЗначениеПараметраКомпоновкиДанных")
        Или ТипЗнч(Описание.ID) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
        ВызватьИсключение "Нет настоящего дочернего значения или native ID";
    КонецЕсли;
    Если Владелец.ПолучитьИдентификаторПоОбъекту(Описание.Дочерний) <> Описание.ID
        Или Владелец.ПолучитьОбъектПоИдентификатору(Описание.ID) <> Описание.Дочерний Тогда
        ВызватьИсключение "Не сохранилась реальная identity собственного параметра";
    КонецЕсли;
КонецПроцедуры

Функция Описание85(Владелец, Дочерний)
    ID = Владелец.ПолучитьИдентификаторПоОбъекту(Дочерний);
    Если ТипЗнч(ID) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
        ВызватьИсключение "Native ID своего значения отсутствует";
    КонецЕсли;
    Описание = Новый ФиксированнаяСтруктура(Новый Структура("Владелец,Дочерний,ID", Владелец, Дочерний, ID));
    ПроверитьОписание85(Владелец, Описание);
    Возврат Описание;
КонецФункции

Функция ПроверитьПараметры85(Схема) Экспорт
    СчетКонвейер85.ПроверитьСтенд85();
    Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Тогда
        ВызватьИсключение "Нужна созданная своим конвейером схема";
    КонецЕсли;
    Настройки = Новый НастройкиКомпоновкиДанных;
    Диаграмма = Настройки.Структура.Добавить(Тип("ДиаграммаКомпоновкиДанных"));
    Если ТипЗнч(Диаграмма) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
        ВызватьИсключение "Фабрика структуры не вернула настоящую диаграмму";
    КонецЕсли;
    Диаграмма.Имя = "СвояДиаграмма85";
    Диаграмма.Использование = Истина;
    Точка = Диаграмма.Точки.Добавить();
    Если ТипЗнч(Точка) <> Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
        ВызватьИсключение "Фабрика точек не вернула настоящую группировку";
    КонецЕсли;
    Точка.Имя = "СвояТочка85";
    Точка.Использование = Истина;
    ПолеТочки = Точка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеТочки.Поле = Новый ПолеКомпоновкиДанных("Категория85");
    ПолеТочки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
    ПолеТочки.Использование = Истина;
    Выбор = Диаграмма.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    Выбор.Поле = Новый ПолеКомпоновкиДанных("Сумма85");
    Выбор.Использование = Истина;
    Диаграмма.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", "Корзина1050");
    Точка.ПараметрыВывода.УстановитьЗначениеПараметра("КоличествоЗаписей", 2);
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    Компоновщик.ЗагрузитьНастройки(Настройки);
    Свои = Компоновщик.Настройки;
    Если Свои.Структура.Количество() <> 1 Тогда
        ВызватьИсключение "Изменился полный собственный профиль диаграммы";
    КонецЕсли;
    СвояДиаграмма = Свои.Структура.Получить(0);
    Если ТипЗнч(СвояДиаграмма) <> Тип("ДиаграммаКомпоновкиДанных")
        Или СвояДиаграмма.Имя <> "СвояДиаграмма85" Или СвояДиаграмма.Точки.Количество() <> 1 Тогда
        ВызватьИсключение "Связанная диаграмма не совпала с собственной подготовкой";
    КонецЕсли;
    СвояТочка = СвояДиаграмма.Точки.Получить(0);
    Если ТипЗнч(СвояТочка) <> Тип("ГруппировкаДиаграммыКомпоновкиДанных")
        Или СвояТочка.Имя <> "СвояТочка85" Или СвояТочка.Родитель <> СвояДиаграмма Тогда
        ВызватьИсключение "Не совпал настоящий дочерний owner точки";
    КонецЕсли;
    ПараметрыДиаграммы = СвояДиаграмма.ПараметрыВывода;
    ПараметрыТочки = СвояТочка.ПараметрыВывода;
    Если ТипЗнч(ПараметрыДиаграммы) <> Тип("ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных")
        Или ТипЗнч(ПараметрыТочки) <> Тип("ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных")
        Или ПараметрыДиаграммы.ДоступныеПараметры = Неопределено
        Или ПараметрыТочки.ДоступныеПараметры = Неопределено Тогда
        ВызватьИсключение "Не связались настоящие доступные параметры собственной диаграммы и точки";
    КонецЕсли;
    Заголовок = СвойПараметр85(ПараметрыДиаграммы, "Заголовок");
    Записи = СвойПараметр85(ПараметрыТочки, "КоличествоЗаписей");
    Если Заголовок.Значение <> "Корзина1050" Или Записи.Значение <> 2 Тогда
        ВызватьИсключение "Нет полного собственного исходного состояния до изменения профиля";
    КонецЕсли;
    Элементы = ПараметрыДиаграммы.Элементы;
    Найдено = 0;
    Для Каждого Дочерний Из Элементы Цикл
        Если Дочерний = Заголовок Тогда
            Найдено = Найдено + 1;
        КонецЕсли;
    КонецЦикла;
    Если Найдено <> 1 Тогда
        ВызватьИсключение "Заголовок не входит ровно один раз в настоящую коллекцию своего владельца";
    КонецЕсли;
    ОписаниеЗаголовка = Описание85(ПараметрыДиаграммы, Заголовок);
    ОписаниеЗаписей = Описание85(ПараметрыТочки, Записи);
    ПараметрыДиаграммы.УстановитьЗначениеПараметра("Заголовок", "Предпросмотр1260");
    ПараметрыТочки.УстановитьЗначениеПараметра("КоличествоЗаписей", 1);
    ПроверитьОписание85(ПараметрыДиаграммы, ОписаниеЗаголовка);
    ПроверитьОписание85(ПараметрыТочки, ОписаниеЗаписей);
    Если СвойПараметр85(ПараметрыДиаграммы, "Заголовок") <> Заголовок
        Или СвойПараметр85(ПараметрыТочки, "КоличествоЗаписей") <> Записи
        Или Заголовок.Значение <> "Предпросмотр1260" Или Записи.Значение <> 1 Тогда
        ВызватьИсключение "Частичный или чужой профиль не восстанавливаем автоматически";
    КонецЕсли;
    ПараметрыДиаграммы.УстановитьЗначениеПараметра("Заголовок", "Корзина1050");
    ПараметрыТочки.УстановитьЗначениеПараметра("КоличествоЗаписей", 2);
    ПроверитьОписание85(ПараметрыДиаграммы, ОписаниеЗаголовка);
    ПроверитьОписание85(ПараметрыТочки, ОписаниеЗаписей);
    Если Заголовок.Значение <> "Корзина1050" Или Записи.Значение <> 2 Тогда
        ВызватьИсключение "Не прочитан полный восстановленный собственный профиль";
    КонецЕсли;
    Возврат "Native профиль: заголовок и лимит2→1→2, owner/child/ID сохранены";
КонецФункции
СчетГруппа85 — полный глобальный серверный модуль

Общие → Общие модули → СчетГруппа85

Собственный серверный общий модуль .1343.

Функция СчетСНадбавкой85(ГрупповыеДанные, Надбавка) Экспорт
    СчетКонвейер85.ПроверитьСтенд85();
    Если ТипЗнч(ГрупповыеДанные) <> Тип("ДанныеГрупповойОбработкиКомпоновкиДанных")
        Или ТипЗнч(Надбавка) <> Тип("Число") Или (Надбавка <> 0 И Надбавка <> 20) Тогда
        ВызватьИсключение "Ожидается настоящий результат ГрупповаяОбработка и своя надбавка 0 или 20";
    КонецЕсли;
    Данные = ГрупповыеДанные.Данные;
    Временные = ГрупповыеДанные.ВременныеДанныеОбработки;
    Текущая = ГрупповыеДанные.ТекущийЭлемент;
    Если ТипЗнч(Данные) <> Тип("ТаблицаЗначений") Или ТипЗнч(Временные) <> Тип("Структура")
        Или Данные.Количество() <> 2 Или Данные.Колонки.Количество() <> 2
        Или Данные.Колонки.Получить(0).Имя <> "Категория85"
        Или Данные.Колонки.Получить(1).Имя <> "Сумма85" Тогда
        ВызватьИсключение "Настоящая групповая таблица должна содержать две свои категории и два выражения";
    КонецЕсли;
    Категории = Новый Соответствие;
    Всего = 0;
    Для Каждого СтрокаГруппы Из Данные Цикл
        Если ТипЗнч(СтрокаГруппы.Категория85) <> Тип("Строка") Или ТипЗнч(СтрокаГруппы.Сумма85) <> Тип("Число")
            Или Категории.Получить(СтрокаГруппы.Категория85) <> Неопределено Тогда
            ВызватьИсключение "Неизвестные типы или повторная категория групповой обработки";
        КонецЕсли;
        Если (СтрокаГруппы.Категория85 = "Офис" И СтрокаГруппы.Сумма85 = 750)
            Или (СтрокаГруппы.Категория85 = "Чай" И СтрокаГруппы.Сумма85 = 300) Тогда
            Категории.Вставить(СтрокаГруппы.Категория85, СтрокаГруппы.Сумма85);
            Всего = Всего + СтрокаГруппы.Сумма85;
        Иначе
            ВызватьИсключение "Групповые значения не совпали с собственными BOOK/PAPER/TEA";
        КонецЕсли;
    КонецЦикла;
    Если Категории.Количество() <> 2 Или Всего <> 1050 Тогда
        ВызватьИсключение "Не получен полный собственный итог двух категорий";
    КонецЕсли;
    Если Временные.Свойство("OwnSKDInvoice27ab6906_Snapshot", Снимок) Тогда
        Если ТипЗнч(Снимок) <> Тип("ФиксированнаяСтруктура") Или Снимок.Данные <> Данные
            Или Снимок.Надбавка <> Надбавка Или Снимок.Офис <> Категории.Получить("Офис")
            Или Снимок.Чай <> Категории.Получить("Чай") Или Снимок.Итог <> Всего Тогда
            ВызватьИсключение "Чужое или изменённое временное состояние своей функции";
        КонецЕсли;
    Иначе
        Снимок = Новый ФиксированнаяСтруктура(Новый Структура("Данные,Надбавка,Офис,Чай,Итог",
            Данные, Надбавка, Категории.Получить("Офис"), Категории.Получить("Чай"), Всего));
        Временные.Вставить("OwnSKDInvoice27ab6906_Snapshot", Снимок);
    КонецЕсли;
    Если Текущая = Неопределено Тогда
        Возврат Всего * (100 + Надбавка) / 100;
    КонецЕсли;
    Если ТипЗнч(Текущая) <> Тип("СтрокаТаблицыЗначений") Или Данные.Индекс(Текущая) < 0
        Или Категории.Получить(Текущая.Категория85) <> Текущая.Сумма85 Тогда
        ВызватьИсключение "ТекущийЭлемент не является проверенной строкой настоящей групповой таблицы";
    КонецЕсли;
    Возврат Текущая.Сумма85 * (100 + Надбавка) / 100;
КонецФункции
СчетКонвейер85 — полный серверный конвейер и граф

Общие → Общие модули → СчетКонвейер85

Собственный серверный общий модуль .1343.

Процедура ПроверитьСтенд85() Экспорт
    Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1C85_OwnSKDInvoice\27ab6906-e418-43d5-9e74-5aedb8f7449f\IB"";" Тогда
        ВызватьИсключение "Только новая собственная файловая учебная ИБ по точному пути";
    КонецЕсли;
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Иная версия или собственная конфигурация";
    КонецЕсли;
    Если Метаданные.ОбщиеМодули.Количество() <> 3 Или Метаданные.ОбщиеФормы.Количество() <> 1
        Или Метаданные.ОбщиеФормы.Найти("СчетСКД85") = Неопределено Тогда
        ВызватьИсключение "Нужны только свои три общих модуля и одна общая форма";
    КонецЕсли;
    Для Каждого Имя Из СтрРазделить("СчетГруппа85,СчетДиаграмма85,СчетКонвейер85", ",") Цикл
        Модуль = Метаданные.ОбщиеМодули.Найти(Имя);
        Если Модуль = Неопределено Тогда
            ВызватьИсключение "Нет собственного полного общего модуля";
        КонецЕсли;
        Если Не Модуль.Сервер Или Модуль.Глобальный <> (Имя = "СчетГруппа85")
            Или Модуль.КлиентУправляемоеПриложение Или Модуль.КлиентОбычноеПриложение
            Или Модуль.ВнешнееСоединение Или Модуль.ВызовСервера Или Модуль.Привилегированный Тогда
            ВызватьИсключение "Не совпали настоящие flags/server/global/без кэша";
        КонецЕсли;
        Если Не Модуль.Глобальный Тогда
            Если Модуль.ПовторноеИспользованиеВозвращаемыхЗначений <> Метаданные.СвойстваОбъектов.ПовторноеИспользованиеВозвращаемыхЗначений.НеИспользовать Тогда
                ВызватьИсключение "Повторное использование доступно только своему неглобальному модулю; здесь оно выключено";
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0
        Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0
        Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0
        Или Метаданные.Обработки.Количество() <> 0 Или Метаданные.Отчеты.Количество() <> 0
        Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Прикладных данных и внешних источников в своём стенде не должно быть";
    КонецЕсли;
    Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Если Текущий = Неопределено Или Пользователи.Количество() <> 1 Тогда
        ВызватьИсключение "Нужен один настоящий собственный пользователь";
    КонецЕсли;
    Если Текущий.Имя <> "Счет85Ученик" Или Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор Тогда
        ВызватьИсключение "Не совпал UUID реального пользователя ИБ";
    КонецЕсли;
    Соединения = ПолучитьСоединенияИнформационнойБазы();
    Если Соединения.Количество() <> 1 Тогда
        ВызватьИсключение "Закройте Конфигуратор и остальные соединения своего стенда";
    КонецЕсли;
    Соединение = Соединения[0];
    Если Соединение.НомерСоединения <> НомерСоединенияИнформационнойБазы()
        Или Соединение.Пользователь = Неопределено Тогда
        ВызватьИсключение "Не совпало настоящее собственное соединение";
    КонецЕсли;
    Если Соединение.Пользователь.УникальныйИдентификатор <> Текущий.УникальныйИдентификатор Тогда
        ВызватьИсключение "Сеанс принадлежит другому пользователю";
    КонецЕсли;
КонецПроцедуры

Функция ТекстИсточника85()
    Возврат "ВЫБРАТЬ ""Офис"" КАК Категория85, ""BOOK"" КАК Код85, 2 КАК Количество85, 250 КАК Цена85, 500 КАК Сумма85
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Офис"", ""PAPER"", 5, 50, 250
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Чай"", ""TEA"", 3, 100, 300";
КонецФункции

Функция ПрочитатьИсточник85()
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстИсточника85();
    Источник = Запрос.Выполнить().Выгрузить();
    Если ТипЗнч(Источник) <> Тип("ТаблицаЗначений") Или Источник.Количество() <> 3
        Или Источник.Колонки.Количество() <> 5 Тогда
        ВызватьИсключение "Литеральный native запрос не вернул три свои полные строки";
    КонецЕсли;
    Коды = Новый Соответствие;
    Для Каждого Строка Из Источник Цикл
        Если Коды.Получить(Строка.Код85) <> Неопределено Или Строка.Сумма85 <> Строка.Количество85 * Строка.Цена85 Тогда
            ВызватьИсключение "Повтор товара или несогласованные исходные числовые ячейки";
        КонецЕсли;
        Если (Строка.Код85 = "BOOK" И Строка.Категория85 = "Офис" И Строка.Количество85 = 2 И Строка.Цена85 = 250 И Строка.Сумма85 = 500)
            Или (Строка.Код85 = "PAPER" И Строка.Категория85 = "Офис" И Строка.Количество85 = 5 И Строка.Цена85 = 50 И Строка.Сумма85 = 250)
            Или (Строка.Код85 = "TEA" И Строка.Категория85 = "Чай" И Строка.Количество85 = 3 И Строка.Цена85 = 100 И Строка.Сумма85 = 300) Тогда
            Коды.Вставить(Строка.Код85, Истина);
        Иначе
            ВызватьИсключение "Изменена хотя бы одна собственная исходная ячейка";
        КонецЕсли;
    КонецЦикла;
    Если Источник.Итог("Количество85") <> 10 Или Источник.Итог("Сумма85") <> 1050 Тогда
        ВызватьИсключение "Не получен независимый native источник10/1050";
    КонецЕсли;
    Возврат Источник;
КонецФункции

Функция СоздатьСхему85(Источник)
    Схема = Новый СхемаКомпоновкиДанных;
    Локальный = Схема.ИсточникиДанных.Добавить();
    Локальный.Имя = "СвойLocal85";
    Локальный.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
        ВызватьИсключение "Набор создан не нативной фабрикой своей схемы";
    КонецЕсли;
    Набор.Имя = "СвояКорзина85";
    Набор.ИсточникДанных = Локальный.Имя;
    Набор.Запрос = ТекстИсточника85();
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Для Каждого Колонка Из Источник.Колонки Цикл
        Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
        Поле.Поле = Колонка.Имя;
        Поле.ПутьКДанным = Колонка.Имя;
        Поле.Заголовок = Колонка.Имя;
        Поле.ТипЗначения = Колонка.ТипЗначения;
        Если Колонка.Имя = "Сумма85" Тогда
            Поле.Оформление.УстановитьЗначениеПараметра("Формат", "ЧДЦ=0;ЧГ=0;ЧН=0");
        КонецЕсли;
    КонецЦикла;
    Параметр = Схема.Параметры.Добавить();
    Параметр.Имя = "Надбавка85";
    Параметр.ТипЗначения = Новый ОписаниеТипов("Число");
    Параметр.Значение = 0;
    Параметр.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
    Параметр.ВключатьВДоступныеПоля = Истина;
    Ресурс = Схема.ПоляИтога.Добавить();
    Ресурс.ПутьКДанным = "Сумма85";
    Ресурс.Выражение = "СчетСНадбавкой85(ГрупповаяОбработка(""Категория85 КАК Категория85, Сумма(Сумма85) КАК Сумма85"", , ""СвоиКатегории85""), ПараметрыДанных.Надбавка85)";
    Возврат Схема;
КонецФункции

Функция НастройкиСчета85(Схема, Надбавка)
    Настройки = Новый НастройкиКомпоновкиДанных;
    Если Настройки.ПараметрыДанных.ДоступныеПараметры <> Неопределено Тогда
        ВызватьИсключение "Нельзя менять Parameter в связанной коллекции";
    КонецЕсли;
    Значение = Настройки.ПараметрыДанных.Элементы.Добавить();
    Значение.Параметр = Новый ПараметрКомпоновкиДанных("Надбавка85");
    Значение.Значение = Надбавка;
    Значение.Использование = Истина;
    Группа = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    Группа.Имя = "СвоиКатегории85";
    Группа.Использование = Истина;
    ПолеГруппы = Группа.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеГруппы.Поле = Новый ПолеКомпоновкиДанных("Категория85");
    ПолеГруппы.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
    ПолеГруппы.Использование = Истина;
    Для Каждого Имя Из СтрРазделить("Категория85,Сумма85", ",") Цикл
        Выбор = Группа.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        Выбор.Поле = Новый ПолеКомпоновкиДанных(Имя);
        Выбор.Использование = Истина;
    КонецЦикла;
    Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("РасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Конец);
    Группа.ПараметрыВывода.УстановитьЗначениеПараметра("РасположениеИтогов", РасположениеИтоговКомпоновкиДанных.Нет);
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    Компоновщик.ЗагрузитьНастройки(Настройки);
    Свои = Компоновщик.Настройки;
    ФактическаяНадбавка = Свои.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Надбавка85"));
    Если ФактическаяНадбавка = Неопределено Или Не ФактическаяНадбавка.Использование
        Или ФактическаяНадбавка.Значение <> Надбавка Или Свои.Структура.Количество() <> 1 Тогда
        ВызватьИсключение "Схема не связала собственные настоящие настройки";
    КонецЕсли;
    СвояГруппа = Свои.Структура.Получить(0);
    Если ТипЗнч(СвояГруппа) <> Тип("ГруппировкаКомпоновкиДанных") Или СвояГруппа.Имя <> "СвоиКатегории85"
        Или Не СвояГруппа.Использование Или СвояГруппа.ПоляГруппировки.Элементы.Количество() <> 1
        Или СвояГруппа.Выбор.Элементы.Количество() <> 2 Тогда
        ВызватьИсключение "Связанные настройки потеряли собственную группу и полный выбор";
    КонецЕсли;
    СвоеПоле = СвояГруппа.ПоляГруппировки.Элементы.Получить(0);
    Если Строка(СвоеПоле.Поле) <> "Категория85" Или Не СвоеПоле.Использование
        Или СвоеПоле.ТипГруппировки <> ТипГруппировкиКомпоновкиДанных.Элементы Тогда
        ВызватьИсключение "Связанная группа не использует настоящую свою категорию";
    КонецЕсли;
    Возврат Свои;
КонецФункции

Процедура ПрочитатьИдентификаторыМакета85(Тело, Идентификаторы)
    Для Каждого Часть Из Тело Цикл
        Если ТипЗнч(Часть) <> Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда
            ВызватьИсключение "Неизвестная часть собственного группового макета";
        КонецЕсли;
        Если ТипЗнч(Часть.Идентификатор) <> Тип("Строка") Тогда
            ВызватьИсключение "Настоящий compiled идентификатор группировки не является строкой";
        КонецЕсли;
        Идентификаторы.Вставить(Часть.Идентификатор, Истина);
        ПрочитатьИдентификаторыМакета85(Часть.Тело, Идентификаторы);
    КонецЦикла;
КонецПроцедуры

Функция СвойУзел85(Элементы, Узел)
    Если ТипЗнч(Узел) <> Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка")
        И ТипЗнч(Узел) <> Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
        ВызватьИсключение "Неизвестный тип реально созданного элемента расшифровки";
    КонецЕсли;
    Индекс = Элементы.Индекс(Узел);
    Если Индекс < 0 Или Индекс >= Элементы.Количество() Тогда
        ВызватьИсключение "Элемент принадлежит другому экземпляру расшифровки";
    КонецЕсли;
    Если Элементы[Индекс] <> Узел Тогда
        ВызватьИсключение "Не подтверждено совпадение actual collection/index/item";
    КонецЕсли;
    Возврат Индекс;
КонецФункции

Процедура ПроверитьГраф85(Элементы, Узел, Состояния, Идентификаторы)
    Индекс = СвойУзел85(Элементы, Узел);
    Если Состояния.Получить(Индекс) = 1 Тогда
        ВызватьИсключение "Обнаружен цикл родителей собственной расшифровки";
    ИначеЕсли Состояния.Получить(Индекс) = 2 Тогда
        Возврат;
    КонецЕсли;
    Состояния.Вставить(Индекс, 1);
    Если ТипЗнч(Узел) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
        ГрупповойУзел = Узел;
        Если ТипЗнч(ГрупповойУзел.Группировка) <> Тип("Строка")
            Или Идентификаторы.Получить(ГрупповойУзел.Группировка) <> Истина
            Или ТипЗнч(ГрупповойУзел.Идентификатор) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
            ВызватьИсключение "Группировка не принадлежит фактическому собственному макету";
        КонецЕсли;
        Если Элементы[ГрупповойУзел.Идентификатор] <> ГрупповойУзел Тогда
            ВызватьИсключение "Native ID группировки не разрешился в тот же свой узел";
        КонецЕсли;
        Родители = ГрупповойУзел.ПолучитьРодителей();
    Иначе
        ПолевойУзел = Узел;
        Родители = ПолевойУзел.ПолучитьРодителей();
    КонецЕсли;
    Если ТипЗнч(Родители) <> Тип("Массив") Или Родители.Количество() > Элементы.Количество() Тогда
        ВызватьИсключение "Native родители имеют неизвестный тип или необоснованное число";
    КонецЕсли;
    Для Каждого Родитель Из Родители Цикл
        Если ТипЗнч(Родитель) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
            НастоящийРодитель = Элементы[Родитель];
        ИначеЕсли ТипЗнч(Родитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка")
            Или ТипЗнч(Родитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
            НастоящийРодитель = Родитель;
        Иначе
            ВызватьИсключение "Документация не определяет типы содержимого массива; неизвестный родитель отклонён";
        КонецЕсли;
        ПроверитьГраф85(Элементы, НастоящийРодитель, Состояния, Идентификаторы);
    КонецЦикла;
    Состояния.Вставить(Индекс, 2);
КонецПроцедуры

Функция ПрочитатьРасшифровку85(Расшифровка, Макет)
    Если ТипЗнч(Расшифровка) <> Тип("ДанныеРасшифровкиКомпоновкиДанных") Тогда
        ВызватьИсключение "Нет собственного настоящего экземпляра расшифровки";
    КонецЕсли;
    Элементы = Расшифровка.Элементы;
    Если ТипЗнч(Элементы) <> Тип("ЭлементыРасшифровкиКомпоновкиДанных")
        Или Элементы.Количество() = 0 Или Элементы.Количество() > 100 Тогда
        ВызватьИсключение "Процессор не наполнил ограниченную собственную расшифровку";
    КонецЕсли;
    Идентификаторы = Новый Соответствие;
    ПрочитатьИдентификаторыМакета85(Макет.Тело, Идентификаторы);
    Состояния = Новый Соответствие;
    Категории = Новый Соответствие;
    Групп = 0;
    Полей = 0;
    Для Каждого Узел Из Элементы Цикл
        ПроверитьГраф85(Элементы, Узел, Состояния, Идентификаторы);
        Если ТипЗнч(Узел) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
            Групп = Групп + 1;
        Иначе
            Полей = Полей + 1;
            ПолевойУзел = Узел;
            ЗначенияПолей = ПолевойУзел.ПолучитьПоля();
            Если ТипЗнч(ЗначенияПолей) <> Тип("ЗначенияПолейРасшифровкиКомпоновкиДанных") Тогда
                ВызватьИсключение "Нет настоящих значений полей расшифровки";
            КонецЕсли;
            Категория = ЗначенияПолей.Найти("Категория85");
            Если Категория <> Неопределено Тогда
                Если ТипЗнч(Категория) <> Тип("ЗначениеПоляРасшифровкиКомпоновкиДанных") Или Категория.Поле <> "Категория85" Тогда
                    ВызватьИсключение "Не совпало реальное поле категории";
                КонецЕсли;
                Если Категория.Значение = "Офис" Или Категория.Значение = "Чай" Тогда
                    Категории.Вставить(Категория.Значение, Истина);
                ИначеЕсли ТипЗнч(Категория.Значение) <> Тип("Null") Тогда
                    ВызватьИсключение "Чужая категория в собственном native графе";
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если Групп = 0 Или Полей = 0 Или Категории.Количество() <> 2
        Или Состояния.Количество() <> Элементы.Количество() Тогда
        ВызватьИсключение "Не прочитан полный native граф и обе собственные категории";
    КонецЕсли;
    Возврат Новый ФиксированнаяСтруктура(Новый Структура("Узлов,Групп,Полей", Элементы.Количество(), Групп, Полей));
КонецФункции

Функция ПрочитатьРезультат85(Документ, Надбавка)
    Если ТипЗнч(Документ) <> Тип("ТабличныйДокумент") Или Документ.ВысотаТаблицы = 0
        Или Документ.ВысотаТаблицы > 40 Или Документ.ШиринаТаблицы > 12 Тогда
        ВызватьИсключение "Неожиданный native табличный результат";
    КонецЕсли;
    КолКатегории = 0;
    КолСуммы = 0;
    Для Стр = 1 По Документ.ВысотаТаблицы Цикл
        Для Кол = 1 По Документ.ШиринаТаблицы Цикл
            Текст = СокрЛП(Документ.Область(Стр, Кол).Текст);
            Если Текст = "Категория85" Тогда
                Если КолКатегории <> 0 Тогда
                    ВызватьИсключение "Повторный заголовок категории";
                КонецЕсли;
                КолКатегории = Кол;
            ИначеЕсли Текст = "Сумма85" Тогда
                Если КолСуммы <> 0 Тогда
                    ВызватьИсключение "Повторный заголовок суммы";
                КонецЕсли;
                КолСуммы = Кол;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Если КолКатегории = 0 Или КолСуммы <= КолКатегории Тогда
        ВызватьИсключение "Не найдены реальные собственные заголовки; координаты не угадываем";
    КонецЕсли;
    Категории = Новый Соответствие;
    Всего = 0;
    ОбщихИтогов = 0;
    Для Стр = 1 По Документ.ВысотаТаблицы Цикл
        Для Кол = 1 По Документ.ШиринаТаблицы Цикл
            Если Кол <> КолКатегории И Кол <> КолСуммы Тогда
                ДругаяЯчейка = Документ.Область(Стр, Кол);
                Если СокрЛП(ДругаяЯчейка.Текст) <> "" Тогда
                    ВызватьИсключение "Неожиданные данные вне двух собственных native колонок";
                КонецЕсли;
                Если ДругаяЯчейка.СодержитЗначение Тогда
                    Если ДругаяЯчейка.Значение <> Неопределено И ТипЗнч(ДругаяЯчейка.Значение) <> Тип("Null") Тогда
                        ВызватьИсключение "Скрытое native значение вне полного собственного вывода";
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        Категория = СокрЛП(Документ.Область(Стр, КолКатегории).Текст);
        Ячейка = Документ.Область(Стр, КолСуммы);
        Если СокрЛП(Ячейка.Текст) = "" Или СокрЛП(Ячейка.Текст) = "Сумма85" Тогда
            Продолжить;
        КонецЕсли;
        Если Ячейка.СодержитЗначение Тогда
            Сумма = Ячейка.Значение;
        Иначе
            Сумма = Число(Ячейка.Текст);
        КонецЕсли;
        Если ТипЗнч(Сумма) <> Тип("Число") Тогда
            ВызватьИсключение "Native ресурс не является числом";
        КонецЕсли;
        Если Категория = "Офис" Или Категория = "Чай" Тогда
            Если Категории.Получить(Категория) <> Неопределено
                Или Сумма <> ?(Категория = "Офис", 750, 300) * (100 + Надбавка) / 100 Тогда
                ВызватьИсключение "Лишняя категория или неверный actual ресурс с надбавкой";
            КонецЕсли;
            Категории.Вставить(Категория, Сумма);
            Всего = Всего + Сумма;
        Иначе
            Если Сумма <> 1050 * (100 + Надбавка) / 100 Тогда
                ВызватьИсключение "Посторонняя numeric строка вместо собственного общего итога";
            КонецЕсли;
            ОбщихИтогов = ОбщихИтогов + 1;
        КонецЕсли;
    КонецЦикла;
    Если Категории.Количество() <> 2 Или ОбщихИтогов <> 1 Или Всего <> 1050 * (100 + Надбавка) / 100 Тогда
        ВызватьИсключение "Не прочитаны две native категории и ровно один настоящий общий итог";
    КонецЕсли;
    Возврат Всего;
КонецФункции

Функция Сформировать85() Экспорт
    ПроверитьСтенд85();
    Источник = ПрочитатьИсточник85();
    Схема = СоздатьСхему85(Источник);
    Профиль = СчетДиаграмма85.ПроверитьПараметры85(Схема);
    Протокол = "Source: BOOK500/PAPER250/TEA300, qty10, total1050";
    Для Шаг = 0 По 2 Цикл
        Надбавка = ?(Шаг = 1, 20, 0);
        Настройки = НастройкиСчета85(Схема, Надбавка);
        Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        Макет = КомпоновщикМакета.Выполнить(Схема, Настройки, Расшифровка);
        Процессор = Новый ПроцессорКомпоновкиДанных;
        Процессор.Инициализировать(Макет, , Расшифровка, Истина);
        Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        Документ = Новый ТабличныйДокумент;
        Вывод.ОтображатьПроцентВывода = Ложь;
        Вывод.УстановитьДокумент(Документ);
        Результат = Вывод.Вывести(Процессор, Ложь);
        Если Результат <> Документ Тогда
            ВызватьИсключение "Native вывод не вернул собственный документ-приёмник";
        КонецЕсли;
        ФактическийИтог = ПрочитатьРезультат85(Результат, Надбавка);
        Граф = ПрочитатьРасшифровку85(Расшифровка, Макет);
        После = ПрочитатьИсточник85();
        Если После.Итог("Количество85") <> Источник.Итог("Количество85")
            Или После.Итог("Сумма85") <> Источник.Итог("Сумма85") Тогда
            ВызватьИсключение "Источник изменился после native вывода";
        КонецЕсли;
        Протокол = Протокол + Символы.ПС + "Надбавка=" + Формат(Надбавка, "ЧГ=0;ЧДЦ=0;ЧН=0")
            + "; nativeTotal=" + Формат(ФактическийИтог, "ЧГ=0;ЧДЦ=0;ЧН=0")
            + "; actualDetails=" + Формат(Граф.Узлов, "ЧГ=0;ЧДЦ=0;ЧН=0");
        Если Шаг = 0 Тогда
            До = Результат;
        ИначеЕсли Шаг = 1 Тогда
            СНадбавкой = Результат;
        Иначе
            Восстановлено = Результат;
        КонецЕсли;
    КонецЦикла;
    Возврат Новый ФиксированнаяСтруктура(Новый Структура("До,СНадбавкой,Восстановлено,Протокол",
        До, СНадбавкой, Восстановлено, Протокол + Символы.ПС + Профиль));
КонецФункции
Полный модуль собственной управляемой формы

Общие → Общие формы → СчетСКД85 → Модуль

Собственная управляемая форма: Windows толстый managed client и server.

&НаКлиенте
Процедура Сформировать85(Команда)
    Если Остановка85 Или Завершено85 Тогда
        Остановка85 = Истина;
        ВызватьИсключение "Этот экземпляр завершён или остановлен; повторный запуск запрещён";
    КонецЕсли;
    Попытка
        СформироватьНаСервере85();
    Исключение
        Остановка85 = Истина;
        Статус85 = "Остановлено: " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере85()
    Если Остановка85 Или Завершено85 Тогда
        Остановка85 = Истина;
        ВызватьИсключение "Нельзя продолжить частично выполненный собственный процесс";
    КонецЕсли;
    Попытка
        СчетКонвейер85.ПроверитьСтенд85();
        Результат = СчетКонвейер85.Сформировать85();
        До85 = Результат.До;
        После85 = Результат.СНадбавкой;
        Вернули85 = Результат.Восстановлено;
        Статус85 = Результат.Протокол;
        Завершено85 = Истина;
    Исключение
        Остановка85 = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры
Полный модуль своего управляемого приложения

Своя конфигурация → Модуль управляемого приложения

Windows толстый managed client .1343, native OnStart0; thin/web ветка отказа.

#Если ТолстыйКлиентУправляемоеПриложение Тогда
Процедура ПриНачалеРаботыСистемы()
    Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1C85_OwnSKDInvoice\27ab6906-e418-43d5-9e74-5aedb8f7449f\IB"";" Или Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Модуль приложения предназначен только своему exact FileCF";
    КонецЕсли;
    ОткрытьФорму("ОбщаяФорма.СчетСКД85");
КонецПроцедуры
#Иначе
Процедура ПриНачалеРаботыСистемы()
    ВызватьИсключение "Этот собственный урок запускается только толстым управляемым клиентом1cv8.exe";
КонецПроцедуры
#КонецЕсли

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

  1. Полный конвейер создаёт свою схему и вызывает экспорт этого серверного модуля локально на сервере.

  2. Native Structure.Add(Type) и Points.Add() создают реальные Chart/ChartGroup; LoadSettings связывает настоящие доступные параметры.

  3. Получите actual Заголовок и КоличествоЗаписей, membership в Элементы и owner/child/nativeID.

  4. Измените свой заголовок/лимит, перечитайте именно те же значения и identity; чужойowner откажется доlookup.

  5. Верните только подтверждённый собственный промежуточный профиль; после частичного отказа не запускайте повтор.

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

  1. Будущий ручной результат: BOOK500/PAPER250/TEA300, qty10; nativeОфис750→900→750 и Чай300→360→300; nativeобщийитог1050→1260→1050.

  2. Профиль диаграммы: Заголовок Корзина1050→Предпросмотр1260→Корзина1050, nativeКоличествоЗаписей2→1→2; realowner/child/ID остаются теми же.

  3. ActualDetails содержит и групповые, и полевые узлы, обе категории; все узлы принадлежат тому же экземпляру, родительский граф конечен.

  4. Измените только в своём учебном исходнике товар/категорию/сумму/путь/надбавку/owner descriptor: ожидается отказ, не исправление чужого состояния.

  5. Неизвестный native layout/NULL/тип родителей/пустая расшифровка — честный fail-stop. Статический PASS не доказывает успешный1С-runtime.

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

Ожидаемый будущий результат: собственный native счёт1050→1260→1050, guarded параметры диаграммы и прочитанный реальный граф расшифровки. RuntimeVerified=False; фактических1С/БД/UI/network/print/backup операций0.

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

  1. У groupData/Chart/ChartGroup/DetailsItem нет выдуманных конструкторов. Реальные фабрики и typedproperties перечислены в подготовке.

  2. GroupData.Data — значения группировок, не detailRows. Native CurrentItem может быть Undefined; это не ошибка само по себе.

  3. Родительский массив не имеет документированного типа элементов: actual nativeID/item различаются проверкой, неизвестные значения не подставляются.

  4. Получить2894 с конфликтующим zero-argument syntax и ОсновноеДействие8969 без declaredtype исключены полностью.

  5. GetID/GetObject описывают локальный owner; foreignID не обязан быть глобально уникальным или возвращатьUndefined у другого владельца.

  6. Параметры диаграммы — настройки, не доказательство пикселей/доставки UI. Здесь она отдельно не выводится; числовые доказательства дают собственный native табличный вывод.

  7. Readback/restore только своего полного knownstate, не атомарность и не retry. Group/Details/parameter objects не передаются черезRPC.

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

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

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

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

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