Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/501: Рейтинг темы: голосов - 501, средняя оценка - 4.71
 Аватар для 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
Закрытая тема Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru