Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 27.11.2022
Сообщений: 4

Уже определен .obj c++

26.05.2023, 21:54. Показов 3124. Ответов 2

Студворк — интернет-сервис помощи студентам
Выводит ошибку int kol уже определен в main.obj, bool changed уже определен в main.obj и еще множество переменных

файл main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include "main.h"
#include "files.h"
#include "func.h"
eCMD Menu()
{
    while (true)
    {
        system("cls");
        printf("Добро пожаловать в магазин техники!\n");
        puts("Выберите действие:");
        puts("1 - Открыть файл");
        puts("2 - Просмотр данных");
        puts("3 - Запись в файл");
        puts("4 - Выход из программы");
        int opt;
        fflush(stdin);
        scanf_s("%d", &opt); 
            switch (opt) {
            case 1: return CMD_READ;
            case 2: return CMD_SHOW;
            case 3: return CMD_SAVE;
            case 4: return CMD_EXIT;
            default: printf("Вы ввели неправильную команду\n");
                while ((opt = getchar() != '\n') && opt != EOF) {}
                system("pause");
            }
        }
    }
 
int main()
{
    system("chcp 1251");
    kol = 3;
    techno_shop* add = Database;
    strcpy(add->name, "Телевизор"); //используется для копирования строки из одного массива символов в другой массив символов.
    strcpy(add->brend, "Samsung");
    add->serial_num = 359182;
    add->price = 45999.99;
    add->amount = 15;
    add++;
    strcpy(add->name, "Стиральная машина");
    strcpy(add->brend, "Bosh");
    add->serial_num = 948273;
    add->price = 15500;
    add->amount = 10;
    add++;
    strcpy(add->name, "Монитор");
    strcpy(add->brend, "LOC");
    add->serial_num = 648204;
    add->price = 23000;
    add->amount = 6;
    add++;
    eCMD cmd = CMD_NONE;
    while (true)
    {
        if (cmd == CMD_EXIT){
            if (changed == true)
            {
                int choise;
                printf("Вы вышли и забыли сохраниться.Вы уверены что хотите выйти? 1 - Да.0 - Нет\n");
                scanf("%d", &choise);
                if (choise == 0) { cmd = CMD_NONE; }
                else { break; }
                system("pause");
            }
        else { break; }
        
    }
    
        cmd = Menu();
        switch (cmd)
        {
        case CMD_SHOW: Show(Database, kol, changed); break;
        case CMD_READ: Read(Database, kol); break;
        case CMD_SAVE: Save(Database, kol, changed); break;
        }
}
    free(Database);
    printf("Досвидания,приходите еще!\n");
    system("pause");
    return 0;
}
файл main.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
enum eCMD {
    CMD_EXIT = -1, CMD_NONE, CMD_READ, CMD_SHOW,
    CMD_EDIT, CMD_ADD, CMD_DELETE, CMD_SORT,
    CMD_FIND, CMD_SAVE
};
const int max = 4;
struct techno_shop
{
    char name[256];
    char brend[256];
    int serial_num;
    double price;
    int amount;
};
int kol = 0;
bool changed = false; // проверка на изменение файла
techno_shop* Database = (techno_shop*)malloc(max * sizeof(techno_shop));
файл func.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
#include "func.h"
#include <iostream>
using namespace std;
eCMD MenuShow()
{
    while (true)
    {
        printf("Выберите функцию:\n");
        printf("1 - Добавить \n");
        printf("2 - Удалить \n");
        printf("3 - Сортировать \n");
        printf("4 - Редактировать\n");
        printf("5 - Поиск\n");
        printf("6 - Выход\n");
        int func = 0;
        fflush(stdin); //  очистка консоли
        scanf_s("%d", &func);
        switch (func)
        {
        case 1: return CMD_ADD; 
        case 2: return CMD_DELETE;
        case 3: return CMD_SORT;
        case 4: return CMD_EDIT;
        case 5: return CMD_FIND;
        case 6: return CMD_EXIT;
        default: printf("Вы ввели неправильную команду\n");            /*Эта строка кода использует цикл while, чтобы считывать символы с ввода, пока не будет встречен символ
                                                                           новой строки ('\n') или символ конца файла (EOF). После этого символы продолжают считываться, 
                                                                           пока не будет встречен символ новой строки или символ конца файла. 
                                                                           Таким образом, цикл очищает оставшиеся символы во вводе*/
            while((func=getchar()!='\n')&&func!=EOF) {}
            system("pause");
            return CMD_SHOW;
     }
    }
}
techno_shop* Add(techno_shop* Database, int& kol, bool& changed)
{
    kol++;
    techno_shop* temp;
    if (kol > 4) { temp = (techno_shop*)realloc(Database, (kol+1) * sizeof(techno_shop)); }  /*Если условие выполняется (т.е kol больше 5), тогда происходит выделение новой 
                                                                                          памяти с использованием функции realloc. Память выделяется для массива типа techno_shop
                                                                                          с размером kol * sizeof(techno_shop)*/
    else temp = Database;
    for (int i = kol - 1; i < kol; i++)
    {
        printf("Начинаем вводить новую строку:\n");
        while (getchar() != '\n');
        printf("Введите название товара:\n");
        fgets(temp[i].name, sizeof(temp[i].name), stdin);                                 //Функция fgets используется для чтения строки из стандартного ввода (stdin).
                                                                                          
        temp[i].name[strcspn(temp[i].name, "\n")] = '\0';
 
            if (strlen(temp[i].name) > 20) {
            strncpy(temp[i].name, temp[i].name, 20);                                     
            temp[i].name[20] = '\0';
        }
 
        printf("Введите бренд:\n");
        fgets(temp[i].brend, sizeof(temp[i].brend), stdin);
        temp[i].brend[strcspn(temp[i].brend, "\n")] = '\0';
 
        if (strlen(temp[i].brend) > 20) {
            strncpy(temp[i].brend, temp[i].brend, 20);                                        
            temp[i].brend[20] = '\0';
        }
            printf("Введите серийный номер товара:\n");
            while ((scanf("%d", &temp[i].serial_num) != 1)||temp[i].serial_num<0) {
                printf("Ошибка ввода. Пожалуйста, введите положительное число:\n");
                while (getchar() != '\n');
            }
            rewind(stdin);
 
            printf("Введите цену:\n");
            while (scanf("%lf", &temp[i].price) != 1 || temp[i].price < 0 ) {
                printf("Ошибка ввода. Пожалуйста, введите положительное число:\n");
                while (getchar() != '\n');
            }
            rewind(stdin);
 
            printf("Введите кол-во товара на складе:\n");
            while ((scanf("%d", &temp[i].amount) != 1)||temp[i].amount<0) {
                printf("Ошибка ввода. Пожалуйста, введите положительное число:\n");
                while (getchar() != '\n');
            }
            rewind(stdin);
    }
    printf("Строка добавлена!\n");
    system("pause");
    changed = true;
    return temp;
}
void Delete(techno_shop* Database, int& kol, bool& changed)
{
    int del;
    printf("Введите номер строки которую хотите удалить\n");
    scanf_s("%d", &del);
    if (del < 1 || del > kol)
    {
        printf("Неправильно введен номер строки\n"); system("pause"); return;
    }
    kol--;
    for (int i = del - 1; i < kol;i++) {
        Database[i] = Database[i + 1];
    }
    printf("Данные удалены\n");
    system("pause");
    changed = true;
}
void Sort(techno_shop* Database, int colvo)
{
    int choice;
    printf("Выберите как Вы хотите отсортировать: 1 - По возрастанию цены, 2 - По возрастанию количества на складе\n");
    scanf_s("%d", &choice);
    if (choice == 1)
    {
        techno_shop temp;
        for (int i = 0; i < colvo - 1; i++)
        {
            for (int j = 0; j < colvo - i - 1; j++)
            {
                if (Database[j].price > Database[j + 1].price)
                {
                    temp = Database[j];
                    Database[j] = Database[j + 1];
                    Database[j + 1] = temp;
                }
            }
        }
    }
    else if (choice == 2)
    {
        techno_shop temp;
        for (int i = 0; i < colvo - 1; i++)
        {
            for (int j = 0; j < colvo - i - 1; j++)
            {
                if (Database[j].amount > Database[j + 1].amount)
                {
                    temp = Database[j];
                    Database[j] = Database[j + 1];
                    Database[j + 1] = temp;
                }
            }
        }
    }
    else
    {
        printf("Такого выбора нет\n");
        system("pause");
        return;
    }
}
void Edit(techno_shop* Database, int kol, bool& changed)
{
    int stroka;
    printf("Какую строку вы хотите изменить?\n");
    scanf_s("%d", &stroka);
    if (stroka < 0 || stroka > kol) { cout << "Такой строки нет." << endl; system("pause"); return; }
    int choice;
    printf("Что вы хотите изменить: 1 - Название Товара, 2 - Бренд, 3 - Серийный номер, 4 - Цена, 5-Количество на складе, 0 - Выход\n");
    scanf("%d", &choice);
    if (choice == 0 || choice>5) return;
    fflush(stdin);
    printf("Введите свои данные: \n");
    switch (choice)
    {
    case 1:
        while (getchar() != '\n');
        fgets(Database[stroka - 1].name, sizeof(Database[stroka - 1].name), stdin);
        Database[stroka - 1].name[strcspn(Database[stroka - 1].name, "\n")] = '\0';
        if (strlen(Database[stroka - 1].name) > 20) {
            strncpy(Database[stroka - 1].name, Database[stroka - 1].name, 20);
            Database[stroka - 1].name[20] = '\0'; } break;
    case 2:
        while (getchar() != '\n');
        fgets(Database[stroka - 1].brend, sizeof(Database[stroka - 1].brend), stdin);
        Database[stroka - 1].brend[strcspn(Database[stroka - 1].brend, "\n")] = '\0';
        if (strlen(Database[stroka - 1].brend) > 20) {
            strncpy(Database[stroka - 1].brend, Database[stroka - 1].brend, 20);
            Database[stroka - 1].brend[20] = '\0';}  break;
    case 3:
        while ((scanf_s("%d", &Database[stroka - 1].serial_num)!=1)||( Database[stroka - 1].serial_num < 0)) {
        printf("Ошибка ввода. Пожалуйста, введите положительное число:\n");
        while (getchar() != '\n');}; rewind(stdin); break;
    case 4: while ((scanf_s("%lf", &Database[stroka - 1].price) != 1) || (Database[stroka - 1].price < 0)) {
        printf("Ошибка ввода. Пожалуйста, введите положительное число:\n");
        while (getchar() != '\n');
    }; rewind(stdin); break; 
    case 5: while ((scanf_s("%d", &Database[stroka - 1].amount) != 1) || (Database[stroka - 1].amount < 0)) {
        printf("Ошибка ввода. Пожалуйста, введите положительное число:\n");
        while (getchar() != '\n');}; rewind(stdin); break;
    default: printf("Вы ввели неправильное число!\n");
    }
    printf("Данные успешно изменены.\n");
    system("pause");
    changed = true;
}
 
 
void Show(techno_shop* Database, int& kol, bool& changed)
{
    eCMD cmd = CMD_NONE;
    while (cmd != CMD_EXIT)
    {
        system("cls");
        fflush(stdin);
        printf("|%-3s|%-21s|%-21s|%-10s|%-10s|%-6s|\n", "№", "Название товара" , "Бренд" , "Серийный номер    " , "Цена" , "Количество на складе");
        printf("----------------------------------------------------------------------------------------------------\n");
        for (int i = 0; i < kol; i++)
        {
            printf("|%-3d|%-21s|%-21s|%-18.1d|%-10.1f|%-20.1d|\n", i + 1, Database[i].name, Database[i].brend, Database[i].serial_num, Database[i].price, Database[i].amount);
            printf("----------------------------------------------------------------------------------------------------\n");
        }
        cmd = MenuShow();
        switch (cmd)
        {
        case CMD_EDIT: Edit(Database, kol, changed); break;
        case CMD_ADD: Database = Add(Database, kol, changed); break;
        case CMD_DELETE: Delete(Database, kol, changed); break;
        case CMD_SORT: Sort(Database, kol); break;
        case CMD_FIND: Find(Database, kol); break;
        
        }
    }
}
 
 
void Find(techno_shop* Database, int kol)
{
    int option;
    int coun = 0;
    printf("Выберите по какому параметру вы хотите найти товар: 1 - По названию товара, 2 - По названию бренда товара\n");
    scanf_s("%d", &option);
    if (option == 1) {
        char str[50];
        int s = 0;
        coun++;
        printf("Введите название товара\n");
        while (getchar() != '\n');
        fgets(str, sizeof(str), stdin);  //Функция fgets используется для чтения строки из стандартного ввода (в данном случае stdin) и сохранения её в указанный буфер str.
        str[strcspn(str, "\n")] = '\0';  //функция strcspn возвращает длину самого длинного начального сегмента строки str, не содержащего  символ новой строки
        for (int i = 0; i < kol; i++)
        {
            if (strcmp(Database[i].name, str)==0)
            {
                printf("----------------------------------------------------------------------------------------------------\n");
                printf("|%-3d|%-21s|%-21s|%-18.1d|%-10.1f|%-20.1d|\n", i + 1, Database[i].name, Database[i].brend, Database[i].serial_num, Database[i].price, Database[i].amount);
                printf("----------------------------------------------------------------------------------------------------\n");
                s++;
            }
        }
        if (s == 0) { printf("Такого товара нет.\n"); } system("pause");
    }
    else if (option == 2) {
        char str1[50];
        int s = 0;
        coun++;
        printf("Введите бренд товара\n");
        while (getchar() != '\n');
        fgets(str1, sizeof(str1), stdin);
        str1[strcspn(str1, "\n")] = '\0';
        for (int i = 0; i < kol; i++)
        {
            if (strcmp(Database[i].brend, str1)==0)
            {
                printf("----------------------------------------------------------------------------------------------------\n");
                printf("|%-3d|%-21s|%-21s|%-18.1d|%-10.1f|%-20.1d|\n", i + 1, Database[i].name, Database[i].brend, Database[i].serial_num, Database[i].price, Database[i].amount);
                printf("----------------------------------------------------------------------------------------------------\n");
                s++;
            }
        }
        if (s == 0) { printf("Такого товара нет.\n"); } system("pause");
    }
    if (coun == 0) {
        printf("Такого выбора нет\n");
        system("pause");
        return;
    }
}
файл func.h
C++
1
2
3
4
5
6
7
8
9
#pragma once 
#define _CRT_SECURE_NO_WARNINGS // это директива препроцессора, которая отключает предупреждения компилятора о небезопасных функциях стандартной библиотеки C
#include "main.h"
void Show(techno_shop* Database, int& kol, bool& changed);
void Edit(techno_shop* Database, int kol, bool& changed);
techno_shop* Add(techno_shop* Database, int& kol, bool& changed);
void Delete(techno_shop* Database, int& kol, bool& changed);
void Sort(techno_shop* Database, int kol);
void Find(techno_shop* Database, int kol);
файл file.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "files.h"
#include <stdio.h>
#include <iostream>
using namespace std;
void Read(techno_shop* Database, int& kol)
{
    char file[21];
    FILE* inp;
    while (true)
    {
        printf("Введите название файла\n");
        cin >> file;
        inp = fopen(file, "r"); //открытие файла с режимом "r" чтение
        if (!inp)
        {
            printf("Файл не найден.\n"); system("pause"); return;
        }
        else { break; }
    }
    fseek(inp, 0, SEEK_END);
    long end = ftell(inp);                                      //С помощью функций fseek и ftell определяется размер файла (end)
    rewind(inp);                                                           //затем с помощью rewind указатель файла перемещается в начало.
    long size = sizeof(techno_shop);                                 //Вычисляется размер структуры
    int n = end / size;
    if (n > 5) Database = (techno_shop*)realloc(Database, n * sizeof(techno_shop)); //если n>5 идет перераспределение памяти для массива database чтобы учесть кол во записей в файле
    int i = 0;
    while (!feof(inp))                                                  /*В цикле while (!feof(inp)) происходит чтение данных из файла. Каждая запись в файле имеет формат:
                                                                                         название,бренд,серийный_номер,цена,количество.*/
    {
        fscanf(inp, "%[^,]20s", Database[i].name);
        fseek(inp, 1, SEEK_CUR);
        fscanf(inp, "%[^,]20s", Database[i].brend);
        fseek(inp, 1, SEEK_CUR);
        fscanf(inp, "%d,%lf,%d\n", &(Database[i].serial_num), &(Database[i].price), &(Database[i].amount));
        i++;
    }
    fclose(inp);
    kol = i;
    printf("Прочтено успешно\n");
    system("pause");
}
void Save(techno_shop* Database, int& kol, bool& changed)
{
    char file[20];
    FILE* inp;
    while (true)
    {
        printf("Введите название файла\n");
        scanf("%20s", file);
        inp = fopen(file, "w");
        if (!inp)
        {
            printf("Такого названия файла быть не может\n");
        }
        else { break; }
    }
    for (int i = 0; i < kol; i++)
    {
        fprintf(inp, "%s,%s,%d,%lf,%d", Database[i].name, Database[i].brend, Database[i].serial_num, Database[i].price, Database[i].amount);
    }
    fclose(inp);
    changed = false;
    printf("Данные были сохранены\n");
    system("pause");
    
}
файл files.h
C++
1
2
3
4
5
6
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include "main.h"
 
void Read(techno_shop* Database, int& kol);
void Save(techno_shop* Database, int& kol, bool& changed);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2023, 21:54
Ответы с готовыми решениями:

error LNK2005 (конструктор уже определен в ...)
Здраствуйте! Недавно начал работать с классами на С++, и столкнулся с такой вот ошибкой: error LNK2005: &quot;public: __thiscall...

Уже определен в main.obj
main.cpp #include &lt;iostream&gt; #include &lt;ctime&gt; #include &quot;inventory.h&quot; using namespace std; int main() ...

int glob уже определен в main.obj
Почему #ifndef не помогает? 1.h: #ifndef ONE_H #define ONE_H int glob; #endif

2
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,146
26.05.2023, 22:04
когда глобальную переменную хочется разместить в заголовочнике, то
Цитата Сообщение от saamsa Посмотреть сообщение
inline int kol = 0;


другой вопрос - зачем

Добавлено через 1 минуту
взять всё тот же kol - его можно сделать локальным в main. Он не нужен глобальным в данном коде

Добавлено через 1 минуту
с changed - то же самое

Добавлено через 43 секунды
Database - тоже

Добавлено через 1 минуту
Цитата Сообщение от saamsa Посмотреть сообщение
malloc
а зачем в C++ malloc/free ?
Даже, вообще тут динамика не нужна, просто на стеке создай переменную
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,263
01.06.2023, 10:53
Цитата Сообщение от saamsa Посмотреть сообщение
Выводит ошибку int kol уже определен в main.obj, bool changed уже определен в main.obj и еще множество переменных
Ну разумеется выводит. Вы же определения этих переменных в заголовочный файл main.h положили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2023, 10:53
Помогаю со студенческими работами здесь

Ошибка: LNK2005 <Имя> уже определен в cities.obj
Определяю переменные для нескольких файлов программ, но получаю ошибки. Не могу найти решение. Получаю ошибки для каждой переменной....

Ошибка 2005 _main уже определен в Interface.obj хотя ни ссылок, ни main я не нашла
Вот как бы два проекта, не нашла проблем, отдельно они компилятся, сижу, читаю форумы, но ничего похожего не нашла. Помогите пожалуйста. ...

Компиляция выдает ошибку "error LNK2005: _main уже определен в int.obj"
Добрый день уважаемые. Столкнулся с данной проблемой. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int...

LNK2005 "public: __thiscall Sozdanie::Sozdanie(void)" уже определен в Programma Pozdravlenie.obj
Есть код для вывода из трех файлов с именами, праздниками и пожеланиями случайного поздравления (Я поделил программу на 3 файла, один .h и...

Переменная уже определена в Form_5.obj
Здравствуйте, я наткнулся на следующую проблему и не могу решить. Вот имеется код файла Form_5.h: #ifndef _FORM5_H #define _FORM5_H ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru