Имя: Пароль:
1C
 
Вычисление скидки в ТЧ документа-продолжение
,
0 amadeus2010
 
20.08.14
14:16
Добрый день, продолжу вчерашнюю тему по поводу вычисления скидки в ТЧ документа. Есть конфигурация УТ 10.3 в ТЧ документа реализация товаров в процедуру ТоварыСуммаПриИзменении() добавил код который должен вычислить скидку в поле скидка в зависимости от суммы поля Сумма
///////////////////////////////////////////////////////////////
Процедура ТоварыСуммаПриИзменении(Элемент)

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

    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    
    Если СтрокаТабличнойЧасти.Сумма>= 500 Тогда
                     СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма*0.03;
                     ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 300 Тогда
                        СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.02;
                         ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 150 Тогда
                             СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.01;
    КонецЕсли;
                        
КонецПроцедуры // ТоварыСуммаПриИзменении()

////////////////////////////////////////////////////////////////
Поле скидка остается пустым
1 MaXpaT
 
20.08.14
14:20
а чем тебе стандартный УТ-шный механизм скидок не подходит?
2 amadeus2010
 
20.08.14
14:23
мне то он вполне подходит, даже ручная скидка подходит, но как  я писал вчера заказчик желает чтобы был разработан механизм скидок в самом документе и в зависимости от суммы покупки была скидка.
3 SerF_2011
 
20.08.14
14:23
посмотрите процедуру РассчитыватьАвтоматическиеСкидки()
4 MaXpaT
 
20.08.14
14:25
а разве документ УстановкаСкидокНоменклатуры не позволяет делать то, что хочет заказчик?
5 amadeus2010
 
20.08.14
14:27
(4)так заказчик от него сразу отказался
6 Kalambur
 
20.08.14
14:30
(5) поэтому ты и нужен, чтоб объяснить/показать. Настрой ему то что он хочет и покажи на примере, возьми денег и иди пить пиво
7 SerF_2011
 
20.08.14
14:32
а реквизит ТЧ "Скидка" был добавлен? Нет такого в УТ.
8 amadeus2010
 
20.08.14
14:39
(5) конечно же такой реквизит был создан
9 MaXpaT
 
20.08.14
14:44
то есть ты наобещал заказчику допилить какой-то функционал, который реализован стандартным механизмом, но как оказалось с программированием знаком только понаслышке, и теперь тебе  приходится второй день подряд на форуме добиваться ответа на элементарные вопросы?
мой тебе совет: кардинально меняй профессию
10 amadeus2010
 
20.08.14
14:48
(9) я ничего не обещал заказчику это было изначальное его требование. Просто я использую стандартные механизмы заложенные в программе для вычисления суммы. Если есть ответ на вопрос то поделитесь пожалуйста, укажите на ошибки в коде, а не обсуждайте того кто просит помощи
11 Timon1405
 
20.08.14
15:14
а почем нынче отладчик для народа?
12 Kalambur
 
20.08.14
15:22
(11) У Дениса спросить надо, он заведует итими вещами.
13 amadeus2010
 
20.08.14
15:24
(11) я так думаю как договоришься
14 Timon1405
 
20.08.14
15:30
(13) а скидки будут если цена>500?
15 amadeus2010
 
20.08.14
15:48
(14) да скидки есть 3%
16 amadeus2010
 
20.08.14
15:54
я сейчас добавил свой код в эту процедуру
/////////////////////////////////////////////////
Процедура РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, СпособРасчета = Неопределено) Экспорт

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

    МетаданныеДокумента = ДокументОбъект.Метаданные();

    Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    СуммаСкидки = 0;

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

        Если (СпособРасчета <> Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки)Тогда
            Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентСкидкиНаценки", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                СуммаСкидки = СуммаСкидки + (Сумма * СтрокаТабличнойЧасти.ПроцентСкидкиНаценки / 100);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;
    
     Если СтрокаТабличнойЧасти.Сумма>= 500 Тогда
                     СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма*0.03;
                     ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 300 Тогда
                        СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.02;
                         ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 150 Тогда
                             СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.01;
    КонецЕсли;


КонецПроцедуры // РассчитатьСуммуТабЧасти()
/////////////////////////////////////////////////
она же вызывается в процедуре ТоварыСкидкаПриИзменении(Элемент)правда пока еще не совсем точно рассчитывает
17 salvator
 
20.08.14
16:01
(16) А назачем тебе вызывать это из процедуры ТоварыСкидкаПриИзменении?
18 amadeus2010
 
20.08.14
16:03
(17) т.е это необязательно, а как тогда расчет скидки попадет  в поле Скидка?
19 salvator
 
20.08.14
16:05
(18) Ты то ли тролль, то ли реально проблемный такой. Вчера все разъяснили уже.
20 amadeus2010
 
20.08.14
16:07
(19) просто я не совсем понял
21 salvator
 
20.08.14
16:11
(20) Тебе достаточно того, что ты написал в (0).
Пройдись отладчиком и посмотри, почему у тебя скидка не заполняется. Может быть сумма < 150
22 amadeus2010
 
20.08.14
16:12
если поставить вызов процедуры РассчитатьСуммуТЧ в ТоварыСкидкаПриИзменении то скидка рассчитывается
23 salvator
 
20.08.14
16:25
Посмотри как происходит расчет суммы НДС к примеру.
И сделай такую же процедуру для расчета скидки. И вызывай ее там, где это необходимо (при изменении суммы, кол-ва и т.д.)
24 amadeus2010
 
20.08.14
16:54
в процедуре
//////////////////////////////////////////////////
Процедура РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект, СпособРасчета = Неопределено) Экспорт

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

    МетаданныеДокумента = ДокументОбъект.Метаданные();

    Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    СуммаСкидки = 0;

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

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

         
    Если СтрокаТабличнойЧасти.Сумма>= 500 Тогда
                     СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма*0.03;
                     ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 300 Тогда
                        СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.02;
                         ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 150 Тогда
                             СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.01;
    КонецЕсли;
    
    Скидка= СтрокаТабличнойЧасти.Скидка;
    СтрокаТабличнойЧасти.Сумма= Сумма-Скидка;
        

КонецПроцедуры // РассчитатьСуммуТабЧасти()
////////////////////////////////////////////////
идет расчет скидки в ТЧ документа, рассчитывается поле Всего ТЧ, но в подвал Всего не попадает правильная сумма
25 hhhh
 
20.08.14
17:22
ну показывай место, где подвал заполняешь.
26 amadeus2010
 
20.08.14
17:35
в процедуре ОбновитьПодвал
27 amadeus2010
 
21.08.14
10:28
в процедуре ТоварыПриОкончанииРедактирования я добавил код для рассчета скидок и он работает, но при этом не изменяется значение Всего в ТЧ документа и из-за этого не меняется Всего в подвале
28 amadeus2010
 
21.08.14
10:52
При добавлении проверки по расчетам скидок в
//////////////////////////////////////////////////////
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    Если СтрокаТабличнойЧасти.Сумма>= 500 Тогда
          СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма*0.03;
         ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 300 Тогда
         СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.02;
         ИначеЕсли СтрокаТабличнойЧасти.Сумма>= 150 Тогда
             СтрокаТабличнойЧасти.Скидка = СтрокаТабличнойЧасти.Сумма* 0.01;
        КонецЕсли;
        
        ДанныеСтроки.Скидка= СтрокаТабличнойЧасти.Скидка;


    
    
    Если мКолонкиТовары.Всего.Видимость Тогда
        ОформлениеСтроки.Ячейки.Всего.УстановитьТекст(ОбщегоНазначения.ФорматСумм(ДанныеСтроки.Сумма
                                            + ?(СуммаВключаетНДС, 0, ДанныеСтроки.СуммаНДС)-ДанныеСтроки.Скидка));
    КонецЕсли;

    РаботаСДиалогами.ПоказатьКоэффициентМест(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.ЕдиницаИзмеренияМест);
    РаботаСДиалогами.ПоказатьКодАртикул(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
    РаботаСДиалогами.ПоказатьСуммуБезСкидок(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Цена, ДанныеСтроки.Количество);

    Если ЗначениеЗаполнено(ДанныеСтроки.СерияНоменклатуры) Тогда
        Если мКолонкиТовары.НомерГТД.Видимость Тогда
            ОформлениеСтроки.Ячейки.НомерГТД.УстановитьТекст(ДанныеСтроки.СерияНоменклатуры.НомерГТД);
        КонецЕсли;
        Если мКолонкиТовары.СтранаПроисхождения.Видимость Тогда
            ОформлениеСтроки.Ячейки.СтранаПроисхождения.УстановитьТекст(ДанныеСтроки.СерияНоменклатуры.СтранаПроисхождения);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ТоварыПриВыводеСтроки()
////////////////////////////////////////////////////

происходит изменение Всего в ТЧ документа, но в подвале не происходит изменение итоговой суммы