summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 22:51:53 +0300
committervlapa <vlapa@ya.ru>2026-06-13 22:51:53 +0300
commitf4809e78880e58c8f25e6c0f17223d977fa00810 (patch)
tree3a382023b3e5018049d9f27b9da8bba51d63625d
Firstmain
-rw-r--r--OLD/Viewer_vesy/KeyBoard.pde58
-rw-r--r--OLD/Viewer_vesy/Mouse.pde96
-rw-r--r--OLD/Viewer_vesy/PrintOtwes.pde122
-rw-r--r--OLD/Viewer_vesy/Viewer_vesy.pde122
-rw-r--r--OLD/Viewer_vesy/Visible.pde244
-rw-r--r--OLD/Viewer_vesy/data/Custom/source.json3
-rw-r--r--OLD/Viewer_vesy/data/delete/base.csv9
-rw-r--r--OLD/Viewer_vesy/data/delete/clients.txt20
-rw-r--r--OLD/Viewer_vesy/data/delete/kamazy.txt16
-rw-r--r--OLD/Viewer_vesy/data/delete/option.json15
-rw-r--r--OLD/Viewer_vesy/data/delete/report.txt37
-rw-r--r--OLD/Viewer_vesy/data/delete/temp.json92
m---------OLD/Zasor20
-rw-r--r--SOURCE/Viewer_vesy/KeyBoard.pde58
-rw-r--r--SOURCE/Viewer_vesy/LoadSetup.pde32
-rw-r--r--SOURCE/Viewer_vesy/Mouse.pde96
-rw-r--r--SOURCE/Viewer_vesy/PrintOtwes.pde122
-rw-r--r--SOURCE/Viewer_vesy/Viewer_vesy.pde182
-rw-r--r--SOURCE/Viewer_vesy/Visible.pde244
-rw-r--r--SOURCE/Zasor2/KeyBoard.pde197
-rw-r--r--SOURCE/Zasor2/LoadSetup.pde99
-rw-r--r--SOURCE/Zasor2/Mouse.pde201
-rw-r--r--SOURCE/Zasor2/OutReport.pde133
-rw-r--r--SOURCE/Zasor2/Visible.pde381
-rw-r--r--SOURCE/Zasor2/Zasor2.pde483
-rw-r--r--ПРОЧИТАЙ_!!!.txt11
26 files changed, 3073 insertions, 0 deletions
diff --git a/OLD/Viewer_vesy/KeyBoard.pde b/OLD/Viewer_vesy/KeyBoard.pde
new file mode 100644
index 0000000..c20e2f6
--- /dev/null
+++ b/OLD/Viewer_vesy/KeyBoard.pde
@@ -0,0 +1,58 @@
+//*****************************************************
+// Работа с клавиатурой
+
+void keyReleased() {
+ if (key > 31 && key < 127 || key > 1039 && key < 1104) { // ввод данных
+ if (selectDataEdit != 0) {
+ if (inputData.length() < 30) {
+ inputData += key;
+ }
+ }
+ reset();
+ }
+
+ if (key == 8) { // backspase
+ if (inputData.length() >= 1) {
+ inputData = inputData.substring(0, inputData.length() - 1);
+ }
+ reset();
+ }
+
+ if (key == 127) { // стереть все
+ inputData = "";
+ reset();
+ }
+
+ if (key == 13 || key == 10) { // enter или return
+
+ int hCode = table.getInt(index-1, 0);
+ int hCode1 = table.getInt(index-1, 9) * 2 + table.getInt(index-1, 10) * 2 +
+ table.getInt(index-1, 12) * 2 + table.getInt(index-1, 13) * 2 +
+ table.getInt(index-1, 14) * 2 + table.getInt(index-1, 15) * 2;
+ table.setInt(index-1, 0, hCode);
+
+ if (selectDataEdit == 1) {
+ table.setInt(index-1, selectDataEdit - 1, int(inputData.trim()));
+ } else if (selectDataEdit == 14 || selectDataEdit == 15) {
+ table.setInt(index-1, selectDataEdit, int(inputData.trim()));
+ } else {
+ table.setString(index-1, selectDataEdit, inputData.trim());
+ }
+
+ if (hCode == hCode1) {
+ hCode1 = table.getInt(index-1, 9) * 2 + table.getInt(index-1, 10) * 2 +
+ table.getInt(index-1, 12)*2 +
+ table.getInt(index-1, 13)*2 + table.getInt(index-1, 14)*2 +
+ table.getInt(index-1, 15)*2;
+ table.setInt(index-1, 0, hCode1);
+ }
+
+ saveTable(table, filePath1 + "base.csv");
+ saveTable(table, filePath + "base.csv");
+
+ selectDataEdit = 0;
+ reset();
+ inputData = "";
+ }
+ key = 0;
+}
diff --git a/OLD/Viewer_vesy/Mouse.pde b/OLD/Viewer_vesy/Mouse.pde
new file mode 100644
index 0000000..3252e55
--- /dev/null
+++ b/OLD/Viewer_vesy/Mouse.pde
@@ -0,0 +1,96 @@
+//****************************************************
+void mousePressed() {
+ TableRow row = table.getRow(index-1);
+ for (int i = 0; i < count; ++i) { // выбор строки
+ if ((mouseX > tablo[0]) && (mouseX < tablo[0] + tablo[2]) &&
+ (mouseY > tablo[1] + h * i) && (mouseY < tablo[1] + h + h * i)) {
+ select = i + 1;
+ reset();
+ }
+ }
+
+ if ((mouseX > tabloW[0] + shift) && (mouseX < tabloW[1] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 1;
+ inputData = row.getString(0);
+ reset();
+ }
+
+ if ((mouseX > tabloW[2] + shift) && (mouseX < tabloW[3] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 4;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[3] + shift) && (mouseX < tabloW[4] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 6;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[4] + shift) && (mouseX < tabloW[5] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 7;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[9] + shift) && (mouseX < tabloW[10] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 14;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[10] + shift) && (mouseX < tabloW[11] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 15;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[11] + shift) && (mouseX < tabloW[12] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 5;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[13] + shift) && (mouseX < tabloW[16] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ fill(#FFFF00);
+ rect(tablo[0] + tabloW[13], s, tabloW[16] - tabloW[13], 27);
+ fill(0);
+ text("ОТВЕС", tabloW[13] + shift * 9 + tablo[0], s + 20);
+ }
+
+ if ((mouseX > tabloW[17] - 30) && (mouseX < tabloW[17]) &&
+ (mouseY > tablo[1] + tablo[3] - 8) && (mouseY < tablo[1] + tablo[3] + 12)) {
+ fill(#836FFF);
+ rect(tabloW[17] - 30, tablo[1] + tablo[3] - 8, 30, 20);
+ }
+}
+//****************************************************
+void mouseReleased() {
+ if ((mouseX > tabloW[13] + shift) && (mouseX < tabloW[16] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ //selectDataEdit = 0;
+ fill(#FF0000);
+ rect(tablo[0] + tabloW[13], s, tabloW[16] - tabloW[13], 27);
+ fill(255);
+ text("ОТВЕС", tabloW[13] + shift * 9 + tablo[0], s + 20);
+ printOtwes();
+ }
+
+ if ((mouseX > tabloW[17] - 30) && (mouseX < tabloW[17]) &&
+ (mouseY > tablo[1] + tablo[3] - 8) && (mouseY < tablo[1] + tablo[3] + 12)) {
+ fill(0);
+ rect(tabloW[17] - 30, tablo[1] + tablo[3] - 8, 30, 20);
+ select = 0;
+ selectData = 0;
+ selectDataEdit = 0;
+ reset();
+ }
+}
diff --git a/OLD/Viewer_vesy/PrintOtwes.pde b/OLD/Viewer_vesy/PrintOtwes.pde
new file mode 100644
index 0000000..a707a1e
--- /dev/null
+++ b/OLD/Viewer_vesy/PrintOtwes.pde
@@ -0,0 +1,122 @@
+//*****************************************************
+// Печать отвеса
+
+void printOtwes() {
+ int[] wO = {10, 73, 105, 165, 200};
+ int[] hO = {10, 55, 70, 85, 100, 115, 130};
+ String D = "";
+ String M = "";
+ String Y = "";
+ String H = "";
+ String N = "";
+ String S = "";
+ D += (day() < 10) ? "0" + day() : day();
+ M += (month() < 10) ? "0" + month() : month();
+ Y += (year() < 10) ? "0" + year() : year();
+ H += (hour() < 10) ? "0" + hour() : hour();
+ N += (minute() < 10) ? "0" + minute() : minute();
+ S += (second() < 10) ? "0" + second() : second();
+ String time1 = H + N + S;
+
+ TableRow row = table.getRow(index-1);
+
+ PGraphics pdf = createGraphics(210, 297, PDF, otwes +
+ "/" + M + "/" + D + "/" + time1 + "_" + row.getString(3) + ".pdf");
+ pdf.beginDraw();
+ pdf.background(255);
+
+ pdf.rect(wO[0], hO[0], wO[4]-wO[0], hO[1]-hO[0], 5, 5, 0, 0);
+ pdf.rect(wO[0], hO[1], wO[4]-wO[0], hO[2]-hO[1]);
+ pdf.rect(wO[0], hO[2], wO[4]-wO[0], hO[3]-hO[2]);
+ pdf.rect(wO[0], hO[3], wO[4]-wO[0], hO[4]-hO[3]);
+ pdf.rect(wO[0], hO[4], wO[4]-wO[0], hO[5]-hO[4]);
+ pdf.rect(wO[0], hO[5], wO[4]-wO[0], hO[6]-hO[5], 0, 0, 5, 5);
+
+ pdf.line(wO[1], hO[1], wO[1], hO[5]);
+ pdf.line(wO[2], hO[1], wO[2], hO[6]);
+ pdf.line(wO[3], hO[1], wO[3], hO[6]);
+
+ pdf.rect(13, 13, 40, 30, 3);
+ pdf.ellipse(40, 25, 50, 20);
+ pdf.fill(0);
+ pdf.textSize(4);
+ String k = "";
+ if (row.getInt(17) != 0) {
+ k = row.getString(11).substring(0, 5) + " [" + float(row.getString(17)) / 1000 + "]";
+ } else {
+ k = row.getString(11).substring(0, 5);
+ }
+ pdf.text(k, 17, 40);
+ pdf.textSize(6);
+ pdf.text(row.getString(1) + "/1" + M + int(random(101, 999)), 24, 27); // row.getString(2), 28, 27);
+
+ pdf.textSize(7);
+ pdf.text("Дубликат отвеса", 73, 20);
+ pdf.textSize(4);
+ pdf.text("ГосНомер а/м:", 80, 30);
+ pdf.textAlign(RIGHT);
+ pdf.textSize(8);
+ pdf.text(row.getString(3), 190, 30);
+ pdf.textAlign(LEFT);
+ pdf.textSize(4);
+ pdf.text("Сдатчик лома и отходов:", 59, 40);
+ pdf.textSize(8);
+ pdf.textAlign(RIGHT);
+ pdf.text(row.getString(4), 190, 40);
+ pdf.textAlign(LEFT);
+ pdf.textSize(3);
+ pdf.text("Бытовой лом, отходы частного строительства, или прочее..", 15, 50);
+ pdf.textAlign(RIGHT);
+ pdf.textSize(4);
+ pdf.text(row.getString(5), 190, 50);
+
+ pdf.textAlign(RIGHT);
+ pdf.textSize(5);
+ pdf.text("Брутто (т)", 70, 65);
+ pdf.text("Тара (т)", 70, 80);
+ pdf.text("Нетто (чистый вес) (т)", 70, 95);
+ pdf.text("Не принято мусора (кг)", 70, 110);
+ pdf.textAlign(LEFT);
+ pdf.text(row.getString(16), 15, 125);
+ pdf.textAlign(RIGHT);
+ pdf.textSize(6);
+ pdf.text(printData(str(row.getInt(9))), 102, 65);
+ pdf.text(printData(row.getString(12)), 102, 80);
+ //float n = row.getInt(9) - row.getInt(12) + row.getInt(17) / 2;
+ int chist = int(row.getInt(9) - row.getInt(12) - (row.getInt(9) - row.getInt(12)) /
+ 100.0 * row.getInt(7) - row.getInt(15) + row.getInt(17) / 2);
+ pdf.text(printData(str(chist)), 102, 95);
+ pdf.text(printData(row.getString(15)), 100, 110);
+
+ pdf.textAlign(RIGHT);
+ pdf.textSize(5);
+ pdf.text("Цена (руб)", 162, 65);
+ pdf.text("Процент засора (%)", 162, 80);
+ pdf.text("Стоимость (руб)", 162, 95);
+ pdf.text("Аренда КАМАЗ (руб)", 162, 110);
+ pdf.text("ИТОГО к выдаче (руб)", 162, 125);
+ pdf.textSize(6);
+ pdf.text(printData(row.getString(6)), 197, 65);
+ pdf.text(row.getString(7), 195, 80);
+ int sum = int(chist * row.getInt(6) / 1000.0);
+ pdf.text(printData(str(sum)), 197, 95);
+ pdf.text(printData(row.getString(14)), 195, 110);
+ pdf.text(printData(str(int(sum) - int(row.getString(14)))), 197, 125);
+
+ pdf.dispose();
+ pdf.endDraw();
+}
+
+//*****************************************************
+// работа над числом для вывода
+
+float workNumber(float v) {
+ if (int(v * 1000) % 10 >= 5) {
+ v = int(v * 100 + 1) / 100.0;
+ } else {
+ v = int(v * 100) / 100.0;
+ }
+ return v;
+}
+
+//*****************************************************
diff --git a/OLD/Viewer_vesy/Viewer_vesy.pde b/OLD/Viewer_vesy/Viewer_vesy.pde
new file mode 100644
index 0000000..59396cc
--- /dev/null
+++ b/OLD/Viewer_vesy/Viewer_vesy.pde
@@ -0,0 +1,122 @@
+//*******************************************************************
+// Zasor2 - viewer
+// 2021.03.06 - 2021.09.05
+// v. 037
+//*******************************************************************
+import processing.pdf.*;
+
+String filePath = "data/"; // путь для сохранения копии файла базы
+String filePath1; // путь для сохранения файла базы (Ядиск)
+String put = "data/Custom/"; // путь для сохранения копии файла настроек
+String otwes = "OTWESY/"; // путь для сохранения отвесов
+int count = 0;
+int select = 0;
+int selectData = 0;
+int selectDataEdit = 0;
+int h = 17;
+int w = 80;
+int otH = 13;
+int otW = 10;
+int shift = 10;
+
+boolean flagHighlight = false;
+boolean flagWork = false;
+boolean flagBoss = false;
+boolean flagNext = false;
+
+int[] tablo = {10, 30, 1350, 900};
+int[] tabloW = {0, 40, 135, 270, 335, 370, 435, 500, 565, 630, 690,
+ 745, 955, 1035, 1110, 1185, 1270, tablo[2]};
+
+String[][] data = new String[60][20];
+String inputData = "";
+int numberReport;
+int millisOld = 0;
+
+int index = 0;
+
+int sumN1 = 0;
+int sumN = 0;
+int sumChist = 0;
+int sumArenda = 0;
+int sumDopSor = 0;
+int sumSum = 0;
+
+int rowCount = 0;
+
+int s = tablo[1] + tablo[3] - 11;
+
+Table table;
+PFont myFont;
+
+//*****************************************************
+void settings() {
+ size(tablo[2] + 20, tablo[3] + 60);
+}
+void setup() {
+ myFont = createFont("Arial", 12, true);
+ textFont(myFont);
+
+ JSONArray values;
+ values = loadJSONArray(put + "option.json");
+ JSONObject animal = values.getJSONObject(0);
+ filePath1 = animal.getString("filePath");
+ println(filePath1);
+ table = loadTable(filePath1 + "base.csv");
+ if (table == null) {
+ fill(0);
+ textSize(50);
+ text("File 'base.csv' not found !", 50, 150);
+ }
+}
+//*****************************************************
+void draw() {
+ if (millis() >= millisOld + 1000) {
+ table = loadTable(filePath1 + "base.csv", "header");
+ if (table.getRowCount() == rowCount) {
+ return;
+ } else {
+ rowCount = table.getRowCount();
+ fill(255);
+ rect(tablo[0], tablo[1], tablo[2], tablo[3]);
+ reset();
+ }
+ }
+}
+
+//****************************************************
+void reset() {
+ count = 0;
+ sumN1 = 0;
+ sumN = 0;
+ sumChist = 0;
+ sumArenda = 0;
+ sumDopSor = 0;
+ sumSum = 0;
+ visible();
+}
+
+//****************************************************
+String printData(String d) {
+ String d1 = "";
+ if (d.length() == 0 || d.length() == 1) {
+ d1 = "";
+ } else if (d.length() < 2) {
+ d1 = d.substring(d.length() - 1, d.length());
+ } else if (d.length() < 3) {
+ d1 = d.substring(d.length() - 2, d.length());
+ } else if (d.length() < 4) {
+ d1 = d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 5) {
+ d1 = d.substring(d.length() - 4, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 6) {
+ d1 = d.substring(d.length() - 5, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 7) {
+ d1 = d.substring(d.length() - 6, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 8) {
+ d1 = d.substring(d.length() - 7, d.length() - 6) + "'" + d.substring(d.length() - 6, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ }
+ return d1;
+}
+
+//*****************************************************
diff --git a/OLD/Viewer_vesy/Visible.pde b/OLD/Viewer_vesy/Visible.pde
new file mode 100644
index 0000000..c245014
--- /dev/null
+++ b/OLD/Viewer_vesy/Visible.pde
@@ -0,0 +1,244 @@
+//*****************************************************
+// Отображение на экране
+
+void visible() {
+ fill(255);
+ rect(tablo[0], tablo[1], tablo[2], tablo[3] + 20);
+ for (TableRow row : table.rows()) {
+ if (count == select-1) {
+ index = row.getInt(2);
+ println(index);
+ }
+ fill(#F0FFFF);
+ if (select == count + 1) fill(#00FF00);
+ rect(tablo[0], tablo[1] + h * count, tablo[2], h);
+ rect(tablo[0] + tabloW[1], tablo[1] + h * count, tabloW[2] - tabloW[1], h);
+ rect(tablo[0] + tabloW[2], tablo[1] + h * count, tabloW[3] - tabloW[2], h);
+ rect(tablo[0] + tabloW[3], tablo[1] + h * count, tabloW[4] - tabloW[3], h);
+ rect(tablo[0] + tabloW[4], tablo[1] + h * count, tabloW[5] - tabloW[4], h);
+ rect(tablo[0] + tabloW[5], tablo[1] + h * count, tabloW[6] - tabloW[5], h);
+ rect(tablo[0] + tabloW[6], tablo[1] + h * count, tabloW[7] - tabloW[6], h);
+ rect(tablo[0] + tabloW[7], tablo[1] + h * count, tabloW[8] - tabloW[7], h);
+ rect(tablo[0] + tabloW[8], tablo[1] + h * count, tabloW[9] - tabloW[8], h);
+ rect(tablo[0] + tabloW[9], tablo[1] + h * count, tabloW[10] - tabloW[9], h);
+ rect(tablo[0] + tabloW[10], tablo[1] + h * count, tabloW[11] - tabloW[10], h);
+ rect(tablo[0] + tabloW[11], tablo[1] + h * count, tabloW[12] - tabloW[11], h);
+ rect(tablo[0] + tabloW[12], tablo[1] + h * count, tabloW[13] - tabloW[12], h);
+ rect(tablo[0] + tabloW[13], tablo[1] + h * count, tabloW[14] - tabloW[13], h);
+ rect(tablo[0] + tabloW[14], tablo[1] + h * count, tabloW[15] - tabloW[14], h);
+ rect(tablo[0] + tabloW[15], tablo[1] + h * count, tabloW[16] - tabloW[15], h);
+ rect(tablo[0] + tabloW[16], tablo[1] + h * count, tablo[2] - tabloW[16], h);
+
+ fill(0);
+ int hCode = row.getInt(0);
+ int hCode1 = row.getInt(9)*2 + row.getInt(10)*2 + row.getInt(12)*2 +
+ row.getInt(13)*2 + row.getInt(14)*2 + row.getInt(15)*2;
+ println(hCode + " - " + hCode1);
+ if (hCode != hCode1) fill(#FF0000);
+ textSize(11);
+ textAlign(RIGHT);
+ text(count + 1, tablo[1] + shift, tablo[1] + otH + h * (count));
+ text(row.getString(3), tabloW[2] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(row.getString(4), tabloW[3] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(printData(row.getString(6)), tabloW[4] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(row.getString(7), tabloW[5] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(printData(str(row.getInt(9))), tabloW[6] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String q = (row.getInt(10) == 0) ? "" : row.getString(10);
+ text(q, tabloW[7] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(printData(row.getString(12)), tabloW[8] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String w = (row.getInt(13) == 0) ? "" : row.getString(13);
+ text(w, tabloW[9] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String e = (row.getInt(14) == 0) ? "" : row.getString(14);
+ text(printData(e), tabloW[10] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String r = (row.getInt(15) == 0) ? "" : row.getString(15);
+ text(printData(r), tabloW[11] - shift + tablo[0], tablo[1] + otH + h * (count));
+ textAlign(LEFT);
+ String g;
+ if (row.getInt(17) != 0) {
+ g = "[" + row.getFloat(17) / 1000 + "] ";
+ } else {
+ g = "";
+ }
+ text(g + row.getString(5), tabloW[11] + shift + tablo[0], tablo[1] + otH + h * (count));
+ textAlign(RIGHT);
+ //int n1 = row.getInt(9) - row.getInt(10) - row.getInt(12) + row.getInt(13);
+ //text(printData(str(n1)), tabloW[13] - shift + tablo[0], tablo[1] + otH + h * (count));
+ //int n = row.getInt(9) - row.getInt(12) + row.getInt(17) / 2;
+ //text(printData(str(n)), tabloW[14] - shift + tablo[0], tablo[1] + otH + h * (count));
+ int chist = int(row.getInt(9) - row.getInt(12) - (row.getInt(9) - row.getInt(12)) / 100.0 *
+ row.getInt(7) - row.getInt(15) + row.getInt(17) / 2);
+ text(printData(str(int(chist))), tabloW[15] - shift + tablo[0], tablo[1] + otH + h * (count));
+ int sum = chist * row.getInt(6) / 1000;
+ text(printData(str(sum)), tabloW[16] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(row.getString(11), tabloW[17] - shift + tablo[0], tablo[1] + otH + h * (count));
+
+ int sum1 = chist * row.getInt(6) / 1000 - row.getInt(14);
+ text(printData(str(sum1)), tabloW[13] - shift + tablo[0], tablo[1] + otH + h * (count));
+
+ //sumN1 += n1;
+ //sumN += n;
+ sumChist += chist;
+ sumArenda += row.getInt(14);
+ sumDopSor += row.getInt(15);
+ sumSum += sum;
+
+ count++;
+ }
+
+ //String[] kamazy = loadStrings(filePath1 + "kamazy.txt");
+ //println("File 'kamazy.txt' found !");
+ //int sumKamazy = 0;
+ //int sumKamEach = 0;
+ //for (int k = 0; k < kamazy.length; ++k) {
+ // for (TableRow row : table.findRows(kamazy[k], "nomer")) {
+ // sumKamEach += row.getInt(9) - row.getInt(12) - int((row.getInt(9) -
+ // row.getInt(12)) / 100.0 * row.getInt(7)) - row.getInt(15) + row.getInt(17);
+ // }
+ // sumKamazy += sumKamEach;
+ // sumKamEach = 0;
+ //}
+
+
+ fill(#FFF0F5);
+ rect(tablo[0] + tabloW[0], tablo[1] - 30, tabloW[1] - tabloW[0], h + shift);
+ rect(tablo[0] + tabloW[1], tablo[1] - 30, tabloW[2] - tabloW[1], h + shift);
+ rect(tablo[0] + tabloW[2], tablo[1] - 30, tabloW[3] - tabloW[2], h + shift);
+ rect(tablo[0] + tabloW[3], tablo[1] - 30, tabloW[4] - tabloW[3], h + shift);
+ rect(tablo[0] + tabloW[4], tablo[1] - 30, tabloW[5] - tabloW[4], h + shift);
+ rect(tablo[0] + tabloW[5], tablo[1] - 30, tabloW[6] - tabloW[5], h + shift);
+ rect(tablo[0] + tabloW[6], tablo[1] - 30, tabloW[7] - tabloW[6], h + shift);
+ rect(tablo[0] + tabloW[7], tablo[1] - 30, tabloW[8] - tabloW[7], h + shift);
+ rect(tablo[0] + tabloW[8], tablo[1] - 30, tabloW[9] - tabloW[8], h + shift);
+ rect(tablo[0] + tabloW[9], tablo[1] - 30, tabloW[10] - tabloW[9], h + shift);
+ rect(tablo[0] + tabloW[10], tablo[1] - 30, tabloW[11] - tabloW[10], h + shift);
+ rect(tablo[0] + tabloW[11], tablo[1] - 30, tabloW[12] - tabloW[11], h + shift);
+ rect(tablo[0] + tabloW[12], tablo[1] - 30, tabloW[13] - tabloW[12], h + shift);
+ rect(tablo[0] + tabloW[13], tablo[1] - 30, tabloW[14] - tabloW[13], h + shift);
+ rect(tablo[0] + tabloW[14], tablo[1] - 30, tabloW[15] - tabloW[14], h + shift);
+ rect(tablo[0] + tabloW[15], tablo[1] - 30, tabloW[16] - tabloW[15], h + shift);
+ rect(tablo[0] + tabloW[16], tablo[1] - 30, tablo[2] - tabloW[16], h + shift);
+ textSize(14);
+
+ //rect(tablo[0] + tabloW[8], tablo[1] + h * count, tabloW[9] - tabloW[8], h * 2);
+ rect(tablo[0] + tabloW[9], tablo[1] + h * count, tabloW[10] - tabloW[9], h * 2);
+ rect(tablo[0] + tabloW[10], tablo[1] + h * count, tabloW[11] - tabloW[10], h * 2);
+ rect(tablo[0] + tabloW[11], tablo[1] + h * count, tabloW[12] - tabloW[11], h * 2);
+ rect(tablo[0] + tabloW[12], tablo[1] + h * count, tabloW[13] - tabloW[12], h * 2);
+ rect(tablo[0] + tabloW[13], tablo[1] + h * count, tabloW[14] - tabloW[13], h * 2);
+ rect(tablo[0] + tabloW[14], tablo[1] + h * count, tabloW[15] - tabloW[14], h * 2);
+ rect(tablo[0] + tabloW[15], tablo[1] + h * count, tabloW[16] - tabloW[15], h * 2);
+ rect(tablo[0] + tabloW[16], tablo[1] + h * count, tablo[2] - tabloW[16], h * 2);
+
+ fill(0);
+ rect(tabloW[17] - 30, tablo[1] + tablo[3] - 8, 30, 20);
+
+ fill(0);
+ textSize(14);
+ textAlign(LEFT);
+ text("№", tabloW[0] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("Номер", tabloW[1] + tablo[0] + shift + 15, tablo[1] - otH);
+ text("Клиент", tabloW[2] + tablo[0] + shift + 30, tablo[1] - otH);
+ text("Цена", tabloW[3] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("%", tabloW[4] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("Вес 1", tabloW[5] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("z21", tabloW[6] + tablo[0] + shift + 10, tablo[1] - otH);
+ text("Вес 2", tabloW[7] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("z22", tabloW[8] + tablo[0] + shift + 10, tablo[1] - otH);
+ text("Камаз", tabloW[9] + tablo[0] + shift, tablo[1] - otH);
+ text("ДС", tabloW[10] + tablo[0] + shift + 8, tablo[1] - otH);
+ text("Объект", tabloW[11] + tablo[0] + shift + 60, tablo[1] - otH);
+ text("К выдаче", tabloW[12] + tablo[0] + shift, tablo[1] - otH);
+ //text("H1", tabloW[12] + tablo[0] + shift * 3, tablo[1] - otH);
+ //text("Н", tabloW[13] + tablo[0] + shift * 3, tablo[1] - otH);
+ text("Чистый", tabloW[14] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("Сумма", tabloW[15] + tablo[0] + shift + 10, tablo[1] - otH);
+ text("Время 2", tabloW[16] + tablo[0] + shift + 5, tablo[1] - otH);
+
+ textAlign(RIGHT);
+ //text("" + workNumber(sumKamazy / 1000.0), tabloW[9] + shift - 5, tablo[1] + h * count + 25);
+ text("" + workNumber(sumArenda / 1000.0), tabloW[10] + shift - 5, tablo[1] + h * count + 25);
+ text("" + workNumber(sumDopSor / 1000.0), tabloW[11] + shift - 5, tablo[1] + h * count + 25);
+ textAlign(LEFT);
+ //float w = workNumber((sumN1 - sumChist) / float(sumN1) * 10000 / 100.0);
+ //float w1 = workNumber((sumN - sumChist - sumDopSor) / float(sumN) * 100);
+ //text(" " + w1 + " / " + workNumber((sumN1 - sumN) / 1000.0) + " / " + w, tabloW[11] +
+ //shift * 2, tablo[1] + h * count + 25);
+ textAlign(RIGHT);
+ //text("" + (sumN1) / 1000.0, tabloW[13] + shift - 5, tablo[1] + h * count + 25);
+ //text("" + (sumN) / 1000.0, tabloW[14] + shift - 5, tablo[1] + h * count + 25);
+ text("" + int(sumChist / 1000.0 * 100) / 100.0, tabloW[15] + shift - 5, tablo[1] + h * count + 25);
+ text("" + int(sumSum / 1000.0 * 100) / 100.0, tabloW[16] + shift - 5, tablo[1] + h * count + 25);
+ text("" + printData(str(int(float(sumSum) / sumChist * 1000))), tabloW[17] - 10, tablo[1] + h * count + 25);
+
+ if (select != 0) {
+ fill(#F0FFF0);
+ if (selectDataEdit == 1) fill(#1E90FF);
+ rect(tablo[0] + tabloW[1], s, tabloW[0] - tabloW[1], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 4) fill(#1E90FF);
+ rect(tablo[0] + tabloW[2], s, tabloW[3] - tabloW[2], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 6) fill(#1E90FF);
+ rect(tablo[0] + tabloW[3], s, tabloW[4] - tabloW[3], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 7) fill(#1E90FF);
+ rect(tablo[0] + tabloW[4], s, tabloW[5] - tabloW[4], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 14) fill(#1E90FF);
+ rect(tablo[0] + tabloW[9], s, tabloW[10] - tabloW[9], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 15) fill(#1E90FF);
+ rect(tablo[0] + tabloW[10], s, tabloW[11] - tabloW[10], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 5) fill(#1E90FF);
+ rect(tablo[0] + tabloW[11], s, tabloW[12] - tabloW[11], h + shift);
+
+ fill(#FF3030);
+ rect(tablo[0] + tabloW[13], s, tabloW[16] - tabloW[13], h + shift);
+
+ fill(#FF0000);
+ textSize(14);
+
+ TableRow row = table.getRow(index-1);
+
+ if (selectDataEdit == 4) {
+ text(inputData, tabloW[3] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(4), tabloW[3] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 6) {
+ text(inputData, tabloW[4] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(6), tabloW[4] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 7) {
+ text(inputData, tabloW[5] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(7), tabloW[5] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 14) {
+ text(inputData, tabloW[10] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getInt(14), tabloW[10] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 15) {
+ text(inputData, tabloW[11] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getInt(15), tabloW[11] - shift + tablo[0], s + shift * 2);
+ }
+
+ textAlign(LEFT);
+ if (selectDataEdit == 5) {
+ text(inputData, tabloW[11] + shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(5), tabloW[11] + shift + tablo[0], s + shift * 2);
+ }
+
+ fill(255);
+ text("ОТВЕС", tabloW[13] + shift * 9 + tablo[0], s + shift * 2);
+ }
+
+ millisOld = millis();
+}
+
+//*****************************************************
diff --git a/OLD/Viewer_vesy/data/Custom/source.json b/OLD/Viewer_vesy/data/Custom/source.json
new file mode 100644
index 0000000..6fe2bf2
--- /dev/null
+++ b/OLD/Viewer_vesy/data/Custom/source.json
@@ -0,0 +1,3 @@
+[{
+ "filePath": "data/delete/"
+}] \ No newline at end of file
diff --git a/OLD/Viewer_vesy/data/delete/base.csv b/OLD/Viewer_vesy/data/delete/base.csv
new file mode 100644
index 0000000..5533e8f
--- /dev/null
+++ b/OLD/Viewer_vesy/data/delete/base.csv
@@ -0,0 +1,9 @@
+id_R,date,id,nomer,client,object,price,prots,time1,ves1,cor1,time2,ves2,cor2,arenda,dopsor,note,1/2
+84700,16,1,_с635на790,ниджат,1я ямская,20400,6,16:09:03,26540,-50,16:17:39,14310,20,1500,30,,0
+9100,16,2,о497св790,сафар,,18800,6,16:14:05,2470,-30,16:24:18,2110,0,0,0,,0
+19100,16,3,м497ос97,сафар,,18800,6,16:21:15,6320,-30,16:30:25,3200,20,0,40,,0
+63780,16,4,_е588еа790,шерзод,котельники,19400,6,16:54:23,17490,-40,17:01:20,14410,10,0,20,,0
+15700,16,5,_в934ту199,фазли,,20300,6,16:51:41,4880,-40,17:27:29,3000,10,0,0,,0
+70600,16,6,_к225рс790,эльнур,,19700,6,17:10:33,20260,-50,17:28:59,14990,30,0,70,,0
+67040,16,7,_т743вк790,артур,энтузиастов,20300,6,17:48:26,18800,-40,17:55:52,14490,20,0,250,,0
+71160,16,8,_т065хн790,эльнур,,20000,6,18:35:09,20510,-50,18:43:10,15020,0,0,100,,0
diff --git a/OLD/Viewer_vesy/data/delete/clients.txt b/OLD/Viewer_vesy/data/delete/clients.txt
new file mode 100644
index 0000000..5a1b320
--- /dev/null
+++ b/OLD/Viewer_vesy/data/delete/clients.txt
@@ -0,0 +1,20 @@
+Ниджат
+Курбан
+МосЛом
+Евгений
+Алик ЗиЛ
+Эльвин
+Эльнур
+Молоково
+Эльшат
+Дима
+Саид
+Джалиль
+Мадиор
+Миша
+РТС Женя
+РТС Саша
+Руфат
+Эльчин
+Макс
+Ибрагим \ No newline at end of file
diff --git a/OLD/Viewer_vesy/data/delete/kamazy.txt b/OLD/Viewer_vesy/data/delete/kamazy.txt
new file mode 100644
index 0000000..4813a9b
--- /dev/null
+++ b/OLD/Viewer_vesy/data/delete/kamazy.txt
@@ -0,0 +1,16 @@
+_т706вк790
+_т743вк790
+_т639вк790
+_с644на790
+_к225рс790
+_т065хн790
+_с635на790
+_м220ас790
+_е588еа790
+м597со790
+т490ех177
+о174еа71
+о431ву71
+о580сх71
+н535мт10
+н829вх790 \ No newline at end of file
diff --git a/OLD/Viewer_vesy/data/delete/option.json b/OLD/Viewer_vesy/data/delete/option.json
new file mode 100644
index 0000000..ef6921e
--- /dev/null
+++ b/OLD/Viewer_vesy/data/delete/option.json
@@ -0,0 +1,15 @@
+[{
+ "COMport": 0,
+ "numberScales": 13,
+ "protsUmolch": 6,
+ "filePath": "C:/Users/DZ-KASSA/YandexDisk/_data/",
+ "threshold": 700,
+ "tara": 14200,
+ "stabWeight": 10,
+ "beginIn": 3,
+ "portSpeed": 9600,
+ "scalesOff": "ww000000 kg\n\r",
+ "scalesIn": "ww0",
+ "scalesOut": " kg\n",
+ "numberReport": 1423
+}] \ No newline at end of file
diff --git a/OLD/Viewer_vesy/data/delete/report.txt b/OLD/Viewer_vesy/data/delete/report.txt
new file mode 100644
index 0000000..06091ec
--- /dev/null
+++ b/OLD/Viewer_vesy/data/delete/report.txt
@@ -0,0 +1,37 @@
+
+Всего взвешиваний: 8
+
+Кам / ДС
+1.5 / 0.41
+
+% / з2 / %
+6.01 / 0.44 / 8.29
+
+Н1 / Н
+36.18 / 35.74
+
+Ч / Сум / Средн
+33.18 / 662.83 / 19975
+
+---------------------
+
+_т706вк790 -
+_т743вк790 - 3.8
+_т639вк790 -
+_с644на790 -
+_к225рс790 - 4.88
+_т065хн790 - 5.16
+_с635на790 - 11.47
+_м220ас790 -
+_е588еа790 - 2.88
+---------------------
+Камазы: 28.19 т.
+
+---------------------
+3.8 - 20.3 - артур
+11.47 - 20.4 - ниджат
+3.23 - 18.8 - сафар
+1.77 - 20.3 - фазли
+2.88 - 19.4 - шерзод
+10.05 - 20.0 - эльнур
+
diff --git a/OLD/Viewer_vesy/data/delete/temp.json b/OLD/Viewer_vesy/data/delete/temp.json
new file mode 100644
index 0000000..5aa5872
--- /dev/null
+++ b/OLD/Viewer_vesy/data/delete/temp.json
@@ -0,0 +1,92 @@
+[
+ {
+ "note": "",
+ "dopsor": 0,
+ "ves": 0,
+ "arenda": 0,
+ "prots": 0,
+ "1/2": 0,
+ "price": 0,
+ "client": "",
+ "id": 0,
+ "nomer": "",
+ "time": "",
+ "zas2": 0,
+ "object": ""
+ },
+ {
+ "note": "",
+ "dopsor": 0,
+ "ves": 0,
+ "arenda": 0,
+ "prots": 0,
+ "1/2": 0,
+ "price": 0,
+ "client": "",
+ "id": 1,
+ "nomer": "",
+ "time": "",
+ "zas2": 0,
+ "object": ""
+ },
+ {
+ "note": "",
+ "dopsor": 0,
+ "ves": 0,
+ "arenda": 0,
+ "prots": 0,
+ "1/2": 0,
+ "price": 0,
+ "client": "",
+ "id": 2,
+ "nomer": "",
+ "time": "",
+ "zas2": 0,
+ "object": ""
+ },
+ {
+ "note": "",
+ "dopsor": 0,
+ "ves": 0,
+ "arenda": 0,
+ "prots": 0,
+ "1/2": 0,
+ "price": 0,
+ "client": "",
+ "id": 3,
+ "nomer": "",
+ "time": "",
+ "zas2": 0,
+ "object": ""
+ },
+ {
+ "note": "",
+ "dopsor": 0,
+ "ves": 0,
+ "arenda": 0,
+ "prots": 0,
+ "1/2": 0,
+ "price": 0,
+ "client": "",
+ "id": 4,
+ "nomer": "",
+ "time": "",
+ "zas2": 0,
+ "object": ""
+ },
+ {
+ "note": "",
+ "dopsor": 0,
+ "ves": 0,
+ "arenda": 0,
+ "prots": 0,
+ "1/2": 0,
+ "price": 0,
+ "client": "",
+ "id": 5,
+ "nomer": "",
+ "time": "",
+ "zas2": 0,
+ "object": ""
+ }
+] \ No newline at end of file
diff --git a/OLD/Zasor2 b/OLD/Zasor2
new file mode 160000
+Subproject 900416a6dd8a333fc5136b3852c6bf22ca12833
diff --git a/SOURCE/Viewer_vesy/KeyBoard.pde b/SOURCE/Viewer_vesy/KeyBoard.pde
new file mode 100644
index 0000000..e8b9700
--- /dev/null
+++ b/SOURCE/Viewer_vesy/KeyBoard.pde
@@ -0,0 +1,58 @@
+//*****************************************************
+// Работа с клавиатурой
+
+void keyReleased() {
+ if (key > 31 && key < 127 || key > 1039 && key < 1104) { // ввод данных
+ if (selectDataEdit != 0) {
+ if (inputData.length() < 30) {
+ inputData += key;
+ }
+ }
+ reset();
+ }
+
+ if (key == 8) { // backspase
+ if (inputData.length() >= 1) {
+ inputData = inputData.substring(0, inputData.length() - 1);
+ }
+ reset();
+ }
+
+ if (key == 127) { // стереть все
+ inputData = "";
+ reset();
+ }
+
+ if (key == 13 || key == 10) { // enter или return
+
+ int hCode = table.getInt(index-1, 0);
+ int hCode1 = table.getInt(index-1, 9) * 2 + table.getInt(index-1, 10) * 2 +
+ table.getInt(index-1, 12) * 2 + table.getInt(index-1, 13) * 2 +
+ table.getInt(index-1, 14) * 2 + table.getInt(index-1, 15) * 2;
+ table.setInt(index-1, 0, hCode);
+
+ if (selectDataEdit == 1) {
+ table.setInt(index-1, selectDataEdit - 1, int(inputData.trim()));
+ } else if (selectDataEdit == 14 || selectDataEdit == 15) {
+ table.setInt(index-1, selectDataEdit, int(inputData.trim()));
+ } else {
+ table.setString(index-1, selectDataEdit, inputData.trim());
+ }
+
+ if (hCode == hCode1) {
+ hCode1 = table.getInt(index-1, 9) * 2 + table.getInt(index-1, 10) * 2 +
+ table.getInt(index-1, 12)*2 +
+ table.getInt(index-1, 13)*2 + table.getInt(index-1, 14)*2 +
+ table.getInt(index-1, 15)*2;
+ table.setInt(index-1, 0, hCode1);
+ }
+
+ //saveTable(table, filePath1 + "base.csv");
+ saveTable(table, filePath + "base.csv");
+
+ selectDataEdit = 0;
+ reset();
+ inputData = "";
+ }
+ key = 0;
+}
diff --git a/SOURCE/Viewer_vesy/LoadSetup.pde b/SOURCE/Viewer_vesy/LoadSetup.pde
new file mode 100644
index 0000000..b7c4a49
--- /dev/null
+++ b/SOURCE/Viewer_vesy/LoadSetup.pde
@@ -0,0 +1,32 @@
+//*****************************************************
+// чтение файла настроек и данных
+// все настройки, клиенты, камазы и 1 взвешивания = data/
+
+void loadSetup() {
+ JSONArray values;
+
+ // Считываем путь до папки с настройками из put/sourse.json:
+ try {
+ values = loadJSONArray(put + "source.json"); // = data/ + ... // Ядиск
+ for (int i = 0; i < values.size(); i++) {
+ JSONObject animal = values.getJSONObject(i);
+ filePath = animal.getString("filePath"); // адрес папки с Ядиск
+ println(filePath);
+ }
+ }
+ catch (Exception e) {
+ printFileLog("File 'source.json' - undetected");
+ selectFolder("Select a folder to process:", "folderSelected");
+ while (!flagWork) {
+ delay(100);
+ }
+ }
+
+ values = new JSONArray();
+ JSONObject animal = new JSONObject();
+ animal.setString("filePath", filePath);
+ values.setJSONObject(0, animal);
+ saveJSONArray(values, "data/" + "source.json");
+
+ println("NEXT--->>>");
+}
diff --git a/SOURCE/Viewer_vesy/Mouse.pde b/SOURCE/Viewer_vesy/Mouse.pde
new file mode 100644
index 0000000..0eca4a1
--- /dev/null
+++ b/SOURCE/Viewer_vesy/Mouse.pde
@@ -0,0 +1,96 @@
+//****************************************************
+void mousePressed() {
+ TableRow row = table.getRow(index-1);
+ for (int i = 0; i < count; ++i) { // выбор строки
+ if ((mouseX > tablo[0]) && (mouseX < tablo[0] + tablo[2]) &&
+ (mouseY > tablo[1] + h * i) && (mouseY < tablo[1] + h + h * i)) {
+ select = i + 1;
+ reset();
+ }
+ }
+
+ if ((mouseX > tabloW[0] + shift) && (mouseX < tabloW[1] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 1;
+ inputData = row.getString(0);
+ reset();
+ }
+
+ if ((mouseX > tabloW[2] + shift) && (mouseX < tabloW[3] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 4;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[3] + shift) && (mouseX < tabloW[4] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 6;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[4] + shift) && (mouseX < tabloW[5] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 7;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[9] + shift) && (mouseX < tabloW[10] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 14;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[10] + shift) && (mouseX < tabloW[11] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 15;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[11] + shift) && (mouseX < tabloW[12] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ selectDataEdit = 5;
+ inputData = row.getString(selectDataEdit);
+ reset();
+ }
+
+ if ((mouseX > tabloW[13] + shift) && (mouseX < tabloW[16] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ fill(#FFFF00);
+ rect(tablo[0] + tabloW[13], s, tabloW[16] - tabloW[13], 27);
+ fill(0);
+ text("ОТВЕС", tabloW[13] + shift * 9 + tablo[0], s + 20);
+ }
+
+ if ((mouseX > tabloW[17] - 30) && (mouseX < tabloW[17]) &&
+ (mouseY > tablo[1] + tablo[3] - 8) && (mouseY < tablo[1] + tablo[3] + 12)) {
+ fill(#836FFF);
+ rect(tabloW[17] - 30, tablo[1] + tablo[3] - 8, 30, 20);
+ }
+}
+//****************************************************
+void mouseReleased() {
+ if ((mouseX > tabloW[13] + shift) && (mouseX < tabloW[16] + shift) &&
+ (mouseY > s) && (mouseY < s + 30)) {
+ //selectDataEdit = 0;
+ fill(#FF0000);
+ rect(tablo[0] + tabloW[13], s, tabloW[16] - tabloW[13], 27);
+ fill(255);
+ text("ОТВЕС", tabloW[13] + shift * 9 + tablo[0], s + 20);
+ printOtwes();
+ }
+
+ if ((mouseX > tabloW[17] - 30) && (mouseX < tabloW[17]) &&
+ (mouseY > tablo[1] + tablo[3] - 8) && (mouseY < tablo[1] + tablo[3] + 12)) {
+ fill(0);
+ rect(tabloW[17] - 30, tablo[1] + tablo[3] - 8, 30, 20);
+ select = 0;
+ selectData = 0;
+ selectDataEdit = 0;
+ reset();
+ }
+}
diff --git a/SOURCE/Viewer_vesy/PrintOtwes.pde b/SOURCE/Viewer_vesy/PrintOtwes.pde
new file mode 100644
index 0000000..a707a1e
--- /dev/null
+++ b/SOURCE/Viewer_vesy/PrintOtwes.pde
@@ -0,0 +1,122 @@
+//*****************************************************
+// Печать отвеса
+
+void printOtwes() {
+ int[] wO = {10, 73, 105, 165, 200};
+ int[] hO = {10, 55, 70, 85, 100, 115, 130};
+ String D = "";
+ String M = "";
+ String Y = "";
+ String H = "";
+ String N = "";
+ String S = "";
+ D += (day() < 10) ? "0" + day() : day();
+ M += (month() < 10) ? "0" + month() : month();
+ Y += (year() < 10) ? "0" + year() : year();
+ H += (hour() < 10) ? "0" + hour() : hour();
+ N += (minute() < 10) ? "0" + minute() : minute();
+ S += (second() < 10) ? "0" + second() : second();
+ String time1 = H + N + S;
+
+ TableRow row = table.getRow(index-1);
+
+ PGraphics pdf = createGraphics(210, 297, PDF, otwes +
+ "/" + M + "/" + D + "/" + time1 + "_" + row.getString(3) + ".pdf");
+ pdf.beginDraw();
+ pdf.background(255);
+
+ pdf.rect(wO[0], hO[0], wO[4]-wO[0], hO[1]-hO[0], 5, 5, 0, 0);
+ pdf.rect(wO[0], hO[1], wO[4]-wO[0], hO[2]-hO[1]);
+ pdf.rect(wO[0], hO[2], wO[4]-wO[0], hO[3]-hO[2]);
+ pdf.rect(wO[0], hO[3], wO[4]-wO[0], hO[4]-hO[3]);
+ pdf.rect(wO[0], hO[4], wO[4]-wO[0], hO[5]-hO[4]);
+ pdf.rect(wO[0], hO[5], wO[4]-wO[0], hO[6]-hO[5], 0, 0, 5, 5);
+
+ pdf.line(wO[1], hO[1], wO[1], hO[5]);
+ pdf.line(wO[2], hO[1], wO[2], hO[6]);
+ pdf.line(wO[3], hO[1], wO[3], hO[6]);
+
+ pdf.rect(13, 13, 40, 30, 3);
+ pdf.ellipse(40, 25, 50, 20);
+ pdf.fill(0);
+ pdf.textSize(4);
+ String k = "";
+ if (row.getInt(17) != 0) {
+ k = row.getString(11).substring(0, 5) + " [" + float(row.getString(17)) / 1000 + "]";
+ } else {
+ k = row.getString(11).substring(0, 5);
+ }
+ pdf.text(k, 17, 40);
+ pdf.textSize(6);
+ pdf.text(row.getString(1) + "/1" + M + int(random(101, 999)), 24, 27); // row.getString(2), 28, 27);
+
+ pdf.textSize(7);
+ pdf.text("Дубликат отвеса", 73, 20);
+ pdf.textSize(4);
+ pdf.text("ГосНомер а/м:", 80, 30);
+ pdf.textAlign(RIGHT);
+ pdf.textSize(8);
+ pdf.text(row.getString(3), 190, 30);
+ pdf.textAlign(LEFT);
+ pdf.textSize(4);
+ pdf.text("Сдатчик лома и отходов:", 59, 40);
+ pdf.textSize(8);
+ pdf.textAlign(RIGHT);
+ pdf.text(row.getString(4), 190, 40);
+ pdf.textAlign(LEFT);
+ pdf.textSize(3);
+ pdf.text("Бытовой лом, отходы частного строительства, или прочее..", 15, 50);
+ pdf.textAlign(RIGHT);
+ pdf.textSize(4);
+ pdf.text(row.getString(5), 190, 50);
+
+ pdf.textAlign(RIGHT);
+ pdf.textSize(5);
+ pdf.text("Брутто (т)", 70, 65);
+ pdf.text("Тара (т)", 70, 80);
+ pdf.text("Нетто (чистый вес) (т)", 70, 95);
+ pdf.text("Не принято мусора (кг)", 70, 110);
+ pdf.textAlign(LEFT);
+ pdf.text(row.getString(16), 15, 125);
+ pdf.textAlign(RIGHT);
+ pdf.textSize(6);
+ pdf.text(printData(str(row.getInt(9))), 102, 65);
+ pdf.text(printData(row.getString(12)), 102, 80);
+ //float n = row.getInt(9) - row.getInt(12) + row.getInt(17) / 2;
+ int chist = int(row.getInt(9) - row.getInt(12) - (row.getInt(9) - row.getInt(12)) /
+ 100.0 * row.getInt(7) - row.getInt(15) + row.getInt(17) / 2);
+ pdf.text(printData(str(chist)), 102, 95);
+ pdf.text(printData(row.getString(15)), 100, 110);
+
+ pdf.textAlign(RIGHT);
+ pdf.textSize(5);
+ pdf.text("Цена (руб)", 162, 65);
+ pdf.text("Процент засора (%)", 162, 80);
+ pdf.text("Стоимость (руб)", 162, 95);
+ pdf.text("Аренда КАМАЗ (руб)", 162, 110);
+ pdf.text("ИТОГО к выдаче (руб)", 162, 125);
+ pdf.textSize(6);
+ pdf.text(printData(row.getString(6)), 197, 65);
+ pdf.text(row.getString(7), 195, 80);
+ int sum = int(chist * row.getInt(6) / 1000.0);
+ pdf.text(printData(str(sum)), 197, 95);
+ pdf.text(printData(row.getString(14)), 195, 110);
+ pdf.text(printData(str(int(sum) - int(row.getString(14)))), 197, 125);
+
+ pdf.dispose();
+ pdf.endDraw();
+}
+
+//*****************************************************
+// работа над числом для вывода
+
+float workNumber(float v) {
+ if (int(v * 1000) % 10 >= 5) {
+ v = int(v * 100 + 1) / 100.0;
+ } else {
+ v = int(v * 100) / 100.0;
+ }
+ return v;
+}
+
+//*****************************************************
diff --git a/SOURCE/Viewer_vesy/Viewer_vesy.pde b/SOURCE/Viewer_vesy/Viewer_vesy.pde
new file mode 100644
index 0000000..03a6229
--- /dev/null
+++ b/SOURCE/Viewer_vesy/Viewer_vesy.pde
@@ -0,0 +1,182 @@
+//*******************************************************************
+// Zasor2 - viewer
+// 2021.03.06 - 2025.02.16
+// v. 038
+//*******************************************************************
+import processing.pdf.*;
+
+//String filePath = "data/"; // путь для сохранения копии файла базы
+//String filePath1; // путь для сохранения файла базы (Ядиск)
+String filePathLog = "LogFile.txt";
+String put = "data/"; // путь для сохранения копии файла настроек
+String filePath;
+String otwes = put + "OTWESY/"; // путь для сохранения отвесов
+int count = 0;
+int select = 0;
+int selectData = 0;
+int selectDataEdit = 0;
+int h = 17;
+int w = 80;
+int otH = 13;
+int otW = 10;
+int shift = 10;
+
+boolean flagHighlight = false;
+boolean flagWork = false;
+boolean flagBoss = false;
+boolean flagNext = false;
+
+int[] tablo = {10, 30, 1350, 900};
+int[] tabloW = {0, 40, 135, 270, 335, 370, 435, 500, 565, 630, 690,
+ 745, 955, 1035, 1110, 1185, 1270, tablo[2]};
+
+String[][] data = new String[60][20];
+String inputData = "";
+int numberReport;
+int millisOld = 0;
+
+String time, timeArh, timeMonth, timeDate, timeExc, timeReport;
+
+int index = 0;
+
+int sumN1 = 0;
+int sumN = 0;
+int sumChist = 0;
+int sumArenda = 0;
+int sumDopSor = 0;
+int sumSum = 0;
+
+int rowCount = 0;
+
+int s = tablo[1] + tablo[3] - 11;
+
+Table table;
+PFont myFont;
+
+//*****************************************************
+void settings() {
+ size(tablo[2] + 20, tablo[3] + 60);
+}
+void setup() {
+ //myFont = createFont("Arial", 12, true);
+ //textFont(myFont);
+
+ loadSetup();
+
+ //JSONArray values;
+ //values = loadJSONArray(put + "source.json");
+ //JSONObject animal = values.getJSONObject(0);
+ //filePath = animal.getString("filePath");
+ //println(filePath);
+
+ table = loadTable(filePath + "base.csv");
+ if (table == null) {
+ fill(0);
+ textSize(50);
+ text("File 'base.csv' not found !", 50, 150);
+ }
+}
+//*****************************************************
+void draw() {
+ if (millis() >= millisOld + 1000) {
+ table = loadTable(filePath + "base.csv", "header");
+ if (table.getRowCount() == rowCount) {
+ return;
+ } else {
+ rowCount = table.getRowCount();
+ fill(255);
+ rect(tablo[0], tablo[1], tablo[2], tablo[3]);
+ reset();
+ }
+ }
+}
+
+//*****************************************************
+// выбор папки с файлами:
+void folderSelected(File selection) {
+ if (selection == null) {
+ println("Window was closed or the user hit cancel.");
+ stop();
+ System.exit(1);
+ } else {
+ filePath = selection.getAbsolutePath() + "/";
+ filePath = filePath.replace("\\", "/");
+ println(filePath);
+ flagWork = true;
+ }
+}
+
+//****************************************************
+void reset() {
+ count = 0;
+ sumN1 = 0;
+ sumN = 0;
+ sumChist = 0;
+ sumArenda = 0;
+ sumDopSor = 0;
+ sumSum = 0;
+ visible();
+}
+
+//****************************************************
+String printData(String d) {
+ String d1 = "";
+ if (d.length() == 0 || d.length() == 1) {
+ d1 = "";
+ } else if (d.length() < 2) {
+ d1 = d.substring(d.length() - 1, d.length());
+ } else if (d.length() < 3) {
+ d1 = d.substring(d.length() - 2, d.length());
+ } else if (d.length() < 4) {
+ d1 = d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 5) {
+ d1 = d.substring(d.length() - 4, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 6) {
+ d1 = d.substring(d.length() - 5, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 7) {
+ d1 = d.substring(d.length() - 6, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ } else if (d.length() < 8) {
+ d1 = d.substring(d.length() - 7, d.length() - 6) + "'" + d.substring(d.length() - 6, d.length() - 3) + "'" + d.substring(d.length() - 3, d.length());
+ }
+ return d1;
+}
+
+//*****************************************************
+// вывод времени
+void TimeString() {
+ String D = "";
+ String H = "";
+ String M = "";
+ String S = "";
+ String Y = "";
+ String N = "";
+ Y += year();
+ N += (month() < 10) ? "0" + month() : month();
+ D += (day() < 10) ? "0" + day() : day();
+ H += (hour() < 10) ? "0" + hour() : hour();
+ M += (minute() < 10) ? "0" + minute() : minute();
+ S += (second() < 10) ? "0" + second() : second();
+ time = H + ":" + M + ":" + S;
+ timeArh = H + M + S;
+ timeMonth = N;
+ timeDate = D;
+ timeExc = D + "_" + H + ":" + M + ":" + S;
+ timeReport = Y + N + "_" + D;
+}
+
+//*****************************************************
+// Запись в файл лога:
+void printFileLog(String dataLog) {
+ TimeString();
+
+ String[] lines = {};
+ if (loadStrings(filePathLog) == null) {
+ saveStrings(put + filePathLog, lines);
+ lines = loadStrings(filePathLog);
+ }
+ loadStrings(filePathLog);
+ lines = append(lines, timeReport + "_" + timeArh + " vi " + dataLog);
+ saveStrings(put + filePathLog, lines);
+}
+
+//*****************************************************
diff --git a/SOURCE/Viewer_vesy/Visible.pde b/SOURCE/Viewer_vesy/Visible.pde
new file mode 100644
index 0000000..c245014
--- /dev/null
+++ b/SOURCE/Viewer_vesy/Visible.pde
@@ -0,0 +1,244 @@
+//*****************************************************
+// Отображение на экране
+
+void visible() {
+ fill(255);
+ rect(tablo[0], tablo[1], tablo[2], tablo[3] + 20);
+ for (TableRow row : table.rows()) {
+ if (count == select-1) {
+ index = row.getInt(2);
+ println(index);
+ }
+ fill(#F0FFFF);
+ if (select == count + 1) fill(#00FF00);
+ rect(tablo[0], tablo[1] + h * count, tablo[2], h);
+ rect(tablo[0] + tabloW[1], tablo[1] + h * count, tabloW[2] - tabloW[1], h);
+ rect(tablo[0] + tabloW[2], tablo[1] + h * count, tabloW[3] - tabloW[2], h);
+ rect(tablo[0] + tabloW[3], tablo[1] + h * count, tabloW[4] - tabloW[3], h);
+ rect(tablo[0] + tabloW[4], tablo[1] + h * count, tabloW[5] - tabloW[4], h);
+ rect(tablo[0] + tabloW[5], tablo[1] + h * count, tabloW[6] - tabloW[5], h);
+ rect(tablo[0] + tabloW[6], tablo[1] + h * count, tabloW[7] - tabloW[6], h);
+ rect(tablo[0] + tabloW[7], tablo[1] + h * count, tabloW[8] - tabloW[7], h);
+ rect(tablo[0] + tabloW[8], tablo[1] + h * count, tabloW[9] - tabloW[8], h);
+ rect(tablo[0] + tabloW[9], tablo[1] + h * count, tabloW[10] - tabloW[9], h);
+ rect(tablo[0] + tabloW[10], tablo[1] + h * count, tabloW[11] - tabloW[10], h);
+ rect(tablo[0] + tabloW[11], tablo[1] + h * count, tabloW[12] - tabloW[11], h);
+ rect(tablo[0] + tabloW[12], tablo[1] + h * count, tabloW[13] - tabloW[12], h);
+ rect(tablo[0] + tabloW[13], tablo[1] + h * count, tabloW[14] - tabloW[13], h);
+ rect(tablo[0] + tabloW[14], tablo[1] + h * count, tabloW[15] - tabloW[14], h);
+ rect(tablo[0] + tabloW[15], tablo[1] + h * count, tabloW[16] - tabloW[15], h);
+ rect(tablo[0] + tabloW[16], tablo[1] + h * count, tablo[2] - tabloW[16], h);
+
+ fill(0);
+ int hCode = row.getInt(0);
+ int hCode1 = row.getInt(9)*2 + row.getInt(10)*2 + row.getInt(12)*2 +
+ row.getInt(13)*2 + row.getInt(14)*2 + row.getInt(15)*2;
+ println(hCode + " - " + hCode1);
+ if (hCode != hCode1) fill(#FF0000);
+ textSize(11);
+ textAlign(RIGHT);
+ text(count + 1, tablo[1] + shift, tablo[1] + otH + h * (count));
+ text(row.getString(3), tabloW[2] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(row.getString(4), tabloW[3] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(printData(row.getString(6)), tabloW[4] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(row.getString(7), tabloW[5] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(printData(str(row.getInt(9))), tabloW[6] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String q = (row.getInt(10) == 0) ? "" : row.getString(10);
+ text(q, tabloW[7] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(printData(row.getString(12)), tabloW[8] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String w = (row.getInt(13) == 0) ? "" : row.getString(13);
+ text(w, tabloW[9] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String e = (row.getInt(14) == 0) ? "" : row.getString(14);
+ text(printData(e), tabloW[10] - shift + tablo[0], tablo[1] + otH + h * (count));
+ String r = (row.getInt(15) == 0) ? "" : row.getString(15);
+ text(printData(r), tabloW[11] - shift + tablo[0], tablo[1] + otH + h * (count));
+ textAlign(LEFT);
+ String g;
+ if (row.getInt(17) != 0) {
+ g = "[" + row.getFloat(17) / 1000 + "] ";
+ } else {
+ g = "";
+ }
+ text(g + row.getString(5), tabloW[11] + shift + tablo[0], tablo[1] + otH + h * (count));
+ textAlign(RIGHT);
+ //int n1 = row.getInt(9) - row.getInt(10) - row.getInt(12) + row.getInt(13);
+ //text(printData(str(n1)), tabloW[13] - shift + tablo[0], tablo[1] + otH + h * (count));
+ //int n = row.getInt(9) - row.getInt(12) + row.getInt(17) / 2;
+ //text(printData(str(n)), tabloW[14] - shift + tablo[0], tablo[1] + otH + h * (count));
+ int chist = int(row.getInt(9) - row.getInt(12) - (row.getInt(9) - row.getInt(12)) / 100.0 *
+ row.getInt(7) - row.getInt(15) + row.getInt(17) / 2);
+ text(printData(str(int(chist))), tabloW[15] - shift + tablo[0], tablo[1] + otH + h * (count));
+ int sum = chist * row.getInt(6) / 1000;
+ text(printData(str(sum)), tabloW[16] - shift + tablo[0], tablo[1] + otH + h * (count));
+ text(row.getString(11), tabloW[17] - shift + tablo[0], tablo[1] + otH + h * (count));
+
+ int sum1 = chist * row.getInt(6) / 1000 - row.getInt(14);
+ text(printData(str(sum1)), tabloW[13] - shift + tablo[0], tablo[1] + otH + h * (count));
+
+ //sumN1 += n1;
+ //sumN += n;
+ sumChist += chist;
+ sumArenda += row.getInt(14);
+ sumDopSor += row.getInt(15);
+ sumSum += sum;
+
+ count++;
+ }
+
+ //String[] kamazy = loadStrings(filePath1 + "kamazy.txt");
+ //println("File 'kamazy.txt' found !");
+ //int sumKamazy = 0;
+ //int sumKamEach = 0;
+ //for (int k = 0; k < kamazy.length; ++k) {
+ // for (TableRow row : table.findRows(kamazy[k], "nomer")) {
+ // sumKamEach += row.getInt(9) - row.getInt(12) - int((row.getInt(9) -
+ // row.getInt(12)) / 100.0 * row.getInt(7)) - row.getInt(15) + row.getInt(17);
+ // }
+ // sumKamazy += sumKamEach;
+ // sumKamEach = 0;
+ //}
+
+
+ fill(#FFF0F5);
+ rect(tablo[0] + tabloW[0], tablo[1] - 30, tabloW[1] - tabloW[0], h + shift);
+ rect(tablo[0] + tabloW[1], tablo[1] - 30, tabloW[2] - tabloW[1], h + shift);
+ rect(tablo[0] + tabloW[2], tablo[1] - 30, tabloW[3] - tabloW[2], h + shift);
+ rect(tablo[0] + tabloW[3], tablo[1] - 30, tabloW[4] - tabloW[3], h + shift);
+ rect(tablo[0] + tabloW[4], tablo[1] - 30, tabloW[5] - tabloW[4], h + shift);
+ rect(tablo[0] + tabloW[5], tablo[1] - 30, tabloW[6] - tabloW[5], h + shift);
+ rect(tablo[0] + tabloW[6], tablo[1] - 30, tabloW[7] - tabloW[6], h + shift);
+ rect(tablo[0] + tabloW[7], tablo[1] - 30, tabloW[8] - tabloW[7], h + shift);
+ rect(tablo[0] + tabloW[8], tablo[1] - 30, tabloW[9] - tabloW[8], h + shift);
+ rect(tablo[0] + tabloW[9], tablo[1] - 30, tabloW[10] - tabloW[9], h + shift);
+ rect(tablo[0] + tabloW[10], tablo[1] - 30, tabloW[11] - tabloW[10], h + shift);
+ rect(tablo[0] + tabloW[11], tablo[1] - 30, tabloW[12] - tabloW[11], h + shift);
+ rect(tablo[0] + tabloW[12], tablo[1] - 30, tabloW[13] - tabloW[12], h + shift);
+ rect(tablo[0] + tabloW[13], tablo[1] - 30, tabloW[14] - tabloW[13], h + shift);
+ rect(tablo[0] + tabloW[14], tablo[1] - 30, tabloW[15] - tabloW[14], h + shift);
+ rect(tablo[0] + tabloW[15], tablo[1] - 30, tabloW[16] - tabloW[15], h + shift);
+ rect(tablo[0] + tabloW[16], tablo[1] - 30, tablo[2] - tabloW[16], h + shift);
+ textSize(14);
+
+ //rect(tablo[0] + tabloW[8], tablo[1] + h * count, tabloW[9] - tabloW[8], h * 2);
+ rect(tablo[0] + tabloW[9], tablo[1] + h * count, tabloW[10] - tabloW[9], h * 2);
+ rect(tablo[0] + tabloW[10], tablo[1] + h * count, tabloW[11] - tabloW[10], h * 2);
+ rect(tablo[0] + tabloW[11], tablo[1] + h * count, tabloW[12] - tabloW[11], h * 2);
+ rect(tablo[0] + tabloW[12], tablo[1] + h * count, tabloW[13] - tabloW[12], h * 2);
+ rect(tablo[0] + tabloW[13], tablo[1] + h * count, tabloW[14] - tabloW[13], h * 2);
+ rect(tablo[0] + tabloW[14], tablo[1] + h * count, tabloW[15] - tabloW[14], h * 2);
+ rect(tablo[0] + tabloW[15], tablo[1] + h * count, tabloW[16] - tabloW[15], h * 2);
+ rect(tablo[0] + tabloW[16], tablo[1] + h * count, tablo[2] - tabloW[16], h * 2);
+
+ fill(0);
+ rect(tabloW[17] - 30, tablo[1] + tablo[3] - 8, 30, 20);
+
+ fill(0);
+ textSize(14);
+ textAlign(LEFT);
+ text("№", tabloW[0] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("Номер", tabloW[1] + tablo[0] + shift + 15, tablo[1] - otH);
+ text("Клиент", tabloW[2] + tablo[0] + shift + 30, tablo[1] - otH);
+ text("Цена", tabloW[3] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("%", tabloW[4] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("Вес 1", tabloW[5] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("z21", tabloW[6] + tablo[0] + shift + 10, tablo[1] - otH);
+ text("Вес 2", tabloW[7] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("z22", tabloW[8] + tablo[0] + shift + 10, tablo[1] - otH);
+ text("Камаз", tabloW[9] + tablo[0] + shift, tablo[1] - otH);
+ text("ДС", tabloW[10] + tablo[0] + shift + 8, tablo[1] - otH);
+ text("Объект", tabloW[11] + tablo[0] + shift + 60, tablo[1] - otH);
+ text("К выдаче", tabloW[12] + tablo[0] + shift, tablo[1] - otH);
+ //text("H1", tabloW[12] + tablo[0] + shift * 3, tablo[1] - otH);
+ //text("Н", tabloW[13] + tablo[0] + shift * 3, tablo[1] - otH);
+ text("Чистый", tabloW[14] + tablo[0] + shift + 5, tablo[1] - otH);
+ text("Сумма", tabloW[15] + tablo[0] + shift + 10, tablo[1] - otH);
+ text("Время 2", tabloW[16] + tablo[0] + shift + 5, tablo[1] - otH);
+
+ textAlign(RIGHT);
+ //text("" + workNumber(sumKamazy / 1000.0), tabloW[9] + shift - 5, tablo[1] + h * count + 25);
+ text("" + workNumber(sumArenda / 1000.0), tabloW[10] + shift - 5, tablo[1] + h * count + 25);
+ text("" + workNumber(sumDopSor / 1000.0), tabloW[11] + shift - 5, tablo[1] + h * count + 25);
+ textAlign(LEFT);
+ //float w = workNumber((sumN1 - sumChist) / float(sumN1) * 10000 / 100.0);
+ //float w1 = workNumber((sumN - sumChist - sumDopSor) / float(sumN) * 100);
+ //text(" " + w1 + " / " + workNumber((sumN1 - sumN) / 1000.0) + " / " + w, tabloW[11] +
+ //shift * 2, tablo[1] + h * count + 25);
+ textAlign(RIGHT);
+ //text("" + (sumN1) / 1000.0, tabloW[13] + shift - 5, tablo[1] + h * count + 25);
+ //text("" + (sumN) / 1000.0, tabloW[14] + shift - 5, tablo[1] + h * count + 25);
+ text("" + int(sumChist / 1000.0 * 100) / 100.0, tabloW[15] + shift - 5, tablo[1] + h * count + 25);
+ text("" + int(sumSum / 1000.0 * 100) / 100.0, tabloW[16] + shift - 5, tablo[1] + h * count + 25);
+ text("" + printData(str(int(float(sumSum) / sumChist * 1000))), tabloW[17] - 10, tablo[1] + h * count + 25);
+
+ if (select != 0) {
+ fill(#F0FFF0);
+ if (selectDataEdit == 1) fill(#1E90FF);
+ rect(tablo[0] + tabloW[1], s, tabloW[0] - tabloW[1], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 4) fill(#1E90FF);
+ rect(tablo[0] + tabloW[2], s, tabloW[3] - tabloW[2], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 6) fill(#1E90FF);
+ rect(tablo[0] + tabloW[3], s, tabloW[4] - tabloW[3], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 7) fill(#1E90FF);
+ rect(tablo[0] + tabloW[4], s, tabloW[5] - tabloW[4], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 14) fill(#1E90FF);
+ rect(tablo[0] + tabloW[9], s, tabloW[10] - tabloW[9], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 15) fill(#1E90FF);
+ rect(tablo[0] + tabloW[10], s, tabloW[11] - tabloW[10], h + shift);
+ fill(#F0FFF0);
+ if (selectDataEdit == 5) fill(#1E90FF);
+ rect(tablo[0] + tabloW[11], s, tabloW[12] - tabloW[11], h + shift);
+
+ fill(#FF3030);
+ rect(tablo[0] + tabloW[13], s, tabloW[16] - tabloW[13], h + shift);
+
+ fill(#FF0000);
+ textSize(14);
+
+ TableRow row = table.getRow(index-1);
+
+ if (selectDataEdit == 4) {
+ text(inputData, tabloW[3] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(4), tabloW[3] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 6) {
+ text(inputData, tabloW[4] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(6), tabloW[4] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 7) {
+ text(inputData, tabloW[5] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(7), tabloW[5] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 14) {
+ text(inputData, tabloW[10] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getInt(14), tabloW[10] - shift + tablo[0], s + shift * 2);
+ }
+ if (selectDataEdit == 15) {
+ text(inputData, tabloW[11] - shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getInt(15), tabloW[11] - shift + tablo[0], s + shift * 2);
+ }
+
+ textAlign(LEFT);
+ if (selectDataEdit == 5) {
+ text(inputData, tabloW[11] + shift + tablo[0], s + shift * 2);
+ } else {
+ text(row.getString(5), tabloW[11] + shift + tablo[0], s + shift * 2);
+ }
+
+ fill(255);
+ text("ОТВЕС", tabloW[13] + shift * 9 + tablo[0], s + shift * 2);
+ }
+
+ millisOld = millis();
+}
+
+//*****************************************************
diff --git a/SOURCE/Zasor2/KeyBoard.pde b/SOURCE/Zasor2/KeyBoard.pde
new file mode 100644
index 0000000..4db56fa
--- /dev/null
+++ b/SOURCE/Zasor2/KeyBoard.pde
@@ -0,0 +1,197 @@
+//*****************************************************
+// данные с клавиатуры (нажатие)
+void keyPressed() {
+ if (key == CODED) {
+
+ if (keyCode == 122 && flagStab && data != 0) {
+ TimeString();
+ input = 1;
+ inData[0] = "";
+ inData[0] += dataTablo;
+ inData[10] = time;
+ }
+
+ if (keyCode == 123 && inData[0] != "" && inData[1] != "" && inData[2] != ""
+ && inData[3] != "" && int(inData[5]) != 0) {
+ input = 2;
+ if (vis == 0) {
+ saveData1();
+ } else {
+ saveData2();
+ }
+ inputData = "";
+ dataClear();
+ }
+
+ if (keyCode == 112) {
+ input = 3;
+ }
+ }
+ key = 0;
+}
+//*****************************************************
+// данные с клавиатуры (отпускание)
+void keyReleased() {
+ // Рабочий режим (work):
+ if (key == 'W' || key == 'Ц') {
+ flagOpen = true;
+ key = 0;
+ }
+
+ if (key == 'R' || key == 'К') {
+ flagConfirm = true;
+ }
+
+ if (key == 'L' || key == 'Д') {
+ if (flagConfirm) {
+ numberReport++;
+ writeSetup();
+ dataSaveReport();
+ flagOpen = false;
+ key = 0;
+ flagConfirm = false;
+ }
+ }
+
+ if (key == 'Y' || key == 'Н' || key == 'y' || key == 'н') {
+ flagConfirm = false;
+ }
+
+ if (vis != 0 && (key == 'D' || key == 'В')) {
+ for (int i = 0; i < m2; ++i) {
+ inData[i] = "";
+ dataM1[vis - 1][i] = "";
+ }
+ dataSave2next();
+ key = 0;
+ }
+
+ if (key == CODED) {
+
+ if (keyCode == DOWN) {
+ workInputData();
+ if (!flagMenu) {
+ place++;
+ if (place == 10) place = 9;
+ } else {
+ visMenu++;
+ if (place == 2) {
+ if (visMenu >= kamazy.length) visMenu = kamazy.length - 1;
+ }
+ if (place == 3) {
+ if (visMenu >= clients.length) visMenu = clients.length - 1;
+ }
+ }
+ inputData = inData[place];
+ }
+
+ if (keyCode == UP) {
+ workInputData();
+ if (!flagMenu) {
+ place--;
+ if (place <= 0) place = 1;
+ } else {
+ visMenu--;
+ if (visMenu < 0) visMenu = 0;
+ }
+ inputData = inData[place];
+ }
+
+ if (keyCode == LEFT) {
+ workInputData();
+ if (!flagMenu) {
+ place -= 4;
+ if (place <= 0) place = 1;
+ } else {
+ visMenu -= 4;
+ if (visMenu <= 0) visMenu = 0;
+ }
+ inputData = inData[place];
+ }
+
+ if (keyCode == RIGHT) {
+ workInputData();
+ if (!flagMenu && (place == 2 || place == 3)) {
+ flagMenu = true;
+ visMenu = -4;
+ }
+ if (!flagMenu) {
+ place += 4;
+ if (place >= 9) place = 9;
+ } else {
+ visMenu += 4;
+ if (place == 2) {
+ if (visMenu >= kamazy.length - 1) visMenu = kamazy.length - 1;
+ }
+ if (place == 3) {
+ if (visMenu >= clients.length - 1) visMenu = clients.length - 1;
+ }
+ }
+ inputData = inData[place];
+ }
+
+ if (keyCode == 122 &&
+ flagStab && data != 0) { // F11 - взвесить
+ input = 0;
+ }
+
+ if (keyCode == 123) { // F12 - ок
+ input = 0;
+ }
+
+ if (keyCode == 112) { // F1 - очистить
+ input = 3;
+ dataClear();
+ input = 0;
+ vis = 0;
+ inData[1] = "";
+ }
+
+ key = 0;
+ }
+
+ if (key > 31) { // ввод данных
+ if (place != 0) {
+ if (inputData.length() < 30) {
+ inputData += key;
+ }
+ }
+ flagMenu = false;
+ }
+
+ if (key == 8) { // backspase
+ flagMenu = false;
+ if (inputData.length() >= 1) {
+ inputData = inputData.substring(0, inputData.length() - 1);
+ }
+ }
+
+ if (key == 127) { // стереть все
+ inputData = "";
+ flagMenu = false;
+ }
+
+ if (key == 13 || key == 10) { // enter или return
+ workInputData();
+ if (flagMenu && place == 2 && vis == 0) {
+ inData[2] = kamazy[visMenu];
+ }
+ if (flagMenu && place == 3 && vis == 0) {
+ inData[3] = clients[visMenu];
+ }
+ place++;
+ if (place < 11) {
+ inputData = inData[place];
+ } else {
+ place = 0;
+ }
+ flagMenu = false;
+ }
+
+ if (key == 9) { // вкл/выкл табло
+ println(vOff);
+ myPort.write(vOff);
+ flagTablo = !flagTablo;
+ place = 0;
+ }
+}
diff --git a/SOURCE/Zasor2/LoadSetup.pde b/SOURCE/Zasor2/LoadSetup.pde
new file mode 100644
index 0000000..4fece46
--- /dev/null
+++ b/SOURCE/Zasor2/LoadSetup.pde
@@ -0,0 +1,99 @@
+//*****************************************************
+// чтение файла настроек и данных
+// все настройки, клиенты, камазы и 1 взвешивания = data/
+
+void loadSetup() {
+ JSONArray values;
+
+ // Считываем путь до папки с настройками из put/sourse.json:
+ try {
+ values = loadJSONArray(put + "source.json"); // = data/ + ... // Ядиск
+ for (int i = 0; i < values.size(); i++) {
+ JSONObject animal = values.getJSONObject(i);
+ filePath = animal.getString("filePath"); // адрес папки с Ядиск
+ println(filePath);
+ }
+ }
+ catch (Exception e) {
+ printFileLog("File 'source.json' - undetected");
+ selectFolder("Select a folder to process:", "folderSelected");
+ while (!flagWork) {
+ delay(100);
+ }
+ }
+
+ values = new JSONArray();
+ JSONObject animal = new JSONObject();
+ animal.setString("filePath", filePath);
+ values.setJSONObject(0, animal);
+ saveJSONArray(values, "data/" + "source.json");
+
+ println("NEXT--->>>");
+
+ try {
+ values = loadJSONArray(filePath + "option.json"); // = data/Custom/ + ...
+ for (int i = 0; i < values.size(); i++) {
+ animal = values.getJSONObject(i);
+ serialPort = animal.getInt("COMport"); // номер COM порта
+ portSpeed = animal.getInt("portSpeed"); // скорость порта (9600)
+ lf = animal.getInt("numberScales"); // кол-во символов в посылке с весов
+ beginIn = animal.getInt("beginIn"); // начало значащих символов посылки
+ vIn = animal.getString("scalesIn"); // начало не значащих символов посылки
+ vOut = animal.getString("scalesOut"); // конец не значащих символов посылки
+ vOff = animal.getString("scalesOff"); // вся посылка полностью
+ //filePath = animal.getString("filePath"); // Ядиск
+ threshold = animal.getInt("threshold"); // нижний порог для обработки з2
+ stab = animal.getInt("stabWeight"); // кол-во весовых посылок для "стабильного" веса
+ tara = animal.getInt("tara"); // минимальная тара камаза для %
+ protsUmolch = animal.getInt("protsUmolch"); // % засора по умолчанию
+ numberReport = animal.getInt("numberReport"); // порядковый номер отчета
+ }
+ }
+ catch (Exception e) {
+ printFileLog("File 'option.json' - undetected");
+ System.exit(1);
+ }
+
+ try {
+ values = loadJSONArray(filePath + "temp.json");
+ for (int i = 0; i < values.size(); ++i) {
+ animal = values.getJSONObject(i);
+ dataM1[animal.getInt("id")][1] = "" + animal.getInt("zas2");
+ dataM1[animal.getInt("id")][2] = animal.getString("nomer");
+ dataM1[animal.getInt("id")][3] = animal.getString("client");
+ dataM1[animal.getInt("id")][4] = animal.getString("object");
+ dataM1[animal.getInt("id")][5] = "" + animal.getInt("price");
+ dataM1[animal.getInt("id")][6] = "" + animal.getInt("prots");
+ dataM1[animal.getInt("id")][7] = "" + animal.getInt("arenda");
+ dataM1[animal.getInt("id")][8] = "" + animal.getInt("dopsor");
+ dataM1[animal.getInt("id")][9] = animal.getString("note");
+ dataM1[animal.getInt("id")][0] = "" + animal.getInt("ves");
+ dataM1[animal.getInt("id")][10] = animal.getString("time");
+ dataM1[animal.getInt("id")][11] = "" + animal.getInt("1/2");
+ }
+ }
+ catch (Exception e) {
+ printFileLog("File 'temp.json' - undetected");
+ System.exit(1);
+ }
+
+ String[] temp;
+ temp = loadStrings(filePath + "kamazy.txt");
+ if (temp == null) {
+ printFileLog("File 'kamazy.txt' - undetected");
+ } else {
+ kamazy = temp;
+ }
+
+ temp = loadStrings(filePath + "clients.txt");
+ if (temp == null) {
+ printFileLog("File 'clients.txt' - undetected");
+ } else {
+ clients = temp;
+ }
+
+ for (int i = 0; i < m2; ++i) {
+ inData[i] = "";
+ }
+ inData[6] = str(protsUmolch);
+}
diff --git a/SOURCE/Zasor2/Mouse.pde b/SOURCE/Zasor2/Mouse.pde
new file mode 100644
index 0000000..2544fba
--- /dev/null
+++ b/SOURCE/Zasor2/Mouse.pde
@@ -0,0 +1,201 @@
+//****************************************************
+void mousePressed() {
+ //---------------
+ if ((mouseX > visClean[0]) && (mouseX < visClean[0] + visClean[2]) &&
+ (mouseY > visClean[1]) && (mouseY < visClean[1] + visClean[3])) {
+ input = 3;
+ dataClear();
+ inData[1] = "";
+ inputData = "";
+ flagProts = false;
+ flagConfirm = false;
+ }
+ //---------------
+ if ((mouseX > visVes[0]) && (mouseX < visVes[0] + visVes[2]) &&
+ (mouseY > visVes[1]) && (mouseY < visVes[1] + visVes[3]) &&
+ flagStab && data != 0) {
+ TimeString();
+ input = 1;
+ inData[0] = "";
+ inData[0] += dataTablo;
+ inData[10] = time;
+ inputData = "";
+ }
+ //---------------
+ if ((mouseX > visOk[0]) && (mouseX < visOk[0] + visOk[2]) &&
+ (mouseY > visOk[1]) && (mouseY < visOk[1] + visOk[3])
+ && inData[0] != "" && inData[1] != "" && inData[2] != "" && inData[3] != ""
+ && int(inData[5]) != 0) {
+ input = 2;
+ if (vis == 0) {
+ saveData1();
+ } else {
+ saveData2();
+ }
+ inputData = "";
+ dataClear();
+ }
+ //---------------
+ if ((mouseX > visZas2[0]+70) && (mouseX < visZas2[0] + visZas2[2] - 75) &&
+ (mouseY > visZas2[1]) && (mouseY < visZas2[1] + visZas2[3])) {
+ workInputData();
+ place = 1;
+ inputData = inData[place];
+ }
+ if ((mouseX > visZas2[2]-60) && (mouseX < visZas2[0] + visZas2[2]) &&
+ (mouseY > visZas2[1]) && (mouseY < visZas2[1] + visZas2[3])) {
+ workInputData();
+ place = 11;
+ inputData = inData[place];
+ }
+ if ((mouseX > visNom[0]+70) && (mouseX < visNom[0] + visNom[2]) &&
+ (mouseY > visNom[1]) && (mouseY < visNom[1] + visNom[3])) {
+ workInputData();
+ place = 2;
+ inputData = inData[place];
+ }
+ if ((mouseX > visCl[0]+70) && (mouseX < visCl[0] + visCl[2]) &&
+ (mouseY > visCl[1]) && (mouseY < visCl[1] + visCl[3])) {
+ workInputData();
+ place = 3;
+ inputData = inData[place];
+ }
+ if ((mouseX > visObj[0]+70) && (mouseX < visObj[0] + visObj[2]) &&
+ (mouseY > visObj[1]) && (mouseY < visObj[1] + visObj[3])) {
+ workInputData();
+ place = 4;
+ inputData = inData[place];
+ }
+ if ((mouseX > visPrice[0]+70) && (mouseX < visPrice[0] + visPrice[2]) &&
+ (mouseY > visPrice[1]) && (mouseY < visPrice[1] + visPrice[3])) {
+ workInputData();
+ place = 5;
+ inputData = inData[place];
+ }
+ if ((mouseX > visProts[0]+70) && (mouseX < visProts[0] + visProts[2]) &&
+ (mouseY > visProts[1]) && (mouseY < visProts[1] + visProts[3])) {
+ workInputData();
+ place = 6;
+ inputData = inData[place];
+ }
+ if ((mouseX > visAren[0]+70) && (mouseX < visAren[0] + visAren[2]) &&
+ (mouseY > visAren[1]) && (mouseY < visAren[1] + visAren[3])) {
+ workInputData();
+ place = 7;
+ inputData = inData[place];
+ }
+ if ((mouseX > visDopS[0]+70) && (mouseX < visDopS[0] + visDopS[2]) &&
+ (mouseY > visDopS[1]) && (mouseY < visDopS[1] + visDopS[3])) {
+ workInputData();
+ place = 8;
+ inputData = inData[place];
+ }
+ if ((mouseX > visDopN[0]+70) && (mouseX < visDopN[0] + visDopN[2]) &&
+ (mouseY > visDopN[1]) && (mouseY < visDopN[1] + visDopN[3])) {
+ workInputData();
+ place = 9;
+ inputData = inData[place];
+ }
+ //---------------
+ if ((mouseX > visVzw1[0]) && (mouseX < visVzw1[0] + visVzw1[2]) &&
+ (mouseY > visVzw1[1]) && (mouseY < visVzw1[1] + visVzw1[3])) {
+ if (int(dataM1[0][0]) == 0) {
+ vis = 0;
+ } else {
+ vis = 1;
+ place = 0;
+ dataIn(vis);
+ flagVzw = true;
+ flagProts = false;
+ }
+ }
+ if ((mouseX > visVzw1[0]) && (mouseX < visVzw1[0] + visVzw1[2]) &&
+ (mouseY > visVzw1[1] + 30) && (mouseY < visVzw1[1] + visVzw1[3] + 30)) {
+ if (int(dataM1[1][0]) == 0) {
+ vis = 0;
+ } else {
+ vis = 2;
+ place = 0;
+ dataIn(vis);
+ flagVzw = true;
+ flagProts = false;
+ }
+ }
+ if ((mouseX > visVzw1[0]) && (mouseX < visVzw1[0] + visVzw1[2]) &&
+ (mouseY > visVzw1[1] + 60) && (mouseY < visVzw1[1] + visVzw1[3] + 60)) {
+ if (int(dataM1[2][0]) == 0) {
+ vis = 0;
+ } else {
+ vis = 3;
+ place = 0;
+ dataIn(vis);
+ flagVzw = true;
+ flagProts = false;
+ }
+ }
+ if ((mouseX > visVzw1[0]) && (mouseX < visVzw1[0] + visVzw1[2]) &&
+ (mouseY > visVzw1[1] + 90) && (mouseY < visVzw1[1] + visVzw1[3] + 90)) {
+ if (int(dataM1[3][0]) == 0) {
+ vis = 0;
+ } else {
+ vis = 4;
+ place = 0;
+ dataIn(vis);
+ flagVzw = true;
+ flagProts = false;
+ }
+ }
+ if ((mouseX > visVzw1[0]) && (mouseX < visVzw1[0] + visVzw1[2]) &&
+ (mouseY > visVzw1[1] + 120) && (mouseY < visVzw1[1] + visVzw1[3] + 120)) {
+ if (int(dataM1[4][0]) == 0) {
+ vis = 0;
+ } else {
+ vis = 5;
+ place = 0;
+ dataIn(vis);
+ flagVzw = true;
+ flagProts = false;
+ }
+ }
+ if ((mouseX > visVzw1[0]) && (mouseX < visVzw1[0] + visVzw1[2]) &&
+ (mouseY > visVzw1[1] + 150) && (mouseY < visVzw1[1] + visVzw1[3] + 150)) {
+ if (int(dataM1[5][0]) == 0) {
+ vis = 0;
+ } else {
+ vis = 6;
+ place = 0;
+ dataIn(vis);
+ flagVzw = true;
+ flagProts = false;
+ }
+ }
+ if ((mouseX > visZas2[0]) && (mouseX < visZas2[0] + visZas2[2] - 150) &&
+ (mouseY > visZas2[1]) && (mouseY < visZas2[1] + visZas2[3])) {
+ flagProts = !flagProts;
+ }
+}
+
+//****************************************************
+void mouseReleased() {
+ if ((mouseX > visTablo[0]) && (mouseX < visTablo[0] + visTablo[2]) &&
+ (mouseY > visTablo[1]) && (mouseY < visTablo[1] + visTablo[3])) {
+ myPort.write(vOff);
+ flagTablo = !flagTablo;
+ //vis = 0;
+ }
+ //---------------
+ if ((mouseX > visClean[0]) && (mouseX < visClean[0] + visClean[2]) &&
+ (mouseY > visClean[1]) && (mouseY < visClean[1] + visClean[3])) {
+ input = 0;
+ vis = 0;
+ inData[1] = "";
+ }
+ if ((mouseX > visVes[0]) && (mouseX < visVes[0] + visVes[2]) &&
+ (mouseY > visVes[1]) && (mouseY < visVes[1] + visVes[3])) {
+ input = 0;
+ }
+ if ((mouseX > visOk[0]) && (mouseX < visOk[0] + visOk[2]) &&
+ (mouseY > visOk[1]) && (mouseY < visOk[1] + visOk[3])) {
+ input = 0;
+ }
+}
diff --git a/SOURCE/Zasor2/OutReport.pde b/SOURCE/Zasor2/OutReport.pde
new file mode 100644
index 0000000..6862e5b
--- /dev/null
+++ b/SOURCE/Zasor2/OutReport.pde
@@ -0,0 +1,133 @@
+// работа над числом для вывода
+
+float workNumber(float v) {
+ if (int(v * 1000) % 10 >= 5) {
+ v = int(v * 100 + 1) / 100.0;
+ } else {
+ v = int(v * 100) / 100.0;
+ }
+ return v;
+}
+
+//*****************************************************
+// Формирование отчета данных
+
+String outReport() {
+ table = loadTable(filePath + "base.csv", "header");
+ String out = "";
+
+ int sumN1 = 0;
+ int sumN = 0;
+ int sumChist = 0;
+ int sumArenda = 0;
+ int sumDopSor = 0;
+ int sumSum = 0;
+
+ String[] arrClients = {};
+ for (TableRow row : table.rows()) {
+ arrClients = append(arrClients, row.getString("client").toLowerCase());
+ int n1 = row.getInt(9) - row.getInt(10) - row.getInt(12) + row.getInt(13);
+ int n = row.getInt(9) - row.getInt(12) + row.getInt(17) / 2;
+ int chist = int(row.getInt(9) - row.getInt(12) - (row.getInt(9) - row.getInt(12)) / 100.0 *
+ row.getInt(7) - row.getInt(15) + row.getInt(17) / 2);
+ int sum = chist * row.getInt(6) / 1000;
+
+ sumN1 += n1;
+ sumN += n;
+ sumChist += chist;
+ sumArenda += row.getInt(14);
+ sumDopSor += row.getInt(15);
+ sumSum += sum;
+ }
+
+ out += "\nВсего взвешиваний: " + table.getRowCount();
+ out += "\n\nКам / ДС\n";
+ out += workNumber(sumArenda / 1000.0) + " / " + workNumber(sumDopSor / 1000.0) + "\n\n";
+ out += "% / з2 / %\n";
+ out += workNumber((sumN - sumChist - sumDopSor) / float(sumN) * 100) + " / ";
+ out += workNumber((sumN1 - sumN) / 1000.0) + " / ";
+ out += workNumber((sumN1 - sumChist) / float(sumN1) * 100) + "\n\n";
+ out += "Н1 / Н\n";
+ out += workNumber(sumN1 / 1000.0) + " / " + workNumber(sumN / 1000.0) + "\n\n";
+ out += "Ч / Сум / Средн\n";
+ out += workNumber(sumChist / 1000.0) + " / " + workNumber(sumSum / 1000.0) + " / ";
+ out += int(workNumber(float(sumSum) / sumChist * 1000)) + "\n\n";
+
+ int sumKamazy = 0;
+ int sumKamEach = 0;
+ //boolean flagTemp = false;
+ out += "---------------------\n\n";
+
+ for (int k = 0; k < kamazy.length; ++k) {
+ //if (kamazy[k].charAt(0) == '_' && !flagTemp) {
+ // out += "\n---------------------\nКамазы: " +
+ // workNumber(sumKamazy / 1000.0) + "т.\n\n";
+ // flagTemp = true;
+ //}
+ for (TableRow row : table.findRows(kamazy[k], "nomer")) {
+ sumKamEach += row.getInt(9) - row.getInt(12) - int((row.getInt(9) -
+ row.getInt(12)) / 100.0 * row.getInt(7)) - row.getInt(15) + row.getInt(17);
+ }
+ String j = "";
+ if (kamazy[k].charAt(0) != '_' && sumKamEach == 0) {
+ out += "";
+ } else {
+ if (sumKamEach != 0) j += workNumber(sumKamEach / 1000.0);
+ out += kamazy[k] + " - " + j + "\n";
+ }
+ if (kamazy[k].charAt(0) == '_') sumKamazy += sumKamEach;
+ sumKamEach = 0;
+ }
+ out += "---------------------\nКамазы: " + workNumber(sumKamazy / 1000.0) + " т.\n";
+ out += "\n---------------------\n";
+
+ String[] arrClientsUnic = {arrClients[0]};
+ int countU = 0;
+ for (int a = 0; a < arrClients.length; ++a) {
+ for (int r = 0; r < arrClientsUnic.length; ++r) {
+ if (arrClients[a].equals(arrClientsUnic[r])) {
+ countU = 0;
+ break;
+ } else {
+ countU++;
+ }
+ }
+ if (countU != 0) arrClientsUnic = append(arrClientsUnic, arrClients[a]);
+ }
+ arrClientsUnic = sort(arrClientsUnic);
+
+ int sumClientEach = 0;
+ int priceClient = 0;
+
+ for (int k = 0; k < arrClientsUnic.length; ++k) {
+ for (TableRow row : table.findRows(arrClientsUnic[k], "client")) {
+ sumClientEach += row.getInt(9) - row.getInt(12) - int((row.getInt(9) -
+ row.getInt(12)) / 100.0 * row.getInt(7)) - row.getInt(15) + row.getInt(17);
+ priceClient = row.getInt(6);
+ }
+ if (sumClientEach == 0) {
+ out += "";
+ } else {
+ out += workNumber(sumClientEach / 1000.0) + " \t- " + priceClient / 1000.0 + "\t- " + arrClientsUnic[k] + "\n";
+ }
+ sumClientEach = 0;
+ }
+ return out;
+}
+
+//*****************************************************
+// Запись в файл лога:
+void printFileLog(String dataLog) {
+ TimeString();
+
+ String[] lines = {};
+ if (loadStrings(filePathLog) == null) {
+ saveStrings(put + filePathLog, lines);
+ lines = loadStrings(filePathLog);
+ }
+ loadStrings(filePathLog);
+ lines = append(lines, timeReport + "_" + timeArh + " z2 " + dataLog);
+ saveStrings(put + filePathLog, lines);
+}
+
+//*****************************************************
diff --git a/SOURCE/Zasor2/Visible.pde b/SOURCE/Zasor2/Visible.pde
new file mode 100644
index 0000000..0d112b7
--- /dev/null
+++ b/SOURCE/Zasor2/Visible.pde
@@ -0,0 +1,381 @@
+// отображение
+// Режим рабочий:
+void visible() {
+ // основной верхний и нижний контур
+ strokeWeight(3);
+ fill(#CFCFCF);
+ rect(4, 3, 394, 338, fillet);
+ rect(4, 348, 394, 188, fillet);
+
+ strokeWeight(1.2);
+ // табло
+ if (!flagTablo) {
+ fill(#00FF7F);
+ rect(visTablo[0], visTablo[1], visTablo[2], visTablo[3], fillet);
+ fill(255, 0, 0);
+ } else {
+ fill(255, 0, 0);
+ rect(visTablo[0], visTablo[1], visTablo[2], visTablo[3], fillet);
+ fill(#00FF7F);
+ }
+ rect(visTablo[0]+4, visTablo[1]+4, visTablo[2]-8, visTablo[3]-8, fillet);
+ fill(0);
+ textSize(50);
+ text(dataTablo, visTablo[0] + 32, visTablo[1] + 58);
+ textSize(12);
+ text(numberReport, visTablo[0] + 10, visTablo[1] + 20);
+ textSize(10);
+ text(data, visTablo[0] + 10, visTablo[1] + 72);
+
+
+ fill(#1E90FF);
+ rect(visVzw[0], visVzw[1], visVzw[2], visVzw[3], fillet + 5);
+ textSize(40);
+ fill(255);
+ text(inData[0], visVzw[0] + 10, visVzw[1] + 50);
+
+ if (place == 1) {
+ fill(255);
+ rect(visZas2[0], visZas2[1], visZas2[2] - 75, visZas2[3], fillet);
+ fill(150, 50, 255);
+ if (flagProts) fill(255, 150, 150);
+ rect(visZas2[0], visZas2[1], visZas2[2] - 150, visZas2[3], fillet);
+ fill(255);
+ rect(visZas2[0] + 3, visZas2[1] + 3, visZas2[2] - 156, visZas2[3] - 6, fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visZas2[0] + 85, visZas2[1] + 21);
+ } else {
+ fill(#FFD700);
+ rect(visZas2[0], visZas2[1], visZas2[2] - 75, visZas2[3], fillet);
+ rect(visZas2[2] - 60, visZas2[1], 70, visZas2[3], fillet);
+ fill(150, 50, 255);
+ if (flagProts) fill(255, 150, 150);
+ rect(visZas2[0], visZas2[1], visZas2[2] - 150, visZas2[3], fillet);
+ fill(#FFD700);
+ rect(visZas2[0] + 3, visZas2[1] + 3, visZas2[2] - 156, visZas2[3] - 6, fillet);
+ fill(0);
+ textSize(16);
+ text(inData[1], visZas2[0] + 85, visZas2[1] + 21);
+ }
+
+ if (place == 11) {
+ fill(255);
+ rect(visZas2[2] - 60, visZas2[1], 70, visZas2[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visZas2[2] - 45, visZas2[1] + 21);
+ } else {
+ fill(#FFD700);
+ rect(visZas2[2] - 60, visZas2[1], 70, visZas2[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[11], visZas2[2] - 45, visZas2[1] + 21);
+ }
+
+ fill(0);
+ textSize(16);
+ String a = (!flagProts) ? "кг" : " %";
+ text(a, visZas2[0] + 27, visZas2[1] + 21);
+
+ if (place == 2) {
+ fill(255);
+ rect(visNom[0], visNom[1], visNom[2], visNom[3], fillet);
+ rect(visNom[0], visNom[1], visNom[2] - 150, visNom[3], fillet);
+ textSize(16);
+ fill(0);
+ textSize(16);
+ text(inputData, visNom[0] + 80, visNom[1] + 21);
+ } else {
+ fill(#FFD700);
+ rect(visNom[0], visNom[1], visNom[2], visNom[3], fillet);
+ rect(visNom[0], visNom[1], visNom[2] - 150, visNom[3], fillet);
+ textSize(16);
+ fill(0);
+ textSize(16);
+ text(inData[2], visNom[0] + 80, visNom[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Номер", visNom[0] + 13, visNom[1] + 21);
+
+ if (place == 3) {
+ fill(255);
+ rect(visCl[0], visCl[1], visCl[2], visCl[3], fillet);
+ rect(visCl[0], visCl[1], visCl[2] - 150, visCl[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visCl[0] + 80, visCl[1] + 21);
+ } else {
+ fill(#DDA0DD);
+ rect(visCl[0], visCl[1], visCl[2], visCl[3], fillet);
+ rect(visCl[0], visCl[1], visCl[2] - 150, visCl[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[3], visCl[0] + 80, visCl[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Клиент", visCl[0] + 9, visCl[1] + 21);
+
+ if (place == 4) {
+ fill(255);
+ rect(visObj[0], visObj[1], visObj[2], visObj[3], fillet);
+ rect(visObj[0], visObj[1], visObj[2] - 150, visObj[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visObj[0] + 80, visObj[1] + 21);
+ } else {
+ fill(#DDA0DD);
+ rect(visObj[0], visObj[1], visObj[2], visObj[3], fillet);
+ rect(visObj[0], visObj[1], visObj[2] - 150, visObj[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[4], visObj[0] + 80, visObj[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Объект", visObj[0] + 9, visObj[1] + 21);
+
+ if (place == 5) {
+ fill(255);
+ rect(visPrice[0], visPrice[1], visPrice[2], visPrice[3], fillet);
+ rect(visPrice[0], visPrice[1], visPrice[2] - 85, visPrice[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visPrice[0] + 85, visPrice[1] + 21);
+ } else {
+ fill(#FFE4C4);
+ rect(visPrice[0], visPrice[1], visPrice[2], visPrice[3], fillet);
+ rect(visPrice[0], visPrice[1], visPrice[2] - 85, visPrice[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[5], visPrice[0] + 85, visPrice[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Цена", visPrice[0] + 16, visPrice[1] + 21);
+
+ if (place == 6) {
+ fill(255);
+ rect(visProts[0], visProts[1], visProts[2], visProts[3], fillet);
+ rect(visProts[0], visProts[1], visProts[2] - 85, visProts[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visProts[0] + 105, visProts[1] + 21);
+ } else {
+ fill(#FFE4C4);
+ rect(visProts[0], visProts[1], visProts[2], visProts[3], fillet);
+ rect(visProts[0], visProts[1], visProts[2] - 85, visProts[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[6], visProts[0] + 105, visProts[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Засор", visProts[0] + 16, visProts[1] + 21);
+
+ if (place == 7) {
+ fill(255);
+ rect(visAren[0], visAren[1], visAren[2], visAren[3], fillet);
+ rect(visAren[0], visAren[1], visAren[2] - 85, visAren[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visAren[0] + 90, visAren[1] + 21);
+ } else {
+ fill(#32CD32);
+ rect(visAren[0], visAren[1], visAren[2], visAren[3], fillet);
+ rect(visAren[0], visAren[1], visAren[2] - 85, visAren[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[7], visAren[0] + 90, visAren[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Аренда", visAren[0] + 9, visAren[1] + 21);
+
+ if (place == 8) {
+ fill(255);
+ rect(visDopS[0], visDopS[1], visDopS[2], visDopS[3], fillet);
+ rect(visDopS[0], visDopS[1], visDopS[2] - 85, visDopS[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visDopS[0] + 95, visDopS[1] + 21);
+ } else {
+ fill(#FF8C69);
+ rect(visDopS[0], visDopS[1], visDopS[2], visDopS[3], fillet);
+ rect(visDopS[0], visDopS[1], visDopS[2] - 85, visDopS[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[8], visDopS[0] + 95, visDopS[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("ДопСор", visDopS[0] + 8, visDopS[1] + 21);
+
+ if (place == 9) {
+ fill(255);
+ rect(visDopN[0], visDopN[1], visDopN[2], visDopN[3], fillet);
+ rect(visDopN[0], visDopN[1], visDopN[2] - 310, visDopN[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inputData, visDopN[0] + 80, visDopN[1] + 21);
+ } else {
+ fill(#FF8C69);
+ rect(visDopN[0], visDopN[1], visDopN[2], visDopN[3], fillet);
+ rect(visDopN[0], visDopN[1], visDopN[2] - 310, visDopN[3], fillet);
+ fill(0);
+ textSize(16);
+ text(inData[9], visDopN[0] + 80, visDopN[1] + 21);
+ }
+ fill(0);
+ textSize(14);
+ text("Прим.", visDopN[0] + 14, visDopN[1] + 21);
+ //--------------------
+ stroke(0);
+ if (input == 3) {
+ fill(0);
+ rect(visClean[0], visClean[1], visClean[2], visClean[3], fillet + 5);
+ rect(visClean[0] + 9, visClean[1] + 9, visClean[2] - 18, visClean[3] - 18, fillet + 5);
+ place = 0;
+ } else {
+ fill(#836FFF);
+ rect(visClean[0], visClean[1], visClean[2], visClean[3], fillet + 5);
+ rect(visClean[0]+3, visClean[1]+3, visClean[2]-3*2, visClean[3]-3*2, fillet + 5);
+ }
+ fill(255);
+ textSize(24);
+ text("C", visClean[0] + 11, visClean[1] + 29);
+
+ stroke(0);
+ if (input == 1) {
+ fill(0);
+ rect(visVes[0] + 6, visVes[1] + 6, visVes[2] - 12, visVes[3] - 12, fillet + 5);
+ rect(visVes[0] + 9, visVes[1] + 9, visVes[2] - 18, visVes[3] - 18, fillet + 5);
+ place = 0;
+ } else {
+ if (flagStab && data != 0) {
+ fill(#228B22);
+ } else {
+ fill(255, 0, 0);
+ }
+ rect(visVes[0], visVes[1], visVes[2], visVes[3], fillet + 5);
+ rect(visVes[0] + 3, visVes[1] + 3, visVes[2] - 6, visVes[3] - 6, fillet + 5);
+ }
+ fill(255);
+ textSize(24);
+ text("Взвесить", visVes[0] + 40, visVes[1] + 28);
+
+ stroke(0);
+ if (input == 2) {
+ fill(0);
+ rect(visOk[0] + 6, visOk[1] + 6, visOk[2] - 12, visOk[3] - 12, fillet + 5);
+ rect(visOk[0] + 9, visOk[1] + 9, visOk[2] - 18, visOk[3] - 18, fillet + 5);
+ place = 0;
+ } else {
+ if (inData[0] != "" && inData[1] != "" && inData[2] != "" && inData[3] != ""
+ && int(inData[5]) != 0) {
+ fill(#54FF9F);
+ } else {
+ fill(#BC8F8F);
+ }
+ rect(visOk[0], visOk[1], visOk[2], visOk[3], fillet + 5);
+ rect(visOk[0] + 3, visOk[1] + 3, visOk[2] - 6, visOk[3] - 6, fillet + 5);
+ }
+ fill(255);
+ textSize(24);
+ text("Oк", visOk[0] + 37, visOk[1] + 28);
+ //--------------------
+ for (int i = 0; i < m1; ++i) {
+ stroke(1);
+ fill(#00BFFF);
+ if (vis - 1 == i) fill(255);
+ rect(visVzw1[0], visVzw1[1] + 30 * i, visVzw1[2], visVzw1[3]);
+ rect(visVzw1[0] + 100, visVzw1[1] + 30 * i, visVzw1[2] - 270, visVzw1[3]);
+ rect(visVzw1[0] + 300, visVzw1[1] + 30 * i, visVzw1[2] - 300, visVzw1[3]);
+ fill(0);
+ textSize(12);
+
+ text(dataM1[i][2], visVzw1[0] + 18, visVzw1[1] + 30 * i + 17);
+ text(dataM1[i][3], visVzw1[0] + 110, visVzw1[1] + 30 * i + 17);
+ if (int(dataM1[i][0]) != 0) {
+ text(dataM1[i][0], visVzw1[0] + 235, visVzw1[1] + 30 * i + 17);
+ } else {
+ text("", visVzw1[0] + 235, visVzw1[1] + 30 * i + 17);
+ }
+ if (int(dataM1[i][1]) != 0) {
+ text(dataM1[i][1], visVzw1[0] + 320, visVzw1[1] + 30 * i + 17);
+ } else {
+ text("", visVzw1[0] + 320, visVzw1[1] + 30 * i + 17);
+ }
+ }
+
+ if (place == 2 && flagMenu) {
+ strokeWeight(3);
+ fill(255);
+ rect(menu[0], menu[1] + 30, menu[2], kamazy.length * offsetMenu, fillet);
+ strokeWeight(1);
+ for (int m = 0; m < kamazy.length; ++m) {
+ fill(0, 255, 0);
+ if (visMenu != m) fill(255);
+ rect(menu[0], menu[1] + offsetMenu * m + 30, menu[2], offsetMenu, fillet);
+ fill(0);
+ textSize(15);
+ text(kamazy[m], menu[0] + 20, menu[1] + offsetMenu * (m + 1) - 7 + 30);
+ }
+ }
+
+ if (place == 3 && flagMenu) {
+ strokeWeight(3);
+ fill(255);
+ rect(menu[0], menu[1] - 8, menu[2], clients.length * offsetMenu, fillet);
+ strokeWeight(1);
+ for (int m = 0; m < clients.length; ++m) {
+ fill(0, 255, 0);
+ if (visMenu != m) fill(255);
+ rect(menu[0], menu[1] + offsetMenu * m - 8, menu[2], offsetMenu, fillet);
+ fill(0);
+ textSize(15);
+ text(clients[m], menu[0] + 15, menu[1] - 8 + offsetMenu * (m + 1) - 7);
+ }
+ }
+
+ if (flagConfirm) {
+ fill(255);
+ strokeWeight(3);
+ fill(84, 255, 159);
+ rect(50, 50, 300, 200, fillet);
+ textSize(25);
+ fill(0);
+ text("Отправить отчет ?", 90, 110);
+ fill(255);
+ rect(210, 145, 45, 35, fillet);
+ rect(210, 195, 45, 35, fillet);
+ fill(0);
+ textSize(20);
+ text("Да - Д", 155, 170);
+ text("Нет - Н", 145, 220);
+ }
+}
+
+//*****************************************************
+void visible2() {
+ if (focused) {
+ fill(0, 255, 0);
+ textSize(125);
+ rect(1, 1, 398, 199);
+ fill(0);
+ text(dataTablo, 3, 150);
+ textSize(22);
+ text("[" + serialPort + "] - " + Serial.list()[serialPort], 10, 500);
+ } else {
+ background(0);
+ fill(0, 0, 255);
+ textSize(125);
+ rect(1, 1, 398, 199);
+ fill(255);
+ text(dataTablo, 3, 150);
+ textSize(22);
+ text("[" + serialPort + "] - " + Serial.list()[serialPort], 10, 500);
+ }
+}
diff --git a/SOURCE/Zasor2/Zasor2.pde b/SOURCE/Zasor2/Zasor2.pde
new file mode 100644
index 0000000..8f5b4e9
--- /dev/null
+++ b/SOURCE/Zasor2/Zasor2.pde
@@ -0,0 +1,483 @@
+//*******************************************************************
+// Zasor2
+// 2020.09.21 - 2025.02.16
+// v. 1067
+//*******************************************************************
+import processing.serial.*;
+
+//PFont myFont;
+
+Serial myPort; // The serial portSerial myPort;
+int lf; // кол-во знаков в посылке с весов
+int serialPort; // порядковый номер Serial порта
+int portSpeed; // скорость Serial порта
+int beginIn; // начало данных в посылке с весов
+String vIn; // начало посылки с весов (текст)
+String vOut; // конец посылки с весов (текст)
+String vOff; // весы выключены (текст)
+String filePath; // путь для сохранения файла
+int threshold; // порог веса
+int stab; // кол-во повторяющихся данных с весов
+int tara; // тара а/м для %
+int protsUmolch; // % по умолчанию
+int numberReport; // номер отчета в году (месяце и тд)
+
+// Переменные:
+int data = 0; // данные с весов
+int dataTemp = 0;
+String time, timeArh, timeMonth, timeDate, timeExc, timeReport;
+String inputData = "";
+boolean flagTablo = false;
+boolean flagProts = false;
+int place = 0;
+int input = 0;
+int stabTemp = 0;
+boolean flagWork = false;
+boolean flagStab = false;
+boolean flagWeight = true;
+boolean flagVzw = false;
+int dataCorProts = 0;
+int dataTablo = 0;
+int onTime = 0;
+int click = 500;
+boolean flagButOn = false;
+
+String put = "data/"; // путь для сохранения файла настроек
+String filePathLog = "LogFile.txt";
+PrintWriter outputCrash; // объект output (для файла)
+
+int fillet = 5; // скругление
+int[] visTablo = {10, 10, 220, 80};
+int[] visVzw = {240, 15, 147, 70};
+
+int[] visZas2 = {10, 110, 220, 30};
+int[] visNom = {10, 145, 220, 30};
+int[] visCl = {10, 180, 220, 30};
+int[] visObj = {10, 215, 220, 30};
+int[] visDopN = {10, 250, 382, 30};
+
+int[] visPrice = {235, 110, 157, 30};
+int[] visProts = {235, 145, 157, 30};
+int[] visAren = {235, 180, 157, 30};
+int[] visDopS = {235, 215, 157, 30};
+
+int[] visClean = {20, 290, 40, 40};
+int[] visVes = {80, 290, 180, 40};
+int[] visOk = {270, 290, 112, 40};
+int[] visVzw1 = {10, 355, 382, 25};
+
+int[] menu = {235, 15, 157, 497};
+int offsetMenu = 25;
+int inputMenu = 0;
+int visMenu = 0;
+boolean flagMenu = false;
+
+boolean flagConfirm = false;
+
+String[] kamazy;
+String[] clients;
+
+int m1 = 6; // кол-во первых взвешиваний
+int m2 = 15; // кол-во данных о первых взвешиваниях (номер, вес, корр)
+String[][] dataM1 = new String[m1][m2];
+String[] dataM2 = new String[m2];
+String[] inData = new String[m2];
+int vis = 0;
+
+Table table;
+boolean flagOpen = false;
+
+//*****************************************************
+void setup() {
+ //myFont = createFont("Arial", 12);
+ //textFont(myFont);
+ printArray(Serial.list());
+ loadSetup();
+ size(403, 542);
+ try {
+ myPort = new Serial(this, Serial.list()[serialPort], portSpeed);
+ myPort.bufferUntil(lf);
+ myPort.write(vOff);
+ }
+ catch (Exception e) {
+ TimeString();
+ String lines = "COMport = " + serialPort + " - does not exist";
+ printFileLog(lines);
+
+ strokeWeight(3);
+ fill(#CFCFCF);
+ rect(4, 3, 394, 338, fillet);
+ rect(4, 348, 394, 188, fillet);
+ fill(255, 0, 0);
+ textSize(24);
+ text("COM ( " + serialPort + " ) НЕ НАЙДЕН !", 60, 158);
+
+ stop();
+ }
+}
+
+//*****************************************************
+void draw() {
+ background(#CFCFCF);
+ if (flagOpen) {
+ visible();
+ if (flagTablo && flagWeight) tabloVisible();
+ } else {
+ visible2();
+ if (flagWeight) tabloVisible();
+ }
+}
+
+//*****************************************************
+// выбор папки с файлами:
+void folderSelected(File selection) {
+ if (selection == null) {
+ println("Window was closed or the user hit cancel.");
+ stop();
+ System.exit(1);
+ } else {
+ filePath = selection.getAbsolutePath() + "/";
+ filePath = filePath.replace("\\", "/");
+ println(filePath);
+ flagWork = true;
+ }
+}
+
+//*****************************************************
+// данные с Serial
+void serialEvent(Serial p) {
+ data = int(p.readString().substring(beginIn, beginIn + 6));
+ if (data != dataTemp) {
+ dataTemp = data;
+ stabTemp = 0;
+ flagStab = false;
+ } else {
+ stabTemp++;
+ if (stabTemp == stab) {
+ flagStab = true;
+ stabTemp = 0;
+ }
+ }
+ if (data > threshold) {
+ if (flagProts && data > tara + 1000) {
+ dataTablo = data + (data - tara) / 100 * int(inData[1]) / 10 * 10;
+ dataCorProts = (data - tara) / 100 * int(inData[1]) / 10 * 10;
+ } else {
+ dataTablo = data + int(inData[1]);
+ dataCorProts = int(inData[1]);
+ }
+ } else {
+ dataTablo = data;
+ }
+ flagWeight = true;
+}
+
+//*****************************************************
+// запись файла настроек
+void writeSetup() {
+ JSONArray values;
+ values = new JSONArray();
+ JSONObject animal = new JSONObject();
+ animal.setInt("COMport", serialPort);
+ animal.setInt("portSpeed", portSpeed);
+ animal.setInt("numberScales", lf);
+ animal.setInt("beginIn", beginIn);
+ animal.setString("scalesIn", vIn);
+ animal.setString("scalesOut", vOut);
+ animal.setString("scalesOff", vOff);
+ animal.setString("filePath", filePath);
+ animal.setInt("threshold", threshold);
+ animal.setInt("stabWeight", stab);
+ animal.setInt("tara", tara);
+ animal.setInt("protsUmolch", protsUmolch);
+ animal.setInt("numberReport", numberReport);
+
+ values.setJSONObject(0, animal);
+ saveJSONArray(values, filePath + "option.json");
+}
+//*****************************************************
+// вывод времени
+void TimeString() {
+ String D = "";
+ String H = "";
+ String M = "";
+ String S = "";
+ String Y = "";
+ String N = "";
+ Y += year();
+ N += (month() < 10) ? "0" + month() : month();
+ D += (day() < 10) ? "0" + day() : day();
+ H += (hour() < 10) ? "0" + hour() : hour();
+ M += (minute() < 10) ? "0" + minute() : minute();
+ S += (second() < 10) ? "0" + second() : second();
+ time = H + ":" + M + ":" + S;
+ timeArh = H + M + S;
+ timeMonth = N;
+ timeDate = D;
+ timeExc = D + "_" + H + ":" + M + ":" + S;
+ timeReport = Y + N + "_" + D;
+}
+
+//****************************************************
+// обработчик inputData
+void workInputData() {
+ if (place == 1 && !flagProts) {
+ inData[1] = "";
+ inData[1] += int(inputData) / 10 * 10;
+ } else
+ if (place == 5) {
+ inData[5] = "";
+ inData[5] += int(inputData) / 100 * 100;
+ } else if (place == 5) {
+ inData[5] = "";
+ inData[5] += int(inputData) / 100 * 100;
+ } else if (place == 6) {
+ inData[6] = "";
+ inData[6] += int(inputData);
+ } else if (place == 7) {
+ inData[7] = "";
+ inData[7] += int(inputData) / 10 * 10;
+ } else if (place == 8) {
+ inData[8] = "";
+ inData[8] += int(inputData) / 10 * 10;
+ } else if (place == 11) {
+ inData[11] = "";
+ inData[11] += int(inputData) / 10 * 10;
+ } else if (place != 0) inData[place] = inputData;
+}
+
+//****************************************************
+//
+void dataIn(int a) {
+ //TimeString();
+ inData[0] = "";
+ //inData[1] = "";
+ inData[2] = dataM1[a-1][2];
+ inData[3] = dataM1[a-1][3];
+ inData[4] = dataM1[a-1][4];
+ inData[5] = dataM1[a-1][5];
+ inData[6] = dataM1[a-1][6];
+ inData[7] = dataM1[a-1][7];
+ inData[8] = dataM1[a-1][8];
+ inData[9] = dataM1[a-1][9];
+ inData[12] = dataM1[a-1][10];
+ inData[11] = dataM1[a-1][11];
+
+ //time = "";
+}
+
+//*****************************************************
+// вывод веса на табло
+void tabloVisible() {
+ String temp = "";
+ temp += vIn + nf(dataTablo, 5) + vOut;
+ myPort.write(temp);
+ flagWeight = false;
+ println(temp + "\t" + int(inData[1]) + "\t" + place + "\t" +
+ inputData + "\t" + numberReport);
+}
+//*****************************************************
+// запись данных 1 взвешивания
+void saveData1() {
+ TimeString();
+ if (vis == 0) {
+ for (int k = m1 - 1; k > 0; --k) {
+ for (int n = 0; n < m2; ++n) {
+ dataM1[k][n] = dataM1[k - 1][n];
+ }
+ }
+ dataM1[0][0] = inData[0];
+ if (flagProts) {
+ dataM1[0][1] = "";
+ dataM1[0][1] += dataCorProts;
+ } else {
+ dataM1[0][1] = inData[1];
+ }
+ dataM1[0][2] = inData[2];
+ dataM1[0][3] = inData[3];
+ dataM1[0][4] = inData[4];
+ dataM1[0][5] = inData[5];
+ dataM1[0][6] = inData[6];
+ dataM1[0][7] = inData[7];
+ dataM1[0][8] = inData[8];
+ dataM1[0][9] = inData[9];
+ dataM1[0][10] = inData[10];
+ dataM1[0][11] = inData[11];
+ vis = 0;
+ place = 0;
+
+ JSONArray values;
+ values = new JSONArray();
+ for (int a = 0; a < m1; ++a) {
+ JSONObject animal = new JSONObject();
+ animal.setInt("id", a);
+ animal.setInt("zas2", int(dataM1[a][1]));
+ animal.setString("nomer", dataM1[a][2]);
+ animal.setString("client", dataM1[a][3]);
+ animal.setString("object", dataM1[a][4]);
+ animal.setInt("price", int(dataM1[a][5]));
+ animal.setInt("prots", int(dataM1[a][6]));
+ animal.setInt("arenda", int(dataM1[a][7]));
+ animal.setInt("dopsor", int(dataM1[a][8]));
+ animal.setString("note", dataM1[a][9]);
+ animal.setInt("ves", int(dataM1[a][0]));
+ animal.setInt("1/2", int(dataM1[a][11]));
+ animal.setString("time", dataM1[a][10]);
+ values.setJSONObject(a, animal);
+ }
+ saveJSONArray(values, filePath + "temp.json");
+ time = "";
+ }
+}
+//****************************************************
+// запись данных 2 взвешивания
+void saveData2() {
+ TimeString();
+
+ dataM2[0] = dataM1[vis-1][0];
+ dataM2[1] = dataM1[vis-1][1];
+ dataM2[2] = inData[2];
+ dataM2[3] = inData[3];
+ dataM2[4] = inData[4];
+ dataM2[5] = inData[5];
+ dataM2[6] = inData[6];
+ dataM2[7] = inData[7];
+ dataM2[8] = inData[8];
+ dataM2[9] = inData[9];
+ dataM2[10] = time; // dataM1[vis-1][10];
+ dataM2[11] = inData[0];
+ dataM2[12] = inData[11];
+
+ if (flagProts) {
+ dataM2[13] = "";
+ dataM2[13] += dataCorProts;
+ } else {
+ dataM2[13] = inData[1];
+ }
+
+ dataSave2next();
+ dataSave2next2();
+}
+//****************************************************
+void dataSave2next() {
+ for (int k = vis-1; k < m1-1; ++k) {
+ for (int n = 0; n < m2; ++n) {
+ dataM1[k][n] = dataM1[k+1][n];
+ }
+ }
+ for (int i = 0; i < m2; ++i) {
+ dataM1[m1-1][i] = "";
+ }
+ vis = 0;
+
+ JSONArray values;
+ values = new JSONArray();
+ for (int a = 0; a < m1; ++a) {
+ JSONObject animal = new JSONObject();
+ //animal.setInt("id_R", numberReport);
+ animal.setInt("id", a);
+ animal.setInt("zas2", int(dataM1[a][1]));
+ animal.setString("nomer", dataM1[a][2]);
+ animal.setString("client", dataM1[a][3]);
+ animal.setString("object", dataM1[a][4]);
+ animal.setInt("price", int(dataM1[a][5]));
+ animal.setInt("prots", int(dataM1[a][6]));
+ animal.setInt("arenda", int(dataM1[a][7]));
+ animal.setInt("dopsor", int(dataM1[a][8]));
+ animal.setString("note", dataM1[a][9]);
+ animal.setInt("ves", int(dataM1[a][0]));
+ animal.setString("time", dataM1[a][10]);
+ animal.setInt("1/2", int(dataM1[a][11]));
+ values.setJSONObject(a, animal);
+ }
+ saveJSONArray(values, filePath + "temp.json");
+}
+//****************************************************
+void dataSave2next2() {
+ table = loadTable(filePath + "base.csv", "header");
+
+ TableRow newRow = table.addRow();
+ //newRow.setInt("id_R", numberReport);
+ newRow.setInt("date", int(timeDate));
+ newRow.setInt("id", table.getRowCount());
+ newRow.setString("nomer", dataM2[2]);
+ newRow.setString("client", dataM2[3].toLowerCase());
+ newRow.setString("object", dataM2[4]);
+ newRow.setInt("price", int(dataM2[5]));
+ newRow.setInt("prots", int(dataM2[6]));
+ newRow.setString("time1", inData[12]);
+ newRow.setInt("ves1", int(dataM2[0]));
+ newRow.setInt("cor1", int(dataM2[1]));
+ newRow.setString("time2", dataM2[10]);
+ newRow.setInt("ves2", int(dataM2[11]));
+ newRow.setInt("cor2", int(dataM2[13]));
+ newRow.setInt("arenda", int(dataM2[7]));
+ newRow.setInt("dopsor", int(dataM2[8]));
+ newRow.setString("note", dataM2[9]);
+ int u = int(dataM2[0])*2 + int(dataM2[1])*2 + int(dataM2[11])*2 +
+ int(dataM2[13])*2 + int(dataM2[7])*2 + int(dataM2[8])*2;
+ newRow.setInt("id_R", u);
+ newRow.setInt("1/2", int(dataM2[12]));
+
+ String j = ",";
+ String rowArh = table.getRowCount() + j + dataM2[2] + j + dataM2[3] + j +
+ dataM2[4] + j + dataM2[5] + j + dataM2[6] + j + dataM2[10] + j + dataM2[0] + j +
+ dataM2[1] + j + dataM2[11] + j + dataM2[13] + j + dataM2[7] + j + dataM2[8] +
+ j + dataM2[9] + j + dataM2[12];
+
+ String[] list = {rowArh};
+ saveTable(table, filePath + "base.csv");
+ saveStrings(filePath + "Arhive/" + timeMonth + "/" + timeDate + "/" +
+ timeArh + ".txt", list);
+
+ String[] rep = {outReport()};
+ saveStrings(filePath + "report.txt", rep);
+}
+
+//****************************************************
+void dataSaveReport() {
+ TimeString();
+
+ String[] rep = {outReport()};
+ saveStrings(filePath + timeReport + "_" + timeArh + ".txt", rep);
+
+ saveTable(table, filePath + timeReport + "_" + timeArh + ".csv");
+ saveTable(table, filePath + "Arhive/" + timeMonth + "/" + timeDate
+ + "/" + timeReport + "_" + timeArh + ".csv");
+ dataNullBase();
+}
+
+void dataNullBase() {
+ Table tableNew = new Table();
+ tableNew.addColumn("id_R");
+ tableNew.addColumn("date");
+ tableNew.addColumn("id");
+ tableNew.addColumn("nomer");
+ tableNew.addColumn("client");
+ tableNew.addColumn("object");
+ tableNew.addColumn("price");
+ tableNew.addColumn("prots");
+ tableNew.addColumn("time1");
+ tableNew.addColumn("ves1");
+ tableNew.addColumn("cor1");
+ tableNew.addColumn("time2");
+ tableNew.addColumn("ves2");
+ tableNew.addColumn("cor2");
+ tableNew.addColumn("arenda");
+ tableNew.addColumn("dopsor");
+ tableNew.addColumn("note");
+ tableNew.addColumn("1/2");
+ saveTable(tableNew, filePath + "base.csv");
+}
+
+//****************************************************
+// очистка данных
+void dataClear() {
+ for (int m = 0; m < m2; ++m) {
+ if (m == 1) ++m;
+ inData[m] = "";
+ }
+ inData[6] += protsUmolch;
+}
+
+//*****************************************************
diff --git a/ПРОЧИТАЙ_!!!.txt b/ПРОЧИТАЙ_!!!.txt
new file mode 100644
index 0000000..9bb5451
--- /dev/null
+++ b/ПРОЧИТАЙ_!!!.txt
@@ -0,0 +1,11 @@
+1 Копируем 2 папки туда, куда нужно
+ (например в корень диска С:)
+2 Создаем ярлыки на Рабочем столе
+ (правой кнопкой мыши по файлу ___.exe
+ -> Отправить -> Рабочий стол (создать ярлык))
+3 Запускаем файл
+4 Если запрашивает ПАПКУ (в которой все рабочие файлы (=Яндекс диск=))
+ -> выбираем её (ИМЕННО ПАПКУ, а не ФАЙЛ!!!)
+5 Если нужно все сделать заново(очистить все)
+ -> удаляем ВСЕ файлы из папки =data= и повторяем п3 и п4
+6 Пути к файлам вручную больше прописывать НЕ НАДО ! \ No newline at end of file