Имя: Пароль:
1C
1С v8
Определить наличие реквизита в строке ТЧ
0 mzelensky
 
07.06.13
08:28
Доброго всем.
Есть процедура в которую передается строка ТЧ. Эта входящая строка может быть либо от ТЧ1, либо от ТЧ2. Разница алгоритма процедуры заключается в использовании 1 реквизита ТЧ. В одном случае (у ТЧ1) реквизит есть, а в другом (у ТЧ2) реквизита нет.

Как можно проверить наличие реквизита в строке ТЧ (естественно не имею доступа к самой ТЧ)?
1 Wobland
 
07.06.13
08:29
по второму параметру процедуры?
2 mzelensky
 
07.06.13
08:30
(1) это понятно ,что можно еще уточняющий параметр передать. А вот без него можно?

Т.е. имеем только строку ТЧ. Можно определить наличие или отсутствие определенного реквизита в ней или нет?!
3 andreymongol82
 
07.06.13
08:30
Попытка или второй параметр процедуры
4 mzelensky
 
07.06.13
08:31
(2) или как вариант через строку ТЧ выйти на саму ТЧ, а уже в ней проверить?!
5 Wobland
 
07.06.13
08:31
у метаданных спросить можно
6 Поросенок Петр
 
07.06.13
08:31
Одна процедура - одно действие. Флаги в параметрах, определяющие ход процедуры, или хуже того, разбор типа параметра - это всё копание в г*код.
7 mzelensky
 
07.06.13
08:31
(5) а как ты через метаданные хочешь это сделать?!
8 mzelensky
 
07.06.13
08:32
(6) это лишь твое мнение. А я не сторонник пложить километры строк одного и того же кода лишь из-за одного параметра!
9 Aleksey
 
07.06.13
08:33
например найти колонку
10 andreymongol82
 
07.06.13
08:34
(4) РеквизитЕсть = Истина;
Попытка
кк = СтрокаТЧ.РекизитЭтот
Исключение
РеквизитЕсть = Ложь;
КонецПопытки;

Если реквизит есть тогда бла-бла-бла
11 andreymongol82
 
07.06.13
08:35
(10) А вообще, лучше конечно или второй параметр или другая процедура
12 Wobland
 
07.06.13
08:36
(6) ага. и в случае чего переписать код в трёх местах
13 Defender aka LINN
 
07.06.13
08:36
(0) "естественно не имею доступа к самой ТЧ" - ты, естественно, не имеешь. А кто читал СП - тот имеет.
(8) А так же, смотрю, не сторонник давать реквизитам нормальные имена
14 mzelensky
 
07.06.13
08:37
(10) это я уже рассматривал. Использовать "попытку" не хотелось.
15 mzelensky
 
07.06.13
08:37
(9) ты как всегда гениален, а твои советы как всегда прозаичны.

Найти колонку в чем?
16 Mitriy
 
07.06.13
08:38
УИ = Новый УникальныйИдентификатор();
СтруктураПроверки = Новый Структура("ИмяПроверяемогоПоля", УИ);
ЗаполнитьЗначенияСвойств(СтруктураПроверки,СтрокаТЧ);
Если Структура.ИмяПроверяемогоПоля = УИ Тогда
Сообщить("Нет такого поля");
Иначе
Сообщить("Есть такое поле");
Конец
17 Поросенок Петр
 
07.06.13
08:39
(8) Хорошего кода не бывает километры в одной процедуре.  
(12) Кто сказал что нужно дублировать код?

Наоборот, когда у него изменится одна из двух ТЧ, он опять будет г*кодить в этой процедуре.
18 mzelensky
 
07.06.13
08:39
(13)
"ты, естественно, не имеешь. А кто читал СП - тот имеет." - ткни в СП.

"А так же, смотрю, не сторонник давать реквизитам нормальные имена" - это тут причем?!
19 Defender aka LINN
 
07.06.13
08:39
(15) А у тебя избыток вариантов?
20 mzelensky
 
07.06.13
08:40
(17) ты сказал: "Одна процедура - одно действие". А у меня два действия, которые сходытся в одну процедуру.
21 mzelensky
 
07.06.13
08:41
(19) тебе сегодня жена не дала или просто хреновое настроение в связи с погодой?! Хочешь что-то сказать по существу - говори. В противном случае чего пишешь? Толку с таких сообщений 0.
22 Defender aka LINN
 
07.06.13
08:43
(18) Если у тебя процедура делает одно и то же с разными реквизитами, то есть неплохие шансы, что эти реквизиты означают одно и то же в разных ТЧ. Но называются, ЧСХ, по-разному.
23 Поросенок Петр
 
07.06.13
08:43
(20) Общие для табличных частей поля, обрабатывай одной (считай как базовый класс) процедурой. Особенности каждой ТЧ в своей. Я понимаю 1С отнекивается от ООП, но надо хотя бы понимать принципы...
24 Defender aka LINN
 
07.06.13
08:44
(21) Тебя забыл спросить, где мне писать,а где нет
25 shuhard
 
07.06.13
08:44
(21) не тупи
Defender aka LINN ответил по делу, как и всегда
26 mzelensky
 
07.06.13
08:45
(22) хреново быть плохим экстасенсом. Ты сделал абсолютно неверные выводы (причем из-за того, что плохо прочел (0))!!! Давай ты не будешь угадывать, а просто ответишь на поставленный вопрос в (0).
27 mzelensky
 
07.06.13
08:46
(25) не вижу тут никакого дела.
28 Defender aka LINN
 
07.06.13
08:48
(26) В (0) спрашивается, как сделать самопридуманый костыль. Хочешь помощи - потрудись описать ЗАДАЧУ, а не изобретенный твоей левой пяткой метод ее решения.
29 mzelensky
 
07.06.13
08:51
(28) Остальные отписавшиеся меня вполне поняли. Если ты подтупливаешь, то это уже твои проблемы. Что-то тут объяснять, расписывать и учить тебя никто не просил.
30 НЕА123
 
07.06.13
08:52
"" + строкатч
31 Defender aka LINN
 
07.06.13
08:53
(29) То-то я эту тему создал...
32 Defender aka LINN
 
07.06.13
08:55
Вообще, ответ тебе в (5) еще дали. Хренли ты тут до сих пор делаешь - мне непонятно. Наверное, нравится, когда тебя пинают.
33 mzelensky
 
07.06.13
08:57
(32) прочти (24)
34 НЕА123
 
07.06.13
08:59
мне, лично, (16) нравится.
35 mzelensky
 
07.06.13
08:59
(32) Просто меня бесят упыри, подобные тебе, которые считают себя пупами земли, считая, что они знают все лучше всех.

Можешь помочь советом - помоги, а расплескивать сопли по поводу "Я такой крутой" нафиг не надо!
36 mzelensky
 
07.06.13
08:59
(34) Да, красиво!

нужно будет запомнить.
37 Stormicon
 
07.06.13
09:02
Пятница? Самый простой вариант - Попытка Исключение КонецПопытки, без обращения к метаданным и т.д.
38 mzelensky
 
07.06.13
09:04
(37) Честно говоря с метаданными не могу догнать.
Как имея одну строку ТЧ через метаданные определить наличие определенного реквизита в ней?!

Ну так ,чисто ради любопытства вопрос.
39 Infsams654
 
07.06.13
09:11
(38) Имя строки табличной части формируется следующим образом:
<Префикс полного имени объекта>ТабличнаяЧастьСтрока.<Имя прикладного объекта>.<Имя табличной части>.
Например: СправочникТабличнаяЧастьСтрока.Номенклатура.Состав, где "Номенклатура" - имя справочника, как оно задано в конфигураторе, "Состав" - имя табличной части справочника "Номенклатура".

Смотришь в метаданных реквизиты соответствующей табличной части объекта ...
40 Defender aka LINN
 
07.06.13
09:15
(34) Жесть какая
41 Defender aka LINN
 
07.06.13
09:16
(39) Тип можно получить в разы проще
(33) Даже ответ не можешь сам придумать
42 mzelensky
 
07.06.13
09:19
(41) я просто ответил тебе твоими же словами!

А ты давай, продолжай считать себя вершиной эволюции 1С-ка.
43 Mitriy
 
07.06.13
09:26
(40) и что тут жестяного? Очень удобный способ проверить наличие чего-то, что другими способами проверить проблематично... Например, наличие реквизита обычной формы...
44 Поросенок Петр
 
07.06.13
09:27
Г*код победил. Ничего, рано или поздно силы бобра доберутся до него и (0) его перепишет.
45 Defender aka LINN
 
07.06.13
09:27
(43) Для строки ТЧ есть (5).
(42) Приступ попаболи?
46 Mitriy
 
07.06.13
09:28
(45) ну боится человек этого слова...
47 Mitriy
 
07.06.13
09:35
Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТЧ)).Реквизиты
48 mzelensky
 
07.06.13
09:40
(47) Спасибо.

искать метаданные по типу значения не догадался.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.