Книга знаний

1С:Предприятие / Приемы программирования / Формы

ОбработкаПроверкиЗаполнения для табличной части 1С 8.2

Для проверки заполненности реквизитов в 1С:Предприятие версии 8.2 появился новый механизм.
<br><br>Ниже приводится пример обработки табличной части на пустые значения реквизита (в этом примере - товара) и повторы (дубли) его значений.
Автор статьи: romix | Редакторы:
Последняя редакция №2 от 11.04.11 | История
URL: http://kb.mista.ru/article.php?id=828

Ключевые слова: ОбработкаПроверкиЗаполнения, проверка заполнения, дубли реквизитов


Текст процедуры следует поместить в модуле документа, она срабатывает при проведении. По сравнению с традиционными проверками в ПриЗаписи программа выдает пользователю контекстные сообщения по месту не заполненного или неправильно заполненного реквизита.

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

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

    сз = Новый СписокЗначений;

    // Обходим строки и проверяем заполнение реквизита
    Для Индекс = 1 по Товары.Количество() Цикл
        Индекс0=Индекс-1;
        СтрокаТовар = Товары.Получить(Индекс0);
        
        Если Не ЗначениеЗаполнено(СтрокаТовар.Товар) Тогда
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = "В строке " + Индекс + " не заполнено значение Товара";
            Сообщение.Поле = "Товары[" + Индекс0 + "].Товар";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            Отказ = Истина;
        Иначе
            //Проверяем на повторы
            вв=сз.НайтиПоЗначению(СтрокаТовар.Товар);
            Если вв<>Неопределено Тогда
                Сообщение = Новый СообщениеПользователю();
                Сообщение.Текст = "Такой Товар в табличной части уже есть: "+вв.Значение+" в строке "+вв.Представление;
                Сообщение.Поле = "Товары[" + Индекс0 + "].Товар";
                Сообщение.УстановитьДанные(ЭтотОбъект);
                Сообщение.Сообщить();
                Отказ = Истина;
            Иначе
                сз.Добавить(СтрокаТовар.Товар, Индекс);
            КонецЕсли;    
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика