HelpF.pro

Пример проверки на заполнения нужных нам колонок в табличной части документа

Код 1C v 8.х
 МассивКолонок = Новый Массив;
МассивКолонок.Добавить("Количество");

СсылочныеКолонки = Новый Соответствие;
СсылочныеКолонки["Адрес"] = Справочники.АдресаЯчеек.ПустаяСсылка();
СсылочныеКолонки["Товар"] = Справочники.Номенклатура.ПустаяСсылка();
ПроверкаЗаполненияТабличнойЧасти(Ссылка, "Товары", МассивКолонок, СсылочныеКолонки, Отказ);

//выбирает не заполненные строки
//СсылкаНаОбъект - ссылка на проверяемый документ, ИмяТабЧасти - имя проверяемой табличной части,
//СписокКолонок - массив с именами колонок
//СсылочныеКолонки - соответсвие имен колонок и пустых ссылок типов этих колонок
Процедура ПроверкаЗаполненияТабличнойЧасти(СсылкаНаОбъект, ИмяТабЧасти = "Товары", СписокКолонок, СсылочныеКолонки = Неопределено, Отказ = Ложь, Заголовок = "") Экспорт

ИмяДока = СсылкаНаОбъект.Метаданные().Имя;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);

ТекстЗапроса = "ВЫБРАТЬ
| Док.НомерСтроки
|ИЗ
| Документ." + ИмяДока + "." + ИмяТабЧасти + " КАК Док
|ГДЕ
| Док.Ссылка = &Ссылка И (";
СтрокаКолонок = "";

Если СсылочныеКолонки <> Неопределено Тогда

Для каждого Колонка Из СсылочныеКолонки Цикл
ТекстЗапроса = ТекстЗапроса + " Док." + Колонка.Ключ + " = &" + Колонка.Ключ + " ИЛИ";
СтрокаКолонок = СтрокаКолонок + Колонка.Ключ + ", ";
Запрос.УстановитьПараметр(Колонка.Ключ, Колонка.Значение);
КонецЦикла;

КонецЕсли;

Для каждого Колонка Из СписокКолонок Цикл
ТекстЗапроса = ТекстЗапроса + " Док." + Колонка + " = 0 ИЛИ";
СтрокаКолонок = СтрокаКолонок + Колонка + ", ";
КонецЦикла;

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, Колонка + " = 0 ИЛИ", Колонка + " = 0)");

Запрос.Текст = ТекстЗапроса;
СтрокаСообщения = "Проверка табличной части на заполнение по колонкам: " + СтрокаКолонок;
Результат = Запрос.Выполнить().Выбрать();
ЕстьОшибки = Ложь;
Пока Результат.Следующий() Цикл

СтрокаСообщения = СтрокаСообщения + Символы.ПС
+ "В строке № " + Формат(Результат.НомерСтроки, "ЧГ=0")
+ " есть не заполненное значение!";
ЕстьОшибки = Истина;

КонецЦикла;

Если ЕстьОшибки Тогда
СообщитьОбОшибке(СтрокаСообщения, Отказ, Заголовок);
КонецЕсли;

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

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/498.html