ТелоМакетаКомпоновкиДанных.Удалить

Методы · Delete

Удаляет элемент из коллекции.

Синтаксис

Удалить(<Элемент>)
Полное описание, параметры и ограничения

ТелоМакетаКомпоновкиДанных.Удалить (DataCompositionTemplateBody.Delete)

ТелоМакетаКомпоновкиДанных (DataCompositionTemplateBody)

Удалить (Delete)

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

Синтаксис:
Удалить(<Элемент>)
Параметры:

<Элемент> (обязательный)
Тип: МакетОбластиМакетаКомпоновкиДанных , ГруппировкаМакетаКомпоновкиДанных, ИерархическаяГруппировкаТаблицыМакетаКомпоновкиДанных, ЗаписиМакетаКомпоновкиДанных, ТаблицаМакетаКомпоновкиДанных, ДиаграммаМакетаКомпоновкиДанных, ВложенныйОбъектМакетаКомпоновкиДанных.
Удаляемый элемент.
Описание:

Удаляет элемент из коллекции.

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

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

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

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

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

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

Тело макета СКД: добавить каркасы записей, переставить, удалить и восстановить

На независимой полной XDTO-копии редактируем настоящие элементы тела. Неполные каркасы не исполняются; исходный и полностью восстановленный макеты снова дают полный результат 4/800.

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

Полный серверный общий модуль УчебныеДетальныеЗаписи85 собственного нового стенда; отдельный полный модуль формы ниже.

Подготовка

  1. НОВАЯ пустая файловая база 8.5.1.1343: корневое Имя=УчебныеДетальныеЗаписи85, совместимость НеИспользовать, управляемое приложение. Не рабочая база и не копия КА2/УНФ/УТ/БП. Без бизнес-метаданных, расширений, подписок, заданий и внешних действий. Здесь в 1С не запускалось: runtimeVerifiedScenarios=0.

  2. Общий модуль УчебныеДетальныеЗаписи85: Сервер=Да, Клиент=Нет, Вызов сервера=Нет, Глобальный=Нет, Привилегированный=Нет. Вставьте весь основной код одного урока. Все свои исходные данные, схема, выбор, настройки, макет и проверки включены; неизвестных входных объектов нет.

  3. Создайте обработку УчебноеТелоОтчета85 → управляемая форма Пульт → команда Выполнить с действием Выполнить и кнопкой. Полный отдельный модуль формы ниже. F7 и обновление только нового своего стенда перед будущим отдельно разрешенным опытом.

  4. Собственный запрос: Книга/3/250/750 и Ручка/1/50/50. Только детальные записи и четыре выбранных поля, без таблиц/диаграмм или иерархических группировок. Генератор макета для коллекции значений; настоящий вывод получается в ТаблицаЗначений.

  5. Обычные ЗаписиМакетаКомпоновкиДанных не тождественны ЗаписиГруппировкиТаблицыМакетаКомпоновкиДанных: их МакетШапки/МакетПодвала — СТРОКИ имен областей, не объекты макетов строковой оси. Смотрите actual-часть в серверном отладчике после ПолучитьСвоиДетальныеЗаписи.

  6. В лимитном уроке порядок строк явно не задается: после КоличествоЗаписей=1 допустима любая одна полная строка исходного запроса. Проверка сверяет ее четыре настоящие ячейки, а не обещает первую Книгу по случайному порядку.

  7. Редакторский урок делает независимый полный XDTO-макет из собственной строки памяти. Временные пустые каркасы детальных записей и очищенное тело не выводятся. Перед повторным выводом восстанавливается ВЕСЬ исходный макет. Файлы, архивы и резервные копии не создаются.

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойПустойСтенд();
    Если ПривилегированныйРежим() Тогда
        ВызватьИсключение "Привилегированный режим не нужен";
    КонецЕсли;
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеТовары";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Истина;
    Набор.Запрос = "ВЫБРАТЬ
    |    ""Книга"" КАК Наименование,
    |    3 КАК Количество,
    |    250 КАК Цена,
    |    750 КАК Сумма
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Ручка"", 1, 50, 50";
    Настройки = Схема.НастройкиПоУмолчанию;
    Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
        Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
        Выбранное.Использование = Истина;
    КонецЦикла;
    Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    Детали.Использование = Истина;
    АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоВыбор.Использование = Истина;
    Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = Компоновщик.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    Записи = ПолучитьСвоиДетальныеЗаписи(Макет);
    ПоказатьСвоиОпределенияЗаписей(Макет, Записи);
    Записи.КоличествоЗаписей = -1;
    Записи.ПроцентЗаписей = 100;
    Если Записи.КоличествоЗаписей <> -1 Или Записи.ПроцентЗаписей <> 100 Тогда
        ВызватьИсключение "В собственном полном макете нужно разрешить все детальные записи";
    КонецЕсли;
    ПроверитьСвойПолныйВывод(Макет, Неопределено);
    ТекстМакета = СвойМакетВСтроку(Макет);
    Черновик = СвойМакетИзСтроки(ТекстМакета);
    Скопированные = ПолучитьСвоиДетальныеЗаписи(Черновик);
    ПоказатьСвоиОпределенияЗаписей(Черновик, Скопированные);
    Каталог = Черновик.Тело;
    ИсходноеКоличество = Каталог.Количество();
    ПервичныеЧасти = Новый Массив;
    Для Каждого Часть Из Каталог Цикл
        ПервичныеЧасти.Добавить(Часть);
    КонецЦикла;
    Первый = Каталог.Добавить(Тип("ЗаписиМакетаКомпоновкиДанных"));
    ЗаполнитьСвойЧерновикЗаписей(Первый, "ПервыйКаркас85");
    Второй = Каталог.Вставить(0, Тип("ЗаписиМакетаКомпоновкиДанных"));
    ЗаполнитьСвойЧерновикЗаписей(Второй, "ВторойКаркас85");
    Если Каталог.Количество() <> ИсходноеКоличество + 2 Или Каталог.Получить(0) <> Второй
        Или Каталог.Индекс(Первый) <> ИсходноеКоличество + 1 Тогда
        ВызватьИсключение "Добавление и вставка должны сохранить настоящие собственные части тела и их порядок";
    КонецЕсли;
    ПроверитьСвоиПервичныеЧасти(Каталог, ПервичныеЧасти, 1);
    Каталог.Сдвинуть(Первый, -(ИсходноеКоличество + 1));
    Если Каталог.Индекс(Первый) <> 0 Или Каталог.Получить(0) <> Первый Или Каталог.Получить(1) <> Второй Тогда
        ВызватьИсключение "Сдвигается тот же собственный каркас в начало своего тела";
    КонецЕсли;
    ПроверитьСвоиПервичныеЧасти(Каталог, ПервичныеЧасти, 2);
    Каталог.Удалить(Второй);
    Если Каталог.Количество() <> ИсходноеКоличество + 1 Или Каталог.Получить(0) <> Первый Тогда
        ВызватьИсключение "Удаляется только собственный второй временный каркас";
    КонецЕсли;
    ПроверитьСвоиПервичныеЧасти(Каталог, ПервичныеЧасти, 1);
    Каталог.Очистить();
    Если Каталог.Количество() <> 0 Или ПолучитьСвоиДетальныеЗаписи(Макет) <> Записи Тогда
        ВызватьИсключение "Очищается только тело независимого черновика, исходные настоящие записи сохраняются";
    КонецЕсли;
    Восстановленный = СвойМакетИзСтроки(ТекстМакета);
    Восстановленные = ПолучитьСвоиДетальныеЗаписи(Восстановленный);
    ПоказатьСвоиОпределенияЗаписей(Восстановленный, Восстановленные);
    Если Восстановленные.КоличествоЗаписей <> -1 Или Восстановленные.ПроцентЗаписей <> 100 Тогда
        ВызватьИсключение "Полное восстановление должно сохранить полный режим вывода записей";
    КонецЕсли;
    ПроверитьСвойПолныйВывод(Восстановленный, Неопределено);
    ПроверитьСвойПолныйВывод(Макет, Неопределено);
    Сообщить("Неполное тело черновика не исполнялось; оба полных макета сохранили Книга/Ручка и 4/800.");
КонецПроцедуры

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

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

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

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

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

Процедура ПроверитьСвойПолныйВывод(Макет, ВнешниеДанные)
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Макет, ВнешниеДанные);
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    Приемник = Новый ТаблицаЗначений;
    Вывод.ОтображатьПроцентВывода = Ложь;
    Вывод.УстановитьОбъект(Приемник);
    Результат = Вывод.Вывести(Процессор, Ложь);
    Если ТипЗнч(Результат) <> Тип("ТаблицаЗначений") Или Результат.Количество() <> 2
        Или Результат.Колонки.Количество() <> 4 Тогда
        ВызватьИсключение "Настоящий вывод должен дать две строки и четыре колонки";
    КонецЕсли;
    Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
        Если Результат.Колонки.Найти(ИмяПоля) = Неопределено Тогда
            ВызватьИсключение "Потеряна ожидаемая колонка реального вывода " + ИмяПоля;
        КонецЕсли;
    КонецЦикла;
    Книга = Результат.Найти("Книга", "Наименование");
    Ручка = Результат.Найти("Ручка", "Наименование");
    Если Книга = Неопределено Или Ручка = Неопределено Тогда
        ВызватьИсключение "Не найдены обе реальные исходные строки результата";
    КонецЕсли;
    Если Книга.Количество <> 3 Или Книга.Цена <> 250 Или Книга.Сумма <> 750
        Или Ручка.Количество <> 1 Или Ручка.Цена <> 50 Или Ручка.Сумма <> 50
        Или Результат.Итог("Количество") <> 4 Или Результат.Итог("Сумма") <> 800 Тогда
        ВызватьИсключение "Потеряны или изменены реальные ячейки собственного полного вывода";
    КонецЕсли;
    Сообщить("Настоящий вывод проверен: Книга 3 × 250 = 750, Ручка 1 × 50 = 50; количество 4, сумма 800.");
КонецПроцедуры

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

Процедура ПроверитьСвоиПервичныеЧасти(Каталог, ПервичныеЧасти, Смещение)
    Для Номер = 0 По ПервичныеЧасти.Количество() - 1 Цикл
        Если Каталог.Получить(Номер + Смещение) <> ПервичныеЧасти[Номер] Тогда
            ВызватьИсключение "Каждая исходная настоящая часть тела должна сохранить объект и относительный порядок";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Функция СвойМакетВСтроку(Макет)
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(Запись, Макет);
    Возврат Запись.Закрыть();
КонецФункции

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

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

УчебныеДетальныеЗаписи85 → Обработки → УчебноеТелоОтчета85 → Формы → Пульт → Модуль

Полный модуль собственной управляемой формы; здесь не выполнялся.

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
    УчебныеДетальныеЗаписи85.ВыполнитьПример();
КонецПроцедуры

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

  1. ПолучитьСвоиДетальныеЗаписи ищет настоящий тип в Тело макета и обычных вложенных группировках; простой свой стенд обязан иметь ровно одну часть. Это не общий обход таблиц, диаграмм или иерархических группировок произвольного отчета.

  2. Имя/Идентификатор и ОтборЗаписей читаются из самой скомпилированной части для диагностики. Их нельзя отдельно переименовывать или подменять текстом SQL без согласования с другими определениями макета. Пустой фактический отбор сам по себе не ошибка.

  3. НаборыДанных и ОбязательныеНаборыДанных — readonly-массивы строк. Каждый фактический элемент разрешается через Макет.НаборыДанных.Найти с проверкой Неопределено. Первый массив должен иметь источник для данной части; второй может быть пустым и не дополняется выдуманными обязательными наборами.

  4. Строковые МакетШапки/МакетПодвала разрешаются в Макет.Макеты, если не пусты. Пустое имя — отсутствие необязательной области; оно не превращается в произвольный текст шапки. Для генератора коллекции значений внешнее оформление не обещается.

  5. Readonly-Тело и Порядок читаются как настоящие коллекции. Выражения и направления порядка выводятся из фактических элементов; у ТипУпорядочивания readonly-контракт. Не заменяем коллекции новым массивом и не делаем вид, что отсутствие порядка гарантирует первую Книгу.

  6. КоличествоЗаписей=-1 означает все записи, ПроцентЗаписей=100 — полный процент. После установки этих свойств настоящий процессор должен вернуть две строки, четыре колонки и точные ячейки Книги/Ручки, количество 4 и сумму 800. Эталонная таблица вместо результата не создается.

  7. Количество исходных корневых частей берется из настоящего Тело, не предполагается равным 1. Первый добавляется в конец, Второй вставляется в позицию 0; проверяем размеры, настоящие элементы и индекс Первого N+1.

  8. Сдвинуть(Первый,-(N+1)) переносит тот же элемент в начало. Удалить(Второй) удаляет только второй свой каркас. Очистить убирает лишь тело копии; исходные настоящие Записи должны оставаться тем же объектом оригинального макета.

  9. Полный Восстановленный создается из сохраненной собственной строки, его часть, зависимости и области проверяются заново. Оба полных макета действительно выводятся и сверяются по всем ячейкам; старые ссылки частей копии после очистки не используются.

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

  1. Будущий полный результат: Книга/3/250/750 и Ручка/1/50/50 в любом порядке, две строки, четыре колонки, итоги 4/800. Настоящая часть записей ссылается только на существующие наборы и области своего макета.

  2. Для отдельного своего разрешенного отрицательного опыта: перед проверкой имен набора добавить в readonly-массив НаборыДанных строку НетТакогоНабора85, не заменяя само свойство. Разрешение зависимости должно отказать. Здесь проверка и изменение не выполнялись.

  3. Если макет не содержит обычных записей, результат пустой или структура отличается от собственного стенда, пример должен отказать, а не подменить его ожидаемыми строками. Реальная компиляция/вывод/XDTO в 1С здесь не выполнялись.

  4. Черновые размеры: N → N+2 → N+2 → N+1 → 0, проверка индексов и объектов на каждом этапе. После полного восстановления ровно одна обычная часть записей, полный режим -1/100, настоящие Книга/Ручка и итоги 4/800.

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

Ожидается полноценный настоящий вывод двух товаров и 4/800; в лимитном опыте между полными выводами одна настоящая полная строка. Здесь в 1С не запускалось.

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

  1. runtimeVerifiedScenarios=0. Код и native-контракты сверяются статически; ожидаемые результаты не выдаются за запуск 1С.

  2. Свойство КоличествоЗаписей ограничивает вывод данной части, не количество исходных строк запроса. ПроцентЗаписей не является отбором по значению Сумма. Произвольные сочетания процентных и количественных ограничений и правила округления этим уроком не проверяются.

  3. Записи.НаборыДанных, ОбязательныеНаборыДанных, Тело и Порядок readonly как ссылки на коллекции. Читать или редактировать допустимые элементы коллекции — не то же самое, что присвоить новое значение свойству.

  4. Фабрики тела Добавить(Тип) и Вставить(Индекс,Тип) ОБЯЗАТЕЛЬНО получают Тип("ЗаписиМакетаКомпоновкиДанных"). Это отличается от фабрик каталога источников. Записи не создаются через выдуманный Новый; Индекс/Сдвинуть/Удалить получают собственный настоящий элемент этого же тела.

  5. В черновике разрешено назначить собственные имя/идентификатор временного каркаса и пустые ссылки шапки/подвала, но это не полноценная часть вывода: нет связанных источников/областей/тела. Черновик не исполняется, исходная скомпилированная часть не переименовывается.

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

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

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

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

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