Имя: Пароль:
1C
1C 7.7
v7: АТОЛ30Ф - пересчитывает суммы ?
,
0 zenon46
 
04.07.18
14:58
Доброго дня! Столкнулся с такой ситуацией, в документе реализация делается процедура, "распределение суммы по суммам" - обычно это делает когда надо убрать копейки и выровнять до круглой суммы, далее делается ПКО, а вот уже из ККМ чек выходит не с теми суммами что в документе, ХОТЯ список формируется четко по документу и передается в ККМ, для примера, напишу на примере двух позиций. Можно это как то выключить ?
Документ:
Товар1 50*20.03=1001.64
Товар2 20*20.03=400.66
ККМ
Товар1 50*20.03=100.50
Товар2 20*20.03=400.60
1 sanyaka
 
04.07.18
15:01
Видимо улетает цена и количество. А нужно отправлять сумму и цену вычислять как сумма делённая на количество и значение округлить.
2 zenon46
 
04.07.18
15:07
(1) в ККМ уходит, Цена / Количество / Сумма
3 spectre1978
 
04.07.18
15:15
расчеты где-то неправильные, проверяйте. "Гуляет" слишком много, 60 и 66 это дофига, обычным округлением не объяснить
4 piter3
 
04.07.18
15:16
а уверен,что уходит два знака,а не больше?
5 zenon46
 
04.07.18
15:19
(3) еще раз уточняю, делается "распределение суммы по суммам".
Если в документе 1001.64/50=20.0328
Если в ККМ 1001.50/50=20.03
В том и вопрос зачем ККМ там что-то считает и можно ли это выключить ?
6 Масянька
 
04.07.18
15:19
(0) Если на калькуляторе (фигня такая) сделать: 20.03 умножить на 20, получится 400.6 (ровно, больше ничего).
Откуда такие цифры в эске?
7 sanyaka
 
04.07.18
15:20
(2) если в первом случае сумму поделить на количество и округлить в большую сторону то цена будет 50.01 эта цена должна уходить на кассу.
8 Масянька
 
04.07.18
15:20
(5) Во... Я понял...
Открой обработку и посмотри, где пересчитывает.
9 zenon46
 
04.07.18
15:20
(4) уверен что два, в отладчике смотрел.
10 zenon46
 
04.07.18
15:21
(7) 50 - количество, 20.3 - цена
11 Масянька
 
04.07.18
15:21
(7) А вот тут поддержу. Со скидками долбалась - цена должна быть уже со скидкой.
12 piter3
 
04.07.18
15:21
(8) не в этом дело.лезть надо в настройки касс
13 zenon46
 
04.07.18
15:23
(8) В обработке тоже ничего не пересчитывается.
        Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
            
            Объект.Name = СписокТоваров.ТовНаим;
            Объект.Price = СписокТоваров.Цена;
            Объект.Quantity = СписокТоваров.Количество;
        
            Если СписокТоваров.СтавкаНДС = "none" Тогда
                Объект.TaxTypeNumber = 4;
            ИначеЕсли СписокТоваров.СтавкаНДС = "18" Тогда
                Объект.TaxTypeNumber = 3;
            ИначеЕсли СписокТоваров.СтавкаНДС = "10" Тогда
                Объект.TaxTypeNumber = 2;
            ИначеЕсли СписокТоваров.СтавкаНДС = "0" Тогда
                Объект.TaxTypeNumber = 1;        
            КонецЕсли;
            
            Если ПризнВозврата = 0 Тогда
                Если Объект.Registration() <> 0 тогда
                    ОписаниеРезультата = Объект.ResultDescription;
                    Возврат Рез;
                КонецЕсли;
            Иначе    
                Если Объект.Return() <> 0 тогда
                    ОписаниеРезультата = Объект.ResultDescription;
                     Возврат Рез;
                КонецЕсли;
            КонецЕсли;
            
        КонецЦикла;
14 Масянька
 
04.07.18
15:24
(13) А Суммы где?
15 zenon46
 
04.07.18
15:24
Хотя вот я заметил что суммы по строке там нет, только наименование / цена / количество - получается потому она сумму и сама считает ?
16 piter3
 
04.07.18
15:24
(15)так передай
17 Масянька
 
04.07.18
15:25
(15) Это точно всё?
18 Масянька
 
04.07.18
15:25
У меня есть такое (штрих правда):
    Если (Получено > 0) И (Получено > СуммаЧека) Тогда
        Объект.Password = Пароль;
        Объект.Summ1 = Окр(Получено, 2, 1);
    иначе
        Объект.Password = Пароль;
        Объект.Summ1 = итогсумма;
    КонецЕсли;
19 zenon46
 
04.07.18
15:26
(18) такого нет
20 zenon46
 
04.07.18
15:28
(16) Как правильно нахывается реквизит суммы по строке ? Summ - ?
21 Масянька
 
04.07.18
15:29
(19)     Если (Получено > 0) И (Получено > СуммаЧека) Тогда
        Объект.Summ = Окр(Получено, 2, 1);
        Объект.ОплатаСоСдачей();
    Иначе
        Объект.ЗакрытьЧек();
    КонецЕсли;
22 piter3
 
04.07.18
15:30
(20) вроде он
23 zenon46
 
04.07.18
15:32
(17) как у вас суммы по строке передаются ? А то мне кажется что Summ = СуммаЧека
24 zenon46
 
04.07.18
15:33
Вот нашел вот так - Amount
25 Kigo_Kigo
 
04.07.18
15:35
(18) Не путай человека, это сумма полученных денег
машинка сумму считает сама из цена*количество, суммы по строке у нее нет, так что цена = сумма/количество
26 Kigo_Kigo
 
04.07.18
15:36
точнее так
цена = суммаСУчетомвсехскидоНадбавок/количество, и передавайте без округления
27 zenon46
 
04.07.18
15:37
(25) как это нет ?
FiscalString    Name    Да    string    Наименование товара    Регистрирует фискальную строку с переданными реквизитами.
При печати длинных фискальных строк необходимо делать перенос на следующую строку.
Quantity    Да    double    Количество товара
Price    Да    double    Цена единицы товара без учета скидок/наценок
Amount    Да    double    Конечная сумма по позиции чека (с учетом всех скидок/наценок)
Department    Нет    long    Отдел, по которому ведется продажа
Tax    Да    string    Ставка НДС. Список значений:
"18" - НДС 18
"10" - НДС 10
"0" - НДС 0
"none" - БЕЗ НДС
28 Масянька
 
04.07.18
15:37
(24) У меня в руководстве написано:
Drv.Summ1Enabled := True;// Указываем, что
// сами рассчитываем цену
29 Масянька
 
04.07.18
15:39
(27) Не, не... Он прав - это сумма чека.
Чтобы работало, как сумма по позиции - нужно до StringForPrinting втыкать.
30 zenon46
 
04.07.18
15:41
Вот что получилось. Может кто, поправит если не так :

        СписокТоваров.ВыбратьСтроки();
        
        Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
            
            Объект.Name     = СписокТоваров.ТовНаим;
            Объект.Price    = СписокТоваров.Цена;
            Объект.Quantity = СписокТоваров.Количество;
            Объект.Amount   = СписокТоваров.Сумма;
        
            Если СписокТоваров.СтавкаНДС = "none" Тогда
                Объект.TaxTypeNumber = 4;
            ИначеЕсли СписокТоваров.СтавкаНДС = "18" Тогда
                Объект.TaxTypeNumber = 3;
            ИначеЕсли СписокТоваров.СтавкаНДС = "10" Тогда
                Объект.TaxTypeNumber = 2;
            ИначеЕсли СписокТоваров.СтавкаНДС = "0" Тогда
                Объект.TaxTypeNumber = 1;        
            КонецЕсли;
            
            Если ПризнВозврата = 0 Тогда
                Если Объект.Registration() <> 0 тогда
                    ОписаниеРезультата = Объект.ResultDescription;
                    Возврат Рез;
                КонецЕсли;
            Иначе    
                Если Объект.Return() <> 0 тогда
                    ОписаниеРезультата = Объект.ResultDescription;
                     Возврат Рез;
                КонецЕсли;
            КонецЕсли;
            
        КонецЦикла;
        
        Объект.Summ = СуммаЧека;
31 Kigo_Kigo
 
04.07.18
15:42
(27) Это работало до ФЗ-53, также как и скидка процентом, скидка суммой, сейчас это не работает, нате вам ссылочку на атол и примеры
http://partner.atol.ru/files/163/1039/h_cc8f768595f75e88985cba5882fa3e5f
32 Kigo_Kigo
 
04.07.18
15:43
(30) это работать не будет
33 zenon46
 
04.07.18
15:48
(31) не понял, получается касса все равно будет сама рассчитывать сумму по строке ?
34 spectre1978
 
04.07.18
15:50
(33) да. Там сумму вообще можно не задавать, если работаешь методами драйвера. Цену, количество. Сумму оно считает. Я вообще делал так - перед выводом последней строки получал накопленную по чеку сумму и последней строкой чека корректировал ее чтобы она сошлась с документом.
35 spectre1978
 
04.07.18
15:51
(31) скидка в отдельных случаях работает
36 zenon46
 
04.07.18
15:52
(34) что-то жесть какая-то и что никак нельзя выключить расчет суммы по строке ?
37 spectre1978
 
04.07.18
15:53
(36) я не нашел, каким образом.
38 spectre1978
 
04.07.18
15:56
в ККМ есть регистр, где хранится уже накопленная по чеку сумма. Поэтому в принципе можно понимать, чего она там насчитала, и корректироваться. Если бы не это - тогда бы был пипец.
39 Kigo_Kigo
 
04.07.18
15:58
(35) Вот именно, что в отдельных, а что бы не гадать, сработает или нет, ее надо игнорировать вообще, у меня именно на атоле 30ф магаз встал, там скидку применили, и машинка не выплелвывала чек, и другие чеки не выплевывала, потому как повисла на открытой продаже, короче нуегонафиг эти скидки
40 zenon46
 
04.07.18
16:00
(39) скидки да, ими не занимаемся. А вот почему сумму по строке передать нельзя, непонятно. В любом случае подкину обработку сейчас в магаз посмотрим что будет.
41 Kigo_Kigo
 
04.07.18
16:00
(38) Какая команда ее получить, эту сумму?
42 spectre1978
 
04.07.18
16:01
(39) насколько я знаю, скидка на всю сумму отрабатывает в случае, если требуется отбросить копейки в пользу покупателя. В остальных не отрабатывает.
43 Kigo_Kigo
 
04.07.18
16:05
И кстати ТС как это у тебя такие суммы то получаются?
Документ:
Товар1 50*20.03=1001.64 ?
Товар2 20*20.03=400.66 ?
ККМ
Товар1 50*20.03=100.50
Товар2 20*20.03=400.60

тогда цену передавай в формате 000.000, то есть до тысячной,тогда и аппарат будет бить как надо
44 zenon46
 
04.07.18
16:06
Да хрен там, выдало
"Поле агрегатного объекта не обнаружено (Amount)"
45 spectre1978
 
04.07.18
16:09
(41) Для Атол 11Ф работает вот так
Функция ПолучитьТекущуюСуммуЧека (Объект)
    
    Объект.RegisterNumber = 20;
    Объект.GetRegister ();
    Возврат Объект.Summ;
    
КонецФункции
46 Kigo_Kigo
 
04.07.18
16:10
(44) Да что же вы "Фома" не верующий какой то? я вам это уже в 32 сказал
47 zenon46
 
04.07.18
16:13
(46) вот так болт, нахрена это было делать.
48 Масянька
 
04.07.18
16:15
(47) Жираф большой! Ему видней! (С)
49 spectre1978
 
04.07.18
16:16
(43) тогда цену передавай в формате 000.000, то есть до тысячной,тогда и аппарат будет бить как надо -- а вы пробовали? Может, конечно, от прошивки зависит, но у меня дробных копеек не понимало.
50 zenon46
 
04.07.18
16:19
а если цена 20.03 - что туда передавать ???
51 zenon46
 
04.07.18
16:22
Если передать туда 20.032, как машинка посчитает тогда сумму по строке ?
52 Kigo_Kigo
 
04.07.18
16:22
короче, надо сделать так
расчитать суу с учетом всех скидок, бонусов, сертификатов
далее
Если количество >  1  тогда
ЦенаОкругленная = Окр(цену/количество,2);
СуммаОкругленая = ЦенаОкругленная * количество;
Если Сумма = СуммаОкругленая тогда
СписокТоваров.Цена = ЦенаОкругленная;
Иначе
СписокТоваров.Цена  = Окр(СуммаОкругленая/количество);

Списоктоваров.НоваяСтрока()
СписокТоваров.ТовНаим = Номенклатура.Наименование;
ЦенаНовая = Окр(СуммаОкругленая/количество);
СписокТоваров.Цена = СуммаОкругленная - (ЦенаНовая*(Количество - 1))
53 spectre1978
 
04.07.18
16:25
(51) в моем случае не фискализировало строку, выдавало ошибку. Какую уже не вспомню.
54 Kigo_Kigo
 
04.07.18
16:25
то есть если не удается разделить сумму и количество так, чтобы обратно получилось тоже число, мы продаем товар количество - 1, и количество = 1 с ценой которая откорректирует копейки
55 spectre1978
 
04.07.18
16:26
(54) да, так я тоже делал
56 Kigo_Kigo
 
04.07.18
16:35
ЦенаОкругленная = Окр(цену/количество,2);
читать как
ЦенаОкругленная = Окр(Сумма/количество,2);
57 zenon46
 
04.07.18
16:38
Ужас короче устроили, одно не понятно элементарные вещи зачем отобрали?
58 spectre1978
 
04.07.18
16:39
вопрос не к нам, а к законодателям и разработчикам ККМ. Мы можем только придрочиться к тому, что дают...
59 Масянька
 
04.07.18
16:42
(56) ИМХО, самое правильное решение. От суммы.
(57) См. (48).
60 Kigo_Kigo
 
05.07.18
13:13
Пример кода
driver.Mode = 1;
driver.SetMode();
driver.NewDocument();
driver.AttrNumber = 1021;
driver.AttrValue = "Старший кассир Иванов И.И.";
driver.WriteAttribute();
driver.OpenSession();
61 Kigo_Kigo
 
05.07.18
13:13
Тьфу, не сюда
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn