Имя: Пароль:
1C
1С v8
ПечФорма: вывод по условию
,
0 листопад
 
13.04.14
13:40
Подскажите, почему не срабатывает условие при выводе печ.формы:


Границы = Справочники.ВидыГраниц.НайтиПоНаименованию("Граница1");

Если Шапка.ДоговорКонтрагента.ВидГраницы = Границы Тогда
     ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница1");
     ТабличныйДокумент.Вывести(ОбластьМакета);
Иначе
     ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница2");    
     ОбластьМакета = Макет.ПолучитьОбласть("П_35");    
     ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;


Объясняю: в спр.Договоры добавлен реквизит "ВидГраницы" (ссылка на спр.ВидыГраниц). И мне надо, в зависимости от значения реквизита выводит ттот или иной текст в печ.форму.
1 Wobland
 
13.04.14
13:46
потому что оно принимает значение ложь. ваш К.О.
2 XLife
 
13.04.14
13:46
3 Wobland
 
13.04.14
13:47
(2) пару-тройку лет назад товарищ и на мисте спалился. две одинаковые темы под разными полами
4 листопад
 
13.04.14
14:00
(1) Сейчас всегда выводит Область("ПечГраница1") и Область("ПечГраница2"), независимо от того какакя граница указана в реквизите. Хотя я и поставила условие в (0)...

(2), (3) На инфостарте это не я. Сама незнаю, кому именно мои темы понадобилось дублировать на другом ресурсе. Если вы внимательно посмотрите, то увидите, что на инфостарте тема была создана уже после того, как я получила ответ на мисте. И на инфостарте в этой теме писал всего один человек.
5 Alex S D
 
13.04.14
14:02
(4) брехня какаято.. перезапустите конфигуратор
6 Alex S D
 
13.04.14
14:02
и ТабличныйДокумент.Вывести(ОбластьМакета);  надо вынести за условие. че за овнокод
7 Wobland
 
13.04.14
14:06
(4) значит, выполняется не то, что ты видишь
8 Wobland
 
13.04.14
14:07
(4) 01:11 Ну может примерчик какой-нибудь покажите...
и в 01:23 создаётся тема на инфорстарте
9 листопад
 
13.04.14
14:10
Не получается...
(5) Это во внеш.печ.форме код. Конфигуратор не при чем.
10 листопад
 
13.04.14
14:16
Исправила код. Теперь никогда не выводит Область("ПечГраница1"). Т.е. в условие ошибка. Как правильно написать?  


Границы = Справочники.ВидыГраниц.НайтиПоНаименованию("Граница1");

//Если Шапка.ДоговорКонтрагента.ВидГраницы = Границы Тогда
Если Шапка.ДоговорКонтрагента.ВидГраницы.Наименование = Границы Тогда
     ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница1");
     ТабличныйДокумент.Вывести(ОбластьМакета);
Иначе
     ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница2");    
     ОбластьМакета = Макет.ПолучитьОбласть("П_35");    
     ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
11 Alex S D
 
13.04.14
14:17
какая ошибка? вы че первый раз тут?
12 листопад
 
13.04.14
14:18
Все время выводит Область("ПечГраница2"), т.е. это в случае, если не находит. Хотя находить должен.
13 листопад
 
13.04.14
14:19
(11) Ошибки нет. Неправильно области в макете выводит. Условие не срабатывает:

Границы = Справочники.ВидыГраниц.НайтиПоНаименованию("Граница1");
Если Шапка.ДоговорКонтрагента.ВидГраницы.Наименование = Границы Тогда
14 Alex S D
 
13.04.14
14:21
а отладчик включить?
15 листопад
 
13.04.14
14:54
(14) Тогда придется новую тему создавать:
Как пользоваться отладчиком во внеш.печ.форме.
16 Wobland
 
13.04.14
14:54
а когда наименование (строка) бываетравно ссылке?
17 Wobland
 
13.04.14
14:56
18 Мимохожий Однако
 
13.04.14
15:00
"ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница2");    
     ОбластьМакета = Макет.ПолучитьОбласть("П_35");    
     ТабличныйДокумент.Вывести(ОбластьМакета);
"
Зачем дважды присваивать к одной переменной разные области макета?
...
(0)Отладчиком встань на условие и посмотри
19 Torquader
 
13.04.14
15:05
(15) И что там такого ?
Нужно найти, где "развернута" форма и открыть её на отладку.
20 Alex S D
 
13.04.14
15:07
(15) это даст на много больше пользы чем эта тема..
21 листопад
 
13.04.14
15:07
(18) Вот мой итоговый код. Извините, раньше я не тот выкладывала.

Границы = Справочники.ВидыГраниц.НайтиПоНаименованию("Граница1");

//Если Шапка.ДоговорКонтрагента.ВидГраницы = Границы Тогда
Если Шапка.ДоговорКонтрагента.ВидГраницы.Наименование = Границы Тогда
     ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница1");
     ТабличныйДокумент.Вывести(ОбластьМакета);
Иначе
     ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница2");    
     ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;



Мне кажется проблема подсказана в (1) и (16). Но как ее решить???
22 Wobland
 
13.04.14
15:08
сравнивать значения одинаковых типов
23 Wobland
 
13.04.14
15:08
(20) если уж человек за столько лет не научился..
24 Alex S D
 
13.04.14
15:08
а если граница не найдена?
25 Torquader
 
13.04.14
15:09
Когда мы что-то находим по наименованию, то получаем в ответ ссылку, а не строку, а Наименование - всегда строка.
26 Alex S D
 
13.04.14
15:09
(23) ну никогда не поздно... я считаю..
27 Torquader
 
13.04.14
15:09
Кстати, можно вставить "Сообщить(ТипЗнч(Границы))", чтобы было понятнее, с чем мы имеем дело.
28 Wobland
 
13.04.14
15:10
Область="ПечГраница"+?(Шапка.ВидГраницы=ПерваяГраница, 1, 2);
ТабДок.Вывести(Область)
29 Alex S D
 
13.04.14
15:10
(27) типа "Если 1=1 то сообщить("ку-ку")" как пишут иногда )
30 Wobland
 
13.04.14
15:11
(28) это если не хочется одну область заделать
31 Torquader
 
13.04.14
15:12
(28) Ты вот такой код пишешь для (0), чтобы (0) понял, что он полный ноль ?
32 Wobland
 
13.04.14
15:12
(31) надеюсь, у человека на это ума есть
33 Torquader
 
13.04.14
15:15
(32) Человек с ником "листопад" к дятлу находится очень близко, так что объясняйте так, чтобы клюв не затупился.
34 Wobland
 
13.04.14
15:17
(33) подождём реакции на (16) и (25) ;)
35 Torquader
 
13.04.14
15:19
(34) Как раз по пониманию написанного мы и определим "коэффициент близости к дятлу".
36 листопад
 
13.04.14
15:20
(28) У меня несколько условий, на форум я выложила всего два, для простоты. Поэтому конструкция ? не подойдет.

(31) Не он а ОНА.

(33) Стыдно не незнать, стыдно не учиться.
37 Torquader
 
13.04.14
15:22
(36) Ну и, та, которая ОНА, думает, что сравнивать разные типы и ожидать, что они совпадут - вполне можно ?
Хотя, если наименования нет, то будет НЕОПРЕДЕЛЕНО.
38 Wobland
 
13.04.14
15:24
(36) уверен, что если глянуть твои старые темы, проблемы будут схожи. стыдоба
39 листопад
 
13.04.14
15:36
Написала, для проверки:

...
Границы = Справочники.УровниКУ.НайтиПоНаименованию("Граница1");
Сообщить(Границы);
Сообщить(ТипЗнч(Границы));
...



В результате в окне Сообщить, по первому - ничего не вывел, по второму Сообщить - вывел "Виды Границ".
40 Wobland
 
13.04.14
15:37
таак. шифт+ф9 это делает гораздо качественнее
41 Torquader
 
13.04.14
15:39
(39) Не иначе как вам вернули пустую ссылку ^_^
42 Wobland
 
13.04.14
15:42
поделюсь мудростью богов
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
43 листопад
 
13.04.14
15:44
(41), (42) И как быть в этом случае???
44 Wobland
 
13.04.14
15:46
(43) это ты нам расскажи, как быть, если у тебя Границы1 нету
45 листопад
 
13.04.14
15:47
(44) ОНА ЕСТЬ!!!
46 Torquader
 
13.04.14
15:48
(45) Может быть, и есть, но называется не совсем так.
47 листопад
 
13.04.14
15:49
(44), (45) - все элементы этого справочника - предопределенные, вводились в конфигураторе.
48 листопад
 
13.04.14
15:49
(46) Я копировала из этого справочника и вставляла в код, т.е. ошибиться не могла.
49 Torquader
 
13.04.14
15:50
(47) Так Граница1 - это предопределённое имя элемента в метаданных, а не наименование ?
И чего мы тогда по наименованию ищем ?
Справочники.УровниКУ.Граница1 - что возвращает ?
50 Wobland
 
13.04.14
15:51
(45) убеди нас
51 Torquader
 
13.04.14
15:51
(48) При копировании кода нужно понимать, что он делает - иначе можно получить феерический бред (слава богу, в нашем случае этого не случилось).
52 hhhh
 
13.04.14
15:51
(48) "Граница 1"
53 Torquader
 
13.04.14
15:59
Ну и где этот "опавший листочек" ?
54 листопад
 
13.04.14
15:59
(49) УРА! Мы уже почти у цели. Исправила код, теперь он находит Границу1 в справочнике, условие опять не срабатывает!

// Границы = Справочники.ВидыГраниц.НайтиПоНаименованию("Граница1");
Границы = Справочники.УровниКУ.Граница1;

//Если Шапка.ДоговорКонтрагента.ВидГраницы.Наименование = Границы Тогда
Если Шапка.ДоговорКонтрагента.ВидГраницы = Границы Тогда
    ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница1");
    ТабличныйДокумент.Вывести(ОбластьМакета);
Иначе
    ОбластьМакета = Макет.ПолучитьОбласть("ПечГраница2");    
    ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
55 Wobland
 
13.04.14
16:00
(54) от такой вот вид границы у договора
56 листопад
 
13.04.14
16:00
+(54) Проблема в этой строчке, я полагаю:

Если Шапка.ДоговорКонтрагента.ВидГраницы = Границы Тогда


Как теперь сравнить это найденное предопределенное значение справочника?
57 Wobland
 
13.04.14
16:03
(56) надо, чтобы с обеих сторон были одинаковые типы
58 Torquader
 
13.04.14
16:03
ДоговорКонтрагента - это кто ?
59 листопад
 
13.04.14
16:10
(58) Это тоже справочник, типовой, ДоговорыКонтрагентов. А в моем случае он служит реквизитом на форме док-та РеализпцияТиУ. Вообще это я корректирую типовую печ.форму Акта  у док-та РеализацияТиУ.
Так вот, у справочника ДоговорыКонтрагентов добавлен реквизит "ВидГраницы" (ссылка на спр.ВидыГраниц). Мне его теперь надо сравнивать по условию.
60 Torquader
 
13.04.14
16:14
(59) А УровниКУ - это кто тогда ?
61 листопад
 
13.04.14
16:15
Опечатка:
Так вот, у справочника ДоговорыКонтрагентов добавлен реквизит "ВидГраницы" (ссылка на спр.ВидыГраниц). Мне его теперь надо сравнивать по условию.

Читать так:
Так вот, у справочника ДоговорыКонтрагентов добавлен реквизит "УровниКУ" (ссылка на спр.УровниКУ). Мне его теперь надо сравнивать по условию.
62 Wobland
 
13.04.14
16:15
(61) с небольшими замечаниями код одобрен
63 листопад
 
13.04.14
16:20
(61) Я вас всех запутала!!!
Границы и ДоговорКонтрагента.ВидГраницы это один и тот же справочник!!!
64 Wobland
 
13.04.14
16:21
(63) да вроде нет. я себя хорошо чувствую
65 листопад
 
13.04.14
16:24
Т.е. Границу мы нашли (Границы = Справочники.УровниКУ.Граница1;). Как теперь сравнить найденное значение с предопределенным элементом справочника? Если пишу так:
Если Шапка.ДоговорКонтрагента.ВидГраницы = Границы Тогда

то не находит!
66 Torquader
 
13.04.14
16:25
(63) Так он называется УровниКУ или нет ?
67 Torquader
 
13.04.14
16:26
(65) Мы не элемент нашли, а получили его "ссылку", теперь её и будем сравнивать с нужной ссылкой, но, есть подозрение, что ссылки из разных справочников.
68 Wobland
 
13.04.14
16:27
(65) не "не находит", а считает разными
69 hhhh
 
13.04.14
16:29
(65) области в макете проверьте. Наверняка ПечГраница1 = ПечГраница2
70 листопад
 
13.04.14
16:29
(66) Да
71 Wobland
 
13.04.14
16:29
(68) а, ну или считает одинаковыми, а Михаил Иванов нам тут заливает
72 листопад
 
13.04.14
16:29
(67) Нет, справочники ОДИНАКОВЫЕ.
73 Torquader
 
13.04.14
16:31
(72) Так одинаковые или один и тот же ?
74 листопад
 
13.04.14
16:35
(73) Один и тот же.
75 Torquader
 
13.04.14
16:37
(74) Замечательно - теперь смотрим, что у нас в договоре:
Сообщить(Шапка.ДоговорКонтрагента.ВидГраницы);
Сообщить(ТипЗнч(Шапка.ДоговорКонтрагента.ВидГраницы));
76 листопад
 
13.04.14
16:45
(75) В результате в окне Сообщить^
по первому выдал "Граница2"
по второму Сообщить - вывел "Виды Границ".
77 Wobland
 
13.04.14
16:46
(76) -> (55)
78 листопад
 
13.04.14
16:47
Ой, сейчас внимательно протестировала. Оказывается, все у нас получилось!!!
Всем СПАСИБО!
Особая БЛАГОДАРНОСТЬ Torquader!!! :*)
79 Wobland
 
13.04.14
16:51
кто такой Михаил Иванов и почему он целует Торквадера? ;)
80 Torquader
 
13.04.14
17:23
Не надо меня целовать - лучше налейте чего-нить вкусного.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.