УФ. Проверка заполнения данных регистра сведений #599865


#0 by Humandra
А что, я что-то не догоняю, или придется код в двух местах писать? Проблема следующая: надо гарантировать, что в регистр сведений не попадут "неправильные" данные, как интерактивно, так и программно. У модуля набора записей есть метод "ОбработкаПроверкиЗаполнения". Но похоже, что он вызывается только в том случае, если пользователь вводит данные в форме регистра. У меня же пользователь вводит данные в форме совсем другого объекта, а из него программно идет запись в регистр. Хочется следующего: 1) чтобы пользователю в обоих формах (и регистра, и другого объекта) как в штатном метода - подсказывало, в каком именно поле ошибка 2) если другой программист сделает свою обработку, и в ней не пропишет защиту - чтобы регистр не дал в себя записать некорректные данные Т.е. было бы хорошо, если бы в модуле объекта был "ОбработкаПроверкиЗаполнения", которая вызывалась и интерактивно, и программно. А в модуле формы было бы событие, которое позволило бы связать реквизит формы и реквизит объекта, в котором ошибка. Такой возможности нет? Сейчас приходит в голову только такой способ: Но при таком подходе будет лезть системное сообщение "Не удалось записать: Имя регистра", а не только мое сообщение. Есть идеи лучше?
#1 by Humandra
Много букв?
#2 by vmv
ага 8-марта поскриптум так сказать, можно повторить , но сократив суть в 5 раз?
#3 by vmv
что мешает вызывать метод ПроверитьЗаполнение при интерактивных действиях, который и вызовет ваш ОбработкаПроверкиЗаполнения
#4 by vmv
код в уничтожить и сжечь, зачем портить мне вкус!
#5 by Humandra
Попробую. Есть несколько форм, из которых ведется запись в один и тот же регистр. Часть форм - формы регистра, часть форм - формы других объектов, в т.ч. обработок. Надо: 1) обеспечить проверку корректности заполнения данных 2) указать пользователю в формах на реквизиты, в которых ошибка заполнения 3) не дублировать код Предлагается как вариант код в , но в этом случае лезет системная ошибка "Не удалось записать: Имя регистра", чего бы не хотелось. Не поняла. Предлагаете еще в модуле формы вызывать МояПроцедураПроверкиЗаполнения, где программно добавляется запись в регистр? А что вы предлагаете?
#6 by vmv
ПроверитьЗаполнение - Это МЕТОД, который можно вызывать как на основе анализа интерактивных действий, так и при любых определенных условиях в МаяПроцедура! ОбработкаПроверкиЗаполнения - это системное событие объекта, которое возникает при записи его чего-то там и при вызове МЕТОДА ПроверитьЗаполнение что может быть проще в этой элементарной логике, нет же надо прикрутить рющки, плющки и прочую хрень, ех
#7 by Humandra
А! Тьфу, у меня, оказывается, тоже СП украли :(
#8 by Humandra
Не нашла этот метод :)
#9 by Humandra
Хотя стоп. А если мой абстрактный коллега-разява забудет вызвать ПроверитьЗаполнение в своем коде? Все равно должен быть код как в , получается. Но просто вызывав ПроверитьЗаполнение интерактивно, я избавляюсь от системной ошибки.
#10 by 0xFFFFFF
фи... Отказ = Отказ или Неверно; - так кошернее :)
#11 by 0xFFFFFF
а если по теме, то надо юзать ПередЗаписью
#12 by vmv
пока не уточните, как в итоге образуется булевая переменная "Неверно", то дальнейшее обсуждение бесполезно, если оно ввобще имеет смысл далее. Ведь в РС невозможно записать неуникалные измерения вообщее или на дату в случае периодического. Значит ваше "Неверно" контролирует корректность(уникальность) либо периода, либо набора ресурсов. озвучивайте, позовем лошадь - она подумает, у нее голова большая
#13 by Humandra
Не фи, а это просто сокращение реального кода. Неверно - это просто для упрощения примера. На самом деле там идет проверка на заполнение реквизита конкретными значениями в случае, если другой реквизит заполнен каким-то конкретным образом.
#14 by vmv
если я буду далее продолжать обсуждении этой темы, то у меня будет нервный срыв.
#15 by Humandra
Сочувствую, и рекомендую не запускать болезни настолько возбудимой психики - это может плохо кончиться.
#16 by Humandra
А теперь по теме: ну что вам опять не понравилось, а? Хотите конкретики? Ну, к примеру, проверка такого условия: "Если контрагент, которому ведется продажа - сам по себе является поставщиком - то тариф может быть только из группы "тарифы для перепродажи". Это не совсем точное условие, потому что если разжевывать - то придется объяснять предметку. Но примерно соответствует.
#17 by vmv
просто так называется и не надо понимать ее буквально как она называется. Основное назначение этого обработчика системного события - ПЕРЕОПРЕДЕЛИТЬ стандартно установленные в конфигураторе правила проверки, а НЕ просто ПРОВЕРИТЬ. т.е. в этом обработчике можно отменить проверку реквизита, удалив его из коллекции ПроверяемыеРеквизиты, или назначить добавив туда. Сам обработчик ОбработкаПроверкиЗаполнения не служить для Проверки, а лишь меняет правила и лишь его буквальный вид вводит в заблуждение неокрепшие умы. да для вашей задачи нужно использовать старый добрый обработчик ПередЗаписью. Хотя если ваше ДелайЭто означает не действие, а еще изменение првил, то надо его назвать ДелайЭтоПоПравилуТакНадо или ДелайЭтоПоПравилуТакНеНадо, тогда код станет потясающе красив и ...бесполезен)
#18 by Humandra
О... интересно. "На заборе написано... но это забор, а не ..."! :) Т.е. если я вообще по каким-то причинам не использую галочки в конфигураторе для стандартной проверки, то я вообще не должна использовать обработчик ОбработкаПроверкиЗаполнения, так что-ли? И всегда писать свой метод, вызывая его из ПередЗаписью? Но как же опять таки то, что ПередЗаписью вызовет системную ошибку, а мне она не нужна, мне нужен мой текст ошибки + позиционирование на реквизитах?
#19 by Humandra
ДелайЭто на самом деле значит в основном это: ну иногда еще немного другого
#20 by vmv
+ ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - использовать для ужесточения условий проверки, добавляя туда поля(в том числе вложенные) согласно вашим условиям. Если вы не установили "галочки" "выдавать ошибку" или не добавляете в коллекцию ПроверяемыеРеквизиты имена полей, то использовать это событие наивно) вот занчит в чем главная суть - пытаться писать данные в базу и если система справедливо решает что данные не проходят проверку, то система должна молчать. мдя - это задача о двух стульях, как сразу сесть на оба, тут нужен толковый продюссер, а не аналитик)
#21 by Humandra
Почему бы мне не использовать ОбработкаПроверкиЗаполнения в любом случае? Чем частный случай ПроверяемыеРеквизиты = "" хуже переопределения уже определенных правил?
#22 by Humandra
Вы меня где-то явно не поняли *здесь у меня должны быть вооот такие глаза* Или я вас не поняла. Если система справедливо решает, что данные не проходят проверку, система должна не дать записать некорректные данные в регистр, это главное! И сообщить тоже должна, но я должна иметь возможность переопределить текст и метод этого сообщения.
#23 by vmv
от системного сообщения при записи РС можно избавиться только одним способом по шагам 1. определяем по вашей МаяПроцедура, что запись некорректна 2. формируем текст сообщения и "смягчаем" проверку в ОбработкаПроверкиЗаполнения, чтобы запись прошла и записалась без системного сообщения о невозможности записи. не слишком ли большая цена за системофобию?
#25 by Humandra
>> ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - использовать для ужесточения условий проверки, добавляя туда поля(в том числе вложенные) согласно вашим условиям. А я как раз и хочу ужесточить правило. Т.е. умолчательное правило = "ничего не проверять". А я хочу проверить, и если условие нарушается - не дать записать. Подождите. Что-то где-то не то и не так. У меня сейчас вроде бы все работает почти так, как я хочу. ОбработкаПроверкиЗаполнения - не выдает системной ошибки при Отказ = Истина. Только мою. И ничего удалять не надо. А вот ПередЗаписью - выдает. И все же получается, надо делать как в . Т.е. код должен быть как в , но ваш совет в тоже использовать надо, чтобы не дошло дело  до ошибки в ПередЗаписью. Правда, тогда проверка будет выполняться дважды, что тоже плохо. Меня системофобия бы не смущала, если бы ошибка была бы не в виде сообщения с кнопкой ок. Это очень неудобно юзеру. :(
#26 by Humandra
Что-то мне так тоже не нравится :) Ибо так я загашу любую ошибку, а может у меня скуль отвалился, и система пишет "Не могу записать данные, потому что нет скуля". Тогда еще придется анализировать в попытке вид ошибки.
#27 by vmv
ввобще-то я не тестировал это методы еще, видел только в коде. использовал вас как бетта-тестера, зачем делать самому, если если есть человек готовый и озабоченный этой темой. теперь, согласно вашим выкладкам, я приобрел экспиренс в этой теме)
#28 by Humandra
Что-что?!!! Издеваетесь... Вот гады мистяне! :) Я же хочу узнать, как люди пишут! Короче, надо думать дальше, что делать с двойным вызовом. Как-то проверять в ПередЗаписью, была ли уже проверка. Или принять другое решение = "забить".
#29 by Humandra
А что, до того момента как появилась ОбработкаПроверкиЗаполнения, народ обычно просто забивал на системное сообщение, вызываемое при Отказ = Истина в ПередЗаписью? Или загашивал в Попытке (вот это, все же, ИМХО, зло)? Или как-то по другому выкручивались таки?
#30 by Humandra
А то я с 8.1 вообще не работала, только с 7.7, очень мало с 8.0 и 8.2 вот. Нужна инфа по практике использования.
#31 by vmv
нет, я выводил картинку мужика в черном костюме и черных очках, который грозил пальцем после системного сообщения. девочки стали думать и бояться вводить чушь в данных, правда иногда это делали и когда я спрашивал "зачем?" олтвечали - на мужика посмотреть)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С