powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi + онлайн-кассы
25 сообщений из 125, страница 2 из 5
Delphi + онлайн-кассы
    #39782740
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbа покажите тот же код высокого качества, пожалуйста (кусочек)В идеале такой код подразумевает, что его сможет использовать другой программист для своей задачи с минимальной адаптацией. А сейчас это аццкая смесь бизнес-логики с UI, с отсутствием должной обработки ошибок, завязки на текстовые константы в коде, выбор неоптимальных языковых конструкций, отсутствие вменяемой архитектуры и спагетти в коде. В общем рефакторить и рефакторить. Плюс только один - это работает.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39782762
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggercptngrbа покажите тот же код высокого качества, пожалуйста (кусочек)В идеале такой код подразумевает, что его сможет использовать другой программист для своей задачи с минимальной адаптацией. А сейчас это аццкая смесь бизнес-логики с UI, с отсутствием должной обработки ошибок, завязки на текстовые константы в коде, выбор неоптимальных языковых конструкций, отсутствие вменяемой архитектуры и спагетти в коде. В общем рефакторить и рефакторить. Плюс только один - это работает.
А человек и не претендует на мастер-класс по идеальному коду.
Есть рабочий код - он им поделился.
А добиваться идеальности - ему не требуется, вам - тоже не требуется. И остаются варианты - выложить что есть или не выложить ничего. Если выложить - то может быть он кому-то поможет, начать делать аналогичное. Или не делать так же плохо :)

Большинство коммерческих прикладух вот так и написано, и они работают. Да, не идеально, но и мир не идеален.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39782768
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A: Покажи плиз код
B: на.
A: Спасибо!
C: Это не код, это полный ужас, это нельзя показывать, не говоря уже про использовать. Но свой, великолепный код, выполненный по всем правилам, писанным и неписанным, работающий идеально - я вам не покажу. Потому что он не идеальный.


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

А на хороший код бы посмотрел, как правильно нужно писать, я ведь самоучка. А то хаять могут а показать как надо - нет, или объяснить на примерах так не делай, а делай так и будет все по фен-шую.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39782783
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r, )))
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39782853
Alex Zhuravlev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Близнец1980, забей.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39782957
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всего лишь вопрос профессионального развития. Развиваться или нет каждый решает сам. А граммотно оформленный код можно (и нужно) смотреть в коммерческих библиотеках коих полно в том числе на варезниках. Если человеку не указать на ошибки то возможно он их не осознает. Здесь типичный случай отсутствия команды - человек пишет код для себя, не задумываясь, что когда-нибудь кому-то придется разбираться и сопровождать это. Многие через это проходят. То что помог кому-то своим кодом - плюс. Код плохой - минус
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39782996
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerВсего лишь вопрос профессионального развития. Развиваться или нет каждый решает сам. А граммотно оформленный код можно (и нужно) смотреть в коммерческих библиотеках коих полно в том числе на варезниках. Если человеку не указать на ошибки то возможно он их не осознает. Здесь типичный случай отсутствия команды - человек пишет код для себя, не задумываясь, что когда-нибудь кому-то придется разбираться и сопровождать это. Многие через это проходят. То что помог кому-то своим кодом - плюс. Код плохой - минус
Вот не показатель... ковырялся в FR4, местами то еще болото.
Да и зачем лезть в варезник, когда в среднем хороший код в RTL? Разумеется, исключая некоторые индусские выверты
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783026
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вот не показатель... ковырялся в FR4, местами то еще болото.Всякое встречается, не отрицаю. Но в среднем по больнице, качество кода коммерческих библиотек гораздо выше "кода в интернете", про который у Gunsmoker-a написано
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783090
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger, человек ругает чужой код не говоря как надо. Это не конструктивно.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783120
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980,

А с драйвеом 10 версии этот код работает?
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783132
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox, работает с последней версией драйвера штриха

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



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
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;
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783134
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

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

С последней имеется в виду с 10.х ? А то хотят перейти с 8ки на 10ку
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783136
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxБлизнец1980,

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

Здесь про Штрих-М, а не про АТОЛ. И, к слову, про АТОЛ: я тыркнулся в 10 версию, хотел прокатить на халяву, узрев, что там тоже есть OLE-сервер, но напоролся на то, что переписывать практически каждую строчку придется, если до этого пользовались 6-8 версиями :) Так что писать всё заново под АТОЛ 10 .
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783147
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется писать... (
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783158
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovИ, к слову, про АТОЛ: я тыркнулся в 10 версию, хотел прокатить на халяву, узрев, что там тоже есть OLE-сервер, но напоролся на то, что переписывать практически каждую строчку придется, если до этого пользовались 6-8 версиями :) Так что писать всё заново под АТОЛ 10Не, ну чё, сходства есть.
И примеры хорошие для дельфей в доке.
Концептуальную разницу я одну заметил: ИНН оператора передается не при печати чека, а при регистрации кассира.
Я у себя сделал абстрактный класс и наследуюсь от него в зависимости от версии.
Типа TAtol и наследники TAtol8 или TAtol10.
Так вот функции классов TAtol8 и TAtol10 очень похожи, не только названием.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783235
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,
А я все драйверы касс выкинул на скрипты в фастрепорт, OLE-сервера там поддерживаются. В самой программе есть стандартный набор процедур, которые она вызывает в этом скрипте, и ей без разницы, что там стоит, а вся работа непосредственно с кассой зависит уже от установленного скрипта. Правда, из десятка когда-то освоенных драйверов реально работают сейчас только АТОЛ да ШТРИХ, а всякие там Меркурии что-то не попадались с тех пор, как ввели онлайн-кассы. Не говоря обо всяких там АМС :)
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783242
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbwhite_nigger, человек ругает чужой код не говоря как надо. Это не конструктивно.

Со мной в команде 3 года работал программист, он каким-то чудом выполнил тестовое задание, за это его взяли на работу. Так он примерно в таком же стиле писал. Я все три года старался его переучить, но тщетно (ему уж 40 лет, опыт работа на Delphi более 20 лет). Недавно его уволили за профнепригодность. Иногда такой его код "выстреливает" так, что плакать хочется. Недавно пришлось модуль на 2 тыс. строк кода переписать с нуля, поскольку он работал с ошибкой, а разобраться и исправить ошибку было нереально (я даже не думал, что так бывает).
После этого случая у меня автоматически возникают нехорошие ассоциации.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783264
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,
В 2 тысячах строк не смогли найти ошибку, оказалось проще переписать? Да ладно... Отмазка это, по-моему :) Были другие причины.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783265
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovDmSer,
В 2 тысячах строк не смогли найти ошибку, оказалось проще переписать? Да ладно... Отмазка это, по-моему :) Были другие причины.

По факту там ошибка была в каждой второй строке. Каким-то чудом до поры до времени этот код работал, потом перестал.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783332
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,
поэтому и хочется, чтобы носом тыкнули и написали, что так и так писать не надо, а то будет бо-бо
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783594
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,
Да они хотят просто стырить твой код как есть, чтобы не заморачиваться и не переделывать, и чтобы всё разжевано было, и чтобы работало, и без ошибок. Ан-нет, придется потрудиться. Вот и расстроились.... )))
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783784
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbDmSer,
поэтому и хочется, чтобы носом тыкнули и написали, что так и так писать не надо, а то будет бо-бо

О проблемах в критикуемом мною примере кода уже написал white_nigger. Я бы еще добавил, что работа с ФР ведется в основном потоке, поэтому если ФР подвиснет с ответом, то и у пользователя программа будет висеть в статусе "не отвечает".
А вообще обычно почти любые примеры работы со штрихом можно подсмотреть в исходниках теста драйвера.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783825
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerЯ бы еще добавил, что работа с ФР ведется в основном потоке, поэтому если ФР подвиснет с ответом, то и у пользователя программа будет висеть в статусе "не отвечает".
И что? Все равно пока ФР не заработает кассиру делать нечего.
...
Рейтинг: 0 / 0
Delphi + онлайн-кассы
    #39783832
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это смотря какой функционал в программу заложен. В идеале да, программа кассира не должна делать ничего лишнего, управление всем остальным должно быть организовано в отдельных сервисах. Но все ли так делают?
Проблема не отвечающей программы в том, что кассир пытается нажимать, получается не то, что он планирует, хуже того, иногда модальные окна на задний план улетают, иногда исчезает модальность и пользователь может закрыть нижележащее окно.
...
Рейтинг: 0 / 0
25 сообщений из 125, страница 2 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi + онлайн-кассы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]