Имя: Пароль:
1C
 
Табличная часть
,
0 ilyavorobyev
 
04.09.14
14:14
Есть документ Счет на оплату покупателей, добавил колонку наценка, добавил событие при изменении на поле ввода этой колонки, только оно почему то отрабатывает, когда документ проведен, почему так?
1 Maxus43
 
04.09.14
14:15
код в студию
2 ilyavorobyev
 
04.09.14
14:16
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    Если НЕ ЗначениеЗаполнено(Элемент.Значение) Тогда
        ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
        ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    Иначе
        СтараяЦена = СтрокаТабличнойЧасти.Цена;
        СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена + СтрокаТабличнойЧасти.Цена / 100 * Элемент.Значение;
        ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
        ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
        СтрокаТабличнойЧасти.Цена = СтараяЦена;
    КонецЕсли;
3 Wobland
 
04.09.14
14:21
>оно почему то отрабатывает, когда документ проведен
это ты верно подметил,да
4 ilyavorobyev
 
04.09.14
14:24
(3) да я про то, что отрабатывает только тогда когда документ проведен,если записан то вызывается но сумма остается та же, при еще не записанном документе тоже не отрабатывает
5 Wobland
 
04.09.14
14:26
(4) тебя поуговаривать заняться отладкой?
6 ilyavorobyev
 
04.09.14
14:28
(5) уже делал, в переменной СтрокаТабличнойЧасти в конце все нормально приходит и сумма рассчиталась с учетом наценки и НДС
7 Wobland
 
04.09.14
14:29
(6) только что сумма оставалась той же
8 ilyavorobyev
 
04.09.14
14:30
(7) все изменяется, но почему то на форме не меняется сумма, при отладке в реквизите все ок а когда завершается то на форме все так же остается
9 Timon1405
 
04.09.14
14:32
а уж не в(амперах ли считается сила тока) отдельном ли реквизите сидит СуммаДокумента?
10 AlexToo
 
04.09.14
14:36
форма.обновить()?
11 ilyavorobyev
 
04.09.14
14:36
(9) это общая сумма документа а не сумма строки табличной части
12 ilyavorobyev
 
04.09.14
14:38
(10) добавил, сейчас на секунду значения меняются на правильные а потом снова возвращаются к прежним
13 AlexToo
 
04.09.14
14:41
Вот этот момент не понял:
СтараяЦена = СтрокаТабличнойЧасти.Цена;//сохранил старую цену
//посчитал      
        СтрокаТабличнойЧасти.Цена = СтараяЦена;//вернул старую цену?
14 Ёпрст
 
04.09.14
14:41
(12) ну и смотри другие процы, типа обновление отображения и т.д.. которые "взад" меняют твою сумму.
Открой наконец отладчик и посмотри стек вызовов
15 ilyavorobyev
 
04.09.14
14:42
(13)да нужно чтобы цена старой осталась на форме
16 FIXXXL
 
04.09.14
14:43
ты колонку на форму добавил или в ТЧ?
17 AlexToo
 
04.09.14
14:44
(15) ну ты в ту же ячейку ее перезаписываешь
18 ilyavorobyev
 
04.09.14
14:44
(16) в ТЧ колонку и реквизит в ТЧ
19 ilyavorobyev
 
04.09.14
14:45
(15) ну да мне и надо чтобы цена была старой а сумма была рассчитана с ценой + наценка
20 AlexToo
 
04.09.14
14:46
(19) глянь процедуры при изменении суммы, есть такие?
21 ilyavorobyev
 
04.09.14
14:48
(20) есть закоментировал их, все равно не считается
22 FIXXXL
 
04.09.14
14:49
(18) пиши тогда свой кусок в модуле
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти()
ибо эта процедура дергается из ста мест в документе при любом чихе
23 FIXXXL
 
04.09.14
14:50
(22) там же и глянь как надо рассчитывать скидку по типовому
24 ilyavorobyev
 
04.09.14
15:10
(22)
ИмяТабличнойЧасти = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
    
    МетаданныеДокумента = ДокументОбъект.Метаданные();
    Если МетаданныеДокумента = Метаданные.Документы.СчетНаОплатуПокупателю И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Доработка_Наценка) Тогда
        СтараяЦена = СтрокаТабличнойЧасти.Цена;
        СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена + СтрокаТабличнойЧасти.Цена / 100 * СтрокаТабличнойЧасти.Доработка_Наценка;                    
    КонецЕсли;
    Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    СуммаСкидки = 0;
    
    Если (СпособРасчета = Неопределено)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.СУчетомВсехСкидок)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки) Тогда
        Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок", МетаданныеДокумента,
                                             ИмяТабличнойЧасти) Тогда
            СуммаСкидки = Сумма * СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок / 100;
        КонецЕсли;

        Если (СпособРасчета <> Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки)Тогда
            Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентСкидкиНаценки", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                СуммаСкидки = СуммаСкидки + (Сумма * СтрокаТабличнойЧасти.ПроцентСкидкиНаценки / 100);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;
    Если МетаданныеДокумента = Метаданные.Документы.СчетНаОплатуПокупателю И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Доработка_Наценка) Тогда
        СтрокаТабличнойЧасти.Цена = СтараяЦена;
    КонецЕсли;
25 ilyavorobyev
 
04.09.14
15:10
(22) все равно не меняется
26 FIXXXL
 
04.09.14
15:40
(24) нахрена ты с ценой играешься? сумму меняй, как в типовом
проверку делай как в типовом

короче - больше типового, жить будет легше :)
27 FIXXXL
 
04.09.14
15:43
(26) тебе тупо надо проверить есть ли в ТЧ полученного дока твой реквизит и если есть рассчитать СуммаСкидки до строки

СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;
28 ilyavorobyev
 
04.09.14
17:22
(27) ИмяТабличнойЧасти = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
    
    МетаданныеДокумента = ДокументОбъект.Метаданные();
    Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    СуммаСкидки = 0;
    
    Если (СпособРасчета = Неопределено)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.СУчетомВсехСкидок)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки) Тогда
        Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок", МетаданныеДокумента,
                                             ИмяТабличнойЧасти) Тогда
            СуммаСкидки = Сумма * СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок / 100;
        КонецЕсли;

        Если (СпособРасчета <> Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки)Тогда
            Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентСкидкиНаценки", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                СуммаСкидки = СуммаСкидки + (Сумма * СтрокаТабличнойЧасти.ПроцентСкидкиНаценки / 100);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Если МетаданныеДокумента = Метаданные.Документы.СчетНаОплатуПокупателю И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Доработка_Наценка) Тогда
        СтрокаТабличнойЧасти.Сумма = Сумма;
        Сообщить(Сумма);
    Иначе
        СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;    
    КонецЕсли;
29 ilyavorobyev
 
04.09.14
17:22
(27) СтараяЦена = СтрокаТабличнойЧасти.Цена;
        СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена + СтрокаТабличнойЧасти.Цена / 100 * СтрокаТабличнойЧасти.Доработка_Наценка;
        ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
        ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
        СтрокаТабличнойЧасти.Цена = СтараяЦена;
        Сообщить("Изменение " + СтрокаТабличнойЧасти.Сумма);
30 ilyavorobyev
 
04.09.14
17:23
(27) и в общем модуле и в форме сообщает в конце сумму нормальную но на форму она не попадает все равно
31 palpetrovich
 
04.09.14
17:31
(30) вангую, что код в (0) отрабатывает, но увидеть ты это не успеваешь, ибо, как было отмечено выше, процедура "ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти" вызывается еще из кучи мест и все возвращается на "круги своя" :)
32 ilyavorobyev
 
04.09.14
17:53
(31) да он отрабатывает, но я же щас изменил расчет в процедуре ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти, почему все так же осталось?
33 palpetrovich
 
04.09.14
17:59
(32) могу посоветовать только (5) ...гадания на кофейной гуще гораздо менее точны, чем показания отладчика :)
34 FIXXXL
 
04.09.14
18:05
(30) на типовой форме две суммы обычно "Сумма" и "Сумма без скидки"
менятся должна "Сумма"
35 FIXXXL
 
04.09.14
18:06
в (28) ты ничего не поменял
36 ilyavorobyev
 
04.09.14
18:40
(35) СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена + СтрокаТабличнойЧасти.Цена / 100 * СтрокаТабличнойЧасти.Доработка_Наценка;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
37 ilyavorobyev
 
04.09.14
18:40
(35) вот ведь, не?
38 FIXXXL
 
04.09.14
20:05
(35) ещё раз: отвяжись от цены, считай СуммаСкидки по своему алгоритму
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан