![]() |
|
кто как решал проблему наличия реквизита? | ☑ | ||
---|---|---|---|---|
0
Славко
07.02.05
✎
20:08
|
я понимаю поиск, там архив и т.п., но все же есть 3 варианта у меня сразу в голове:
1. как в типовых, но там просто проверяю наличия объекта а не реквизита объекта: Если ПустоеЗначение(<Объект.Реквизит>)=1 Тогда // а нима реквизита то КонецЕсли 2. Через попытку проверить 3. Вытянуть через метаданные 4. По виду субконто определять (всего 5 справочников у которых этот реквизит есть, но с другой стороны если справочники буду расширяться то переписывать потом неохота, вернее дописывать) Для желающих понять задачу, в зависимости от типа субконто надать в бухотчеты впиндюрить колонку с каталожным номером, но как бы этот номер не нужон для тех позиций в которых его нет и не всем бухам эта колонка нужна, поэтому хочу сделать нечто универсальное, шобы подошло всем... Кроме того объект с нужным мне реквизитом могет висеть как на 1-м, так и на 2-м, так и на 3-м субконто, так что думаю кроме как проверить наличие этого спецфического реквизита никак |
|||
1
Волшебник
модератор
07.02.05
✎
20:18
|
Метод Рупора - через попытку.
|
|||
2
Славко
07.02.05
✎
20:21
|
хм.....
буду знать шо это метод Рупора, авторство остальных методов будет озвучено? я так понимаю шо все методы кто то када то давно придумал уже |
|||
3
SnarkHunter
07.02.05
✎
20:30
|
3 или 4...
|
|||
4
Славко
07.02.05
✎
20:48
|
да, но шото мне подсказывает шо способ Рупорта Абсурда займет меньше всего кода, да и наверно по скорости будет бырее...
|
|||
5
Славко
07.02.05
✎
20:52
|
хотя нет, через метаданные таки наверно луче...
блин, на чем же остановиться то? |
|||
6
427
07.02.05
✎
20:56
|
быстрее всего через метаданные - ибо попытка - это построение блока обработки исключения, причем всегда... а если это воткнуть в цикл...
в типовых, кстати, делается через метаданные функция из ТиС Функция глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента) Экспорт Если ПустоеЗначение(ИмяРеквизита) = 1 Тогда Возврат 0; ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1 Тогда Возврат 1; ИначеЕсли ПустоеЗначение(ВидДокумента) = 1 Тогда Возврат 0; ИначеЕсли Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1 Тогда Возврат 1; Иначе Возврат 0; КонецЕсли; КонецФункции //глЕстьРеквизитШапки() |
|||
7
Славко
07.02.05
✎
21:02
|
угу, я просто сначала на в типовых смотрел на глВыбранЛи()
ща подрехтую на глЕстьРеквизит() на проверку любого объекта и вперед и с пестней... а а шобы было ваще универсально наверное придется помудрувать с шаблоном, шобы получить: Метаданные.<НаименованиеОбъекта>.(<ВидОбъекта>).<РеквизитОбъекта>. ... |
|||
8
Таня
07.02.05
✎
21:06
|
(6) а это ведь можно использовать для составления списка видов документа в которых есть реквизит договор?
|
|||
9
Таня
07.02.05
✎
21:07
|
а что надо дописать, чтобы получилось то что я хочу в (8)?
|
|||
10
Славко
07.02.05
✎
21:07
|
(8) для че хо, для того и юзай...
|
|||
11
427
07.02.05
✎
21:11
|
(8)
О сколько нам Открытий чудных Готовит просвещенья дух... А.С. Пушкин P.S. реквизит может называться по другому.... Проверять надо тип реквизита - является ли реквизит справочником типа договора |
|||
12
romix
07.02.05
✎
21:23
|
(8) см. metadata.als.
Там прикольные примеры. Автор тут постом выше, скрывается под ником 427. :-) |
|||
13
Славко
07.02.05
✎
21:29
|
о, так то сам Моисеенко...
преклоняю голову, гарну штуку написал |
|||
14
Guk
07.02.05
✎
21:48
|
(11) Не поминай Пушкина в суе ;)...
|
|||
15
Славко
07.02.05
✎
22:05
|
общими усилиями родилось 2 функкции, може сгодится кому:
// =============================== Функция глЕстьРеквизитСправочника(ИмяРеквизита,ВидСправочника) Экспорт Перем Реквизит; Если (ПустоеЗначение(ВидСправочника) = 1) ИЛИ (ПустоеЗначение(ИмяРеквизита) = 1) Тогда Возврат Нет; КонецЕсли; Реквизит=Метаданные.Справочник(ВидСправочника).Реквизит(ИмяРеквизита); Возврат ?(Реквизит.Выбран()=1, Да, Нет ); КонецФункции //глЕстьРеквизитСправочника // =============================== Функция глЕстьРеквизит(Объект,Реквизит) Экспорт Реквизит=0; Если ТипЗначенияСтр(Объект)="Справочник" Тогда Реквизит=Метаданные.Справочник(Объект.Вид()).Реквизит(Реквизит).Выбран(); ИначеЕсли (ТипЗначенияСтр(Объект)="Документ") или (ТипЗначенияСтр(Объект)="ГрупповойКонтекст") Тогда Если (Метаданные.Документ(Объект.Вид()).РеквизитШапки(Реквизит).Выбран()=1) или (Метаданные.ОбщийРеквизитДокумента(Реквизит).Выбран()=1) Тогда Реквизит=1; ИначеЕсли Метаданные.Документ(Объект.Вид()).РеквизитТабличнойЧасти(Реквизит).Выбран()=1 Тогда Реквизит=1; КонецЕсли; КонецЕсли; Возврат ?(Реквизит=1, Да, Нет ); КонецФункции //глЕстьРеквизит |
|||
16
SnarkHunter
07.02.05
✎
22:08
|
(15)Еще бывают реквизиты типа Справочник и Неопределенный...
|
|||
17
Guk
07.02.05
✎
22:09
|
Я думаю можно дать тебе весомое имя ;). Слава - изобретатель велосипедов! ;)
Хотя ко всему, лучше дойти самому... |
|||
18
Славко
07.02.05
✎
22:14
|
(16) не, неопределенный это он в объекте, а када он идет в работу, то он идет туда апосля назначитьтип и назначить вид...
(17) ну как те сказать, я просто слегка подлампичил оригинал, который мне прислали: Функция ЕстьЛиРеквизит(Объект,Реквизит) Экспорт Если ТипЗначенияСтр(Объект)="Справочник" Тогда Возврат Метаданные.Справочник(Объект.Вид()).Реквизит(Реквизит).Выбран(); ИначеЕсли (ТипЗначенияСтр(Объект)="Документ") или (ТипЗначенияСтр(Объект)="ГрупповойКонтекст") Тогда Если (Метаданные.Документ(Объект.Вид()).РеквизитШапки(Реквизит).Выбран() = 1) или (Метаданные.ОбщийРеквизитДокумента(Реквизит).Выбран() = 1) Тогда Возврат 1; ИначеЕсли Метаданные.Документ(Объект.Вид()).РеквизитТабличнойЧасти(Реквизит).Выбран()=1 Тогда Возврат 2; КонецЕсли; КонецЕсли; Возврат 0; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |