|
Частичная оплата через драйвер АТОЛ | ☑ | ||
---|---|---|---|---|
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) мне больше всего помогла разобраться, спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |