Имя: Пароль:
1C
1С v8
Обращение к процедуре
,
0 amadeus2010
 
27.02.12
14:45
Добрый день при написании следующего кода выявлена ошибка:

{Документ.РеализацияТоваровУслуг(333)}: Обращение к процедуре объекта как к функции (РассчитатьСуммуТабЧасти)
   ИначеЕсли ЭтотОбъект.Контрагент.ВозвратнаяТара=Ложь Тогда ОбластьПодвал.Параметры.Цена= ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(ЭтотОбъект.Ссылка);

Как ее можно устранить?
1 andrewks
 
27.02.12
14:48
а что непонятно в сообщении об ошибке?
2 aleks-id
 
27.02.12
14:50
>>ЭтотОбъект.Контрагент.ВозвратнаяТара=Ложь
я падаванов за такое ругаю
3 amadeus2010
 
27.02.12
14:50
сама ошибка понятна, только не могу понять как правильно написать этот участок кода чтобы не выходила эта ошибка
4 aleks-id
 
27.02.12
14:51
предположу что начинается код так:
Если ЭтотОбъект.Контрагент.ВозвратнаяТара=Истина
5 le_
 
27.02.12
14:51
(0) Чем процедура от функции отличается?
6 orefkov
 
27.02.12
14:51
(0)
К процедуре обращаются по разному.
Начинающие одинэсники обычно обращаются "Многоуважаемая и почитаемая Процедура".
Кодеры среднего уровня обращение к процедуре обычно начиниают со слов "Доброго времени суток, процедура".
Опытные просто пишут - "эй ты".
7 Wobland
 
27.02.12
14:52
(3) что делает РассчитатьСуммуТабЧасти() и почему оно ничего не возвращает?
8 DexterMorgan
 
27.02.12
14:52
(4) Если ЭтотОбъект.Контрагент.ВозвратнаяТара Тогда
9 andrewks
 
27.02.12
14:53
(6) а ещё, говорят, что нас обманывают, и процедур не существует, а есть только функции!
10 DexterMorgan
 
27.02.12
14:53
(4) Зачем все любят булево сравнивать с истиной?
11 orefkov
 
27.02.12
14:53
(3)
Закомментируй эту строчку.
12 andrewks
 
27.02.12
14:53
(11) бугага. зачОт )
13 aleks-id
 
27.02.12
14:54
(10) это ты у них спроси. я таких на собеседовании сразу отсеиваю.
14 DexterMorgan
 
27.02.12
14:55
(0) ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(ЭтотОбъект.Ссылка); - это процедура она не возвращает значений, просто пишешь

ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(ЭтотОбъект.Ссылка);

И, о чуда, все посчитается! Хотя конечно не факт =(
15 Wobland
 
27.02.12
14:55
(4) круче можно: НЕ ЭтотОбъект.Контрагент.ВозвратнаяТара=Ложь
16 amadeus2010
 
27.02.12
14:56
Если ЭтотОбъект.Контрагент.ВозвратнаяТара=Истина Тогда ОбластьПодвал.Параметры.Цена="Х";
   ИначеЕсли ЭтотОбъект.Контрагент.ВозвратнаяТара=Ложь Тогда ОбластьПодвал.Параметры.Цена= ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(ЭтотОбъект.Ссылка);
       КонецЕсли;
Вот весь код. РассчитатьСуммуТабЧасти()-это процедура которая считает цену товара.Мне надо присвоить параметру Цена значение из РассчитатьСуммуТабЧасти() если условие ложь.
17 le_
 
27.02.12
14:56
(15) НЕ (НЕ (НЕ (ЭтотОбъект.Контрагент.ВозвратнаяТара = Ложь)))
18 andrewks
 
27.02.12
14:56
(4) ты выиграл дайм
19 aleks-id
 
27.02.12
14:56
(15) один персонаж тебя переплюнул
он написал НЕ ЭтотОбъект.Контрагент.ВозвратнаяТара<>Истина
20 DexterMorgan
 
27.02.12
14:56
(16) да убери ты сравнение булево с истиной!!
21 aleks-id
 
27.02.12
14:57
ес! я угадал! )))))))
22 pumbaEO
 
27.02.12
14:57
При каждой печати будем цены считать - вот это круто.
23 orefkov
 
27.02.12
14:59
(10)
Потому что правильнее тогда было бы называть
ЭтотОбъект.Контрагент.ЭтоВозвратнаяТара

тогда строки

Если ЭтотОбъект.Контрагент.ЭтоВозвратнаяТара Тогда
Если Не ЭтотОбъект.Контрагент.ЭтоВозвратнаяТара Тогда

смотрелись бы гармонично.

(17)
"Нененене Дэвид Блейн, нененене"
24 Wobland
 
27.02.12
14:59
дарю уже
ОбластьПодвал.Параметры.Цена=?(Контрагент.ВозвратнаяТара, "Х", ТекСтрока.Цена)
25 DexterMorgan
 
27.02.12
15:02
(24) Убил интригу
26 Wobland
 
27.02.12
15:03
(25) да не, щас он будет ругаться на то, что переменная ТекСтрока не найдена
27 Feanor
 
27.02.12
15:05
(13) у тебя навязчивые мысли? мб того, к врачу пора сходить? )))
28 hhhh
 
27.02.12
15:26
Если ЭтотОбъект.Контрагент.ЭтоВозвратнаяТара Тогда - это г.внокод, хоть и гармоничный. Приводит к аварийному завершению, если значение = Неопределено или значение = NULL. Надежнее писать

ЭтотОбъект.Контрагент.ЭтоВозвратнаяТара = Истина

особенно когда обрабатываем выборку из запроса. Там вообще легко словить NULL.
29 Feanor
 
27.02.12
15:28
(28) как там окажется "Null" или "Неопределено", если, к примеру, это реквизит с типом "Булево"?
30 Ненавижу 1С
 
гуру
27.02.12
15:30
(29) это уличная магия
(28) надежнее тогда вообще всюду проверять типы, но зачем?
31 aleks-id
 
27.02.12
15:36
(27) под раздачу попал?
32 Feanor
 
27.02.12
15:45
(30) да ладно, чудес в этом плане не бывает. Пример бы кодом лучше.

(31) Отнюдь. Но даже если бы и попал, то был бы тока щастлив, потому как ночальнег с бреднями в голове - это печаль, оно ведь не тока так может боком выйти ))
33 aleks-id
 
27.02.12
15:51
(32) это всего лишь показатель - умеет ли кандидат работать с булевым
34 Ненавижу 1С
 
гуру
27.02.12
15:52
(32) то у тебя или у меня, а то у него...
35 Feanor
 
27.02.12
15:53
(33) этот показатель существует только в твоей голове
36 amadeus2010
 
27.02.12
15:53
ОбластьПодвал.Параметры.Цена=?(Контрагент.ВозвратнаяТара, "Х", ВыборкаСтрокТовары.Цена)
ВЫводит цену товара и все работает.Спасибо всем за советы.Но ведь я не волшебник,я только начинаю свой путь на просторах 1с
37 aleks-id
 
27.02.12
15:54
(35) мне копрокодеры типа тебя ни к чему
38 fisher
 
27.02.12
15:55
(35) Нормальный показатель, если ищется кандидат с хорошим опытом. Опытный одинэсник никогда так не напишет. Ну а если просто ищется вменяемый чел на вырост, тогда да - не показатель.
39 aleks-id
 
27.02.12
15:57
(38) это показатель профессионального программиста, ибо нас в институте били "-1 балл" за лабы, в которых были подобные выкидыши...
40 hhhh
 
27.02.12
15:57
(29) допустим Контрагент - пустая ссылка или контрагент - группа. Тогда может и не булево быть.
41 aleks-id
 
27.02.12
15:59
(40) исходя из (0) - ведется печать из РТиУ. давай пример, когда там контрагент будет группой?
42 DexterMorgan
 
27.02.12
16:01
(28) Никуя, лучше сделать проверку на ЗначениеЗаполнено(Контрагент) чем писать такую куйню как булево = Истина
43 DexterMorgan
 
27.02.12
16:02
(28) А в запросе функция is null есть для этого
44 DexterMorgan
 
27.02.12
16:02
точнее isnull(,)
45 Feanor
 
27.02.12
16:03
(38) абсолютно голословно. Чувствуешь разницу между пониманием типов и использованием этой конструкции в определенном месте?
(39) воще как-то строго похер на ваши институтские лабы. Воще ниразу не аргумент.
(40) для группы у тебя, очевдино, в этом случае будет исключение. для пустой ссылки проверь сам ))
(42) ты достоверно знаешь, что у него там только тип "Булево" в возможных типах реквизита?
46 DexterMorgan
 
27.02.12
16:03
(29) Он типа имел ввиду что контрагент не заполнен
47 fisher
 
27.02.12
16:04
(45) Чувствую. Только не будем на ровном месте высасывать из пальца гипотетические ситуации.
48 hhhh
 
27.02.12
16:05
(41) ну оно надо? Когда мне их сортировать, где нужно и где не нужно? Я вообще принял для себя решение: писать = Истина. Тогда и не нужно задумываться. И будет единообразно везде.
49 Feanor
 
27.02.12
16:06
(47) ну дак и глобальных умозаключений тогда не нада, предлагаю не быть однобитными. Тем более, что (48) по идейным соображениям так пишет, а не потому, что он нуб
50 DexterMorgan
 
27.02.12
16:06
(48) Поздравляю, хоть ты и не знал, но и есть гоунокодер xDDD
51 hhhh
 
27.02.12
16:07
(42) а зачем лишнюю команду писать? Мне нужно проверить равен реквизит Истина или нет. Я и проверяю. А вы из-за какой-то гармоничности меня призываете еще лишнюю команду писать, проверять заполнено или не заполнено.
52 Feanor
 
27.02.12
16:08
(50) Видимо, ты не видел в жизни качественного гоунокода. Потому как это невинная шалость в сравнении с отдельными тяжелыми случаями.
53 hhhh
 
27.02.12
16:09
(50) ну я и не претендую на какой-то идеальный код.
54 DexterMorgan
 
27.02.12
16:10
(53) Да ты ч0? А в (28) ты был более категоричен, че случилось?
55 fisher
 
27.02.12
16:22
(49) Я подразумевал явную проверку булево в однозначных ситуациях. Не в какой-то конкретной неоднозначной. В грамотном коде явное сравнение как раз и будет прямым указанием на неоднозначность типа значения.
(53) Это плохо.
56 hhhh
 
27.02.12
16:22
(54) ну да, в (28) это я перегнул палку. Просто, говорят, что ребят на собеседованиях срезают из-за подобной фигни, ну я возмутился слегка.
57 fisher
 
27.02.12
16:26
(56) Если бы пришел распальцовщик, рассказывающий про многолетний опыт плотного кодинга и при этом повсеместно явно анализирующий булево - сразу бы пошел лесом. Потому как или звездит или ховнокодер.
58 Feanor
 
27.02.12
16:33
(57) Самое интересное, что это на практике ну совершенно никак не мешает. А если нет практического критерия, то это холивар в чистом виде. Поскольку товарищ из (13) свои внутренние переживания делает критерием для отбора, то это только его сугубо личные эротические переживания.
59 Reset
 
27.02.12
16:43
(58) Мешает, имхо. Глаз спотыкается об избыточную констурукцию и на секунды/доли секунды затрудняет анализ кода. Хотя, конечно, это далеко не заглавная беда.
60 Feanor
 
27.02.12
16:49
(59) Имхо совершенно без разницы, лично мне анализ кода совершенно не затрудняет. Проблема высосана из пальца, ну или из оценок за лабы в институте.
61 amadeus2010
 
27.02.12
17:11
Документ.РеализацияТоваровУслуг(348)}: Поле объекта не обнаружено (ЦенаПет)
   ОбластьПодвал.Параметры.ЦенаПет=?(Контрагент.ВозвратнаяТара, "Х", 8.4-(8.4*ЗапросСкидки.ЦенаПет));
Подскажите в чем заключается ошибка пожалуйста?
62 Wobland
 
27.02.12
17:11
(61) ты не поверишь...
63 Wobland
 
27.02.12
17:12
(61) есть такой параметр у тебя в макете?
64 amadeus2010
 
27.02.12
17:13
да такой параметр в макете есть
65 Wobland
 
27.02.12
17:14
(64) врёшь ведь
66 Wobland
 
27.02.12
17:14
(65) пардон, значит, в запросе нету. вариантов немного ;)
67 Feanor
 
27.02.12
17:14
(65) мб и в запросе нет такого поля )
68 Wobland
 
27.02.12
17:15
ЗапросСкидки - это запрос? у запроса нет полей, они есть у выборки, к примеру
69 Feanor
 
27.02.12
17:19
(68) разве выборка не предоставляет поля, описанные в тексте запроса?
70 Wobland
 
27.02.12
17:20
(69) есть такой тип - Запрос. и есть тип Выборка..
71 amadeus2010
 
27.02.12
17:20
Запрос=Новый Запрос; //расчет скидок
   Запрос.Текст=
   "ВЫБРАТЬ
   |СкидкиНаценкиНоменклатурыСрезПоследних.Период,
   |СкидкиНаценкиНоменклатурыСрезПоследних.Номенклатура как Номеклатура,
   |СкидкиНаценкиНоменклатурыСрезПоследних.ПолучательСкидки,
   |СкидкиНаценкиНоменклатурыСрезПоследних.ПроцентСкидкиНаценки как Скидки
   |ИЗ
   |РегистрСведений.СкидкиНаценкиНоменклатуры.СрезПоследних КАК СкидкиНаценкиНоменклатурыСрезПоследних";
   ЗапросСкидки=Запрос.Выполнить().Выбрать();
   ЗапросСкидки.Следующий();

ОбластьПодвал.Параметры.ЦенаПет=?(Контрагент.ВозвратнаяТара, "Х", 8.4-(8.4*ЗапросСкидки.Скидки));
   ОбластьПодвал.Параметры.ЦенаТара=?(Контрагент.ВозвратнаяТара, "Х", 3-(ЗапросСкидки.Скидки*3));
Полный текст запроса и вывода данных из запроса.
72 Wobland
 
27.02.12
17:21
(71) а запрос непуст?
73 Feanor
 
27.02.12
17:22
(70) к чему этот пассаж? кэп? ))
74 Reset
 
27.02.12
17:22
(71) и (61) - разный код
75 Wobland
 
27.02.12
17:22
3-(ЗапросСкидки.Скидки*3)
а это для зачем?
76 DexterMorgan
 
27.02.12
17:22
Ну и где твои ЗапросСкидки.ЦенаПет?
77 Wobland
 
27.02.12
17:22
(73) а к чему (69) было? ;)
78 Feanor
 
27.02.12
17:23
(77) а (68) к чему было?
79 fisher
 
27.02.12
17:23
(58) На практике это обычно один из многих симптомов ховнокодера.
На практике это обычно выглядит как
Если Ст = Истина Тогда
вместо
Если ЗаявкаУтверждена Тогда
80 Wobland
 
27.02.12
17:24
(78) пытался стелепатировать отсутствие Запрос.Выполнить().Выбрать()
81 Reset
 
27.02.12
17:24
(78) Зачем докапываешься? Абсолютно логичное предположение там.
82 Feanor
 
27.02.12
17:26
(79) ну зачем же путать теплое с мягким. "Ст = Истина" вместо "ЗаявкаУтверждена" - явно гуанокод. А вот "ЗаявкаУтверждена = Истина" вместо "ЗаявкаУтверждена" - никакого криминала, имхо, нет.

(80) да, понял ))

(81) ага, уже дошло. Агрюсь уже на всё ))
83 Mort
 
27.02.12
17:36
(79)
Ст = ЧьяТоСтороняяФункцияКотораяВозвращаетИстинаИНеопределено();
Если Ст = Истина Тогда
84 fisher
 
27.02.12
18:05
(82) Хорошего тоже ничего не вижу. Да и не встречал я людей, дающих вменяемые имена булевым и при этом юзающих явную проверку. А в ховнокоде - сколько угодно.
85 fisher
 
27.02.12
18:11
(83) Пример несколько притянутый. Но я еще раз говорю, что я об очевидных случаях речь веду, а не о составных типах.
86 Feanor
 
27.02.12
18:26
(85) Вот это гуанокод?

НужноРегистрироватьМестоСоздания = Ложь;
   Источник.ДополнительныеСвойства.Свойство("НужноРегистрироватьМестоСоздания", НужноРегистрироватьМестоСоздания);
   
Если НужноРегистрироватьМестосоздания <> Истина Тогда
   Возврат;
КонецЕсли;

нам (13) утверждает, что резюме такого пейсателя он сразу в мусорку бросает
87 Wobland
 
27.02.12
18:28
(86) а мне не нравится. к тому ж есть где-то у 1С некий документ с описанием стандартов или что-то в этом роде. согласно ему - сразу незачёт
88 Mort
 
27.02.12
18:29
OFF вообще второй параметр функции "свойство" считаю ущербным.
89 Feanor
 
27.02.12
18:30
(87) ну да, ну да :)

это кусок из типовой УПП, примерно то же самое есть и в БСП последней версии

(88) чем же он Вам не угодил, батенька? ))
90 Wobland
 
27.02.12
18:31
(89) да в типовых чего только нет, их же тоже люди делают ;)
91 Feanor
 
27.02.12
18:32
(90) ну да, но некоторые с особенной тщательностью блюдут каноны ))
92 Mort
 
27.02.12
18:36
(89) Возвращаемые параметры это зло. Применяют их обычно, чтобы не раздувать некоторую область (например, чтоб не делать отдельные объекты-диалоги для ввода примитивных значений и т.п.). А тут он ни к селу ни к городу.
93 fisher
 
27.02.12
18:46
(86) Третий? раз повторяю - я об очевидных случаях, а не о составных типах.
В этом коде - спорный момент. Т.к. никаких гарантий что в свойстве именно булево - нету (оно может быть не инициализировано). Очевидные случаи - когда реквизит типа булево или флаг которым сам же ховнокодер управляет.
94 aleks-id
 
27.02.12
19:03
(86) в мусорку летят резюме пейсателей атстатыщщ, которые в простейшем запросе выборки помеченных на удаление документов ставят
ГДЕ Док.ПометкаУдаления = ИСТИНА

и не надо мне тут лепить, что это спорный случай
95 fisher
 
27.02.12
19:05
(94) А вот тут не надо. Если это было тестовое задание, то чел мог просто полениться переписывать код конструктора.
96 aleks-id
 
27.02.12
19:06
тут уже была ветка типа "что такое А=Б=С=Д;"
многие просто не понимают с чем едят булево
97 aleks-id
 
27.02.12
19:07
(95) была бумажка и ручка. и просьба написать запрос который выберет все помеченные на удаление документы РТиУ. или Контрагентов. не важно.
98 aleks-id
 
27.02.12
19:09
+(97) и ты не поверишь, 100% людей, написавших "= ИСТИНА", не смогли потом дописать запрос, чтобы он содержал левое соединение.
99 Wobland
 
27.02.12
19:15
(95) конструктор предлагает ГДЕ Док.ПометкаУдаления = &ПометкаУдаления
100 Feanor
 
27.02.12
19:18
100!
101 Feanor
 
27.02.12
19:18
(98) ну если левое соединение не смогли написать, то всё печально ))
102 experimentator76
 
27.02.12
22:11
(94) Уважаемый, что за пунктик у Вас насчет =ИСТИНА ?
спорите скорее всего не буду, НО откуда это произошло ?
103 experimentator76
 
27.02.12
22:13
наверное это от семерки где =0|1 ?
104 experimentator76
 
27.02.12
22:15
имхо читаемости это не ухудшает, по крайней мере мне пофиг даже если так напишут
действительно бывает гораздо круче гомнокод
иногда и сам на больную голову такое напишешь а на друго
105 experimentator76
 
27.02.12
22:15
й день удивляешься :)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой