ОбработкиМенеджер

Типы · DataProcessorsManager

Используется для управления обработками и предоставляет доступ к значениям типа ОбработкаМенеджер.<Имя обработки>. Доступ к объекту осуществляется через свойство глобального контекста Обработки.

Полное описание, параметры и ограничения

ОбработкиМенеджер (DataProcessorsManager)

ОбработкиМенеджер (DataProcessorsManager)

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

Элементы коллекции:
ОбработкаМенеджер.<Имя обработки>
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются менеджеры обработок.
Возможно обращение к менеджеру обработки посредством оператора [...]. В качестве аргумента передается имя обработки, как оно задано в конфигурации.

Свойства:
<Имя обработки> (<Data processor name>)

Описание:

Используется для управления обработками и предоставляет доступ к значениям типа ОбработкаМенеджер.<Имя обработки>. Доступ к объекту осуществляется через свойство глобального контекста Обработки.

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

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером.

См. также:
Глобальный контекст, свойство Обработки

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

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

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

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

Сводка собственных карточек: текстовые макеты и реальные ссылки

Прочитать3свои вручную подготовленные карточки20/25/30 и сформировать точный текст75→45 через native выбор/макеты/параметры, не записывая документов.

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

Windows8.5.1.1343 собственная FileCF/ordinary application. MAIN полный ownProcessingObject module; FORM/APP thickordinary UI. Программных DBwrites нет, только authoring/static.

Подготовка

  1. Вручную подготовьте НОВУЮ свою File ИБ на отдельном учебном Windows стенде: C:\1c-labs\OwnTextSummary85_2bf185cc-b660-4de1-96d1-a3a4dc905acf\IB. Если этот каталог или регистрация уже существуют, не используйте/не очищайте их: остановитесь. Это exact registration File-строка, не canonical path и не UUID самойИБ. Здесь ни1С/VM/ИБ/файлы данных/UI/сеть не запускались и не создавались.

  2. Новая пустая CF УчебнаяТекстоваяСводка85, ordinary application/обычные формы, точная платформа8.5.1.1343, совместимостьНеИспользовать. Только один документ и одна обработка ниже; нет общих модулей/общих форм/регистров/каталогов/подписок/заданий/разделителей/расширений/источников. Модуль менеджера документа и все посторонние модули пустые.

  3. Единственный собственный пользователь ТекстСводка85Ученик, одна роль с полными правами только этой новойИБ, включая native Users admin чтение; один сеанс. CurrentUser UUID сравнивается с actual единственным Users[0], не выводится. GUIDы ключей ниже — только собственные литералы реквизита; настоящие document references получаются из вручную сохраненных карточек.

  4. Документ УчебнаяКарточкаТекста85: ПроведениеЗапретить, без движений/табличных частей, номерСтрока12/автонумерацияНет/контрольуникальностиДа; реквизиты МаркерСтенда85 Строка36, КлючКарточки85 Строка36, КодКарточки85 Строка8, Сумма85 Число12,0. Проверка заполнения Показывать ошибку для всех4; модуль объекта пустой. Разрешите стандартные команды для ручного создания своих карточек.

  5. До запуска примера вручную запишите ровно3свои карточки. Все МаркерСтенда85=2bf185cc-b660-4de1-96d1-a3a4dc905acf. A: номерLAB-A, дата10.10.2026 09:00, КлючКарточки85=6a680517-2b11-461d-90c6-2e927e24e288, Сумма85=20. B: LAB-B,10:00,7599ac97-cd01-4597-a48c-82bfbf27943c,25. C: LAB-C,11:00,3c42af36-5c22-424f-b8b5-3b5d1f501b8d,30. Пометка удаленияFalse, ПроведенFalse; никакие другие карточки/производственные refs не вводятся. Код примера НИЧЕГО вБД не записывает.

  6. Обработка СводкаКарточек85: реквизиты Заголовок85 Строка40 и Режим85 Строка12, проверка заполненияНеПроверять; без табличных частей. CODE полностью в МодульОбъекта этой обработки. NativeFillCheck exactly2formals использует globalЭтотОбъект только в собственном objectmodule; не вызывайте событие вручную. Обработчик отказывает в пустом/недопустимом вводе, не очищает ПроверяемыеРеквизиты.

  7. Через Макеты→Добавить→Текстовый макет создайте3 compiledlayouts. У обработки: Заголовок85 и Итог85; у документа: СтрокаКарточки85. Вставьте точные тексты TEMPLATES ниже в текстовый редактор макетов, не вBSL и не как внешний plain .txt. Не убирайте пробелы внутри []: это реальные field widths40/8/12. #Область/#КонецОбласти — служебный compiled формат, не комментарииBSL.

  8. У обработки создайте единственную ОБЫЧНУЮ форму Сводка85 и назначьте основной. FORM целиком в её модуль. Отдельные реквизиты формы: ВводЗаголовка85 Строка80, ВводРежима85 Строка40, Вывод85 ТекстовыйДокумент, Доступные85 СписокЗначений, Статус85 Строка2000. Эти длинные input fields позволяют честно отказать заголовку>40 до присваивания в короткий object attribute.

  9. В ordinary форме разместите поля ввода ВводЗаголовка85/ВводРежима85; полеТекстовогоДокумента Вывод85 Данные=Вывод85, ТолькоПросмотрИстина; readonly поле списка Доступные85 Данные=Доступные85; readonly многострочный Статус85. Единственная кнопка Сформировать85 Нажатие→Сформировать85(Кнопка)1; nativeButton.Click0 + ordinaryevent104firstControl. Form.ПриОткрытии→ПриОткрытии()0. Свои Инициализировать85/ПроверитьСвязь85 не являются native callbacks.

  10. APPLICATION целиком в МодульОбычногоПриложения: nativeПриНачалеРаботыСистемы0 создаёт actualProcessingManager.Create0 и вызывает собственный exported initializer route. Object.GetForm3 имеет thickonly availability, поэтому этот UI helper скомпилирован только #Если ТолстыйКлиентОбычноеПриложение; остальные objecthelpers/callback не вызывают client-only commonmodule/UI.

  11. Сохраните/проверьте/обновите только своюCF вручную, подготовьте3свои карточки штатным own UI перед запуском урока, затем новый запуск8.5.1.1343 ordinary client. Startup откроет actualinstance.GetForm, передаст только sameactualobject/freshnativekey в закрытую форму; неизвестный объект/форма и повторная инициализация запрещены.

  12. Все→кнопкаСформировать85: fullsource3, список выбора3, selection3, native текст5строк с итогом75. ПервыеДва→кнопка: sourceвсегда3, список3, selection2(A/B), текст4строки с итогом45. Порядок nativeGetChoiceData/SelectByRefs не обещается: строки раскладываются по заранее проверенным actualrefs/кодам.

  13. Пустой заголовок/лишний символ|/перенос/заголовок>40/неизвестныйрежим отказывает до вывода. Неправильные3карточки/дубли/лишняястрока/чужойmarker/неподготовленныймакет/обрезка/неизвестныйparameterindex останавливают. Нет programWrite/Post/Delete/cleanup/backup и нет слепого восстановления partialUI.

  14. Native readonly Parameters даёт реальную изменяемую коллекцию. Fill принимает свойства Structure, Count/Get находят два уникальных коротких sentinel значения footer; Set использует только обнаруженный native index. Затем Get подтверждает реальный итог и количество перед Put. Значения как строки форматированы ЧГ=0;ЧДЦ=0, а сумма посчитана по native selection числам.

  15. Output readback проверяет точный текст вместе с padding/разделителями/порядком/количеством строк. Допускается только CRLF→LF и один завершающийLF; Trim/обрезка/игнорирование лишнейстроки/символов запрещены. Ширинаполей — знакоместа, неpixels; цель не обещает визуальный font/rendering без будущей ручной проверки.

Процедура ПроверитьСвойСтенд85() Экспорт
    Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnTextSummary85_2bf185cc-b660-4de1-96d1-a3a4dc905acf\IB"";" Тогда
        ВызватьИсключение "СТОП: нужен точный собственный File-адрес; UUID пути не является UUID ИБ";
    КонецЕсли;
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужна собственная новая конфигурация на точной платформе без режима совместимости";
    КонецЕсли;
    Если Метаданные.Документы.Количество() <> 1 Или Метаданные.Обработки.Количество() <> 1
        Или Метаданные.Справочники.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0
        Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0
        Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0
        Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0
        Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0
        Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0
        Или Метаданные.ОбщиеМодули.Количество() <> 0 Или Метаданные.ОбщиеФормы.Количество() <> 0
        Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПараметрыСеанса.Количество() <> 0
        Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0
        Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только собственный документ и transient обработка, не рабочая конфигурация";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Расширенная схема не принимается";
    КонецЕсли;
    Если РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.БазаДанных).Количество() <> 0
        Или РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные).Количество() <> 0
        Или РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансОтключенные).Количество() <> 0 Тогда
        ВызватьИсключение "В собственной CF не должно быть расширений любого из трех native источников";
    КонецЕсли;
    Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Если ТипЗнч(Пользователи) <> Тип("Массив") Или Пользователи.Количество() <> 1
        Или Пользователь = Неопределено Или Пользователь.Имя <> "ТекстСводка85Ученик"
        Или Пользователи[0].Имя <> Пользователь.Имя
        Или Пользователи[0].УникальныйИдентификатор <> Пользователь.УникальныйИдентификатор
        Или ТипЗнч(Пользователь.УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Тогда
        ВызватьИсключение "Нужен actual единственный собственный аутентифицированный пользователь";
    КонецЕсли;
    СвояОбработка = Метаданные.Обработки.Найти("СводкаКарточек85");
    СвойДокумент = Метаданные.Документы.Найти("УчебнаяКарточкаТекста85");
    Если СвояОбработка = Неопределено Или СвойДокумент = Неопределено
        Или ЭтотОбъект.Метаданные() <> СвояОбработка Или СвояОбработка.Реквизиты.Количество() <> 2
        Или СвояОбработка.ТабличныеЧасти.Количество() <> 0 Или СвояОбработка.Формы.Количество() <> 1
        Или СвояОбработка.Формы.Найти("Сводка85") = Неопределено Или СвояОбработка.Макеты.Количество() <> 2
        Или СвойДокумент.Реквизиты.Количество() <> 4 Или СвойДокумент.ТабличныеЧасти.Количество() <> 0
        Или СвойДокумент.Макеты.Количество() <> 1 Или СвойДокумент.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда
        ВызватьИсключение "Не совпала полная собственная metadata схема";
    КонецЕсли;
    Для Каждого Пара Из Новый Структура("Заголовок85,Режим85", 40, 12) Цикл
        ПроверитьСвойСтроковыйРеквизит85(СвояОбработка.Реквизиты, Пара.Ключ, Пара.Значение);
    КонецЦикла;
    Для Каждого Пара Из Новый Структура("МаркерСтенда85,КлючКарточки85,КодКарточки85", 36, 36, 8) Цикл
        ПроверитьСвойСтроковыйРеквизит85(СвойДокумент.Реквизиты, Пара.Ключ, Пара.Значение);
    КонецЦикла;
    Сумма = СвойДокумент.Реквизиты.Найти("Сумма85");
    Если Сумма = Неопределено Или Сумма.Тип.Типы().Количество() <> 1 Или Не Сумма.Тип.СодержитТип(Тип("Число"))
        Или Сумма.Тип.КвалификаторыЧисла.Разрядность <> 12 Или Сумма.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 0 Тогда
        ВызватьИсключение "Нужен собственный Сумма85 Число12,0";
    КонецЕсли;
    Для Каждого Макет Из СвояОбработка.Макеты Цикл
        Если Макет.ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент
            Или (Макет.Имя <> "Заголовок85" И Макет.Имя <> "Итог85") Тогда
            ВызватьИсключение "Нужны два точно названных compiled текстовых макета своей обработки";
        КонецЕсли;
    КонецЦикла;
    Если СвойДокумент.Макеты.Найти("СтрокаКарточки85") = Неопределено
        Или СвойДокумент.Макеты.Найти("СтрокаКарточки85").ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда
        ВызватьИсключение "Не подготовлен compiled текстовый макет своего документа";
    КонецЕсли;
КонецПроцедуры

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

Функция ДопустимыйВвод85(Заголовок, Режим) Экспорт
    Возврат ТипЗнч(Заголовок) = Тип("Строка") И СтрДлина(Заголовок) > 0 И СтрДлина(Заголовок) <= 40
        И СокрЛП(Заголовок) = Заголовок И СтрНайти(Заголовок, Символы.ПС) = 0
        И СтрНайти(Заголовок, Символы.ВК) = 0 И СтрНайти(Заголовок, Символы.Таб) = 0
        И СтрНайти(Заголовок, "|") = 0 И ТипЗнч(Режим) = Тип("Строка")
        И (Режим = "Все" Или Режим = "ПервыеДва");
КонецФункции

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

Функция СоздатьСвоюФорму85() Экспорт
#Если ТолстыйКлиентОбычноеПриложение Тогда
    ПроверитьСвойСтенд85();
    Если Не ЭтотОбъект.ПроверитьЗаполнение() Тогда
        ВызватьИсключение "Native проверка actual instance не подтвердила ввод";
    КонецЕсли;
    Плохой = Обработки.СводкаКарточек85.Создать();
    Плохой.Заголовок85 = "";
    Плохой.Режим85 = "Все";
    Если Плохой.Метаданные() <> ЭтотОбъект.Метаданные() Или Плохой.ПроверитьЗаполнение() Тогда
        ВызватьИсключение "Native CheckFill обязан отказать отдельному собственному transient объекту с пустым заголовком";
    КонецЕсли;
    Ключ = Новый УникальныйИдентификатор;
    СвояФорма = ЭтотОбъект.ПолучитьФорму("Сводка85", , Ключ);
    Если СвояФорма = Неопределено Или ТипЗнч(СвояФорма) <> Тип("Форма") Или СвояФорма.Открыта()
        Или СвояФорма.КлючУникальности <> Ключ Тогда
        ВызватьИсключение "Не подтверждена closed ordinary форма именно этого actual instance и freshKey";
    КонецЕсли;
    СвояФорма.Инициализировать85(ЭтотОбъект, Ключ);
    Возврат СвояФорма;
#Иначе
    ВызватьИсключение "Открытие собственной формы доступно только толстому обычному клиенту";
#КонецЕсли
КонецФункции

Функция ПрочитатьСвоиКарточки85()
    ПроверитьСвойСтенд85();
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ К.Ссылка,К.Дата,К.Номер,К.Проведен,К.ПометкаУдаления,К.МаркерСтенда85,К.КлючКарточки85,К.КодКарточки85,К.Сумма85
        |ИЗ Документ.УчебнаяКарточкаТекста85 КАК К
        |УПОРЯДОЧИТЬ ПО К.КодКарточки85";
    Карточки = Запрос.Выполнить().Выгрузить();
    Если ТипЗнч(Карточки) <> Тип("ТаблицаЗначений") Или Карточки.Количество() <> 3 Или Карточки.Колонки.Количество() <> 9 Тогда
        ВызватьИсключение "ВЕСЬ собственный документ должен содержать ровно3карточки/9полей, не отфильтрованный фрагмент";
    КонецЕсли;
    Ключи = СтрРазделить("6a680517-2b11-461d-90c6-2e927e24e288,7599ac97-cd01-4597-a48c-82bfbf27943c,3c42af36-5c22-424f-b8b5-3b5d1f501b8d", ",");
    Коды = СтрРазделить("A,B,C", ",");
    Номера = СтрРазделить("LAB-A,LAB-B,LAB-C", ",");
    Суммы = Новый Массив;
    Суммы.Добавить(20);
    Суммы.Добавить(25);
    Суммы.Добавить(30);
    Проверенные = Новый Массив;
    Для Индекс = 0 По 2 Цикл
        Карточка = Карточки[Индекс];
        Если ТипЗнч(Карточка.Ссылка) <> Тип("ДокументСсылка.УчебнаяКарточкаТекста85") Или Карточка.Ссылка.Пустая()
            Или Проверенные.Найти(Карточка.Ссылка) <> Неопределено Или ТипЗнч(Карточка.Сумма85) <> Тип("Число")
            Или Карточка.Сумма85 <> Суммы[Индекс] Или Карточка.КодКарточки85 <> Коды[Индекс]
            Или Карточка.КлючКарточки85 <> Ключи[Индекс] Или Карточка.МаркерСтенда85 <> "2bf185cc-b660-4de1-96d1-a3a4dc905acf"
            Или Карточка.Номер <> Номера[Индекс] Или Карточка.Дата <> Дата(2026, 10, 10, Индекс + 9)
            Или ТипЗнч(Карточка.Проведен) <> Тип("Булево") Или Карточка.Проведен
            Или ТипЗнч(Карточка.ПометкаУдаления) <> Тип("Булево") Или Карточка.ПометкаУдаления Тогда
            ВызватьИсключение "Full actual own reference/date/number/UUID/code/sum snapshot нарушен";
        КонецЕсли;
        Найденная = Документы.УчебнаяКарточкаТекста85.НайтиПоРеквизиту("КлючКарточки85", Ключи[Индекс]);
        Если Найденная <> Карточка.Ссылка Тогда
            ВызватьИсключение "Native FindByAttribute не совпал с actual уникальной карточкой после полной проверки всех3строк";
        КонецЕсли;
        ОбъектКарточки = Карточка.Ссылка.ПолучитьОбъект();
        Если ОбъектКарточки = Неопределено Или ОбъектКарточки.Ссылка <> Карточка.Ссылка
            Или ОбъектКарточки.МаркерСтенда85 <> Карточка.МаркерСтенда85 Или ОбъектКарточки.КлючКарточки85 <> Карточка.КлючКарточки85
            Или ОбъектКарточки.КодКарточки85 <> Карточка.КодКарточки85 Или ОбъектКарточки.Сумма85 <> Карточка.Сумма85
            Или ОбъектКарточки.Дата <> Карточка.Дата Или ОбъектКарточки.Номер <> Карточка.Номер
            Или ОбъектКарточки.Проведен Или ОбъектКарточки.ПометкаУдаления Тогда
            ВызватьИсключение "Actual full document object не совпал с собственной строкой запроса";
        КонецЕсли;
        Проверенные.Добавить(Карточка.Ссылка);
    КонецЦикла;
    Возврат Карточки;
КонецФункции

Функция ДополнитьПоле85(Значение, Ширина)
    Если ТипЗнч(Значение) <> Тип("Строка") Или СтрДлина(Значение) > Ширина Тогда
        ВызватьИсключение "Текст не должен обрезаться в своем compiled поле";
    КонецЕсли;
    Результат = Значение;
    Пока СтрДлина(Результат) < Ширина Цикл
        Результат = Результат + " ";
    КонецЦикла;
    Возврат Результат;
КонецФункции

Функция ПолучитьСвоюОбласть85(Макет, Имя, ЧислоПараметров)
    Если ТипЗнч(Макет) <> Тип("ТекстовыйДокумент") Тогда
        ВызватьИсключение "Фабрика обязана вернуть настоящий compiled TextDocument, не строку с похожим текстом";
    КонецЕсли;
    Область = Макет.ПолучитьОбласть(Имя);
    Если ТипЗнч(Область) <> Тип("ТекстовыйДокумент") Или ТипЗнч(Область.Параметры) <> Тип("ПараметрыМакетаТекстовогоДокумента")
        Или Область.Параметры.Количество() <> ЧислоПараметров Тогда
        ВызватьИсключение "Native GetArea/readonly Parameters/Count не подтвердили собственный compiled макет";
    КонецЕсли;
    Возврат Область;
КонецФункции

Функция ПрочитатьСвойТекст85(Документ) Экспорт
    Если ТипЗнч(Документ) <> Тип("ТекстовыйДокумент") Тогда
        ВызватьИсключение "Нужен actual native text document для readback";
    КонецЕсли;
    Текст = СтрЗаменить(Документ.ПолучитьТекст(), Символы.ВК + Символы.ПС, Символы.ПС);
    Если Прав(Текст, 1) = Символы.ПС Тогда
        Текст = Лев(Текст, СтрДлина(Текст) - 1);
    КонецЕсли;
    Возврат Текст;
КонецФункции

Функция СформироватьСвойТекст85() Экспорт
    ПроверитьСвойСтенд85();
    Если Не ЭтотОбъект.ПроверитьЗаполнение() Тогда
        ВызватьИсключение "Native CheckFill отказал; прошлый видимый текст не заменяется";
    КонецЕсли;
    Карточки = ПрочитатьСвоиКарточки85();
    Доступные = Документы.УчебнаяКарточкаТекста85.ПолучитьДанныеВыбора(
        Новый Структура("Отбор,СтрокаПоиска", Новый Структура("МаркерСтенда85", "2bf185cc-b660-4de1-96d1-a3a4dc905acf"), Неопределено));
    Если ТипЗнч(Доступные) <> Тип("СписокЗначений") Или Доступные.Количество() <> 3 Тогда
        ВызватьИсключение "Native GetChoiceData обязан вернуть actual список всех3своих карточек";
    КонецЕсли;
    ВсеСсылки = Карточки.ВыгрузитьКолонку("Ссылка");
    Проверенные = Новый Массив;
    Для Каждого Элемент Из Доступные Цикл
        Если ТипЗнч(Элемент.Значение) <> Тип("ДокументСсылка.УчебнаяКарточкаТекста85")
            Или ВсеСсылки.Найти(Элемент.Значение) = Неопределено Или Проверенные.Найти(Элемент.Значение) <> Неопределено Тогда
            ВызватьИсключение "GetChoiceData содержит неизвестную/повторную actual ссылку; порядок native списка не угадываем";
        КонецЕсли;
        Проверенные.Добавить(Элемент.Значение);
    КонецЦикла;
    Ссылки = Новый Массив;
    ЧислоКарточек = ?(ЭтотОбъект.Режим85 = "Все", 3, 2);
    Для Индекс = 0 По ЧислоКарточек - 1 Цикл
        Ссылки.Добавить(Карточки[Индекс].Ссылка);
    КонецЦикла;
    Для Каждого Ссылка Из Ссылки Цикл
        Если ТипЗнч(Ссылка) <> Тип("ДокументСсылка.УчебнаяКарточкаТекста85") Или Ссылка.Пустая()
            Или Проверенные.Найти(Ссылка) = Неопределено Тогда
            ВызватьИсключение "Source array должен состоять только из доказанных own refs до SelectByRefs";
        КонецЕсли;
    КонецЦикла;
    Выборка = Документы.УчебнаяКарточкаТекста85.ВыбратьПоСсылкам(Ссылки);
    Если ТипЗнч(Выборка) <> Тип("ДокументВыборка.УчебнаяКарточкаТекста85") Тогда
        ВызватьИсключение "Не получена native DocumentSelection собственной metadata";
    КонецЕсли;
    Прочитанные = Новый Массив;
    Для Индекс = 0 По ЧислоКарточек - 1 Цикл
        Прочитанные.Добавить(Неопределено);
    КонецЦикла;
    Сумма = 0;
    ЧислоСтрок = 0;
    Пока Выборка.Следующий() Цикл
        Индекс = Ссылки.Найти(Выборка.Ссылка);
        Если Индекс = Неопределено Тогда
            ВызватьИсключение "Native выборка содержит не выбранную собственную карточку";
        КонецЕсли;
        Факт = Карточки[Индекс];
        Если Прочитанные[Индекс] <> Неопределено Или Выборка.Сумма85 <> Факт.Сумма85
            Или Выборка.КодКарточки85 <> Факт.КодКарточки85 Или Выборка.КлючКарточки85 <> Факт.КлючКарточки85
            Или Выборка.МаркерСтенда85 <> Факт.МаркерСтенда85 Или Выборка.Дата <> Факт.Дата
            Или Выборка.Номер <> Факт.Номер Или Выборка.Проведен Или Выборка.ПометкаУдаления Тогда
            ВызватьИсключение "Full own selection readback нарушен; частичное игнорирование ссылок не считается успехом";
        КонецЕсли;
        Прочитанные[Индекс] = Выборка.Ссылка;
        ЧислоСтрок = ЧислоСтрок + 1;
        Сумма = Сумма + Выборка.Сумма85;
    КонецЦикла;
    Если ЧислоСтрок <> ЧислоКарточек Или Сумма <> ?(ЧислоКарточек = 3, 75, 45) Тогда
        ВызватьИсключение "Native полный readback должен дать3/75 либо2/45";
    КонецЕсли;
    МойМенеджер = Обработки.СводкаКарточек85;
    Заголовок = ПолучитьСвоюОбласть85(МойМенеджер.ПолучитьМакет("Заголовок85"), "Заголовок85", 1);
    МакетКарточки = Документы.УчебнаяКарточкаТекста85.ПолучитьМакет("СтрокаКарточки85");
    Итог = ПолучитьСвоюОбласть85(ЭтотОбъект.ПолучитьМакет("Итог85"), "Итог85", 2);
    Заголовок.Параметры.Заполнить(Новый Структура("Заголовок85", ЭтотОбъект.Заголовок85));
    Итог.Параметры.Заполнить(Новый Структура("Количество85,Итог85", "_COUNT85_", "_SUM85_"));
    ИндексИтога = Неопределено;
    ИндексКоличества = Неопределено;
    Для Индекс = 0 По Итог.Параметры.Количество() - 1 Цикл
        Значение = Итог.Параметры.Получить(Индекс);
        Если Значение = "_SUM85_" И ИндексИтога = Неопределено Тогда
            ИндексИтога = Индекс;
        ИначеЕсли Значение = "_COUNT85_" И ИндексКоличества = Неопределено Тогда
            ИндексКоличества = Индекс;
        Иначе
            ВызватьИсключение "Native parameter index не доказан уникальным sentinel readback";
        КонецЕсли;
    КонецЦикла;
    Если ИндексИтога = Неопределено Или ИндексКоличества = Неопределено Или ИндексИтога = ИндексКоличества Тогда
        ВызватьИсключение "Не подтверждены два разных actual parameter indexes";
    КонецЕсли;
    ТекстСуммы = Формат(Сумма, "ЧГ=0; ЧДЦ=0");
    ТекстКоличества = Формат(ЧислоСтрок, "ЧГ=0; ЧДЦ=0");
    Итог.Параметры.Заполнить(Новый Структура("Количество85,Итог85", ТекстКоличества, ""));
    Итог.Параметры.Установить(ИндексИтога, ТекстСуммы);
    Если Итог.Параметры.Получить(ИндексИтога) <> ТекстСуммы Или Итог.Параметры.Получить(ИндексКоличества) <> ТекстКоличества Тогда
        ВызватьИсключение "Native Fill/Set discovered index/Get не подтвердили actual итог/число";
    КонецЕсли;
    Результат = Новый ТекстовыйДокумент;
    Результат.Вывести(Заголовок);
    Ожидаемый = "Сводка|" + ДополнитьПоле85(ЭтотОбъект.Заголовок85, 40) + "|";
    Для Индекс = 0 По ЧислоКарточек - 1 Цикл
        ОбластьКарточки = ПолучитьСвоюОбласть85(МакетКарточки, "Карточка85", 2);
        Код = Карточки[Индекс].КодКарточки85;
        Число = Формат(Карточки[Индекс].Сумма85, "ЧГ=0; ЧДЦ=0");
        ОбластьКарточки.Параметры.Заполнить(Новый Структура("Код85,Сумма85", Код, Число));
        Результат.Вывести(ОбластьКарточки);
        Ожидаемый = Ожидаемый + Символы.ПС + "Карточка|" + ДополнитьПоле85(Код, 8) + "|" + ДополнитьПоле85(Число, 12) + "|";
    КонецЦикла;
    Результат.Вывести(Итог);
    Ожидаемый = Ожидаемый + Символы.ПС + "Итог|" + ДополнитьПоле85(ТекстКоличества, 12) + "|" + ДополнитьПоле85(ТекстСуммы, 12) + "|";
    Фактический = ПрочитатьСвойТекст85(Результат);
    Если Фактический <> Ожидаемый Тогда
        ВызватьИсключение "Compiled output exact width/padding/line/order/sum отличается; обрезку/лишние строки не маскируем Trim";
    КонецЕсли;
    Повторно = ПрочитатьСвоиКарточки85();
    Для Индекс = 0 По 2 Цикл
        Для Каждого Колонка Из Карточки.Колонки Цикл
            Если Повторно[Индекс][Колонка.Имя] <> Карточки[Индекс][Колонка.Имя] Тогда
                ВызватьИсключение "Весь own source изменился между snapshot/output; не выдаем candidate за свежий результат";
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Результат.ТолькоПросмотр = Истина;
    Если Не Результат.ТолькоПросмотр Или ПрочитатьСвойТекст85(Результат) <> Фактический Тогда
        ВызватьИсключение "Own readonly setter/readback изменил candidate; видимое состояние не заменяется";
    КонецЕсли;
    Возврат Новый Структура("Документ,Текст,Сумма,Количество,Доступные", Результат, Фактический, Сумма, ЧислоСтрок, Доступные);
КонецФункции
Полная ordinary форма actual transient instance

Обработки → СводкаКарточек85 → Формы → Сводка85 → Модуль, целиком

Толстый обычный клиент, ПриОткрытии0/реальнаяКнопкаНажатие1; полное source/control/key binding.

Перем СвойОбъект85;
Перем СвойКлюч85;
Перем Подготовлено85;
Перем Остановка85;

Процедура Инициализировать85(Объект, Ключ) Экспорт
    Если Подготовлено85 = Истина Или Открыта() Или ТипЗнч(Объект) <> Тип("ОбработкаОбъект.СводкаКарточек85")
        Или Объект.Метаданные() <> Метаданные.Обработки.СводкаКарточек85
        Или ТипЗнч(Ключ) <> Тип("УникальныйИдентификатор") Или КлючУникальности <> Ключ Тогда
        ВызватьИсключение "Нужны закрытая native instance форма/actual own object/freshKey";
    КонецЕсли;
    Объект.ПроверитьСвойСтенд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.ТолькоПросмотр Тогда
        ВызватьИсключение "СТОП: actual собственный instance/control/output binding изменен";
    КонецЕсли;
    СвойОбъект85.ПроверитьСвойСтенд85();
КонецПроцедуры

Процедура Сформировать85(Кнопка)
    Если ТипЗнч(Кнопка) <> Тип("Кнопка") Или Кнопка <> ЭлементыФормы.Сформировать85 Или Кнопка.Имя <> "Сформировать85" Тогда
        ВызватьИсключение "Нужен настоящий source-control ordinary button event1";
    КонецЕсли;
    ПроверитьСвязь85();
    Если Не СвойОбъект85.ДопустимыйВвод85(ВводЗаголовка85, ВводРежима85) Тогда
        Статус85 = "Отказ ввода: заголовок1..40 без CR/LF/TAB/|/краевых пробелов и режимВсе/ПервыеДва. Старый вывод сохранен.";
        Возврат;
    КонецЕсли;
    СвойОбъект85.Заголовок85 = ВводЗаголовка85;
    СвойОбъект85.Режим85 = ВводРежима85;
    Если Не СвойОбъект85.ПроверитьЗаполнение() Тогда
        Статус85 = "Native CheckFill вернул Ложь. Старый вывод и собственные документы не изменены.";
        Возврат;
    КонецЕсли;
    Попытка
        Кандидат = СвойОбъект85.СформироватьСвойТекст85();
        ПроверитьСвязь85();
        Если ТипЗнч(Кандидат.Документ) <> Тип("ТекстовыйДокумент") Или ТипЗнч(Кандидат.Текст) <> Тип("Строка")
            Или ТипЗнч(Кандидат.Доступные) <> Тип("СписокЗначений") Или Кандидат.Доступные.Количество() <> 3
            Или Кандидат.Сумма <> ?(ВводРежима85 = "Все", 75, 45) Или Кандидат.Количество <> ?(ВводРежима85 = "Все", 3, 2) Тогда
            ВызватьИсключение "Candidate не подтвердил native document/list/numeric contract до visible replacement";
        КонецЕсли;
        Вывод85 = Кандидат.Документ;
        Доступные85 = Кандидат.Доступные;
        Если ЭлементыФормы.Вывод85.Значение <> Вывод85 Или Не ЭлементыФормы.Вывод85.ТолькоПросмотр
            Или СвойОбъект85.ПрочитатьСвойТекст85(ЭлементыФормы.Вывод85.Значение) <> Кандидат.Текст Тогда
            ВызватьИсключение "Actual form binding readback отказал; replacement мог завершиться частично";
        КонецЕсли;
        Статус85 = "Actual candidate " + Формат(Кандидат.Количество, "ЧГ=0; ЧДЦ=0") + "/" + Формат(Кандидат.Сумма, "ЧГ=0; ЧДЦ=0") + ". БД только прочитана; визуальный результат проверьте вручную.";
    Исключение
        Остановка85 = Истина;
        Статус85 = "СТОП: source/layout/UI outcome требует ручной проверки; не повторять. " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры
Полный native startup собственного экземпляра

Конфигурация → Модуль обычного приложения, целиком

NativeПриНачалеРаботыСистемы0, guardedordinarythick; actualmanager.Create0→sameobject.GetForm route.

Процедура ПриНачалеРаботыСистемы()
#Если ТолстыйКлиентОбычноеПриложение Тогда
    Объект = Обработки.СводкаКарточек85.Создать();
    Если ТипЗнч(Объект) <> Тип("ОбработкаОбъект.СводкаКарточек85") Или Объект.Метаданные() <> Метаданные.Обработки.СводкаКарточек85 Тогда
        ВызватьИсключение "Manager.Create не вернул actual собственный transient объект";
    КонецЕсли;
    Объект.Заголовок85 = "Мои учебные карточки";
    Объект.Режим85 = "Все";
    Форма = Объект.СоздатьСвоюФорму85();
    Форма.Открыть();
#Иначе
    ВызватьИсключение "Урок только для собственного толстого обычного Windows клиента8.5.1.1343";
#КонецЕсли
КонецПроцедуры
Полный собственный compiled текстовый макет

Обработки → СводкаКарточек85 → Макеты → Заголовок85 → текстовый редактор

Текстовый редактор своего макета; это НЕ модуль BSL и НЕ внешний plain .txt

#Область Заголовок85
Сводка|[Заголовок85                             ]|
#КонецОбласти
Полный собственный compiled текстовый макет

Документы → УчебнаяКарточкаТекста85 → Макеты → СтрокаКарточки85 → текстовый редактор

Текстовый редактор своего макета; это НЕ модуль BSL и НЕ внешний plain .txt

#Область Карточка85
Карточка|[Код85   ]|[Сумма85     ]|
#КонецОбласти
Полный собственный compiled текстовый макет

Обработки → СводкаКарточек85 → Макеты → Итог85 → текстовый редактор

Текстовый редактор своего макета; это НЕ модуль BSL и НЕ внешний plain .txt

#Область Итог85
#Поле Количество85
#Выравнивание Лево
Итог|[Количество85]|[Итог85      ]|
#КонецОбласти

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

  1. Проверить exactFile/version/fullmetadata/currentuser и получить настоящую transient обработку из ownmanager.Create0.

  2. NativeCheckFill0/FillCheck2 отказывает отдельному ownblank объекту; actualinstance.GetForm("Сводка85",,freshKey) создаёт closedown ordinary form, затем передаётся sameobject.

  3. WholeQuery безГДЕ подтверждает3actual refs/все9scalarfields; FindByAttribute должен совпасть с уникальными уже подтвержденными строками, а actualref.GetObject с полным объектом.

  4. GetChoiceData возвращает native СписокЗначений exactly3ownrefs; typedarray выбранныхA/B/C→SelectByRefs и full native selection readback независимо от порядка.

  5. Три actualcompiled factories→nativeGetArea/Parameters/Count; Footer sentinelFill→Get indexes→Fillactual→Set onlydiscoveredindex→Getreadback.

  6. NativeTextDocument.Put строит candidate, GetText exact padding/lines/sums75/45 и повторныйwholeDBsnapshot проверяются ДО visible replacement.

  7. Настоящая own button/form привязка показывает candidate и availablechoices; invalid input/CancelClose не скрывают записи, exceptionsticky останавливает дальнейшее действие.

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

  1. Будущий ручной стенд должен дать полные5строк/3карточки/75 и4строки/2карточки/45 при sourceDB3 без изменений.

  2. Blank nativeCheckFillFalse и неправильный ввод сохраняют прежний вывод; altered layout/wholeDB/owncontrol binding вызывает явный отказ.

  3. Статические тесты сравнивают installed raw/native contracts, source/negative mutations и независимую арифметику; CF/BSLcompiler/1С/rendering не выполнялись.

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

Ожидаемый будущий ручной результат: actual native compiled text75→45, доступные ownchoices3 и неизменные3карточки. Здесь только authoredsource/static tests; actualruntime/CFcompile/1С/DB/UI/network0.

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

  1. UUID строки/пути не доказывает владениеИБ или юридическое владение; разрешён только отдельно вручную созданный own стенд.

  2. FindByAttribute выбирает лишь один документ при дублях; нашу уникальность доказывает whole3snapshot, не обещание API.

  3. SelectByRefs игнорирует неподходящие/несуществующиеrefs; отсутствие expected fullreadback — отказ, не успешная частичная сводка.

  4. TextDocument.GetArea возвращает новый actual документ, Params readonly не означает readonly его значений; никаких fake constructors/неизвестного storedobject.

  5. Object.FillCheck server/thick/external available; только UI GetForm helper условноordinarythick, не универсальная проверка «не сервер» в File варианте.

  6. Несколько присваиваний формы не атомарны. До commit ошибки сохраняют прежний вывод; ошибка после visible setter может оставить partialUI и требует остановки.

  7. Compiledlayout widths/locale/parser/native output здесь не запускались; exactreadback failclosed может отказать неподходящему макету, а не маскирует его.

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

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

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

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

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