Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
04.05.2017, 10:06
Студворк — интернет-сервис помощи студентам
umatkot, Тобишь, всё очень печально и плохо? Да и на сколько я понимаю достучаться до файло-обменника можно только через тоннель... так что по всей видимости ты просто не верно стучишься)))

P.S. Да долго меня не было слышно....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2017, 10:06
Ответы с готовыми решениями:

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1776736.html Кто нибудь знает откуда брать справочники NsiRef по...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и umatkot, Берёмся за реализацию всего этого...

718
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
04.05.2017, 10:11
Вот тебе скрины: )))
Миниатюры
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)   Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)  
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.05.2017, 11:22
Цитата Сообщение от NaGuWaL Посмотреть сообщение
я понимаю достучаться до файло-обменника можно только через тоннель
Сбрось, пож. настройки туннеля, у них есть HTTP - тоннель не должен быть помехой. Там порт, кажется другой.
Всё, я порт поставил - та же ошипка. Щас, помучаю его...
0
4 / 4 / 0
Регистрация: 10.04.2017
Сообщений: 19
04.05.2017, 11:55
Добрый день!
Ни у кого примера нет как конвертировать полученные данные из БД в прокси классы ГИС?
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 9
04.05.2017, 12:15
Не могу загрузить ничего (. В чем ошибка? И в загрузке можем указывать как X-Upload-OrgPPAGUID так и X-Upload-Dataprovider?
Миниатюры
Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)  
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 9
04.05.2017, 12:22
Почему метод POST когда в альбомах PUT?

Добавлено через 53 секунды
Цитата Сообщение от NaGuWaL Посмотреть сообщение
Вот тебе скрины: )))
POST/PUT
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
04.05.2017, 12:26
bitc8, В мане написан только X-Upload-Dataprovider
Ммммм, значит всё так плохо....

Добавлено через 1 минуту
Цитата Сообщение от bitc8 Посмотреть сообщение
POST/PUT
а плювать один результат...

Добавлено через 36 секунд
CCAlek, Что конкретно вас интересует?
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.05.2017, 12:33
CCAlek, Я, например, делаю это через DTO для Nhibernate, но для этого я создаю специально структуры, которые у меня являются похожими на настоящие структуры с их зависимостями, но они как бы более приближённые к базе - для списков справочников. А в остальном используется простой адаптер и маппер на сущность - например

Для того, чтобы моя сущность могла заполняться данными из БД, я сделал для неё ручной маппинг
Кликните здесь для просмотра всего текста
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
public List<T> Select<T>(string sql)
        {
            if (_withConnector){
                OpenConnection();
            }
 
            var command = new NpgsqlCommand(sql, _dbConn);
            var reader = command.ExecuteReader();
            var list = new List<T>();
            var columns = reader.GetColumnSchema().Select(t => t.ColumnName).ToList();
 
            while (reader.Read())
            {
                var t = Activator.CreateInstance<T>();
                var dicProps = t.GetType().GetProperties()
                    .Where(tm => tm.GetCustomAttribute(typeof(DataMemberAttribute)) != null)
                    .ToDictionary(tm => ((DataMemberAttribute)tm.GetCustomAttribute(typeof(DataMemberAttribute))).Name, tm => tm);
                
                foreach (var prop in dicProps.Where(prop => columns.Contains(prop.Key) && reader[prop.Key] != DBNull.Value)){
                    prop.Value.SetValue(t, reader[prop.Key]);
                }
 
                list.Add(t);
            }
 
            if (_withConnector)
                CloseConnection();
 
            return list;
        }

В итоге, я создаю сущность вот так:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
[DataContract]
    public class PremisesInGis
    {
        [DataMember(Name = "fias_house_guid")]
        public string FiasHouseGuid { get; set; }
 
        [DataMember(Name = "premises")]
        public string Premises { get; set; }
    }

Эта сущность у меня содержит в себе дом и все помещения на нём через запятую.
Далее делаю так:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
var dbService = new DbService();
            var houses = dbService.Select<PremisesInGis>(@"
SELECT DISTINCT 
fias_house_guid 
FROM 
    premises_in_gis 
LEFT JOIN 
    async_requester as ar 
ON 
    ar.field_value_text = fias_house_guid and session_id = '779D5363-9F90-4C5F-A621-CFDF5FE10186'
where ar.id is null;");

У меня получается заполненный список сущностей, которые мне требуются. async_requester - это промежуточная таблица для асинхронных запросов. Когда я делаю асинхронный запрос, я помещаю в неё только MessageGuid и иду домой спать. Прихожу утром и запускаю окончание операции - GetState - у меня выходят готовые структуры.

Для прокси классов я создал модели, которые соответствуют каждой структуре в гис и вручную создаю в ней объекты и заполняю требуемыми полями, затем выполняю запрос.
Вот пример сущности, которая работает с домами
Кликните здесь для просмотра всего текста
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
public class HouseRsoDataModel : Requester<HouseManagementPortsTypeClient, HouseManagementPortsTypeAsyncClient>
    {
        private readonly NsiCommonDataModel _nsiModel;
        public Dictionary<string, string> CommonResultGuids { get; set; }
 
        public exportHouseResult ExportHouse(string fiasGuid)
        {
            var request = GenerateGenericType<exportHouseRequest>();
            request.FIASHouseGuid = fiasGuid;
            return ProcessRequest<exportHouseResult>(request);
        }
 
        public getStateRequest BeginExportHouse(string fiasGuid)
        {
            var request = GenerateGenericType<exportHouseRequest>();
            request.FIASHouseGuid = fiasGuid;
            return BeginProcessRequest(request);
        }
        
        public HouseRsoDataModel(string sessionNumber = null)
        {
            _nsiModel = new NsiCommonDataModel();
 
            var cfg = new MapperConfiguration(c => {
                c.CreateMap<HouseBasicExportType, HouseBasicRSOType>();
                c.CreateMap<ApartmentHouse, importHouseRSORequestApartmentHouse>();
                c.CreateMap<LivingHouse, importHouseRSORequestLivingHouse>();
            });
 
            InitMapper(cfg);
 
            if (string.IsNullOrEmpty(sessionNumber)) return;
            SessionGuid = sessionNumber;
        }
 
        private HouseBasicRSOType GetBasicCharacteristics(string fiasHouseGuid, string oktmoCode)
        {
            return new HouseBasicRSOType {
                No_RSO_GKN_EGRP_Registered = true,
                FIASHouseGuid = fiasHouseGuid,
                OKTMO = new OKTMORefType {code = oktmoCode},
                OlsonTZ = _nsiModel.GetOlsonTimeZone()
            };
        }
 
        public Integration.HouseManagement.ImportResult AddApartmentHouse(string fiasHouseGuid, string oktmoCode, Dictionary<string, decimal> residentialPremises, string entrance, string entranceGuid = null)
        {
            var apartmentHouse = new ApartmentHouse(GetBasicCharacteristics(fiasHouseGuid, oktmoCode), true);
 
            foreach (var rp in residentialPremises){
                apartmentHouse.AddResidentalPremise(rp.Key, rp.Value, entrance);
            }
 
            if (string.IsNullOrEmpty(entranceGuid)){
                apartmentHouse.AddEntrance(entrance, entranceGuid);
            }
 
            var request = GenerateGenericType<importHouseRSORequest>();
            request.ApartmentHouse = UtilMapper.Map<importHouseRSORequestApartmentHouse>(apartmentHouse.Build());
            var result = ProcessRequest<Integration.HouseManagement.ImportResult>(request);
 
            CommonResultGuids = apartmentHouse.GetCommonResultGuids(result.CommonResult);
 
            return result;
        }
 
        public Integration.HouseManagement.ImportResult UpdateApartmentHouse(exportHouseResultType exportHouse)
        {
            var apartmentHouse = new ApartmentHouse(GetBasicCharacteristics(
                exportHouse.ApartmentHouse.BasicCharacteristicts.FIASHouseGuid, 
                exportHouse.ApartmentHouse.BasicCharacteristicts.OKTMO.code), 
                true);
 
            foreach (var ahrp in exportHouse.ApartmentHouse.ResidentialPremises){
                apartmentHouse.TerminateResidentalPremise(exportHouse.ModificationDate.AddHours(1), ahrp.PremisesGUID);
            }
 
            var request = GenerateGenericType<importHouseRSORequest>();
            request.ApartmentHouse = UtilMapper.Map<importHouseRSORequestApartmentHouse>(apartmentHouse.Build());
            return ProcessRequest<Integration.HouseManagement.ImportResult>(request);
        }
 
        public Integration.HouseManagement.ImportResult AddLivingHouse(string fiasHouseGuid, string oktmoCode, Dictionary<string, decimal> livingRooms)
        {
            var livingHouse = new LivingHouse(GetBasicCharacteristics(fiasHouseGuid, oktmoCode), true);
 
            foreach (var lr in livingRooms){
                livingHouse.AddLivingRoom(lr.Key, lr.Value);
            }
 
            var request = GenerateGenericType<importHouseRSORequest>();
            request.LivingHouse = UtilMapper.Map<importHouseRSORequestLivingHouse>(livingHouse);
            var result = ProcessRequest<Integration.HouseManagement.ImportResult>(request);
 
            CommonResultGuids = livingHouse.GetCommonResultGuids(result.CommonResult);
 
            return result;
        }
        
        public getStateResult EndProcessRequest(string messageGuid)
        {
            return ProcessAsyncMessageState<getStateResult>(new getStateRequest
            {
                MessageGUID = messageGuid
            });
        }
    }
 
    public class ApartmentHouse : importHouseRSORequestApartmentHouse
    {
        private readonly Dictionary<string, importHouseRSORequestApartmentHouseResidentialPremises> _residentialPremises;
        private readonly List<EntranceRSOType> _entrances;
        //private Dictionary<string, string> PremisesGuids { get; }
 
        public ApartmentHouse(HouseBasicRSOType basicCharacteristics, bool bUpdate = false)
        {
            var apartmentHouse = new HouseRSOType {
                TransportGUID = Guid.NewGuid().ToString(),
                BasicCharacteristicts = basicCharacteristics
            };
 
            if (bUpdate)
                ApartmentHouseToUpdate = apartmentHouse;
            else
                ApartmentHouseToCreate = apartmentHouse;
 
            _residentialPremises = new Dictionary<string, importHouseRSORequestApartmentHouseResidentialPremises>();
            _entrances = new List<EntranceRSOType>();
        }
 
        /// <summary>
        /// При создании помещения сначала у него есть только номер и TransportGuid - после импорта добавляю уже Guid и UniqueNumber
        /// Делается для того, чтобы не посылать запрос уже после импорта на информацию о новых помещениях
        /// </summary>
        /// <param name="commonResults"></param>
        public Dictionary<string, string> GetCommonResultGuids(ImportResultCommonResult[] commonResults)
        {
            if(null == commonResults)
                return new Dictionary<string, string>();
 
            return commonResults
                .Where(cr => cr.Error == null && _residentialPremises.ContainsKey(cr.TransportGUID))
                .ToDictionary(cr => cr.TransportGUID,
                    cr =>
                        _residentialPremises[cr.TransportGUID]
                            .ResidentialPremisesToUpdate?.PremisesNum +
                        _residentialPremises[cr.TransportGUID]
                            .ResidentialPremisesToCreate?.PremisesNum + ";" + cr.GUID + ";" + cr.UniqueNumber);
        }
 
        public void TerminateResidentalPremise(DateTime terminationDate, string premiseGuid)
        {
            var rp = new ResidentialPremisesRSOType
            {
                TransportGUID = Guid.NewGuid().ToString(),
                No_RSO_GKN_EGRP_Registered = true,
                TerminationDate = terminationDate,
                TerminationDateSpecified = true,
                PremisesGUID = premiseGuid,
                PremisesGUIDSpecified = true,
                EntranceNum = "0",
                EntranceNumSpecified = true,
                PremisesNum = "0"
            };
 
            _residentialPremises.Add(rp.TransportGUID, new importHouseRSORequestApartmentHouseResidentialPremises {
                ResidentialPremisesToUpdate = rp
            });
        }
 
        public void AddResidentalPremise(string premiseNumber, decimal? totalArea = null, string entranceNum = null, string premiseGuid = null)
        {
            var rp = new ResidentialPremisesRSOType{
 
                TransportGUID = Guid.NewGuid().ToString(),
                No_RSO_GKN_EGRP_Registered = true,
                PremisesNum = premiseNumber
            };
 
            if (null != totalArea){
 
                rp.TotalArea = totalArea.Value;
                rp.TotalAreaSpecified = true;
            }
 
            if (!string.IsNullOrEmpty(entranceNum)){
 
                rp.EntranceNum = entranceNum;
                rp.EntranceNumSpecified = true;
            }
            
            if (!string.IsNullOrEmpty(premiseGuid)){
 
                rp.PremisesGUID = premiseGuid;
                rp.PremisesGUIDSpecified = true;
 
                _residentialPremises.Add(rp.TransportGUID, new importHouseRSORequestApartmentHouseResidentialPremises{
                    ResidentialPremisesToUpdate = rp
                });
 
                return;
            }
 
            _residentialPremises.Add(rp.TransportGUID, new importHouseRSORequestApartmentHouseResidentialPremises{
                ResidentialPremisesToCreate = rp
            });
        }
 
        public void AddEntrance(string entranceNumber, string entranceGuid = null)
        {
            var entranceObj = new EntranceRSOType{
                TransportGUID = Guid.NewGuid().ToString(),
                EntranceNum = entranceNumber
            };
 
            if (!string.IsNullOrEmpty(entranceGuid))
            {
                entranceObj.EntranceGUID = entranceGuid;
                entranceObj.EntranceGUIDSpecified = true;
            }
 
            _entrances.Add(entranceObj);
        }
 
        public importHouseRSORequestApartmentHouse Build()
        {
            ResidentialPremises = _residentialPremises.Values.ToArray();
 
            if (!_entrances.Any()) return this;
 
            EntranceToUpdate = _entrances.Where(e => e.EntranceGUIDSpecified).Select(e => e).ToArray();
            EntranceToCreate = _entrances.Where(e => !e.EntranceGUIDSpecified).Select(e => e).ToArray();
 
            return this;
        }
    }


Сам код импорта - это unit тест, который выполняет полную обработку.
Сама модель имеет зависимость от так называемого запросчика Requester, который уже на другом уровне обрабатывает заголовки, ошибки и системные ответы. Весь код публиковать не стану, так как придётся выкладывать проект, и возникнет больше вопросов, а отвечать на них не так много времени.

Перед тем, как использовать прокси классы я их получаю своей утилитой, которая делает конвертацию, как мне удобно. Так, что проксики из svcutil я не использую. Файлы прикреплять не могу - мешает проксик организации.

Ну что, помог я Вам? Не думаю. До этого нужно доходить самому и делать как удобно тоже самому.
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
04.05.2017, 12:35
Кто хочет оперативно решать вопросы и при этом знает что есть discord, пишите в личку...
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 9
04.05.2017, 12:38
Народ! X-Upload-Dataprovider, а где же Сендера брать?
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.05.2017, 12:43
NaGuWaL, А DataproviderGuid - он же используется в сервисах как ROOT_ORG_GUID? В ТП написал уже?
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 9
04.05.2017, 12:49
А как его получить. Читая альбом видел только это:

Идентификация поставщика информации осуществляется по одному из параметров:
• X-Upload-OrgPPAGUID - соответствует параметру orgPPAGUID операции exportOrgRegistry;
• X-Upload-Dataprovider – соответствует SenderID.
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
04.05.2017, 13:12
umatkot,bitc8,

"
Идентификация поставщика информации осуществляется по одному из параметров:
• X-Upload-OrgPPAGUID - соответствует параметру orgPPAGUID операции exportOrgRegistry;
• X-Upload-Dataprovider – соответствует SenderID.


4. В раздел «Описание протокола обмена файлами с внешними системами» добавлено описание заголовка X-Upload-OrgPPAGUID. Внимание! В течение версии 9.0.0 необходимо перейти от X-Upload-Dataprovider к X-Upload-OrgPPAGUID. В 10.0.0 X-Upload-Dataprovider будет упразднен.
"
Странно...

Добавлено через 5 минут
bitc8, есть метод exportOrgRegistry вот он и отдаёт нужный гайд...

Добавлено через 3 минуты
Нет, никак не проходит...

Добавлено через 5 минут
как то странно метод exportOrgRegistry возвращает - f40bdc05-d746-42a9-8b5a-2d7d0eaeaf48
в личном кабинете Идентификатор ИС указан этот гайд 379a993f-1e05-4765-beea-a83e9734589c
Либо лыжи не едут либо что-то не сраслось ...
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 9
04.05.2017, 13:23
метод exportOrgRegistry у меня отдает orgPPAGUID

и еще вот orgRootEntityGUID
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.05.2017, 13:27
Цитата Сообщение от NaGuWaL Посмотреть сообщение
как то странно метод exportOrgRegistry
Будешь смеяться, но я его даже ещё не реализовал))) Работаю через идентификатор системы и давно получал RootOrgGuid - через него и работаю, но он уже, кажется, не нужен... Или будет нужен, на более поздних этапах с платежами.
0
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287
04.05.2017, 13:29
Что самое интересное orgPPAGUID не зависимо от СИТА (01\02) гайд одинаков О_о ... но суть ошибки не в идентификаторе системы...

FieldValidationException - не пройдены проверки на корректность заполнения полей (обязательность, формат и т.п.).
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
04.05.2017, 13:32
NaGuWaL, я вообще пустой запрос без заголовков отправляю - тоже самое приходит.
0
0 / 0 / 0
Регистрация: 01.10.2015
Сообщений: 9
04.05.2017, 13:36
Я просто еще только начинаю, поэтому думал что у меня одного лыжи не едут )

Добавлено через 2 минуты
Цитата Сообщение от NaGuWaL Посмотреть сообщение
Что самое интересное orgPPAGUID не зависимо от СИТА (01\02) гайд одинаков О_о ... но суть ошибки не в идентификаторе системы...
Вроде все обязательные поля включал... странно
0
05.05.2017, 17:17
 Комментарий модератора 
Продолжение: Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2017, 17:17

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к этому и пришел....а на дворе 1 июля ...

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel
Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться....

Осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через TCP сокет
Здравствуйте. Требуется осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через тсп сокет. Со второй частью все понятно, а вот с...

Ошибки интеграции ГИС ЖКХ
Я много тут читал форум по интеграции ГИС. На старте, впрочем, как и в последствии возникает много траблов с интеграцией. Есть идея вынести...

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ, До этого не работал с SOAP, почитал все...


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

Или воспользуйтесь поиском по форуму:
719
Закрытая тема Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru