29.08.2021 11:16
MiixanM
 
Добрый день, столкнулся с такой вещью: при продае товара все норм, если кол-во целое число, но если передаю не целое число : Float то касса не печатает чек и уходит в ошибку, если печатать в "тест драйвер" - то там дробное кол-во проходит, например 1.3 или 66.6
Код:
Form2.ADOQuery2.SQL.Clear;
Form2.ADOQuery2.SQL.Text:='SELECT nomen, kol, suma FROM kassa  ';
Form2.ADOQuery2.Open;
  Form2.Memo1.Lines.Add('Печать чека ');
 //Открываем чек и указываем, что это чек ПРИХОДА
  Driver.CheckType := 0;
  Driver.OpenCheck;
  Driver.RegisterNumber :=148;
  Driver.GetOperationReg;
  cheq_kkm:= Driver.OpenDocumentNumber;
//Передаем тег ИНН Кассира
  Driver.TagNumber := 1203;
  Driver.TagType := 7;
  Driver.TagValueStr := Form2.Label11.Caption;
  Driver.FNSendTag;
  Driver.TagNumber := 1084;
  Driver.FNBeginSTLVTag;
  my_TagID := Driver.TagID;
  Driver.TagID := my_TagID;
  Driver.TagNumber := 1085;
  Driver.TagType := 7;
  Driver.TagValueStr := '';
  Driver.FNAddTag;
  Driver.TagID := my_TagID;
  Driver.TagNumber := 1086;
  Driver.TagType := 7;
  Driver.TagValueStr := '';
  Driver.FNAddTag;
   Driver.FNSendSTLVTag;

      while not Form2.ADOQuery2.Eof do
      begin
            Driver.QuantityFormat:=1;
            q1 := Form2.ADOQuery2.FieldByName('kol').AsFloat;
            q1 := RoundTO(q1, -1);
            //Стоимость товара с учетом скидок и наценок
            pq1:= Form2.ADOQuery2.FieldByName('suma').AsFloat;
            Form2.Memo1.Lines.Add(FLoatToStr(q1)+' '+FLoatToStr(pq1)+' '+nal );
            Driver.Quantity := q1;
            Driver.Price:=pq1;
            Driver.Summ1Enabled := false;
            Driver.Tax1 := 1;
            Driver.Department := 1;
            Driver.PaymentTypeSign := 1; //Признак способа расчета для ФФД 1.05
            Driver.PaymentItemSign := 2; //Признак предмета расчета
            Driver.StringForPrinting := Form2.ADOQuery2.FieldByName('nomen').Asstring;
            Driver.FNOperation;
            Form2.ADOQuery2.Next;
      end;

//Передаем данные поставщика
  Driver.TagNumber := 1224;
  Driver.FNBeginSTLVTag;
  my_TagID := Driver.TagID;
  Driver.TagID := my_TagID;
  Driver.TagNumber := 1225;
  Driver.TagType := 7;
  Driver.TagValueStr := '';
  Driver.FNAddTag;

  Driver.TagID := my_TagID;
  Driver.TagNumber := 1171;
  Driver.TagType := 7;
  Driver.TagValueStr := '';
  Driver.FNAddTag;
  Driver.FNSendSTLVTagOperation;
  Driver.CheckSubtotal;
             if (ibeznal=1) AND (inal=0) then
            begin
              Driver.Summ1 := 0;
              Driver.Summ2 := StrToFloat(beznal);

            end;
            if (ibeznal=0) AND (inal=1)then
            begin
              Driver.Summ1 :=StrToFloat(nal);
              Driver.Summ2 := 0 ;

            end;
             if (ibeznal=1) AND (inal=1) then
            begin
              Driver.Summ1 :=StrToFloat(nal);
              Driver.Summ2 :=StrToFloat(beznal) ;

            end;
            if kc=1 then Driver.Summ3 := bonuscard;

            Driver.Summ3 := 0;
            Driver.Summ4 := 0;
            Driver.Summ5 := 0;
            Driver.Summ6 := 0;
            Driver.Summ7 := 0;
            Driver.Summ8 := 0;
            Driver.Summ9 := 0;
            Driver.Summ10 := 0;
            Driver.Summ11 := 0;
            Driver.Summ12 := 0;
            Driver.Summ13 := 0;
            Driver.Summ14 := 0;
            Driver.Summ15 := 0;
            Driver.Summ16 := 0;
            Driver.RoundingSumm := 0;
            Driver.TaxType := 1;
            //Driver.StringForPrinting := 'ИД ЧЕКА : '+IntToStr(chek);
            //if car_number<>0 then Driver.StringForPrinting := 'ГОС НОМЕР АВТОМОБИЛЯ : '+IntToStr(car_number);
            if kc=1 then
            begin
            if nach_bal<=0 then
             begin
               Driver.StringForPrinting := '========Бонусная программа========';
               Driver.StringForPrinting := 'Списано баллов : '+IntToStr(spis_bal);
             end
             else
               begin
               if spis_bal<=0 then
                Driver.StringForPrinting := 'Начислено баллов : '+IntToStr(nach_bal);
               end;

            end;


            Driver.FNCloseCheckEx;
Подскажите пожалуста, что яделаю не так?
29.08.2021 11:30
OlegON
 
Не это?

Код:
REG QUERY "HKEY_CURRENT_USER\Control Panel\International" /v "sDecimal"
29.08.2021 15:37
MiixanM
 
Цитата:
OlegON Не это?

Код:
REG QUERY "HKEY_CURRENT_USER\Control Panel\International" /v "sDecimal"
Тогда проблемы с записью в БД, но число, судя по полю Memo , возвращается с точкой, как если написать и в "Тест драйвер"
29.08.2021 17:12
OlegON
 
так попробуй отдельно, без записи в БД, поставь разделитель точкой?
29.08.2021 18:53
MiixanM
 
Цитата:
OlegON так попробуй отдельно, без записи в БД, поставь разделитель точкой?
Вобщем столкнулся с каой странностью -вот так работает:
Код:
Driver.Quantity := StrToFloat(Edit13.Text);
  Driver.Price:=StrToFloat(Edit12.Text);
А так - не работает :
Код:
            Form2.Edit13.text:= Form2.ADOQuery2.FieldByName('kol').AsString;
            Form2.Edit12.text:= Form2.ADOQuery2.FieldByName('suma').AsString;

            Driver.Quantity := StrToFloat(Form2.Edit13.text);
            Driver.Price:=StrToFloat(Form2.Edit12.text);
Числа одинаковые и там и там
29.08.2021 19:39
OlegON
 
"Не верю" :) Странно, что у тебя один код с указанием Form2, другой - нет. Сделай еще один Edit с длиной того, что находится в Edit12 и Edit13, сравни, что там, когда работает и когда - нет. Если длина различается, сравнивай коды символов.
29.08.2021 21:12
student
 
А не проще ли в логе драйвера посмотреть что в фр реально падает?
29.08.2021 21:24
MiixanM
 
Цитата:
OlegON "Не верю" :) Странно, что у тебя один код с указанием Form2, другой - нет. Сделай еще один Edit с длиной того, что находится в Edit12 и Edit13, сравни, что там, когда работает и когда - нет. Если длина различается, сравнивай коды символов.
Можете подсказать как примерно сделать?
29.08.2021 21:27
OlegON
 
Что именно? Form2.Memo1.Lines.Add(Length(Form2.Edit12.text)) не работает?
Но ты лучше посмотри, что тебе student советует, отлови в том и другом случае, что идет...
Часовой пояс GMT +3, время: 08:27.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.