Как запретить проведение документа в 1С:Бухгалтерии 8.3 при отсутствии обязательных данных?

Бухгалтер 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Промышленность, строительство и АПК
← На главную

При ведении учета в 1С:Бухгалтерии 8.3 часто возникает необходимость контролировать полноту заполнения документов. Особенно это актуально, когда требуется строгое разделение затрат по объектам, номенклатурным группам или подразделениям, как в случае с фирмами, занимающимися строительством. Разберем, как можно добиться того, чтобы документ (например, "Поступление товаров и услуг") нельзя было провести, если не указаны критически важные реквизиты, такие как "Номенклатурная группа" и "Подразделение". Рассмотрим как штатные средства 1С, так и подходы, требующие более глубокой настройки.

1. Использование штатного свойства "Проверка заполнения" в конфигураторе

Самый прямой и часто используемый способ запрета проведения документа с незаполненными данными — это установка свойства "Проверка заполнения" для нужных реквизитов непосредственно в конфигураторе 1С. Этот механизм является стандартным для платформы и не требует написания кода.

  1. Суть механизма:

    Для каждого реквизита любого объекта метаданных (справочника, документа, константы и т.д.) существует свойство "Проверка заполнения". Если для этого свойства установить значение "Выдавать ошибку", то платформа 1С автоматически проверит заполнение данного реквизита перед попыткой записи или проведения документа. В случае, если реквизит окажется незаполненным, система выдаст сообщение об ошибке, и документ не будет записан/проведен.

  2. Как это работает:

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

    Также важно отметить, что платформа выполняет проверку заполнения для широкого круга объектов: констант, справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач, а также их реквизитов и табличных частей. Для табличных частей проверка заполнения означает, что в ней должна присутствовать хотя бы одна строка.

  3. Применение:

    Для реализации вашей задачи необходимо открыть конфигуратор, найти документ "Поступление товаров и услуг" (или любой другой документ, который вы хотите контролировать), перейти к его реквизитам или реквизитам его табличных частей (например, реквизиты "НоменклатурнаяГруппа" и "Подразделение") и для каждого из них установить свойство "Проверка заполнения" в значение "Выдавать ошибку". После внесения изменений в конфигурацию потребуется перезапустить 1С:Предприятие для того, чтобы изменения вступили в силу.

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

2. Программная проверка заполнения

Если стандартной проверки, описанной выше, недостаточно, или если требуется более сложная логика проверки заполнения (например, обязательность заполнения зависит от значения другого реквизита, или от прав пользователя, или от текущей даты), можно реализовать программную проверку.

  1. Когда необходима программная проверка:

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

  2. Места реализации:

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

    • Обработчик события ОбработкаПроверкиЗаполнения(): Этот обработчик вызывается платформой автоматически перед записью документа (и, соответственно, перед проведением). Он предназначен специально для добавления собственных проверок заполнения. В нем мы можем получить список реквизитов, для которых установлена "Выдавать ошибку" (если это требуется), и добавить свои собственные, более сложные проверки.
    • Обработчик события ПередЗаписью(): Этот обработчик также вызывается перед записью документа. Он более универсален и может использоваться для выполнения любых действий перед записью, включая проверку заполнения.
  3. Пример программной проверки:

    Внутри выбранного обработчика мы можем получить доступ к реквизитам документа и проверить их значения. Если какой-либо обязательный реквизит не заполнен, мы устанавливаем параметр Отказ = Истина, что отменит запись или проведение документа, и можем выдать пользователю информационное сообщение. Например, для проверки заполненности реквизита в табличной части, мы можем пройтись по строкам табличной части и сравнить значение реквизита с Неопределено или другим пустым значением.

    Предположим, у нас есть табличная часть "Товары" и в ней реквизит "НоменклатурнаяГруппа", который должен быть заполнен в каждой строке:

    
    &НаКлиенте
    Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
        // Проверяем заполнение Номенклатурной группы в каждой строке табличной части
        Для Каждого СтрокаТЧ Из Объект.Товары Цикл
            Если СтрокаТЧ.НоменклатурнаяГруппа = Неопределено Тогда
                Сообщить("В строке " + Строка(СтрокаТЧ.НомерСтроки) + " табличной части 'Товары' не указана Номенклатурная группа. Заполнение обязательно!", СтатусСообщения.Важное);
                Отказ = Истина;
                Возврат;
            КонецЕсли;
        КонецЦикла;
                
        // Проверяем заполнение реквизита Подразделение на форме документа
        Если Объект.Подразделение = Неопределено Тогда
            Сообщить("Не указано Подразделение документа. Заполнение обязательно!", СтатусСообщения.Важное);
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецПроцедуры
    

    Этот пример демонстрирует, как мы можем программно контролировать заполнение. Если Отказ = Истина, документ не будет проведен, и транзакция будет отменена.

3. Использование дополнительных реквизитов и сведений

В 1С:Бухгалтерии 8.3 существует возможность добавлять дополнительные реквизиты к объектам (например, документам) без привлечения программиста и без изменения типовой конфигурации. Это можно сделать через пользовательский режим.

  1. Как добавить:

    Перейдите в раздел "Администрирование" -> "Общие настройки" -> "Дополнительные реквизиты и сведения". Здесь вы можете создать новый дополнительный реквизит для нужного объекта (например, документа "Поступление товаров и услуг").

  2. Обязательность заполнения:

    При создании или редактировании дополнительного реквизита вы можете установить для него флаг "Обязательное заполнение". После этого система будет требовать заполнения данного реквизита при работе с документом.

  3. Ограничения:

    Этот механизм удобен для добавления новых полей, но для штатных реквизитов, которые уже существуют в конфигурации (как "Номенклатурная группа" или "Подразделение"), использовать его нельзя. Для них нужно обращаться к конфигуратору, как описано в первом пункте.

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

Для более продвинутых сценариев, когда требуется "умный контролер", который будет проверять обязательность полей в зависимости от различных условий (статус документа, значения других полей, роль пользователя) и при этом не хочется изменять типовую конфигурацию, можно использовать механизмы расширений 1С. Существуют сторонние разработки или специализированные решения, которые позволяют настраивать такие проверки декларативно, без модификации самой конфигурации.

  1. Суть расширений:

    Расширения позволяют добавлять функциональность или изменять поведение существующих объектов конфигурации, не затрагивая при этом исходную конфигурацию. Это значительно упрощает обновление программы.

  2. Возможности:

    С помощью расширений можно реализовать проверки, которые срабатывают только для определенных групп пользователей, или только при определенных условиях в документе, например, если сумма документа превышает 100 000 рублей, то обязательно должно быть заполнено поле "Ответственный менеджер".

5. Разделение прав пользователей

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

  1. Роли и права:

    Мы можем создать роли пользователей, у которых есть право на ввод неполных данных в документы, но нет прав на их проведение. Такие сотрудники вводят первичную информацию, записывают документ, но провести его не могут.

  2. Принцип работы:

    После ввода данных документ попадает к другому сотруднику (например, главному бухгалтеру или ответственному менеджеру), который имеет права на проведение. Этот сотрудник проверяет полноту и корректность заполнения, дополняет необходимые реквизиты (например, "Номенклатурная группа" и "Подразделение"), а затем проводит документ.

  3. Необходимые доработки:

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

Важные замечания и рекомендации

При внедрении любых из вышеперечисленных методов следует учитывать несколько ключевых моментов:

  1. Перезапуск 1С: После любых изменений в конфигураторе (например, установки свойства "Проверка заполнения" или создания новых ролей) всегда требуется перезапустить 1С:Предприятие для того, чтобы изменения вступили в силу.
  2. Режим совместимости: При создании программных проверок важно учитывать режим совместимости конфигурации. Некоторые механизмы автоматической проверки заполнения могут не работать в старых режимах совместимости, что может повлиять на поведение ваших программных решений.
  3. Консультация со специалистом: Любые изменения в конфигурации, особенно связанные с изменением свойств реквизитов или созданием новых ролей и прав доступа, рекомендуется выполнять с участием опытного специалиста по 1С. Неправильные изменения могут нарушить работоспособность системы.
  4. Альтернатива – отчеты для анализа: Хотя ваш директор настаивает на запрете проведения, в некоторых случаях (например, когда данные действительно невозможно знать на момент первичного ввода) альтернативой может быть использование отчетов для анализа незаполненных данных. Мы можем настроить специальные отчеты, которые будут выявлять "проблемные" документы с пустыми обязательными реквизитами, позволяя своевременно их исправлять, но не блокируя первичный ввод. Однако это не решает задачу "запретить проведение".
  5. Влияние на проведение документа: Мы должны понимать разницу между оперативным и неоперативным проведением документов. Оперативное проведение контролирует остатки на текущую дату и время, а неоперативное позволяет проводить документы задним числом без такого строгого контроля. Если проверка заполнения не позволяет провести документ, это приведет к откату транзакции, и документ не будет записан в регистры, что обеспечит целостность данных.

Таким образом, для решения поставленной задачи наиболее эффективным и легко реализуемым способом является установка свойства "Проверка заполнения" в конфигураторе для реквизитов "Номенклатурная группа" и "Подразделение". Если же требуется более сложная логика, следует обратиться к программной реализации через обработчики событий документа или использовать расширения.

← На главную