Вызвать штатную проверку заполнения своей проводки

Учебные задачи

Обязательная собственная метка сначала пуста, затем заполнена. ПроверитьЗаполнение проверяет настроенные правила, а не все бизнес-правила бухучёта.

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

Полный серверный общий модуль своей отдельной конфигурации УчебнаяБухгалтерия85.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу с именем корневой конфигурации УчебнаяБухгалтерия85, управляемым режимом блокировок. Это отдельный стенд, не УТ/КА2/УНФ/БП и не копия с рабочими данными.

  2. Планы счетов → УчебныеСчета85: код Строка 20, Максимальное количество субконто 0, без флагов учёта. Создайте два предопределённых негрупповых счёта: УчебныйАктив, код DEMO-A, вид Активный; УчебныйПассив, код DEMO-P, вид Пассивный. Оба не забалансовые. Не создавайте счёт 41/60 и не называйте опыт реальным планом бухучёта.

  3. Документы → УчебнаяОперация85: номер Строка 40, автонумерация выключена. Без пользовательских реквизитов, проведения, обработчиков, подписок, планов обмена и внешних вызовов.

  4. Регистры бухгалтерии → УчебныеПроводки85: план УчебныеСчета85, Корреспонденция включена. Единственное измерение МеткаОперации: Строка 80, Балансовый включён, проверка заполнения Показывать ошибку. Единственный ресурс Сумма: Число 15,2, Балансовый включён. Реквизитов нет. Длина уточнения периода 3.

  5. Создайте второй регистр УчебныеОдносторонние85 с теми же планом, измерением, ресурсом и длиной уточнения периода, но Корреспонденция выключена. У обоих единственный регистратор УчебнаяОперация85. Модули наборов и документа пустые, кроме отдельной экспортной учебной процедуры в последнем уроке.

  6. Обновите конфигурацию базы данных и убедитесь, что предопределённые счета созданы как данные. Создайте серверный общий модуль УчебнаяБухгалтерияПримеры с флагом Сервер. Вставьте весь модуль одного урока, вызовите УчебнаяБухгалтерияПримеры.ВыполнитьПример() из серверной команды своей обработки.

  7. Первые семь задач не записывают данные. Восьмая кратковременно записывает собственный документ и проводки в собственной транзакции, которую обязательно отменяет. Девятая относится к модулю собственного набора, а не общему модулю.

  8. Отмена транзакции не отменяет письма, HTTP и внешние файлы. Поэтому у собственного документа и наборов не должно быть таких обработчиков или подписок. Привилегированный режим не включается.

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.Документы.Количество() <> 1
        ИЛИ Метаданные.ПланыСчетов.Количество() <> 1
        ИЛИ Метаданные.РегистрыБухгалтерии.Количество() <> 2
        ИЛИ Метаданные.Документы.Найти("УчебнаяОперация85") = Неопределено
        ИЛИ Метаданные.ПланыСчетов.Найти("УчебныеСчета85") = Неопределено Тогда
        ВызватьИсключение "Разрешены только собственные документ, план счетов и два регистра";
    КонецЕсли;
    Если Метаданные.ПланыСчетов.УчебныеСчета85.МаксКоличествоСубконто <> 0 Тогда
        ВызватьИсключение "В этом опыте план счетов без субконто";
    КонецЕсли;
    Для Каждого ИмяРегистра Из СтрРазделить("УчебныеПроводки85,УчебныеОдносторонние85", ",") Цикл
        Описание = Метаданные.РегистрыБухгалтерии.Найти(ИмяРегистра);
        Если Описание = Неопределено Тогда
            ВызватьИсключение "Не найден собственный регистр " + ИмяРегистра;
        КонецЕсли;
        Если Описание.Корреспонденция <> (ИмяРегистра = "УчебныеПроводки85")
            ИЛИ Описание.ПланСчетов.Имя <> "УчебныеСчета85"
            ИЛИ Описание.Измерения.Количество() <> 1
            ИЛИ Описание.Ресурсы.Количество() <> 1
            ИЛИ Описание.Реквизиты.Количество() <> 0
            ИЛИ Описание.Измерения.Найти("МеткаОперации") = Неопределено
            ИЛИ Описание.Ресурсы.Найти("Сумма") = Неопределено
            ИЛИ Описание.ДлинаУточненияПериода <> 3 Тогда
            ВызватьИсключение "Схема собственного регистра отличается от учебной";
        КонецЕсли;
    КонецЦикла;
    СчетДебета = ПланыСчетов.УчебныеСчета85.УчебныйАктив;
    СчетКредита = ПланыСчетов.УчебныеСчета85.УчебныйПассив;
    Если СчетДебета.Пустая() ИЛИ СчетКредита.Пустая() Тогда
        ВызватьИсключение "Нужны два собственных предопределённых счёта";
    КонецЕсли;
    Если СчетДебета.ПолучитьОбъект() = Неопределено ИЛИ СчетКредита.ПолучитьОбъект() = Неопределено Тогда
        ВызватьИсключение "Данные собственных счетов не созданы";
    КонецЕсли;
    СвояСсылка = Документы.УчебнаяОперация85.ПолучитьСсылку(Новый УникальныйИдентификатор);
    Набор = СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита);
    Набор.Получить(0).МеткаОперации = "";
    ПервыйОтвет = Набор.ПроверитьЗаполнение();
    Сообщить(ПервыйОтвет = Ложь);
    Набор.Получить(0).МеткаОперации = "DEMO-BOOK";
    ВторойОтвет = Набор.ПроверитьЗаполнение();
    Сообщить(ВторойОтвет = Истина);
    Сообщить(Набор.Количество() = 2 И Набор.Итог("Сумма") = 800);
    Сообщить(Набор.ОбменДанными.Загрузка = Ложь);
КонецПроцедуры

Функция СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита)
    Набор = РегистрыБухгалтерии.УчебныеПроводки85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(СвояСсылка);
    Для Каждого СуммаСтроки Из СтрРазделить("750,50", ",") Цикл
        Запись = Набор.Добавить();
        ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, Число(СуммаСтроки));
    КонецЦикла;
    Возврат Набор;
КонецФункции

Процедура ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, СуммаСтроки)
    Запись.Период = Дата(2026, 9, 15, 10, 0, 0);
    Запись.Регистратор = СвояСсылка;
    Запись.Активность = Истина;
    Запись.СчетДт = СчетДебета;
    Запись.СчетКт = СчетКредита;
    Запись.МеткаОперации = "DEMO-BOOK";
    Запись.Сумма = СуммаСтроки;
КонецПроцедуры

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

  1. В собственном измерении МеткаОперации обязательно установить Показывать ошибку.

  2. Стереть только метку первой собственной записи и вызвать ПроверитьЗаполнение; ожидается сообщение о незаполненном поле и Ложь.

  3. Вернуть DEMO-BOOK и проверить снова: настроенное обязательное поле теперь заполнено.

  4. Проверить суммы и обычный режим обмена. Загрузка не включалась, обработчик проверки в собственной схеме пустой.

  5. Наличие непустой ссылки на ещё незаписанный документ не доказывает наличие документа в базе. Записи здесь не сохраняются.

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

  1. Четыре булевых сообщения Истина: сначала ответ Ложь, потом Истина, сумма 800 и Загрузка=Ложь.

  2. При первом вызове видно штатное сообщение по МеткаОперации; исправление не требует отключать проверки.

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

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

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

  1. ПроверитьЗаполнение вызывает событие ОбработкаПроверкиЗаполнения; в рабочих базах оно может иметь дополнительные действия.

  2. Истина не подтверждает существование всех ссылок, экономическую правильность или готовность проводки к рабочему сохранению.

  3. Не очищайте сообщения и не включайте Загрузка для сокрытия собственной ошибки.

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

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

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

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

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