ОбработкаПроверкиЗаполнения для табличной части 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 + "].Товар";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
Иначе
сз.Добавить(СтрокаТовар.Товар, Индекс);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры |