|
где правильно в УФ проверять реквизиты на заполнение? | ☑ | ||
---|---|---|---|---|
0
lanc2233
05.03.12
✎
21:17
|
в элементе справочника нужно проверять на заполнение реквизит в зависимости от значений других реквизитов.
в каком событии (или модуле) это наиболее правильно делать в УФ? |
|||
1
DrShad
05.03.12
✎
21:18
|
а в каком ты делаешь?
|
|||
2
lanc2233
05.03.12
✎
21:19
|
Пока ни в каком, собираюсь ПередЗаписью
|
|||
3
Asmody
05.03.12
✎
21:20
|
(0) это зависит от. Но начинать нужно с ПередЗаписью объекта
|
|||
4
DrShad
05.03.12
✎
21:20
|
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) читайте книжки молодой человек |
|||
5
vmv
05.03.12
✎
21:22
|
ОбработкаПроверкиЗаполнения() или как-то так в модуле объектов для этого служит, ПередЗаписью() тоже можно, но зачем, если уже сделал специальный стандарный обработчик, в котором, можно перереопределять жесткие правила заполнения в конфигураторе
|
|||
6
ShoGUN
05.03.12
✎
21:22
|
(2) ПередЗаписью выполняется на клиенте, там по идее только простейшие вещи можно сделать, в противном случае придётся обращаться к серверу, так что (4) в большинстве случаев правильней(при записи данные на сервер всё равно уходят, зачем ещё обращения к серверу плодить?)
|
|||
7
Maxus43
05.03.12
✎
21:22
|
ваще то в книжках написано - ОбработкаПроверкиЗаполнения процедура специальная. на сервере и на форме, там можно рулить параметрами проверки
|
|||
8
vmv
05.03.12
✎
21:24
|
тырено с СП,
Пример: Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) // Проверим заполненность реквизита "Покупатель" Если Не ЗначениеЗаполнено(Покупатель) Тогда // Если он не заполнен, сообщим об этом пользователю Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не указан Покупатель, на которого выписывается товарная накладная!"; Сообщение.Поле = "Покупатель"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); // Сообщим платформе, что мы сами обработали проверку заполнения реквизита "Поставщик" ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Покупатель")); // Так как информация в документе не консистентна, то продолжать работу дальше смысла нет Отказ = Истина; КонецЕсли; // Сообщим платформе, что мы сами обрабатываем проверку реквизита Товар в табличной части Товары ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Товар")); // Обходим строки и проверяем заполнение реквизита Для Индекс = 0 по Товары.Количество()-1 Цикл СтрокаТовар = Товары.Получить(Индекс); Если Не ЗначениеЗаполнено(СтрокаТовар.Товар) Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "В строке " + Индекс + " не заполнено значение товара"; Сообщение.Поле = "Товары[" + Индекс + "].Товар"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры "Старые обработчики" исользуемые по традиции НЕ УМЕЮТ менять правила проверки заложенные в конфе, а в этом можно ужесточить или ослабить проверку |
|||
9
vmv
05.03.12
✎
21:25
|
(6) чушь писать не надо да)
|
|||
10
ShoGUN
05.03.12
✎
21:32
|
(9) Не чушь, но за пример спасибо. Мне до сих пор хватало штатного свойства проверки заполнения, без написания кода.
|
|||
11
vmv
05.03.12
✎
21:36
|
(10) я имел ввиду что есть и ПередЗаписью() и передзаписьюнасервере()
|
|||
12
Maxus43
05.03.12
✎
21:37
|
(10) ето просто новое в 8.2, щас видно что кодеры 8.1 юзают старые методы, как в свое время с клюшек на снеговика переходили) более гибкий механизм проверки
|
|||
13
ShoGUN
05.03.12
✎
21:45
|
(11) Я об этом и сказал.
ПередЗаписью() исполняется на клиенте, ПередЗаписьюНаСервере() - на сервере(спасибо, КО). Что я не так сказал? |
|||
14
lanc2233
05.03.12
✎
21:46
|
{Справочник.Номенклатура.Форма.ФормаЭлемента(188)}: Ошибка при вызове метода контекста (Удалить)
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("МетодПартионногоУчета")); Несоответствие типов (параметр номер '1') |
|||
15
vmv
05.03.12
✎
21:50
|
(14) перед входом в обработчик ставим точку и смотрим в отладчике состав "чистой" коллекции до модификации и наверняка там нет этого реквизита.
почему - думаем сами, 82 это просто) |
|||
16
Maxus43
05.03.12
✎
21:51
|
(14) автоматом туда добавляются реквизиты у которых стоит свойство такое
|
|||
17
lanc2233
05.03.12
✎
21:54
|
Свойство стоит.
ПроверяемыеРеквизиты - тип "массив", в нем единственный элемент, со значением "Объект" |
|||
18
lanc2233
05.03.12
✎
21:55
|
(+17) в смысле "Выдавать ошибку" стоит, это-же оно?
|
|||
19
vmv
05.03.12
✎
22:00
|
<ПроверяемыеРеквизиты>
Тип: Массив. Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым 1. Ищем элемент данных формы, там наименование элемента может быть абы каким 2. смотрим свойство "Путь к данным" - это оно, ибо на форме может быть сколько угодно экземпляров одного и того же источника данных, а проверяються ДАННЫЕ. |
|||
20
vmv
05.03.12
✎
22:03
|
да и свойство "Проверять" лучше задавать сразу в свойствах объекта в дереве метаданных, если это свойство объекта или в наборе реквизитов формы - справа на УФ, а не в самих элементах
|
|||
21
Garkin
05.03.12
✎
22:22
|
(0) На ИТС есть статья с картинками, называется "Где разместить собственный алгоритм, проверяющий заполнены реквизиты формы или нет?"
|
|||
22
Гот
05.03.12
✎
23:41
|
Предупреждать пользователя нужно не в момент записи, а до нее. Заранее. Выделить, звездочку поставить на форме, текст "заполни" тут в поле ввода вписать.
Порочная практика уведомления о небходимости заполнения реквизита в момент записи / проведения - одна из главных ошибок разработчиков 1С. Будьте дружелюбными, делайте дружелюбные интерфейсы. Вы когда на страницах регистрации в интернетах видите кучу полей для заполнения - вспомните, как вас бесит, когда информация о том, что у вас не заполнен какой-нибудь address line 4 появляется после нажатия Confirm. Так что делай сразу в форме, динамически меняя внешний вид элементов формы. Это - правильно. И, сразу хочу сказать - при написании программ для людей отмаза "так лучше себя будет чувствовать сервер/клинт" - не катит. Уважайте пользователей. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |