ПланВидовРасчетаОбъект.<Имя плана видов расчета>.ПроверитьЗаполнение

Методы · CheckFilling

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

Синтаксис

ПроверитьЗаполнение()
Полное описание, параметры и ограничения

ПланВидовРасчетаОбъект.<Имя плана видов расчета>.ПроверитьЗаполнение (ChartOfCalculationTypesObject.<Chart of calculation types name>.CheckFilling)

ПланВидовРасчетаОбъект.<Имя плана видов расчета> (ChartOfCalculationTypesObject.<Chart of calculation types name>)

ПроверитьЗаполнение (CheckFilling)

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

Синтаксис:
ПроверитьЗаполнение()
Возвращаемое значение:
Тип: Булево.
Истина - ошибок не обнаружено, Ложь - в противном случае.
Описание:

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

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

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

Примечание:
Выполнение метода приводит к возникновению события ОбработкаПроверкиЗаполнения.
См. также:
СправочникОбъект.<Имя справочника>, событие ОбработкаПроверкиЗаполнения

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

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

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

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

Заполнить свой вид событием и проверить обязательное основание

Создадим новый незаписанный вид во вспомогательном пустом плане; полный собственный обработчик заполнит известную структуру, а проверка обязательного реквизита сменится с Ложь на Истина.

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

Полный обычный клиентский общий модуль УчебныеВиды85, только толстый клиент. Пульт и модуль объекта отдельными полными блоками ниже; не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу 8.5.1.1343: имя конфигурации УчебныеМенеджерыРасчетов85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не используйте рабочие ЗУП/КА/УТ/УНФ/БП. Здесь код, стенд и формы не выполнялись: runtimeVerifiedScenarios=0.

  2. Общий модуль УчебныеВиды85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный модуль одного выбранного урока целиком, не внутрь обработчика и не все варианты одновременно.

  3. Создайте собственную обработку УчебныеВиды85 с обычной основной формой Пульт. Кнопка Выполнить, действие ВыполнитьНажатие; отдельный полный модуль формы приведён ниже. F7 и обновление только своего стенда, запуск Пульта в толстом клиенте.

  4. Для основных опытов используется одна сессия, никаких фоновых обменов, расширений, сторонних обработчиков или других пользователей, меняющих записи. Код читает собственные виды и изменяет полученный объект только в памяти. Записать, удаление, проведение, расчёт регистров, файлы и сеть не вызываются.

  5. ТОЛЬКО ДЛЯ ЭТОГО УРОКА: вспомогательный план Уч85ЧерновикиРасчета: код Строка(10), наименование 100, период действия выключен, зависимость НеИспользовать, без предопределений/записей. Реквизит Основание85 Строка(16), Проверка заполнения=Показывать ошибку; остальные реквизиты без проверки заполнения.

  6. В модуль объекта именно Уч85ЧерновикиРасчета вставьте полный отдельный блок Уч85ЧерновикиРасчета.МодульОбъекта. События модуля объекта вызываются платформой по имени, это не действие кнопки. ОбработкаПроверкиЗаполнения и иные обработчики остаются отсутствующими. F7 и обновление только своего стенда.

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

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

УчебныеМенеджерыРасчетов85 → Обработки → УчебныеВиды85 → Формы → Пульт → Модуль

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

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеВиды85.ВыполнитьПример();
КонецПроцедуры
Уч85ЧерновикиРасчета.МодульОбъекта

УчебныеМенеджерыРасчетов85 → Планы видов расчёта → Уч85ЧерновикиРасчета → Модуль объекта

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

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

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

  1. Другая собственная структура метаданных: пустой Уч85ЧерновикиРасчета, отдельный обязательный строковый Основание85. Основные A/B/C не меняются и не копируются.

  2. Штатный СоздатьВидРасчета даёт новый объект в памяти. Первая ПроверитьЗаполнение возвращает Ложь из-за пустого обязательного Основание85 и может показать штатное сообщение проверки; это ожидаемая ошибка данных, не провал кода.

  3. Заполнить получает конкретную структуру Код=90, Наименование=Учебный вид из структуры, Основание85=draft-85. Метод вызывает событие ОбработкаЗаполнения; полного неизвестного обработчика в чужой конфигурации не предполагаем.

  4. Ниже приведён полный модуль объекта именно своего вспомогательного плана. Обработчик проверяет имя/версию стенда, Структура, наличие и тип трёх строк; допускает только известные учебные значения.

  5. Своим полям объекта присваиваются проверенные строки, СтандартнаяОбработка=Ложь отключает дальнейшее системное заполнение, не отменяет сам Заполнить. ТекстЗаполнения — обязательный параметр сигнатуры события, не используется как скрытое основание.

  6. После события код сверяет все три фактических поля. Вторая ПроверитьЗаполнение должна дать Истина: её Булево не заменяется красивым сообщением и не объявляется результатом Записать.

  7. Повторная выборка вспомогательного плана по-прежнему пуста. Заполнить и ПроверитьЗаполнение не равны сохранению объекта; новый черновик не получает Прочитать, поскольку тот метод запрещён для нового объекта.

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

  1. Будущий тест: полный модуль объекта и обязательный реквизит назначены, F7 → Пульт → Выполнить. Первый результат Ложь, после заполнения Истина.

  2. У черновика код 90, имя Учебный вид из структуры, основание draft-85. Результат не предполагается без выполненного события.

  3. Если Основание85 не отмечен Показывать ошибку, первая проверка может не дать Ложь — это другая подготовка, код остановится.

  4. При отсутствии/неверном типе входного поля собственный обработчик отказывает до присваивания. Не превращайте произвольные внешние данные в эти учебные значения без проверки.

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

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

Будущий результат: реальное событие собственного объекта заполняет три поля; штатная проверка обязательного основания Ложь→Истина, без записи вида.

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

  1. Заполнить — контракт события, не универсальное копирование всех совпадающих полей. Здесь поведение определяет полный собственный модуль объекта.

  2. СтандартнаяОбработка=Ложь не отменяет метод и не сохраняет объект. При копировании событие заполнения по справке не вызывается.

  3. ПроверитьЗаполнение вызывает ОбработкаПроверкиЗаполнения. В этом вспомогательном плане такого пользовательского обработчика нет, штатный список проверок не очищается.

  4. По справке безопасный режим на время обработчиков заполнения/проверки отключается, кроме обработчиков расширений. Не рассматривайте произвольный такой обработчик как безопасный sandbox; здесь свой полный модуль без сети/файлов/записи.

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

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

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

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

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