Имя: Пароль:
1C
 
про ПроверяемыеРеквизиты
0 а кому щас легко
 
31.12.10
09:48
Есть табличная часть в документе "Работы".

Если необходимо при каких-то условиях проверять на заполненность по объекту затрат, тогда делаю так:

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

а если необходимо проверить на заполненость не во всех строках табличной части, а например в определенной строке, то через ОбработкаПроверкиЗаполнения не получится?
1 MatrosoV AleXXXand_R
 
31.12.10
09:50
В "Разработка управляемого интерфейса" вроде был пример того, что ты хочешь сделать
2 Mitriy
 
31.12.10
09:50
в обработке проверки проверяй по условию...
3 Ашот
 
31.12.10
09:50
по окончанию редактирования строки ()
4 Dmitrii
 
гуру
31.12.10
09:50
(0) не получится.

В ПередЗаписью проверяй.
5 Mitriy
 
31.12.10
09:52
(4) все получится... просто не надо пихать в проверяемые реквизиты, а просто проверять, что нужно...
6 а кому щас легко
 
31.12.10
09:53
(1) нет к сожалению такой книги у меня.
7 MatrosoV AleXXXand_R
 
31.12.10
09:58
Пример из книги, стр. 447

Если Товары[1].Цена = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "Товары[1].Цена";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Текст = "Нужно написать цену товара!";
Сообщение.Сообщить();

Отказ = ИСТИНА;
КонецЕсли;
8 MatrosoV AleXXXand_R
 
31.12.10
10:00
(7) + То есть реквизит в проверяемые реквизиты можешь не пихать, + в ПриЗаписи() создать массив индексов строк, в которых нужно проверить и через цикл проверяешь, как в примере
9 Dmitrii
 
гуру
31.12.10
10:19
(4) - извиняюсь, не прав.
(5) - прав
(8) - где угодно, только не в ПриЗаписи.
10 а кому щас легко
 
31.12.10
10:19
спб.
(7) спасибо за код(не знал как сообщение привязать к строчке табчасти).
11 MatrosoV AleXXXand_R
 
31.12.10
10:23
(9) почему не в ПриЗаписи - в ПриЗаписиНаСервере идет по очередности до ПриЗаписи?
12 Dmitrii
 
гуру
31.12.10
10:32
(11) Отказ от записи (если это понадобится) лучше сделать еще до начала транзакции - т.е. в ПередЗаписью или в ОбработкаПроверкиЗаполнения.

Собственно Mitriy в (5) прав - ОбработкаПроверкиЗаполнения для того и предназначена, чтобы проверять правильность и полноту заполнения данных.
13 а кому щас легко
 
31.12.10
10:37
(12) ОбработкаПроверкиЗаполнения не мешает при записи документа. Но если в ПроверяемыеРеквизиты есть какой-либо незаполненый реквизит, то документ не проводится.
14 Dmitrii
 
гуру
31.12.10
10:54
(13) Ну это тебе самому решать где же все-таки сделать. Смотря какая задача стоит - вообще не записывать, если каких-то данных нет, или записывать, но не проводить.

Если первое - то лучше реализовать в ПередЗаписью, если второе, то в ОбработкаПроверкиЗаполнения. В любом случае, не в ПриЗаписи.
15 Mitriy
 
31.12.10
11:03
СП:


Пример:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

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

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

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