Имя: Пароль:
1C
 
Автоматический перерасчет суммы строки табличной части, при установке вручную
0 slasher
 
18.06.15
16:50
Добрый вечер!

Комплексная автоматизация. Документ "Заявка покупателя". Табличная часть "Услуги". Ввожу количество = 2, цена = 3, сумма автоматом рассчитывается = 6. Все хорошо. Когда сумму руками правлю и ставлю 6.01 программа пересчитывает цену = 3.01 и сумму ставит 6.02. Хочу чтобы программа сумму не меняла, а оставляла ту, которую поставит пользователь.
Отладчиком пользоваться умею. Не смог найти где сумма пересчитывается.
Подскажите, что делать в моей ситуации?
1 ДенисЧ
 
18.06.15
16:50
Есть два варианта
1. Простой. Заплатить тому, кто умеет.
2. Сложный. Научиться самому.
2 vicof
 
18.06.15
16:51
"Отладчиком пользоваться умею"
Таки, видимо не умеете
3 slasher
 
18.06.15
16:53
(1) чему научиться самому?
4 slasher
 
18.06.15
16:53
(2) а можете меня носом ткнуть?
5 VikingKosmo
 
18.06.15
16:54
(4) в отладчик?
6 vicof
 
18.06.15
16:58
(4) Сколько? Мне вот откровенно лень комплексную ставить, чо-то там отлаживать, потом окажется, что нетиповая, и какие-нить криворукие погромисты написали кривую функцию изменения цены при изменении суммы.
7 slasher
 
18.06.15
16:59
(5) в строку кода, где сумма пересчитывается в моём случае
8 ВРедная
 
18.06.15
17:03
(6) Вероятнее всего про чьи-то руки как раз в точку. Врядли в типовой такой дурной код
9 slasher
 
18.06.15
17:03
(6) если лень, тогда зачем было вообще писать сообщение?
Или было непреодолимое желание поучить кого-то жизни?
10 разработчик 1с
 
18.06.15
17:04
(7) УслугиСуммаПриИзменении(Элемент) - чтото типа такого
11 ВРедная
 
18.06.15
17:05
(9) А что мы тут сможем еще сделать? Удаленно к тебе подключиться и отлаживать твою переписанную комплексную?
12 Poluk
 
18.06.15
17:06
В событие "при изменении", в колонке "сумма" смотрели?
13 vicof
 
18.06.15
17:07
(9) Я спросил "сколько"?
14 slasher
 
18.06.15
17:09
(6)(8)(11) база типовая
15 slasher
 
18.06.15
17:10
(10)(12) конечно посмотрел, ничего не нашёл
16 slasher
 
18.06.15
17:11
(13) чего сколько?
17 vicof
 
18.06.15
17:12
(16) Дашь, чтобы я поковырялся в твоей базе
18 bootini
 
18.06.15
17:14
ОбновлениеОтображения()
19 Poluk
 
18.06.15
17:25
ТОгда цену нужно в табло поставить, и смотреть на изменение во времени отработки события при изменении.. если меняется то где то внутри этого события.... отладчиком в это событие попадает?
20 slasher
 
18.06.15
17:29
(17) такие вопросы нужно согласовывать с Волшебником
21 slasher
 
18.06.15
17:30
(18) уже теплее, но не то, ещё до обновления отображения сумма измененная
22 ВРедная
 
18.06.15
17:39
(15) Серьезно? Ничего?

Процедура УслугиСуммаПриИзменении(Элемент)

    ОбработкаТабличныхЧастей.ПриИзмененииСуммыТабЧасти(ЭлементыФормы.Услуги.ТекущиеДанные, ЭтотОбъект, глЗначениеПеременной("глТекущийПользователь"),,истина,мПересчитыватьСкидку,истина,"Услуги");
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(ЭлементыФормы.Услуги.ТекущиеДанные, ЭтотОбъект);

КонецПроцедуры

Процедура которая вызывается при изменении суммы. Внезнапно. Первая вызываемая процедура пересчитывает сумму или скидку. Ты до нее не дошел?
23 slasher
 
18.06.15
17:58
(22) ну это первая процедура куда мы вываливаемся из формы документа и что? Я в упор не вижу пересчет суммы.
24 bootini
 
18.06.15
18:06
"Отладчиком пользоваться умею."  :)
25 hhhh
 
18.06.15
18:07
(23) ну давай сюда эту процедуру
26 bootini
 
18.06.15
18:08
Остановись на строке:
ОбработкаТабличныхЧастей.ПриИзмененииСуммыТабЧасти(ЭлементыФормы.Услуги.ТекущиеДанные, ЭтотОбъект, глЗначениеПеременной("глТекущийПользователь"),,истина,мПересчитыватьСкидку,истина,"Услуги");

И нажми на клавиатуре кнопочку "F11"
27 slasher
 
18.06.15
18:11
проваливаемся по F12

видим:
Процедура ПриИзмененииСуммыТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, ТекПользователь, РасчетАвтоматическихСкидок = Ложь, ЕстьРеквизитДокументаПроцентСкидкиНаценки = Неопределено, ПересчитыватьСкидкуДокумента = Неопределено, ЕстьРеквизитДокументаПроцентАвтоматическихСкидок = Неопределено, ИмяТабЧастиДокумента = неопределено) Экспорт

    ИмяТабличнойЧасти = ?(ИмяТабЧастиДокумента=неопределено,ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти),ИмяТабЧастиДокумента);

    Если СтрокаТабличнойЧасти.Количество=0 Тогда
        СтрокаТабличнойЧасти.Цена = 0;
    Иначе    
        МетаданныеДокумента = ДокументОбъект.Метаданные();
        ЕстьРеквизитПроцентСкидкиНаценки = ?(ЕстьРеквизитДокументаПроцентСкидкиНаценки=неопределено,ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентСкидкиНаценки", МетаданныеДокумента, ИмяТабличнойЧасти),ЕстьРеквизитДокументаПроцентСкидкиНаценки);
        Если ЕстьРеквизитПроцентСкидкиНаценки Тогда
            ПересчитыватьСкидку = ?(ПересчитыватьСкидкуДокумента=неопределено,УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекПользователь, "ПриИзмененииСуммыПересчитыватьСкидку"),ПересчитыватьСкидкуДокумента);
            ЕстьРеквизитПроцентАвтоматическихСкидок = ?(ЕстьРеквизитДокументаПроцентАвтоматическихСкидок=неопределено,ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок", МетаданныеДокумента, ИмяТабличнойЧасти),ЕстьРеквизитДокументаПроцентАвтоматическихСкидок);

            Если ПересчитыватьСкидку Тогда
                Если (СтрокаТабличнойЧасти.Цена = 0) Или (СтрокаТабличнойЧасти.Количество = 0) Тогда
                    СтрокаТабличнойЧасти.ПроцентСкидкиНаценки = 0;
                    Если СтрокаТабличнойЧасти.Цена = 0 Тогда
                        ОбщегоНазначения.СообщитьОбОшибке("Цена равна 0, после изменения суммы установлена нулевая скидка!");
                    Иначе
                        ОбщегоНазначения.СообщитьОбОшибке("Количество равно 0, после изменения суммы установлена нулевая скидка!");
                    КонецЕсли;
                Иначе
                    СуммаСоСкидками = СтрокаТабличнойЧасти.Сумма;
                    СуммаБезСкидок  = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
                    ПроцентСкидки   = 100 - (СуммаСоСкидками*100)/СуммаБезСкидок;
                    ПроцентАвтоматическихСкидок = 0;
                    
                    Если ЕстьРеквизитПроцентАвтоматическихСкидок Тогда
                        ПроцентАвтоматическихСкидок = СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок;
                    КонецЕсли;
                    СтрокаТабличнойЧасти.ПроцентСкидкиНаценки = ПроцентСкидки - ПроцентАвтоматическихСкидок;

                КонецЕсли;
            Иначе
                Если СтрокаТабличнойЧасти.ПроцентСкидкиНаценки >= 100 Тогда
                    СтрокаТабличнойЧасти.Цена = 0;
                    ОбщегоНазначения.СообщитьОбОшибке("Скидка равна 100%, после изменения суммы установлена нулевая цена!");
                Иначе
                    ПроцентАвтоматическихСкидок = 0;
                    Если ЕстьРеквизитПроцентАвтоматическихСкидок Тогда
                        ПроцентАвтоматическихСкидок = СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок;
                    КонецЕсли;
                    СуммаБезСкидок  = СтрокаТабличнойЧасти.Сумма * 100/
                                      (100 - СтрокаТабличнойЧасти.ПроцентСкидкиНаценки - ПроцентАвтоматическихСкидок);
                    СтрокаТабличнойЧасти.Цена = СуммаБезСкидок / СтрокаТабличнойЧасти.Количество;
                КонецЕсли;
            КонецЕсли;
        Иначе
            СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.Количество;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриИзмененииСуммыТабЧасти()
28 slasher
 
18.06.15
18:13
ПересчитыватьСкидку = Ложь, если что
29 shuhard_серый
 
18.06.15
18:13
(0) развод явный и очевидный
нет в КА Документ "Заявка покупателя"
30 bootini
 
18.06.15
18:15
И что мы видим, а видим мы:

           СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.Количество;
31 bootini
 
18.06.15
18:17
(29) да, понятно, охота тоже херней помаяться, на главной все рано интересных тем нет
32 slasher
 
18.06.15
18:17
(29) не надо придираться, ЗаказПокупателя
33 slasher
 
18.06.15
18:19
(30) вы меня простите, но это пересчет цены, а не суммы
34 bootini
 
18.06.15
18:20
(33) я уже и забыл с чего все начиналось
35 ilkoder
 
18.06.15
18:25
И чего? в упп таже фигня - пересчитывает по сумме подходящую цену, а потом по цене опять считает сумму. В бухалтерии не так - ставь какую хочешь сумму - цену подгонит, а сумму не меняет. только если типовой код менять
36 bootini
 
18.06.15
18:27
(33) после выхода из процедуры, какие цена и сумма выходят?
37 slasher
 
18.06.15
18:42
(35) где она "по цене опять считает сумму", я не могу этот момент поймать, чтобы исправить код.
38 slasher
 
18.06.15
18:43
(36) на выходе из процедуры выходят суммы, которые руками ставил, до обновления отображения уже измененные.
39 bootini
 
18.06.15
19:03
(38) цену пересчитывает 3,005, потом округляет до двух знаков до 3,01 и пересчитывает Сумму, может ТоварыПриОкончанииРедактирования что-то есть?
40 slasher
 
18.06.15
19:39
(39) красавец, спасибо, именно где-то внутри этой процедуры. я не нашел где конкретно, не где-то там. На входе в процедуры одна сумма, на выходе другая.
41 slasher
 
18.06.15
19:42
как нормальный человек (я не себя имею ввиду) должен был догадаться где находится этот пересчёт?