![]() |
|
Выдавать ошибку при не заполенном реквизите | ☑ | ||
---|---|---|---|---|
0
burrya
12.11.14
✎
14:25
|
Как можно программно реализовать аналог "Выдавать ошибку" при незаполнном реквизите документа в УФ. Просто хочется сделать чтоб не просто сообщение выходило, а чтоб активизировался реквизит и была такая надпись. Ну Вы поняли в общем что я имею ввиду.:)
|
|||
1
Wobland
12.11.14
✎
14:25
|
зачем программно? обновлефобия?
|
|||
2
SanGvin
12.11.14
✎
14:27
|
Сделать СообщениеПользователю в процедуре проверки заполнения
|
|||
3
burrya
12.11.14
✎
14:30
|
(1) Нет :) просто при одних условиях обязательны одни реквизиты, при других - другие:)
|
|||
4
burrya
12.11.14
✎
14:30
|
(2) выглядеть будет также как, если бы выбрал в базе обязательный реквизит - "Выдавать ошибку"
|
|||
5
SanGvin
12.11.14
✎
14:31
|
(4) Да, если правильно сделаешь. СП смотри, эксперементируй
|
|||
6
burrya
12.11.14
✎
14:32
|
(5) спасибо
|
|||
7
Timon1405
12.11.14
✎
14:36
|
// Осуществляет проверку заполненности проверяемых реквизитов.
// // Параметры: // Объект - ДокументОбъект, СправочникОбъект - Проверяемый объект. // МассивПроверяемыхРеквизитов - Массив - массив проверяемых реквизитов. // // Возвращаемое значение: // Булево - Истина, если значение хотя бы одного реквизита не заполнено, иначе Ложь // Функция ПроверитьЗаполнениеРеквизитовОбъекта(Объект, МассивПроверяемыхРеквизитов) Экспорт Перем ПроверяемыеРеквизитыТЧ; Отказ = Ложь; // Получение метаданных объекта МетаданныеОбъекта = Объект.Ссылка.Метаданные(); // Создание структуры стандартных реквизитов СтандартныеРеквизиты = Новый Структура; Для Каждого Реквизит Из МетаданныеОбъекта.СтандартныеРеквизиты Цикл СтандартныеРеквизиты.Вставить(Реквизит.Имя, ?(ЗначениеЗаполнено(Реквизит.Синоним), Реквизит.Синоним, Реквизит.Имя)); КонецЦикла; // Создание структуры для хранения имен табличных частей и проверяемых реквизитов в них. // Ключ - Имя табличной части // Значение - Массив - Массив строк, реквизитов этой табличной части для проверки ТабличныеЧасти = Новый Структура; // Создание шаблонов сообщений об ошибках не заполненных реквизитов и реквизитов табличных частей ШаблонОшибкиРеквизита = НСтр("ru='Поле ""%ИмяРеквизита%"" не заполнено'"); ШаблонОшибкиТЧ = НСтр("ru='Не введено ни одной строки в список ""%ИмяРеквизита%""'"); ШаблонОшибкиРеквизитаТЧ = НСтр("ru='Не заполнена колонка ""%ИмяРеквизита%"" в строке %НомерСтроки% списка ""%ИмяТабличнойЧасти%""'"); // Проверка реквизитов объекта и заполнение структуры по реквизитам табличных частей Для Каждого Реквизит Из МассивПроверяемыхРеквизитов Цикл ПозицияТочки = Найти(Реквизит,"."); Если ПозицияТочки > 0 Тогда // В случае если указан реквизит табличной части ДлинаСтроки = СтрДлина(Реквизит); ИмяТабличнойЧасти = Лев(Реквизит, ПозицияТочки-1); ИмяРеквизита = Прав(Реквизит, ДлинаСтроки - ПозицияТочки); // Сохранение проверяемого реквизита табличной части в структуру Если НЕ ТабличныеЧасти.Свойство(ИмяТабличнойЧасти, ПроверяемыеРеквизитыТЧ) Тогда ПроверяемыеРеквизитыТЧ = Новый Массив; ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, ПроверяемыеРеквизитыТЧ); КонецЕсли; ПроверяемыеРеквизитыТЧ.Добавить(ИмяРеквизита); Иначе // В случае если указан реквизит объекта Если Не ЗначениеЗаполнено(Объект[Реквизит]) Тогда Если МетаданныеОбъекта.Реквизиты.Найти(Реквизит) <> Неопределено Тогда // Если указано имя реквизита ТекстОшибки = СтрЗаменить(ШаблонОшибкиРеквизита, "%ИмяРеквизита%", МетаданныеОбъекта.Реквизиты[Реквизит].Синоним); ИначеЕсли СтандартныеРеквизиты.Свойство(Реквизит) Тогда // Если указано имя стандартного реквизита ТекстОшибки = СтрЗаменить(ШаблонОшибкиРеквизита, "%ИмяРеквизита%", СтандартныеРеквизиты[Реквизит]); Иначе // Если указано имя табличной части ТекстОшибки = СтрЗаменить(ШаблонОшибкиТЧ, "%ИмяРеквизита%", МетаданныеОбъекта.ТабличныеЧасти[Реквизит].Синоним); КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ТекстОшибки, Объект, Реквизит, , Отказ); КонецЕсли; КонецЕсли; КонецЦикла; // Проверка реквизитов в табличных частях Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл ИмяТабличнойЧасти = ТабличнаяЧасть.Ключ; ТабличнаяЧастьОбъекта = Объект[ТабличнаяЧасть.Ключ]; МассивРеквизитов = ТабличнаяЧасть.Значение; // Цикл по всем строкам табличной части. Для НомерСтроки=0 По ТабличнаяЧастьОбъекта.Количество()-1 Цикл // Цикл по всем проверяемым реквизитам для текущей табличной части. Для НомерРеквизита=0 По МассивРеквизитов.Количество()-1 Цикл ИмяРеквизита = МассивРеквизитов[НомерРеквизита]; Если Не ЗначениеЗаполнено(ТабличнаяЧастьОбъекта[НомерСтроки][ИмяРеквизита]) Тогда ТекстОшибки = СтрЗаменить(ШаблонОшибкиРеквизитаТЧ, "%ИмяРеквизита%", МетаданныеОбъекта.ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты[ИмяРеквизита].Синоним); ТекстОшибки = СтрЗаменить(ТекстОшибки, "%НомерСтроки%", Формат(НомерСтроки+1, "ЧГ=0")); ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ИмяТабличнойЧасти%", МетаданныеОбъекта.ТабличныеЧасти[ИмяТабличнойЧасти].Синоним); ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ТекстОшибки, Объект, ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(ИмяТабличнойЧасти, НомерСтроки+1, ИмяРеквизита), , Отказ); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; МассивПроверяемыхРеквизитов.Очистить(); Возврат Отказ; КонецФункции // ПроверитьЗаполнениеРеквизитовОбъекта() |
|||
8
DrZombi
гуру
12.11.14
✎
15:11
|
(0) Используй метод "СообщениеПользователю"
СообщениеПользователю (UserMessage) СообщениеПользователю (UserMessage) Свойства: ИдентификаторНазначения (TargetID) КлючДанных (DataKey) Поле (Field) ПутьКДанным (DataPath) Текст (Text) Методы: Сообщить (Message) УстановитьДанные (SetData) Конструкторы: По умолчанию Описание: Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю. Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах), можно получить накопленные сообщения методом ПолучитьСообщенияПользователю. В управляемых формах, в случае выполнения просмотра сообщения, выполняется следующий механизм обработки: Если у сообщения свойство КлючДанных заполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то: открывается новая форма объекта, соответствующая значению свойства КлючДанных; если у сообщения свойство ПутьКДанным не заполнено, то в него проставляется имя основного реквизита открытой формы объекта; вызывается показ сообщения в только что открытой форме; выполняется перенос всех соответствующих сообщений из окна первой формы в новую форму (с таким же значением свойств КлючДанных, как у выбранного сообщения). При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Пример: Процедура ДействиеСОбъектом(ОбъектДанных) ... Сообщение = Новый СообщениеПользователю(); Текст = "ru = ""В строке 11 табличной части ""Номенклатура"" не хватает ";" + " en = ""In line 11 of tabular section ""Nomenclature"" is missing "; Сообщение.Текст = НСтр(Текст)+НедостающееКоличество+" "+ЕдиницаИзмеренияНоменклатуры; Сообщение.Поле = "Номенклатура[10].Количество"; Сообщение.УстановитьДанные(ОбъектДанных); Сообщение.Сообщить(); КонецПроцедуры; См. также: Глобальный контекст, метод УстановитьСоответствиеОбъектаИРеквизитаФормы Глобальный контекст, метод ПолучитьСоответствиеОбъектаИРеквизитаФормы Глобальный контекст, метод ПолучитьСообщенияПользователю |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |