ЖурналДокументовМенеджер.<Имя журнала документов>

Типы · <Document journal name>

Предназначен для управления журналом документов, как объектом конфигурации. С помощью этого объекта можно получить выборку документов, регистрируемых в журнале, работать с формами и макетами конкретного журнала документов. Доступ к объекту осуществляется через свойство объекта ЖурналыДокументовМенеджер. Полное имя типа объекта определяется с учетом имени журнала документов конфигурации. Например, для журнала документов "Реализация" имя типа будет выглядеть ЖурналДокументовМенеджер.Реализация.

Примеры платформы

Выборка = ЖурналыДокументов.Реализация.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;
Полное описание, параметры и ограничения

ЖурналДокументовМенеджер.<Имя журнала документов> (DocumentJournalManager.<Document journal name>)

ЖурналДокументовМенеджер.<Имя журнала документов> (DocumentJournalManager.<Document journal name>)

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

Методы:
Выбрать (Select)
ПолучитьМакет (GetTemplate)
ПолучитьФорму (GetForm)

События:
ОбработкаПолученияФормы (FormGetProcessing)

Описание:

Предназначен для управления журналом документов, как объектом конфигурации. С помощью этого объекта можно получить выборку документов, регистрируемых в журнале, работать с формами и макетами конкретного журнала документов. Доступ к объекту осуществляется через свойство объекта ЖурналыДокументовМенеджер.
Полное имя типа объекта определяется с учетом имени журнала документов конфигурации. Например, для журнала документов "Реализация" имя типа будет выглядеть ЖурналДокументовМенеджер.Реализация.

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

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

Пример:

Выборка = ЖурналыДокументов.Реализация.Выбрать();
Пока Выборка.Следующий() Цикл
// обработка выборки

КонецЦикла;

См. также:
ЖурналыДокументовМенеджер, свойство <Имя журнала документов>

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

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

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

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

Объединить заявки и оплаты в своём журнале без путаницы одинаковых номеров

Журнал включает два вида документов. Проверяем сентябрь, фильтруем по объекту метаданных вида и собственной графе, различаем программный порядок и единственную интерактивную настройку Дата.

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

Полный модуль обычной формы Список самого журнала УчебныйЖурнал. Только толстый клиент; Пульт и серверная проверка отдельными модулями ниже. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныйОбщийЖурнал85, совместимость НеИспользовать, обычное приложение, толстый клиент. Не рабочая база и не её копия. Здесь код и UI не запускались: runtimeVerifiedScenarios=0.

  2. Два документа УчебнаяЗаявка и УчебнаяОплата: Номер Строка(10), автонумерация выключена, контроль уникальности включён, проведение запрещено, единственный Комментарий Строка(100), Индексировать. Модули объекта/менеджера пусты, табличных частей нет. Остальные бизнес-объекты, разделители, расширения, задания и подписки отсутствуют.

  3. Создайте единственный журнал документов УчебныйЖурнал, включите в него оба документа. Добавьте графу Сценарий: она отображает реквизит Комментарий ОБОИХ документов, тип Строка(100), индексирование включено. Это реальная графа журнала, не автоматически доступный реквизит любого документа.

  4. ВРУЧНУЮ только в своём стенде запишите четыре документа без проведения/пометок: Заявка 0001/01.09.2026 00:00:00/Заявка; Оплата 0001/15.09.2026 12:00:00/Оплата; Заявка 0002/30.09.2026 23:59:59/Заявка; Оплата 0002/01.10.2026 00:00:00/Оплата. В дате показывайте секунды. Два совпадающих номера разных видов намеренны; код не создаёт и не удаляет записи.

  5. УчебныйЖурнал → Формы: обычная форма Список, назначьте её основной. Реквизит Журнал типа ЖурналДокументовСписок.УчебныйЖурнал, табличное поле СписокЖурнала с данными именно Журнал. Колонки Дата, Номер, ВидДокумента и Сценарий связаны с колонками источника. ТолькоПросмотр=Да; команд записи, удаления, создания и проведения нет.

  6. В Список добавьте ТолькоОплаты, ТолькоСценарийОплаты, СнятьДополнительныеОтборы, СортироватьПоСценарию, ВернутьХронологию, РазрешитьИнтервал, ЗапретитьИнтервал, ПроверитьВозвратДоступностей, Обновить, ЗакрытьСписок. Назначьте действия, ПриОткрытии и полный отдельный модуль списка. Оставьте стандартный диалог настройки списка в контекстном меню поля.

  7. Создайте обработку УчебныйЖурналПульт85 с обычной основной формой Пульт. Кнопки ОткрытьЖурнал, СводкаИзМакета, ПовторитьСвоеОкно, ЗакрытьСвойЖурнал; назначьте одноимённые действия и события ПриОткрытии/ПередЗакрытием. Полный модуль Пульта вставьте отдельно.

  8. УчебныйЖурнал → Макеты: текстовый макет Сводка, одна строка Документов сентября: %1 без кавычек. Общий модуль УчебныйЖурнал85: неглобальный, Сервер=Да, Вызов сервера=Да, клиентские флаги=Нет, привилегированный=Нет; вставьте полный общий модуль проверки ниже.

  9. Обновите конфигурацию базы, проверьте F7, включение обоих видов в журнал, соответствие графы каждому реквизиту и привязку данных поля. ТолькоПросмотр — настройка UI, не права доступа; неизвестные модули и рабочие базы недопустимы.

Перем СвоиДокументы;
Перем Подготовлено;
Перем РазрешалисьИзмененияИнтервала;

Функция ПодготовитьДоОткрытия() Экспорт
    СвоиДокументы = УчебныйЖурнал85.ПрочитатьСвойНабор();
    Если ЭтаФорма.Открыта() Или ТипЗнч(Журнал) <> Тип("ЖурналДокументовСписок.УчебныйЖурнал") Тогда
        ВызватьИсключение "Нужна своя закрытая обычная форма с реквизитом журнала";
    КонецЕсли;
    Колонки = Журнал.Колонки;
    Для Каждого Имя Из СтрРазделить("Дата,Номер,ВидДокумента,Сценарий", ",") Цикл
        Если Колонки.Найти(Имя) = Неопределено Тогда
            Колонки.Добавить(Имя);
        КонецЕсли;
    КонецЦикла;
    Журнал.Отбор.Сбросить();
    Журнал.Порядок.Установить("Дата Возр");
    Поле = ЭлементыФормы.СписокЖурнала;
    Поле.ТолькоПросмотр = Истина;
    Поле.ПроверкаОтображенияНовойСтроки = ВариантПроверкиОтображенияНовойСтроки.СообщатьОНесоответствииОтбору;
    Настройка = Новый НастройкаПериода;
    Настройка.РедактироватьКакИнтервал = Истина;
    Настройка.РедактироватьКакПериод = Ложь;
    Настройка.УстановитьПериод(Дата(2026, 9, 1, 0, 0, 0), Дата(2026, 9, 30, 23, 59, 59), Ложь);
    Настройка.ВариантНастройки = ВариантНастройкиПериода.Интервал;
    Если Настройка.ПолучитьДатуНачала() <> Дата(2026, 9, 1, 0, 0, 0)
        Или Настройка.ПолучитьДатуОкончания() <> Дата(2026, 9, 30, 23, 59, 59) Тогда
        ВызватьИсключение "Не подтверждены точные границы своего сентября";
    КонецЕсли;
    Поле.СтандартныйПериод = Настройка;
    Если ТипЗнч(Поле.СтандартныйПериод) <> Тип("НастройкаПериода") Тогда
        ВызватьИсключение "Нужна НастройкаПериода, не одноименный тип СтандартныйПериод";
    КонецЕсли;
    РазрешалисьИзмененияИнтервала = Ложь;
    УстановитьДоступности(Ложь);
    Менеджер = ЖурналыДокументов.УчебныйЖурнал;
    Выборка = Менеджер.Выбрать(Дата(2026, 9, 1, 0, 0, 0), Дата(2026, 9, 30, 23, 59, 59), , "Дата Возр");
    Ключи = Новый Массив;
    Пока Выборка.Следующий() Цикл
        Ключ = Выборка.Ссылка.Метаданные().Имя + "." + Выборка.Номер;
        Если СвоиДокументы.Получить(Ключ) <> Выборка.Ссылка Тогда
            ВызватьИсключение "В выборке журнала посторонняя ссылка";
        КонецЕсли;
        Ключи.Добавить(Ключ);
    КонецЦикла;
    Если СтрСоединить(Ключи, ",") <> "УчебнаяЗаявка.0001,УчебнаяОплата.0001,УчебнаяЗаявка.0002" Тогда
        ВызватьИсключение "Журнал не включил оба своих вида или граничные документы";
    КонецЕсли;
    Подготовлено = Истина;
    Возврат Ключи.Количество();
КонецФункции

Процедура ПриОткрытии()
    Если Подготовлено <> Истина Тогда
        ВызватьИсключение "Открывайте этот журнал только своим Пультом после подготовки";
    КонецЕсли;
КонецПроцедуры

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

Процедура РазрешитьИнтервал(Кнопка)
    УстановитьДоступности(Истина);
КонецПроцедуры

Процедура ЗапретитьИнтервал(Кнопка)
    УстановитьДоступности(Ложь);
КонецПроцедуры

Процедура ПроверитьФиксированныйОпыт()
    Если РазрешалисьИзмененияИнтервала = Истина Тогда
        ВызватьИсключение "После разрешения ручного интервала откройте новый собственный опыт";
    КонецЕсли;
КонецПроцедуры

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

Процедура ТолькоСценарийОплаты(Кнопка)
    ПроверитьФиксированныйОпыт();
    СнятьДополнительныеОтборы(Неопределено);
    ОтборСценария = Журнал.Отбор.Найти("Сценарий");
    Если ОтборСценария = Неопределено Тогда
        ВызватьИсключение "Графа Сценарий не включена в отбор своего журнала";
    КонецЕсли;
    ОтборСценария.Установить("Оплата", Истина);
    Обновить(Неопределено);
    Сообщить("В собственном сентябре графе Оплата соответствует один документ");
КонецПроцедуры

Процедура СнятьДополнительныеОтборы(Кнопка)
    Для Каждого Имя Из СтрРазделить("ВидДокумента,Сценарий", ",") Цикл
        Элемент = Журнал.Отбор.Найти(Имя);
        Если Элемент = Неопределено Тогда
            ВызватьИсключение "Нет собственного элемента отбора " + Имя;
        КонецЕсли;
        Элемент.Использование = Ложь;
    КонецЦикла;
    Обновить(Неопределено);
КонецПроцедуры

Процедура СортироватьПоСценарию(Кнопка)
    Журнал.Порядок.Установить("Сценарий Возр, Дата Возр");
    Обновить(Неопределено);
КонецПроцедуры

Процедура ВернутьХронологию(Кнопка)
    Журнал.Порядок.Установить("Дата Возр");
    Обновить(Неопределено);
КонецПроцедуры

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

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

Процедура Обновить(Кнопка)
    Журнал.Обновить();
    ЭлементыФормы.СписокЖурнала.ОбновитьСтроки();
КонецПроцедуры

Процедура ЗакрытьСписок(Кнопка)
    ЭтаФорма.Закрыть();
КонецПроцедуры
УчебныйЖурналПульт85.Пульт

УчебныйОбщийЖурнал85 → Обработки → УчебныйЖурналПульт85 → Формы → Пульт → Модуль

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

Перем СвоеОкно;
Перем СвоеКоличество;

Процедура ПриОткрытии()
    УчебныйЖурнал85.ПроверитьСвойСтенд();
    СвоеОкно = Неопределено;
    СвоеКоличество = Неопределено;
КонецПроцедуры

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

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

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

Процедура ЗакрытьСвойЖурнал(Кнопка)
    ЗакрытьСвоеОкно();
КонецПроцедуры

Процедура ЗакрытьСвоеОкно()
    Если СвоеОкно <> Неопределено Тогда
        Если СвоеОкно.Открыта() Тогда
            СвоеОкно.Закрыть();
            Если СвоеОкно.Открыта() Тогда
                ВызватьИсключение "Свое окно отказалось закрываться";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    ЗакрытьСвоеОкно();
КонецПроцедуры
УчебныйЖурнал85.ПроверкаИЧтение

УчебныйОбщийЖурнал85 → Общие → Общие модули → УчебныйЖурнал85

Полный серверный модуль проверки стенда и чтения четырех своих документов; не выполнялся.

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

Функция ПрочитатьСвойНабор() Экспорт
    ПроверитьСвойСтенд();
    Ожидания = Новый Соответствие;
    Ожидания.Вставить("УчебнаяЗаявка.0001", Новый Структура("Дата,Комментарий", Дата(2026, 9, 1, 0, 0, 0), "Заявка"));
    Ожидания.Вставить("УчебнаяОплата.0001", Новый Структура("Дата,Комментарий", Дата(2026, 9, 15, 12, 0, 0), "Оплата"));
    Ожидания.Вставить("УчебнаяЗаявка.0002", Новый Структура("Дата,Комментарий", Дата(2026, 9, 30, 23, 59, 59), "Заявка"));
    Ожидания.Вставить("УчебнаяОплата.0002", Новый Структура("Дата,Комментарий", Дата(2026, 10, 1, 0, 0, 0), "Оплата"));
    Данные = Новый Соответствие;
    Для Каждого ИмяДокумента Из СтрРазделить("УчебнаяЗаявка,УчебнаяОплата", ",") Цикл
        Менеджер = Документы[ИмяДокумента];
        Выборка = Менеджер.Выбрать();
        Пока Выборка.Следующий() Цикл
            Ключ = Выборка.Ссылка.Метаданные().Имя + "." + Выборка.Номер;
            Ожидание = Ожидания.Получить(Ключ);
            Если Ожидание = Неопределено Или Данные.Получить(Ключ) <> Неопределено Тогда
                ВызватьИсключение "В своей базе неизвестный или повторный документ";
            КонецЕсли;
            Если Выборка.Дата <> Ожидание.Дата Или Выборка.Комментарий <> Ожидание.Комментарий
                Или Выборка.Проведен Или Выборка.ПометкаУдаления Тогда
                ВызватьИсключение "Свой документ отличается от подготовки";
            КонецЕсли;
            Данные.Вставить(Ключ, Выборка.Ссылка);
        КонецЦикла;
    КонецЦикла;
    Если Данные.Количество() <> 4 Тогда
        ВызватьИсключение "Нужны ровно четыре собственных непроведенных документа";
    КонецЕсли;
    Возврат Данные;
КонецФункции

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

  1. Две заявки и две оплаты имеют повторяющиеся номера между видами. Ключ проверки состоит из имени метаданных и номера; реальная идентичность текущей строки — ссылка, не номер документа.

  2. Менеджер журнала Выбрать возвращает выборку документов разных включённых видов. Сверяем собственные ссылки и хронологию: Заявка.0001, Оплата.0001, Заявка.0002; октябрьская оплата не входит в сентябрь.

  3. СтандартныйПериод содержит НастройкаПериода и задаётся до открытия формы. Проверяются точные начало и конец сентября. Сообщение выборки ещё не доказывает применение периода видимым списком.

  4. Колонки списка подготавливаются по именам. Графа Сценарий отображает Комментарий каждого включённого документа; индекс и одинаковый базовый тип заданы при создании метаданных.

  5. Отбор ВидДокумента получает Метаданные.Документы.УчебнаяОплата, не строку УчебнаяОплата и не имя типа. Дополнительно выбираем собственную ссылку Оплата.0001 как текущую строку, несмотря на совпадающий номер заявки.

  6. Отбор Сценарий=Оплата — отдельная фильтрация по реальной графе. Снятие дополнительных отборов выключает только ВидДокумента/Сценарий, не сбрасывает текущий интервал по дате.

  7. Программный Порядок допускает Сценарий Возр, Дата Возр. Но НастройкаПорядка у журнала состоит только из Дата: искать там Номер или Сценарий и добавлять их нельзя.

  8. НастройкаОтбора и НастройкаПорядка readonly как свойства, элементы позволяют менять Доступность. РазрешитьНастройкуПериода делает команду интервала доступной даже при недоступном отборе Дата.

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

  10. Цикл возвращает две доступности, разрешение интервала и режим проверки новой строки. Он не меняет и не клонирует сам период, источник данных, порядок и текущую строку. На readonly-поле новая строка не вводится.

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

  1. Будущий ручной тест: сентябрьский журнал показывает три своих документа двух видов. Оплата.0002 от 01.10.2026 отсутствует; записи на 01.09 00:00 и 30.09 23:59:59 входят.

  2. ТолькоОплаты и ТолькоСценарийОплаты дают собственную Оплата.0001. Текущая строка после отбора вида именно ссылка оплаты, не заявки с тем же номером.

  3. СнятьДополнительныеОтборы возвращает три документа текущего сентября. СортироватьПоСценарию меняет программный порядок; в диалоге настройки доступен только порядок Дата.

  4. После РазрешитьИнтервал команда интервала доступна при запрещённом отборе Дата. Перед повторением фиксированного отбора получите новое окно; повторный запрет не стирает факт разрешения изменения.

  5. ПроверитьВозвратДоступностей должно подтвердить возврат четырёх значений. В копии кода нарушьте одно присваивание в восстановлении: успешное сообщение появляться не должно. Все четыре записи базы остаются без проведения/пометок.

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

Подготовлен собственный общий журнал двух видов с месячным контролем, отбором метаданных вида, графой и отдельными доступностями. runtimeVerifiedScenarios=0.

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

  1. Журнал не является новым документом и не записывает все виды одним объектом. Ошибка выбора по одному номеру приводит к путанице видов.

  2. Визуальный порядок журнала ограничен Дата; программные поля сортировки — другой механизм. Для ссылочных граф группировка не гарантирует алфавит по представлению.

  3. У менеджера Выбрать программная сортировка по графе требует индексирования, одного базового типа и покрытия всех видов. Здесь используется Дата, а собственная строковая графа подготовлена явно.

  4. ТолькоПросмотр не права доступа. Проверка отображения новой строки назначена, но её эффект на ввод здесь не проверяется.

  5. Это обычная форма толстого клиента, не управляемый ДинамическийСписок. Код и UI не запускались; служебное сохранение настроек платформой не исключается.

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

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

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

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

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