Почему в документе Корректировка поступления в УПП нулевые позиции подчеркиваются красным и как это исправить

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет
← На главную

При работе с конфигурациями на базе 1С:Предприятие 8.2 или 8.3 с использованием обычных форм, такими как Управление производственным предприятием (УПП 1.3) или Комплексная автоматизация (КА 1.1), программисты часто сталкиваются с необычным поведением интерфейса. Одной из таких проблем является визуальное выделение (подчеркивание красным пунктиром) нулевых значений количества и суммы в табличной части документа Корректировка поступления. Это происходит даже тогда, когда по логике документа ноль является корректным значением — например, при полном возврате позиции или аннулировании строки.

В этой статье мы подробно разберем, почему платформа ведет себя именно так, проанализируем программный код типового решения и найдем способ исправления этой ситуации при программном заполнении документа или обмене данными (например, из Альфа-Авто).

Анализ проблемы: почему ноль считается ошибкой?

Рассмотрим ситуацию: вы загружаете документ через Конвертацию данных или создаете его программно. В колонках Количество или Сумма стоят нули. При открытии формы эти ячейки подчеркиваются красным, как будто они не заполнены. Однако, если вы вручную введете в эту же ячейку «1», подчеркивание исчезнет, а если вернете «0» — оно снова не появится (в некоторых случаях) или ведет себя непоследовательно.

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


УстановитьСвойствоЯчеекСтрокиТЧ(
    ОформлениеСтроки,
    "Количество",
    "ОтметкаНезаполненного",
    КорректироватьБУиНУ И НЕ ДанныеСтроки.ЕстьВДокументеПоступления И НЕ ЗначениеЗаполнено(ДанныеСтроки.Количество));
            
УстановитьСвойствоЯчеекСтрокиТЧ(
    ОформлениеСтроки,
    "Сумма",
    "ОтметкаНезаполненного",
    КорректироватьБУиНУ И НЕ ДанныеСтроки.ЕстьВДокументеПоступления И НЕ ЗначениеЗаполнено(ДанныеСтроки.Сумма));

Здесь мы видим использование функции УстановитьСвойствоЯчеекСтрокиТЧ, которая программно включает свойство ОтметкаНезаполненного для конкретной ячейки. Разберем условия, при которых включается это подчеркивание.

Разбор логических условий оформления

Проанализируем три ключевых условия, которые в связке И дают команду системе подчеркнуть ячейку:

  1. КорректироватьБУиНУ: Это флаг (реквизит документа), указывающий на необходимость отражения корректировки в бухгалтерском и налоговом учете. Если он истинен, проверки становятся строже.
  2. НЕ ДанныеСтроки.ЕстьВДокументеПоступления: Это самый важный момент. В табличной части документа существует скрытый реквизит ЕстьВДокументеПоступления (тип Булево). Он определяет, является ли эта строка «родной» для исходного поступления или она была добавлена в корректировку вручную как новая позиция.
  3. НЕ ЗначениеЗаполнено(ДанныеСтроки.Количество): Здесь срабатывает особенность платформы 1С. Для числовых типов данных функция ЗначениеЗаполнено(0) всегда возвращает Ложь. Таким образом, с точки зрения платформы, ноль — это «незаполненное» значение.

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

Роль скрытого реквизита ЕстьВДокументеПоступления

Этот реквизит не выведен на форму, но он критически важен для логики работы документа. Рассмотрим подробнее:

Когда вы корректируете существующую строку поступления (например, уменьшаете товар с 10 до 0 штук), система понимает, что это изменение старых данных. В этом случае ЕстьВДокументеПоступления должен быть равен Истина. Проверка НЕ ДанныеСтроки.ЕстьВДокументеПоступления не проходит, и условие подчеркивания не выполняется — ваш ноль отображается корректно.

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

Как решить проблему при обмене данными

Если вы используете Конвертацию данных для переноса корректировок из Альфа-Авто (или другой системы) в УПП, вам необходимо убедиться, что этот служебный реквизит заполняется правильно. Рассмотрим пошагово, как это сделать:

Шаг 1: Настройка правил выгрузки (ПКС)

В правилах конвертации свойств (ПКС) для табличной части Товары добавьте правило для реквизита ЕстьВДокументеПоступления. Если в исходной системе нет прямого аналога, вы можете вычислить его логически: если строка сопоставлена со строкой исходного документа — ставим Истина.

Шаг 2: Программная установка в обработчике

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


Для Каждого СтрокаТовары Из Объект.Товары Цикл
    СтрокаТовары.ЕстьВДокументеПоступления = Истина;
КонецЦикла;

Шаг 3: Проверка интерактивного ввода

Разберем, почему при ручном вводе в форме документа подчеркивание может исчезать. В форме документа Корректировка поступления работают обработчики событий ПриИзменении. Когда вы выбираете номенклатуру или редактируете строку, срабатывает типовой код, который может автоматически устанавливать флаг ЕстьВДокументеПоступления, если находит соответствие в документе-основании. При программной записи документа (через Объект.Записать()) события формы не срабатывают, поэтому «технические» флаги остаются пустыми.

Дополнительные нюансы: АвтоОтметкаНезаполненного

Иногда программисты пытаются решить проблему, отключая свойство АвтоОтметкаНезаполненного в свойствах колонки табличного поля на форме. Однако в типовой УПП это малоэффективно, так как свойство ОтметкаНезаполненного переопределяется программно в процедуре ПриВыводеСтроки, о чем мы говорили в самом начале. Поэтому правильный путь — всегда обеспечивать корректное заполнение данных объекта (реквизитов табличной части), а не пытаться «обмануть» визуальный слой формы.

Резюме

Для устранения красного подчеркивания нулевых значений в Корректировке поступления выполните следующие действия:

  1. Проверьте значение реквизита КорректироватьБУиНУ в шапке документа.
  2. Убедитесь, что для строк, которые были в исходном документе поставщика, реквизит табличной части ЕстьВДокументеПоступления установлен в значение Истина.
  3. Если вы используете обмен данными, добавьте перенос этого флага в ваши правила конвертации.
  4. Помните, что платформа считает 0 незаполненным значением, и единственный способ разрешить этот ноль в интерфейсе без правок конфигурации — правильно выставить флаги «принадлежности» строки к исходному документу.

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

← На главную