|   |   | 
| 
 | Частичная оплата через драйвер АТОЛ | ☑ | ||
|---|---|---|---|---|
| 0
    
        igel1969 28.06.20✎ 17:44 | 
        Здравствуйте!
 Печатаю чеки напрямую через драйвер. С полной оплатой все понятно. Допустим мне надо оформить частичную оплату. В каком месте мне надо посылать на драйвер сумму частичной оплаты? Вот пример кода полной оплаты. Обратите внимание, там окончательная сумма нигде не указывается, а указываются суммы для каждой из строк товара. А если клиент внес только часть, где мне указать эту сумму? Размазать по строкам? Мне кажется это неправильно. ECR.DeviceEnabled = 1; Если ECR.ResultCode <> 0 тогда Предупреждение("ККМ не подключена!"); Возврат; КонецЕсли; ECR.Password = "1"; // входим в режим регистрации ECR.Mode = 1; Если ECR.SetMode() <> 0 тогда Предупреждение("Касса не смогла войти в режим регистрации чеков!"); Возврат; КонецЕсли; ECR.AttrNumber = 1021; ECR.AttrValue = ФИОКассира; ECR.WriteAttribute(); ECR.CheckType = 1; // приход денег ECR.CheckMode = 1; // печатать на ленте ECR.OpenCheck(); Если Найти(СокрЛП(ДокументРеализация.Контрагент), "Розничный") <= 0 тогда ECR.AttrNumber = 1227; ECR.AttrValue = СокрЛП(ДокументРеализация.Контрагент); ECR.WriteAttribute(); ECR.AttrNumber = 1228; ECR.AttrValue = СокрЛП(ДокументРеализация.Контрагент.ИНН); // тут еще надо слева добавить пробелы до 12 знаков ECR.WriteAttribute(); КонецЕсли; Если ТипЗнч(ДокументРеализация) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда Для каждого Стр из КассовыйЧек Цикл ECR.BeginItem(); ECR.StreamFormat = 5; Если (Стр.Марка <> Неопределено) и (СокрЛП(Стр.Марка) <> "") Тогда ECR.AttrNumber = 1162; ECR.AttrValue = Стр.Марка; ECR.WriteAttribute(); Блок = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("бл", Истина, , Стр.Номенклатура); Упак = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("уп", Истина, , Стр.Номенклатура); Если Блок <> Справочники.ЕдиницыИзмерения.ПустаяСсылка() Тогда КоэфБл = Блок.Коэффициент; Иначе КоэфБл = 10; КонецЕсли; Если Упак <> Справочники.ЕдиницыИзмерения.ПустаяСсылка() Тогда КоэфУп = Блок.Коэффициент; Иначе КоэфУп = 500; КонецЕсли; Если Стр.Количество = КоэфБл Тогда ECR.Name = Стр.Номенклатура.Наименование + " ("+ СокрЛП(Стр.ХарактеристикаНоменклатуры) + ") бл [М]"; ECR.Price = Стр.Цена * Стр.Количество; ECR.Quantity = 1; ECR.Summ = Стр.Цена * Стр.Количество; ИначеЕсли Стр.Количество = КоэфУп Тогда ECR.Name = Стр.Номенклатура.Наименование + " ("+ СокрЛП(Стр.ХарактеристикаНоменклатуры) + ") уп [М]"; ECR.Price = Стр.Цена * Стр.Количество; ECR.Quantity = 1; ECR.Summ = Стр.Цена * Стр.Количество; Иначе ECR.Name = Стр.Номенклатура.Наименование + " ("+ СокрЛП(Стр.ХарактеристикаНоменклатуры) + ") шт [М]"; ECR.Price = Стр.Цена; ECR.Quantity = Стр.Количество; ECR.Summ = Стр.Цена * Стр.Количество; КонецЕсли; Иначе Если Стр.Номенклатура.ВестиУчетПоХарактеристикам тогда ECR.Name = Стр.Номенклатура.Наименование + " ("+ СокрЛП(Стр.ХарактеристикаНоменклатуры) + ") шт"; Иначе ECR.Name = Стр.Номенклатура.Наименование + " шт"; КонецЕсли; ECR.Price = Стр.Цена; ECR.Quantity = Стр.Количество; ECR.Summ = Стр.Цена * Стр.Количество; КонецЕсли; ECR.ItemType = 1; // товар за исключением подакцизного Если Стр.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 тогда ECR.TaxTypeNumber = 0; ECR.Tax = 0; ИначеЕсли Стр.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 тогда ECR.TaxTypeNumber = 2; ECR.Tax = 2; ИначеЕсли Стр.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 тогда ECR.TaxTypeNumber = 3; ECR.Tax = 3; ИначеЕсли Стр.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС тогда ECR.TaxTypeNumber = 4; ECR.Tax = 4; Иначе ECR.TaxTypeNumber = 4; ECR.Tax = 0; КонецЕсли; ECR.PaymentMode = 4; //4 - Полная оплата // 5 - частичная оплата в момент получения товара ECR.EndItem(); КонецЦикла; КонецЕсли; ECR.TypeClose = 0; ECR.CloseCheck(); | |||
| 1
    
        Mamul 28.06.20✎ 19:39 | 
        А как у 1с в конфигах реализована сложная оплата, не смотрели? У Атол integration.atol.ru с примерами запросов смотрели ?     | |||
| 2
    
        Креатив 28.06.20✎ 23:32 | 
        (0)Частичной оплаты в рознице нет!(с)     | |||
| 3
    
        igel1969 29.06.20✎ 06:24 | 
        (1) В 1С не смотрел, но там по-любому через драйвер 1С реализовано, а я через API посылаю.
 У АТОЛ на сайте есть описание только 10 драйвера, а у меня 8 | |||
| 4
    
        igel1969 29.06.20✎ 06:24 | 
        (2) где тут про розницу?     | |||
| 5
    
        Garykom гуру 29.06.20✎ 07:11 | 
        (4) забей в рознице тоже есть "частичная оплата"
 (0) ECR.PaymentMode = 4; //4 - Полная оплата // 5 - частичная оплата в момент получения товара | |||
| 6
    
        Garykom гуру 29.06.20✎ 07:12 | 
        но имхо переходи с 8-го драйвера на 10-й уже и делай по мануалу из (1)     | |||
| 7
    
        Garykom гуру 29.06.20✎ 07:15 | 
        читать вот такую штуку https://www.atol.ru/upload/iblock/792/Drivers8_FprnM_PM.pdf только более свежую в комплекте с дровами     | |||
| 8
    
        igel1969 29.06.20✎ 14:44 | 
        (5) (0) ECR.PaymentMode = 4;  //4 - Полная оплата   // 5 - частичная оплата в момент получения товара
 Это я сам нашел и написал. Куда сумму то посылать? Я посылаю суммы только по строкам, а в конце каким-то чудесным образом касса сама выводит итоговую сумму. А если сумма, которую заплатил контрагент меньше итога по строкам? Это и есть частичная оплата. Я не знаю как называется поле суммы внесенных денег. | |||
| 9
    
        Mamul 29.06.20✎ 16:01 | 
        (6) да, однозначно давно пора на 10-ку переходить.     | |||
| 10
    
        Garykom гуру 29.06.20✎ 16:33 | 
        (8) открой уже мануал от драйвера, он в комплекте при установке     | |||
| 11
    
        igel1969 29.06.20✎ 16:51 | 
        Я разобрался. 
 У кассы есть еще такая команда Payment(). Если ее не использовать, то чек закрывается полностью и без сдачи. Я пытался ее использовать с указанием суммы оплаты, но тогда не закрывался чек, просто зависал при команде CloseCheck(). В итоге экспериментальным путем до меня дошло - Payment надо вызывать столько раз, сколько нужно, чтобы набралась полная сумма чека. Допустим для примера, что общая сумма товара в чеке 1333руб, а клиент оплатил только 1000руб. тогда код закрытия чека должен выглядеть так (грубо, без всяких тонкостей и проверок): ECR.TypeClose = 0; ECR.PointPosition = 2; ECR.Summ = 1000; ECR.Payment(); ECR.TypeClose = 3; ECR.PointPosition = 2; ECR.Summ = 333; ECR.Payment(); ECR.CloseCheck(); А я изначально посылал только 1000, а остаток не допосылал. | |||
| 12
    
        igel1969 29.06.20✎ 16:52 | 
        (10) да, та ссылка на мануал из (7) мне больше всего помогла разобраться, спасибо     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |