Имя: Пароль:
1C
1C 7.7
v7: Глюки интерпретации кода
,
0 brenli
 
04.03.15
15:15
Версия платформы (7.70.027)
Конфа над которой "изголяюсь"  ТиС 972.
Нахожусь в глобальном модуле в процедуре глПересчетТабличнойЧасти(...)
Задача: При достижении определенной суммы в документе, брать Оптовые цены из справочника.
Идея:
При добавлении или редактировании строки табличной части документа, запускается процедура ПересчетТабличнойЧасти.
Предельная величина цены, после которой срабатывает пересчет задается в константах.
Так же на форме документа существует "Флажок", если он отключен, остальные условия не влияют - цена расчитывается стандартным алгоритмом, если установлен и константа "Порогового значения цены" не равна 0 и если сумма документа превышает значение константы, берется оптовая цена из справочника цен...если конечно имеется у товара.

Корректно не работает условие:
Если не установлено количество, цена нормально пересчитывается при включении и отключении флажка.
Как только устанавливается количество ..
Не срабатывает оператор "Сообщить(3)", хотя  итог по документу превышает размер константы, о чем свидетельствует операторы "Сообщить(2)" и "Сообщить(" "+СуммаКонстанты+" "+ИтогПоДокументу)" при выполнении 2 условия.
//...    
ИначеЕсли ИмяРеквизита = "Цена" Тогда    
            
        ИтогПоДокументу = Конт.Итог("Сумма");     
        Если (Конт.ВклОптЦены=1) Тогда                                    
            Сообщить(1);
            Если (СуммаКонстанты > 0) Тогда
                Сообщить(2);
                    Сообщить(" "+СуммаКонстанты+" "+ИтогПоДокументу);
                Если (СуммаКонстанты > ИтогПоДокументу) Тогда
                
                    Сообщить(3);
                    Конт.Цена = ВычислениеОптовойРозничнойЦены(Конт.Номенклатура, Конт.ДатаДок,1);
                КонецЕсли;
            КонецЕсли;
        Иначе
               Конт.Цена =  ВычислениеОптовойРозничнойЦены(Конт.Номенклатура, Конт.ДатаДок,2);    

        КонецЕсли;
//...

Условия специально раскидал так для наглядности...
Что можете посоветовать, сравнение ">" не работает.

p.s Периодически встречаются подобные баги в интерпретации кода.
1 ShoGUN
 
04.03.15
15:19
(0) А итог-то точно считается? Проверял?
2 altone1C
 
04.03.15
15:20
Проверить, возможно "ИтогПоДокументу" или "СуммаКонстанты" где-то внезапно стали строковыми.
3 altone1C
 
04.03.15
15:21
При этом ИтогПоДокументу исключается, судя по коду.
СуммаКонстанты - тип? Откуда берется?
4 brenli
 
04.03.15
15:21
(1) Считается точно.
(2) Типы проверял, - числа
5 brenli
 
04.03.15
15:21
(3) Тип Число, берется из константы
6 Масянька
 
04.03.15
15:22
(4) А что значит " сравнение ">" не работает. "?
7 brenli
 
04.03.15
15:23
Ребята....ссори.
Я похоже лоханулся в 3 условии.
Все правильно, снак сравнения нужно поставить в другую сторону =D
8 altone1C
 
04.03.15
15:24
(5) Тестовый вывод Сообщить() скопируй сюда тоже
9 Ёпрст
 
04.03.15
15:24
СуммаКонстанты=?
ИтогПоДокументу=?
10 ShoGUN
 
04.03.15
15:25
(7) ЛОЛ :)
11 brenli
 
04.03.15
15:26
Сумма же по документу появляется когда есть количество, поэтому оно и срабатывало когда константа больше.
p.s Тему удалить =D
12 Ёпрст
 
04.03.15
15:30
не самое лучшее решение с константой.. мегатормоз. Ну, разве что кешировать значение константы где-нить
13 brenli
 
04.03.15
15:32
(12) Предложи лучше?
В форме документа в "Ценах" задать лимит?
14 palpetrovich
 
04.03.15
15:59
(12) а в чем тормоз? один раз переменной присвоить знгачение константы, далее работать с пеерменной, я так понял - так и делается у автоаа, в чем тормоз?
15 Новый участник
 
04.03.15
16:03
С ГлПересчётом можно и тормоза от зацикливания получить, и мультивибратор - посчитал, сумма выше порога, сработала скидка, сумма выше порога, и т.д.

Определи событие, при котором пересчитываешь, и следи за частотой его срабатывания.
16 Ёпрст
 
04.03.15
16:04
(13)
1. дергаешь константу
2.дергаешь цены из этой же таблички

1сконст..не самое лучшее решение.
А так, кешировать хотя бы, и цены и константу.
А то, подтормаживать будет
17 brenli
 
05.03.15
06:30
(16) Спасибо, учту
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн