Как убрать обязательное заполнение колонок при загрузке данных из файла в БСП

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При использовании стандартной подсистемы БСП «Загрузка данных из файла» программисты часто сталкиваются с ситуацией, когда система жестко требует заполнения определенных колонок (например, «Амортизация» или «Ставка НДС»), даже если в метаданных справочника проверка заполнения для них не установлена. Это происходит из-за того, что механизмы БСП определяют «обязательность» полей не только по свойствам метаданных, но и программно.

В этой статье мы подробно разберем, как найти «те самые наклонные палки» (комментарии) и какие методы в коде 1С отвечают за логику проверки полей при загрузке. Мы рассмотрим несколько способов решения проблемы: от простого комментирования кода до переопределения параметров в модуле менеджера.

Метод 1. Анализ модуля объекта и стандартной проверки заполнения

Первым делом проанализируем модуль самого объекта (справочника или документа), в который мы загружаем данные. Часто проверка обязательности прописана не в свойствах реквизита в Конфигураторе, а в обработчике ОбработкаПроверкиЗаполнения. Если подсистема загрузки вызывает метод Объект.ПроверитьЗаполнение(), то наличие ошибок в этом обработчике заблокирует создание записи.

Рассмотрим, что нужно сделать:

  1. Откроем модуль объекта в Конфигураторе.
  2. Найдем процедуру ОбработкаПроверкиЗаполнения.
  3. Выясним, не добавляется ли нужный нам реквизит в массив ПроверяемыеРеквизиты принудительно.

Если мы видим подобный код, его можно закомментировать:


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    // Если нужно убрать обязательность реквизита "Амортизация":
    // ПроверяемыеРеквизиты.Добавить("Амортизация"); 
КонецПроцедуры

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

Метод 2. Использование программного интерфейса БСП в модуле менеджера

Подсистема загрузки данных из файла работает через специальные программные интерфейсы. Основной «точкой входа» для настройки состава колонок является модуль менеджера загружаемого объекта. Нам необходимо проверить наличие процедуры ПриОпределенииПараметровЗагрузкиДанныхИзФайла.

Разберем по шагам, как изменить свойства колонок специально для обработки загрузки:

  1. Перейдем в модуль менеджера справочника.
  2. Найдем или создадим процедуру ПриОпределенииПараметровЗагрузкиДанныхИзФайла.
  3. В структуре ПараметрыЗагрузки проанализируем состав колонок.

В этой процедуре можно явно указать, какие поля являются обязательными, а какие нет. Посмотрим на пример кода:


Процедура ПриОпределенииПараметровЗагрузкиДанныхИзФайла(ПараметрыЗагрузки) Экспорт
    
    // Получаем описание колонок
    Колонки = ПараметрыЗагрузки.Колонки;
    
    // Если колонка "Амортизация" была добавлена программно как обязательная,
    // найдем её и изменим свойство "ПроверкаЗаполнения"
    Для Каждого СтрокаКолонки Из Колонки Цикл
        Если СтрокаКолонки.Имя = "Амортизация" Тогда
            СтрокаКолонки.ПроверкаЗаполнения = Ложь; // Убираем признак обязательности
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Этот способ является наиболее корректным, так как он влияет только на механизм загрузки из Excel/CSV и не ломает логику работы справочника в обычных формах редактирования.

Метод 3. Проверка полей поиска (Уникальные идентификаторы)

Проанализируем еще одну причину, по которой поле может стать обязательным. В БСП поле считается критически важным, если оно участвует в поиске (сопоставлении) данных. Если «Амортизация» отмечена как поле поиска, система не сможет определить, обновлять ли существующую запись или создавать новую, пока не получит значение этого поля.

Выясним, как это изменить. В той же процедуре ПриОпределенииПараметровЗагрузкиДанныхИзФайла проверьте массив ПоляПоиска:


// Пример исключения поля из поиска, чтобы оно перестало быть обязательным
Если ПараметрыЗагрузки.Свойство("ПоляПоиска") Тогда
    Индекс = ПараметрыЗагрузки.ПоляПоиска.Найти("Амортизация");
    Если Индекс <> Неопределено Тогда
        ПараметрыЗагрузки.ПоляПоиска.Удалить(Индекс);
    КонецЕсли;
КонецЕсли;

Если мы уберем реквизит из полей поиска, система перестанет требовать его заполнения на первом этапе сопоставления колонок.

Метод 4. Настройка «По умолчанию» в интерфейсе обработки

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

Рассмотрим этот алгоритм:

  1. На этапе сопоставления колонок в обработке выберите режим «Редактирование списка».
  2. Если колонка подчеркнута красным (обязательная), но в файле её нет, вы можете нажать на кнопку настройки колонки в шапке таблицы.
  3. Установите флажок «Заполнить значением» и выберите любое пустое или подходящее значение.

Это позволит формально удовлетворить требование системы о заполнении поля, не внося правок в программный код 1С.

Метод 5. Использование переопределяемого модуля

В некоторых случаях логика обязательности полей может быть зашита глобально для всей конфигурации. Для этого в БСП предусмотрен общий модуль ЗагрузкаДанныхИзФайлаПереопределяемый. Нам стоит заглянуть в процедуру ПриОпределенииОбъектовСДополнительнымиКолонками.

Проанализируем ситуацию: если наш справочник попадает в список объектов с особыми условиями загрузки, именно здесь могут назначаться дополнительные обязательные реквизиты. Используя глобальный поиск по конфигурации (Ctrl+Shift+F) с названием вашего справочника, вы сможете быстро найти все места, где БСП накладывает ограничения на его загрузку.

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

← На главную