Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Delphi + онлайн-кассы  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2023
cptngrb
а покажите тот же код высокого качества, пожалуйста (кусочек)
В идеале такой код подразумевает, что его сможет использовать другой программист для своей задачи с минимальной адаптацией. А сейчас это аццкая смесь бизнес-логики с UI, с отсутствием должной обработки ошибок, завязки на текстовые константы в коде, выбор неоптимальных языковых конструкций, отсутствие вменяемой архитектуры и спагетти в коде. В общем рефакторить и рефакторить. Плюс только один - это работает.
5 мар 19, 23:22    [21825808]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1418
white_nigger
cptngrb
а покажите тот же код высокого качества, пожалуйста (кусочек)
В идеале такой код подразумевает, что его сможет использовать другой программист для своей задачи с минимальной адаптацией. А сейчас это аццкая смесь бизнес-логики с UI, с отсутствием должной обработки ошибок, завязки на текстовые константы в коде, выбор неоптимальных языковых конструкций, отсутствие вменяемой архитектуры и спагетти в коде. В общем рефакторить и рефакторить. Плюс только один - это работает.

А человек и не претендует на мастер-класс по идеальному коду.
Есть рабочий код - он им поделился.
А добиваться идеальности - ему не требуется, вам - тоже не требуется. И остаются варианты - выложить что есть или не выложить ничего. Если выложить - то может быть он кому-то поможет, начать делать аналогичное. Или не делать так же плохо :)

Большинство коммерческих прикладух вот так и написано, и они работают. Да, не идеально, но и мир не идеален.
6 мар 19, 04:50    [21825871]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
Vizit0r
Member

Откуда:
Сообщений: 589
A: Покажи плиз код
B: на.
A: Спасибо!
C: Это не код, это полный ужас, это нельзя показывать, не говоря уже про использовать. Но свой, великолепный код, выполненный по всем правилам, писанным и неписанным, работающий идеально - я вам не покажу. Потому что он не идеальный.


Спасибо, последний искатель бревен в чужом глазу - умилил просто до слез.
6 мар 19, 06:00    [21825879]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
Близнец1980
Member

Откуда:
Сообщений: 76
Этот код был написан 11 лет назад на заре изучения Delphi, для он-лайн касс немого доработал и все. Выложил в качестве примера работы с ККМ Штрих-М. Программа работает в нескольких магазинах на одном предприятии, поддерживается только мной, у которого еще куча обязанностей. Рефакторить не собираюсь, нет ни времени, ни желания, все и так работает. По хорошему там все программу нужно переписывать и на другую БД, но трудозатратно. (Как там в пословице: работает - не трогай!).

А на хороший код бы посмотрел, как правильно нужно писать, я ведь самоучка. А то хаять могут а показать как надо - нет, или объяснить на примерах так не делай, а делай так и будет все по фен-шую.
6 мар 19, 07:56    [21825893]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
cptngrb
Member

Откуда:
Сообщений: 284
Vizit0r, )))
6 мар 19, 08:39    [21825901]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
Alex Zhuravlev
Member

Откуда: Воронеж
Сообщений: 46
Близнец1980, забей.
6 мар 19, 11:53    [21826073]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2023
Всего лишь вопрос профессионального развития. Развиваться или нет каждый решает сам. А граммотно оформленный код можно (и нужно) смотреть в коммерческих библиотеках коих полно в том числе на варезниках. Если человеку не указать на ошибки то возможно он их не осознает. Здесь типичный случай отсутствия команды - человек пишет код для себя, не задумываясь, что когда-нибудь кому-то придется разбираться и сопровождать это. Многие через это проходят. То что помог кому-то своим кодом - плюс. Код плохой - минус
6 мар 19, 13:33    [21826228]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
Василий 2
Member

Откуда:
Сообщений: 433
white_nigger
Всего лишь вопрос профессионального развития. Развиваться или нет каждый решает сам. А граммотно оформленный код можно (и нужно) смотреть в коммерческих библиотеках коих полно в том числе на варезниках. Если человеку не указать на ошибки то возможно он их не осознает. Здесь типичный случай отсутствия команды - человек пишет код для себя, не задумываясь, что когда-нибудь кому-то придется разбираться и сопровождать это. Многие через это проходят. То что помог кому-то своим кодом - плюс. Код плохой - минус

Вот не показатель... ковырялся в FR4, местами то еще болото.
Да и зачем лезть в варезник, когда в среднем хороший код в RTL? Разумеется, исключая некоторые индусские выверты
6 мар 19, 14:17    [21826314]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2023
Василий 2
Вот не показатель... ковырялся в FR4, местами то еще болото.
Всякое встречается, не отрицаю. Но в среднем по больнице, качество кода коммерческих библиотек гораздо выше "кода в интернете", про который у Gunsmoker-a написано
6 мар 19, 15:10    [21826393]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
cptngrb
Member

Откуда:
Сообщений: 284
white_nigger, человек ругает чужой код не говоря как надо. Это не конструктивно.
6 мар 19, 16:27    [21826504]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
antox
Member

Откуда: РФ
Сообщений: 946
Близнец1980,

А с драйвеом 10 версии этот код работает?
6 мар 19, 16:58    [21826552]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
cptngrb
Member

Откуда:
Сообщений: 284
antox, работает с последней версией драйвера штриха

1. открываешь чек
2... операция
3. закрываешь чек



procedure print_reklama(prnt: Boolean);
begin
  if prnt then
  begin
    Driver.Password := 30;
    Driver.TableNumber := 1;
    Driver.FieldNumber := 4;
    Driver.RowNumber := 1;
    Driver.ValueOfFieldInteger := 1;
    Driver.GetFieldStruct;
    Driver.WriteTable;
  end
  else
  begin
    Driver.Password := 30;
    Driver.TableNumber := 1;
    Driver.FieldNumber := 4;
    Driver.RowNumber := 1;
    Driver.ValueOfFieldInteger := 0;
    Driver.GetFieldStruct;
    Driver.WriteTable;

    Driver.Password := 30;
    Driver.TableNumber := 4;
    Driver.FieldNumber := 1;
    Driver.RowNumber := 2;
    Driver.ValueOfFieldString := '';
    Driver.GetFieldStruct;
    Driver.WriteTable;

    Driver.Password := 30;
    Driver.TableNumber := 4;
    Driver.FieldNumber := 1;
    Driver.RowNumber := 3;
    Driver.ValueOfFieldString := '';
    Driver.GetFieldStruct;
    Driver.WriteTable;
  end;

end;

//возвращает номер чека
function GetOpenCheckNumber: integer;
begin
  try
    Driver.GetECRStatus;
    Result:= Driver.OpenDocumentNumber;
  except
    on E: Exception do begin
      Result:= -1;
      ShowMessage('Ошибка получения номера чека');
    end;
  end;
end;

function CheckOpen (aType: integer): integer;
var
  ResultCode: integer;
  ResultCodeDescription: string;
begin
  //aType 0-продажа, 1-покупка
  try
    //реквизиты Академии печатаем
//      Driver.UseReceiptRibbon := true;
//      Driver.UseJournalRibbon := false;
//      Driver.UseSlipDocument := false;
//      Driver.CarryStrings := false;
//      Driver.DelayedPrint := false;
//
//      Driver.StringForPrinting := '  **************************************  ';
//      Driver.PrintString;
//      Driver.StringForPrinting := '  *                                    *  ';
//      Driver.PrintString;
//      Driver.StringForPrinting := '  *  '+ORG_NAME+'  *  ';
//      Driver.PrintString;
//      Driver.StringForPrinting := '  *  '+ORG_ADRES+'  *  ';
//      Driver.FontType := 3;
//      Driver.PrintStringWithFont;
//      Driver.StringForPrinting := '  *                                    *  ';
//      Driver.PrintString;
//      Driver.StringForPrinting := '  **************************************  ';
//      Driver.PrintString;



    print_reklama(false);
    Driver.Password := PASSWD;
    Driver.CheckType := aType; // тип чека (продажа,покупка и т.п.)
    Driver.OpenCheck;

    //Отправка данных о покупателе
//     Driver.CustomerEmail = textBox1.Text;  В качестве параметра можно передавать или телефон (+7хххххххххх) или e-mail: test@test.com
//     Driver.FNSendCustomerEmail();

    ResultCode := Driver.ResultCode;
    ResultCodeDescription := Driver.ResultCodeDescription;
    if ResultCode > 0 then
    begin
      ShowMessage('Произошла ошибка при проведении операции (Код:' + IntToStr(ResultCode) + '). Текст: '+ResultCodeDescription);
      result:=-1;
    end
    else
    begin
//      Driver.Password := PASSWD;
//      Driver.RegisterNumber := 148; // № чека
//      Driver.GetOperationReg;
//      result := Driver.ContentsOfOperationRegister + 1;
      Result:= GetOpenCheckNumber +1;
    end;
  except
    on E: exception do
    begin
      result:= -2;
      ShowMessage('Ошибка получения номера чека при открытии: '+e.message);
    end;
  end;
end;

function CheckOperation (aType, aDept: integer; aSum, aPrice:Currency; aCnt, aNDS :Double; aSTR :string): integer;
var
  ResultCode: integer;
  ResultCodeDescription: string;
begin
  result:=0;
  try
    Driver.Department := aDept; // секция
    Driver.Summ1 := aSum; // сумма
    Driver.Price := aPrice; // цена
    Driver.Quantity := aCnt; // кол-во

    // если есть НДС---------------------------------
    if aNDS > 0 then
      Driver.Tax1 := 1
    else
      Driver.Tax1 := 0;
    //-----------------------------------------------
    Driver.Tax2 := 0;
    Driver.Tax3 := 0;
    Driver.Tax4 := 0;
    Driver.StringForPrinting := aSTR;

    Driver.Password := PASSWD;
    case aType of
      0: DRIVER.Sale;
      2: DRIVER.ReturnSale;
    end;

    ResultCode := Driver.ResultCode;
    ResultCodeDescription := Driver.ResultCodeDescription;
    if ResultCode > 0 then
    begin
      ShowMessage('Произошла ошибка при проведении операции (Код:' + IntToStr(ResultCode) + '). Текст: '+ResultCodeDescription);
      result:=-1;
    end;
  except
    on E: exception do
    begin
      result:=-2;
      ShowMessage('Ошибка: '+e.message);
    end;
  end;
end;

 // закрытие чека
function CheckClose (aSum:Currency; aStr: string): integer;
var
  ResultCode: integer;
  ResultCodeDescription: string;
begin
  try
    result:=0;
    //aStr:= 'Спасибо за проживание';
    Driver.Password := PASSWD;
    Driver.Summ1 := aSum; // наличными 
    // Driver.Driver.Summ2 := StrToCurr('0'); //кредит
    // Driver.Driver.Summ3 := StrToCurr('0'); //тарой
    // Driver.Driver.Summ4 := StrToCurr('0');   //плат. картой
    // if nds>0 then
    // Driver.Driver.Tax1 := 2
    // else
    // Driver.Driver.Tax1 := 0;
    // Driver.Driver.Tax2 := 0;
    // Driver.Driver.Tax3 := 0;
    // Driver.Driver.Tax4 := 0;
    // Driver.Driver.DiscountOnCheck := StrToFloat('0'); //скидка
    Driver.StringForPrinting := aStr;
    Driver.CloseCheck;
    ResultCode := Driver.ResultCode;
    ResultCodeDescription := Driver.ResultCodeDescription;

    if ResultCode > 0 then
    begin
      ShowMessage('Произошла ошибка при закрытии чека (Код:' + IntToStr(ResultCode) + '). Текст: '+ResultCodeDescription);
      result:=-1;
      Driver.Password := PASSWD;
      Driver.CancelCheck;
    end;


  except
    on E: exception do
    begin
      result:=-2;
      ShowMessage('Ошибка: '+e.message);
    end;
  end;
end;

procedure TfrMainForm.WriteSectionFR;
var
  i: integer;
  ResultCode: integer;
  ResultCodeDescription: string;
begin
  try
  //записываем данные пользователя в ФР
  if DriverExists then
    begin
      with DATAM.ODS do
      begin
        Close;
        DeleteVariables;
        sql.Text := 'select * from PUB_SECTION order by id_rec';
        Open;
        if not IsEmpty then
        begin
          i:=0;
          while not eof do
          begin
            inc(i);
            Driver.Password := 30;
            Driver.TableNumber := 7;
            Driver.FieldNumber := 1;
            Driver.RowNumber := i;
            Driver.ValueOfFieldString := FieldByName('section_name').AsString;
            Driver.WriteTable;
            ResultCode := Driver.ResultCode;
            ResultCodeDescription := Driver.ResultCodeDescription;
            if ResultCode>0 then
            begin
              ShowMessage('Ошибка записи секций ФР: '+ResultCodeDescription);
              break;
            end;
             Next;
          end;

        end;
        CloseAll;
      end;

      Driver.Password := 30;
      Driver.TableNumber := 7;
      Driver.FieldNumber := 1;
      Driver.RowNumber := 16;
      Driver.ValueOfFieldString := '111';
      Driver.WriteTable;
      ResultCode := Driver.ResultCode;
      ResultCodeDescription := Driver.ResultCodeDescription;
      if ResultCode>0 then
      begin
        ShowMessage('Ошибка записи секций ФР: '+ResultCodeDescription);

      end;
    end;
  except
    ShowMessage('Ошибка загрузки секций в ФР');
  end;

end;

procedure SetSalesman(Vseller:string;var ResultCode:integer;var ResultCodeDescription:string);
begin
try
//установка продавца
  Driver.Password := 30;
  Driver.TableNumber := 2;
  Driver.FieldNumber := 2;
  Driver.RowNumber := 1;
  Driver.ValueOfFieldString :=vseller;
  Driver.WriteTable;
  ResultCode :=Driver.ResultCode;
  ResultCodeDescription := Driver.ResultCodeDescription;
except
  on E: Exception do begin
  showmessage('Ошибка установки кассира:'+E.Message);
end;
end;



end;
6 мар 19, 17:11    [21826571]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
antox
Member

Откуда: РФ
Сообщений: 946
cptngrb,

Ну, у них последних же три 8,9,10.

С последней имеется в виду с 10.х ? А то хотят перейти с 8ки на 10ку
6 мар 19, 17:13    [21826575]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 269
antox
Близнец1980,

А с драйвеом 10 версии этот код работает?


Здесь про Штрих-М, а не про АТОЛ. И, к слову, про АТОЛ: я тыркнулся в 10 версию, хотел прокатить на халяву, узрев, что там тоже есть OLE-сервер, но напоролся на то, что переписывать практически каждую строчку придется, если до этого пользовались 6-8 версиями :) Так что писать всё заново под АТОЛ 10 .
6 мар 19, 17:16    [21826581]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
antox
Member

Откуда: РФ
Сообщений: 946
Придется писать... (
6 мар 19, 17:33    [21826601]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3825
V.Borzov
И, к слову, про АТОЛ: я тыркнулся в 10 версию, хотел прокатить на халяву, узрев, что там тоже есть OLE-сервер, но напоролся на то, что переписывать практически каждую строчку придется, если до этого пользовались 6-8 версиями :) Так что писать всё заново под АТОЛ 10
Не, ну чё, сходства есть.
И примеры хорошие для дельфей в доке.
Концептуальную разницу я одну заметил: ИНН оператора передается не при печати чека, а при регистрации кассира.
Я у себя сделал абстрактный класс и наследуюсь от него в зависимости от версии.
Типа TAtol и наследники TAtol8 или TAtol10.
Так вот функции классов TAtol8 и TAtol10 очень похожи, не только названием.
6 мар 19, 17:54    [21826626]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 269
YuRock,
А я все драйверы касс выкинул на скрипты в фастрепорт, OLE-сервера там поддерживаются. В самой программе есть стандартный набор процедур, которые она вызывает в этом скрипте, и ей без разницы, что там стоит, а вся работа непосредственно с кассой зависит уже от установленного скрипта. Правда, из десятка когда-то освоенных драйверов реально работают сейчас только АТОЛ да ШТРИХ, а всякие там Меркурии что-то не попадались с тех пор, как ввели онлайн-кассы. Не говоря обо всяких там АМС :)
6 мар 19, 21:00    [21826764]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 768
cptngrb
white_nigger, человек ругает чужой код не говоря как надо. Это не конструктивно.


Со мной в команде 3 года работал программист, он каким-то чудом выполнил тестовое задание, за это его взяли на работу. Так он примерно в таком же стиле писал. Я все три года старался его переучить, но тщетно (ему уж 40 лет, опыт работа на Delphi более 20 лет). Недавно его уволили за профнепригодность. Иногда такой его код "выстреливает" так, что плакать хочется. Недавно пришлось модуль на 2 тыс. строк кода переписать с нуля, поскольку он работал с ошибкой, а разобраться и исправить ошибку было нереально (я даже не думал, что так бывает).
После этого случая у меня автоматически возникают нехорошие ассоциации.
6 мар 19, 21:32    [21826773]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 269
DmSer,
В 2 тысячах строк не смогли найти ошибку, оказалось проще переписать? Да ладно... Отмазка это, по-моему :) Были другие причины.
6 мар 19, 22:20    [21826803]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 768
V.Borzov
DmSer,
В 2 тысячах строк не смогли найти ошибку, оказалось проще переписать? Да ладно... Отмазка это, по-моему :) Были другие причины.


По факту там ошибка была в каждой второй строке. Каким-то чудом до поры до времени этот код работал, потом перестал.
6 мар 19, 22:23    [21826804]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
cptngrb
Member

Откуда:
Сообщений: 284
DmSer,
поэтому и хочется, чтобы носом тыкнули и написали, что так и так писать не надо, а то будет бо-бо
7 мар 19, 08:22    [21826936]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
V.Borzov
Member

Откуда: Саратов
Сообщений: 269
cptngrb,
Да они хотят просто стырить твой код как есть, чтобы не заморачиваться и не переделывать, и чтобы всё разжевано было, и чтобы работало, и без ошибок. Ан-нет, придется потрудиться. Вот и расстроились.... )))
7 мар 19, 15:11    [21827415]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 768
cptngrb
DmSer,
поэтому и хочется, чтобы носом тыкнули и написали, что так и так писать не надо, а то будет бо-бо


О проблемах в критикуемом мною примере кода уже написал white_nigger. Я бы еще добавил, что работа с ФР ведется в основном потоке, поэтому если ФР подвиснет с ответом, то и у пользователя программа будет висеть в статусе "не отвечает".
А вообще обычно почти любые примеры работы со штрихом можно подсмотреть в исходниках теста драйвера.
7 мар 19, 22:21    [21827763]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
MikeDD
Member

Откуда:
Сообщений: 238
DmSer
Я бы еще добавил, что работа с ФР ведется в основном потоке, поэтому если ФР подвиснет с ответом, то и у пользователя программа будет висеть в статусе "не отвечает".

И что? Все равно пока ФР не заработает кассиру делать нечего.
8 мар 19, 09:33    [21827837]     Ответить | Цитировать Сообщить модератору
 Re: Delphi + онлайн-кассы  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 768
Это смотря какой функционал в программу заложен. В идеале да, программа кассира не должна делать ничего лишнего, управление всем остальным должно быть организовано в отдельных сервисах. Но все ли так делают?
Проблема не отвечающей программы в том, что кассир пытается нажимать, получается не то, что он планирует, хуже того, иногда модальные окна на задний план улетают, иногда исчезает модальность и пользователь может закрыть нижележащее окно.
8 мар 19, 11:14    [21827851]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Delphi Ответить