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