|
как узнать наименование реквизита по типу данных? | ☑ | ||
---|---|---|---|---|
0
napagokc
07.08.12
✎
08:48
|
решил выделить в отдельную функцию проверку заполненности реквизитов на форме. В функцию планирую передавать массив из реквизитов, а в функции определять заполнен этот реквизит или нет.
Так вот, если реквизит не заполнен, то элемент массива будет содержать пустую ссылку на справочник, например. Эта информация мало пригодна для вывода сообщения, показывающего, какой реквизит не заполнен. Реквизиты имеют говорящее название, а название справочников толком ни о чем не говорит. Можно ли как-то в моей функции достучаться до наименования передаваемого реквизита? Массив одномерный. Пример: Функция ПроверкаЗаполненностиРеквизитов(М) Если ТипЗнч(М) <> Тип("Массив") Тогда Сообщить("Не верный тип данных передаваемого параметра: " + ТипЗнч(М), СтатусСообщения.Информация); Возврат Ложь; КонецЕсли; Для каждого тек Из М Цикл Если обЗначениеНеЗаполнено(тек) Тогда // Функция общего модуля, проверяет заполненность любого типа данных Сообщить("Не выбран " + тек + "!", СтатусСообщения.Информация); Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции Процедура ОбработкаПроведения(Отказ, РежимПроведения) //... М = Новый Массив; М.Добавить(Товар); М.Добавить(Склад); М.Добавить(ЦФУ); Отказ = ПроверкаЗаполненностиРеквизитов(М); //... КонецПроцедуры Повторюсь, интересно именно наименование реквизита. То есть, если реквизит содержит пустое значение, то наименование у значения этого реквизита будет пустая строка. Например, если реквизит "Склад" не заполнен, то в мою функцию для этого реквизита попадет пустая ссылка на элемент справочника Склады. Вытаскивать что-либо из этого справочника не имеет смысла, т.к. в документе есть ссылка на этот справочник и в шапке, и в табличной части, и подобная инфа не даст никакой информации где именно не заполнен склад. Хочу достучаться именно до наименования передаваемого реквизита. Можно это как-то сделать, не усложняя в дальнейшем работу с моей функцией? К примеру, можно, конечно, передавать двумерный массив - ссылу и наименование реквизита. Но, ИМХО, это начисто уберет всю прелесть использования подобной функции... |
|||
1
butterbean
07.08.12
✎
08:50
|
передавай структуру с именами и значениями
|
|||
2
Steel_Wheel
07.08.12
✎
08:51
|
в массив имена передавай, значения получай в функции Объект[ИмяРеквизита]
|
|||
3
butterbean
07.08.12
✎
08:51
|
что можно сказать по типу строка например?? или если в форме будет два реквизита с одинаковым типом??
|
|||
4
aleks-id
07.08.12
✎
08:54
|
не взлетит. у тебя логика функции совершенно противоположна
|
|||
5
Rovan
гуру
07.08.12
✎
08:55
|
(+2) согласен
|
|||
6
napagokc
07.08.12
✎
08:55
|
(1), (2), спасибо за идею, сейчас попробую. Скорее всего всё получится. ;)
|
|||
7
aleks-id
07.08.12
✎
08:56
|
(6) не получится. твоя функция работает неправильно
|
|||
8
napagokc
07.08.12
✎
09:06
|
В общем, подправил:
Функция ПроверкаЗаполненностиРеквизитов(М) Если ТипЗнч(М) <> Тип("Массив") Тогда Сообщить("Не верный тип данных передаваемого параметра: " + ТипЗнч(М), СтатусСообщения.Информация); Возврат Ложь; КонецЕсли; Для каждого тек Из М Цикл Об = ЭтотОбъект[тек]; Если обЗначениеНеЗаполнено(Об) Тогда // Функция общего модуля, проверяет заполненность любого типа данных Сообщить("Не выбран " + тек + "!", СтатусСообщения.Информация); Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции Процедура ОбработкаПроведения(Отказ, РежимПроведения) //... М = Новый Массив; М.Добавить("Товар"); М.Добавить("Склад"); М.Добавить("ЦФУ"); Отказ = ПроверкаЗаполненностиРеквизитов(М); //... КонецПроцедуры Для "шапки" все работает корректно, думаю, как теперь проверить заполненность реквизитов табличной части... |
|||
9
aleks-id
07.08.12
✎
09:15
|
твоя функция работает наоборот. если заполнить все реквизиты то она не даст провести докумень
|
|||
10
aleks-id
07.08.12
✎
09:16
|
+(9) и если хоть один реквизит не заполнен, то даст его провести
|
|||
11
napagokc
07.08.12
✎
09:21
|
(9), (10), А, ну, да. Но не суть ))) Возврат из функции исправить не сложно
|
|||
12
Serg_1960
07.08.12
✎
09:24
|
(имхо) в типовых конфигурациях есть нужный ТС функционал проверки заполнения обязательных реквизитов - велосипедостроение не требуется :)
|
|||
13
Maxus43
07.08.12
✎
09:30
|
велогонка чтоли?)
|
|||
14
Maxus43
07.08.12
✎
09:33
|
// Процедура проверяет реквизиты на заполненность
// Если хотя бы один из них не заполнен то Отказ становится Истина и в сообщении // пишется о незаполненном реквизите // Паремтры: // ОбъектПроверки - тот объект реквизиты которого нужно проверить на заполненность // СписокИменРеквизитов - список реквизитов для проверки (В значении - Имя реквизиты, // в представлении - строковое название реквизита) // Отказ - есть ли незаполненный реквизит или нет // ЖесткаяПроверка - Булевский параметр. В случае Ложь пишется только информация о незаполненных реквизитах, а Отказ не изменяется Процедура ПроверитьЗаполнениеРеквизитов(ОбъектПроверки, СписокИменРеквизитов, Отказ, ЖесткаяПроверка = Истина) Экспорт |
|||
15
napagokc
07.08.12
✎
10:09
|
омг... У нас конфа собственной разработки, с нуля. Может кто-нить кинуть тело функции, если не сложно?
|
|||
16
Maxus43
07.08.12
✎
10:10
|
БСП нет?
|
|||
17
patapum
07.08.12
✎
10:13
|
а просто поставить у реквизита объекта свойство Проверка заполнения слабо? писать ничего не надо...
|
|||
18
Defender aka LINN
07.08.12
✎
10:13
|
(16) В БСП такой куйни нет, т.к. она на 8.2, а там это в платформу встроено.
|
|||
19
Maxus43
07.08.12
✎
10:14
|
(18) в древней БСП есть)
|
|||
20
Reset
07.08.12
✎
10:23
|
Тело там такое тело..
Для каждого СписсокРекв Если Не Заполнено(Объект[.имя])( сообщить( Ахтунг в .Значение! Отказ=Истина |
|||
21
Reset
07.08.12
✎
10:24
|
.Ключ а не имя точнее
|
|||
22
Reset
07.08.12
✎
10:24
|
А, там список. Значит Значение и представление
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |