Имя: Пароль:
1C
1C 7.7
v7: Компонента RiK_Inet, метод СоздатьСервер работает неправильно у одного юзера
0 snaiper
 
11.06.16
13:02
Добрый день!
Мою работу парализовала странная проблема.
Загрузил компоненту RiK_Inet и создал слушающий сервер в ПриНачалеРаботыСистемы(). У всех пользователей кроме одного (Пусть, для определённости, его будут звать, например, ОператорККМ4) всё работает как надо. Вообще, несколько пользователей одновременно серверов не создают, порты используют разные и заведомо свободные.
В ПриЗавершенииРаботыСистемы() переменную с объектом сервера сбрасываю в 0.

У этого "Оператора" есть две странности в поведении.
Во-первых, несмотря на то, что СоздатьСервер() возвращает 1, событие "Инет_СтрокаОтКлиента" не выстреливает. Строку передавал и компонентой, и своей программой. Формат строки верный, т.к. у других пользователей всё нормально принимается и отрабатывает.

Во-вторых, при закрытии окна 1С процесс 1cv7.exe от данного пользователя не выгружается из памяти и висит, не давая зайти снова до тех пор, пока его не грохнут руками. Плюс переиндексацию приходится делать после "гроха". У остальных пользователей ИБ, опять же, всё нормально выгружается - код полностью идентичен.

Менять пользователя можно, но не хочется, пока есть хоть какая-то надежда разобраться, в чём, всё-таки, была проблема и возможно ли решить её.

Может, кто сталкивался с такими приколами от ВК?
1 snaiper
 
11.06.16
13:04
Тут нельзя редактировать сообщения? Совсем забыл привести код:

// Это - в ПриНачалеРаботыСистемы()
Если глПолучитьПолномочие("РазрешитьОплатуЧековККМ") = 1 Тогда // Создаём сервер только для того, кто имеет свои права доступа
        Если ЗагрузитьВнешнююКомпоненту("RiK_Inet.dll") <> 1 Тогда
            Сообщить("Ошибка загрузки компоненты RiK Inet. Сообщите программисту!");
            //Возврат;
        Иначе
            глНомерПортаСервера = глПользователь.ПортЛокальногоСервера;
            глАдресПлатёжногоСервера = СокрЛП(глПользователь.АдресПлатёжногоСервера);
            глПортПлатёжногоСервера = глПользователь.ПортПлатёжногоСервера;
            
            Если    (ПустоеЗначение(глНомерПортаСервера) = 1)ИЛИ(ПустоеЗначение(глАдресПлатёжногоСервера) = 1)ИЛИ
                    (ПустоеЗначение(глПортПлатёжногоСервера) = 1) Тогда
                Сообщить("Не заданы параметры платёжного сервера для эквайринга!");
            Иначе
                глИнет = СоздатьОбъект("AddIn.R_Inet");
                глИнет.ВыводитьСообщенияОбОшибках(1);
                глАдресСистемы = глИнет.ПолучитьТекущийIPАдрес();
                Если глИнет.СоздатьСервер(глНомерПортаСервера) = 1 Тогда
                    Сообщить("Сервер "+глАдресСистемы+":"+глНомерПортаСервера+" поднят.");
                    //глИнет.ОтправитьСтроку(глАдресПлатёжногоСервера, Строка(глПортПлатёжногоСервера), "?operation=pay&amount=1.23&doc_number=0000000001&response_addr="+глАдресСистемы+"&response_port="+Строка(глНомерПортаСервера)+"&response_format=RIK RIP :-/", 0);
                Иначе
                    Сообщить("Сервер не поднимается :(");
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;                                        
        
    КонецЕсли;


// Это - в ПриЗавершенииРаботыСистемы()
глИнет = 0;
2 Garykom
 
гуру
11.06.16
15:22
Права + ось
3 Garykom
 
гуру
11.06.16
15:22
= глюки
4 snaiper
 
12.06.16
07:57
(2) Интересно, что платформу запускал с ограниченного аккаунта Windows, но под разными юзерами 1С, в том числе и с ограниченными правами в 1С - работало! :( глюки, глюки... ОС - ХРюша из-под терминалов.
5 snaiper
 
12.06.16
08:23
Ладно, я всё понял. Создал нового пользователя, а старому поменял пароль и засунул его... подальше, в общем, засунул.

Причина глюка так и не выявлена, но, в общем, и пофиг теперь уже :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший