Вход | Регистрация
 

Три ячейки оплаты чека, как взаимосвязать?

Три ячейки оплаты чека, как взаимосвязать?
Я
   Гений 1С
 
04.12.20 - 11:15
Есть три ячейки оплаты - нал, на карту, эквайринг.
Нужно, чтобы все три суммы давали в итоге сумму товара, набитого в чек.
Как описать взаимосвязь трех колонок.
Я попробовал, но в итоге забил, это не так то просто.
Тем более в ТЗ не входило.
Но все же хочу сделать хорошо, есть идеи?
   Галахад
 
1 - 04.12.20 - 11:24
Ну можно последовательно.

Сначала вид оплаты1.
Потом вид оплаты2.
Потом вид оплаты3.

Например:
Товар1 - 100
Товар2 - 30
Товар3 - 50

Итого - 180
ВидОплаты1 = 120
ВидОплаты2 = 60

Товар1 - ВидОплаты1 - 100
Товар2 - ВидОплаты1 - 20, ВидОплаты2 - 10
Товар3 - ВидОплтаы2 - 50
   Гений 1С
 
2 - 04.12.20 - 11:27
Ну в 90% случае работает нал.
Но вот как быть в случае сложных оплат.
например 1000 рублей
она по умолчанию идет в нал
я ввожу в эквайринг 100, из нала вычитаеся 100, становится нал 900.
но смешанная оплата - еще и на карту 200, я ввожу на карту 200, она по идее из нала должна еще 200 вычесть.
гм...
а если я потом корректирую сумму, ну ошибся, например, хочу эквайринг не 100, а 150, нал станет уже не 700, а 650...
Как то это все запутанно.
   Вафель
 
3 - 04.12.20 - 11:29
(2) а как должно быть?
   Галахад
 
4 - 04.12.20 - 11:29
(2) В чем проблема?

Нал = Итого - Безнал.Итог("Сумма");
   Гений 1С
 
5 - 04.12.20 - 11:40
(4) третий вид оплаты есть.
Я вот счас написал замыкание сумм, так не могу ввести нужную разбивку
Например: 6500, 0, 0
Ввожу 300: 6200, 0, 300
ОК, ввожу 200 в середину: 6200, 200, 100. А хотелось: 6000, 200, 300.
Похоже, пользователь не сможет скорректировать нужные ему суммы, хотя если начнет с нала:
Есть: 6200, 200, 100
Ввожу нал 6000: 6000, 400, 100
Далее ввожу эквайринг: 300
Получаю: 6000, 200, 300.
Гм, можно приноровиться и к такому порядку, ок.

Код такой:

&НаКлиенте
Процедура КонтрольСумм(СтартовоеПоле)
    //Возврат; //Не контролируем

    СуммаВидовОплат = СуммаНаКарту + СуммаНал + СуммаЭквайринг;
    СуммаПродажи = СуммаПродажи();
    Если ЭтаФорма[СтартовоеПоле] > СуммаПродажи Тогда
        ЭтаФорма[СтартовоеПоле] = СуммаПродажи;
    КонецЕсли;
    
    Баланс = ЭтаФорма[СтартовоеПоле];
    КонтрольСумм2("СуммаНал", СтартовоеПоле, Баланс);
    КонтрольСумм2("СуммаНаКарту", СтартовоеПоле, Баланс);
    КонтрольСумм2("СуммаЭквайринг", СтартовоеПоле, Баланс);
        
КонецПроцедуры

&НаКлиенте
Процедура КонтрольСумм2(Поле, СтартовоеПоле, Баланс)
    Если Поле = СтартовоеПоле Тогда
        Возврат;
    КонецЕсли;
    СуммаПродажи = СуммаПродажи();
    СуммаВидовОплат = СуммаНаКарту + СуммаНал + СуммаЭквайринг;
    Если ЭтаФорма[Поле]  + Баланс > СуммаПродажи Тогда
        ЭтаФорма[Поле] = Макс(СуммаПродажи - Баланс, 0);
    ИначеЕсли СуммаВидовОплат < СуммаПродажи Тогда
        ЭтаФорма[Поле] = ЭтаФорма[Поле] + (СуммаПродажи - СуммаВидовОплат);
    КонецЕсли;
    Баланс = Баланс + ЭтаФорма[Поле];
КонецПроцедуры
   Галахад
 
6 - 04.12.20 - 11:43
(5) Все не читал. Вопрос, зачем вообще вводить Нал? Нал вычисляется в (4). Ну или примерно так.
   Гений 1С
 
7 - 04.12.20 - 11:59
(6) ну если хотят свое распределение оплат.
   Гений 1С
 
8 - 06.12.20 - 17:41
Сукко, не прокатило...
Клиент таки заметил, хотя изначально в ТЗ не входило.
Договорились что будем соблюдать порядок.
Сперва нал, потом на карту, потом эквайринг.
А то получается мини-квест, чтобы добиться нужной суммы.
   Гений 1С
 
9 - 06.12.20 - 17:41
Счас напишу код, выложу
   Garykom
 
10 - 06.12.20 - 17:45
(0) В типовой рознице несколько видов оплат, включая кредит и зачет аванса
   Гений 1С
 
11 - 06.12.20 - 18:01
(10) у меня нетленка.
   ДедМорроз
 
12 - 06.12.20 - 18:53
В новых кассах пять типов оплаты
Наличная - это реальные деньги
Безналичная - это оплата через банк,по карте или иным способом,когда идёт перечисление по счетам.
Постоплата - это когда мы отгрузили в кредит,и нам потом обещают заплатить
Зачёт предоплаты - это когда была оплата ранее,и в данном случае мы ее засчитываем.
Иная форма оплаты - это когда расчет идёт в процессе и для данного расчета нам важно указать только сумму оплаты. Реально,используется когда делается возврат и снова продажа,чтобы не гонять сумму туда обратно.

Наличные,кроме всего прочего,подразумевают наличие сдачи.
   Гений 1С
 
13 - 06.12.20 - 19:21
Короче сделал так, более логично для пользователя работает:

Процедура КонтрольСумм(СтартовоеПоле)
    
    
    СуммаПродажиСоСкидкой = СуммаПродажиСоСкидкой();
    
    СуммаВидовОплат = СуммаНал + СуммаНаКарту +  СуммаЭквайринг;
    
    Если СтартовоеПоле = "СуммаНал" Тогда
        Если СуммаНал > СуммаПродажиСоСкидкой Тогда
            ЭтаФорма.СуммаНал = СуммаПродажиСоСкидкой;
        КонецЕсли;
        СуммаНаКарту = СуммаПродажиСоСкидкой - СуммаНал; 
        СуммаЭквайринг = 0;
    КонецЕсли;
    
    Если СтартовоеПоле = "СуммаНаКарту" Тогда
        Если СуммаНаКарту > СуммаПродажиСоСкидкой Тогда
            СуммаНаКарту = СуммаПродажиСоСкидкой;
        КонецЕсли;
        Если СуммаНал + СуммаНаКарту > СуммаПродажиСоСкидкой Тогда
            СуммаНаКарту = СуммаПродажиСоСкидкой - СуммаНал;
        КонецЕсли;
        СуммаЭквайринг = СуммаПродажиСоСкидкой - СуммаНал - СуммаНаКарту; 
    КонецЕсли;
    
    Если СтартовоеПоле = "СуммаЭквайринг" Тогда
        Если СуммаЭквайринг > СуммаПродажиСоСкидкой Тогда
            СуммаЭквайринг = СуммаПродажиСоСкидкой;
        КонецЕсли;
        Если СуммаНал + СуммаЭквайринг > СуммаПродажиСоСкидкой Тогда
            СуммаЭквайринг = СуммаПродажиСоСкидкой - СуммаНал;
        КонецЕсли;
        СуммаНаКарту = СуммаПродажиСоСкидкой - СуммаНал - СуммаЭквайринг; 
    КонецЕсли;

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.