Имя: Пароль:
1C
1С v8
Программно определить открыта ли нужная база для пользователя?
0 Mikhail Volkov
 
15.09.20
13:55
Есть 2 базы: Альфа-Авто 4.1 и УПП/КА1 связанные OLE-механизмом. Когда пользователю требуется из Альфа-Авто быстро посмотреть этот же объект (чаще документ) в УПП/КА1, то проблем в этом нет. Но сейчас надо переходить на ERP/КА2, работающей на другой более высокой версии платформы (Альфа-Авто 4.1 работает не выше 8.3.10). OLE-механизм между различными версиями платформ не работает, только Com. Нашел обработку как открыть объект в другой базе по ссылке, найденный по Com-соединению: http://catalog.mista.ru/public/1042208/, вроде работает. Но база ERP/КА2 должна быть открыта для пользователя. Как программно это проверить? Чтобы выдать предупреждение, если не открыта...
1 ДенисЧ
 
15.09.20
13:59
Если Вопрос("А у вас база открыта", РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да Тогда
ОткрытьБазу();
КОнецЕсли;
2 ASU_Diamond
 
15.09.20
14:04
"должна быть открыта для пользователя" - расшифруй
3 Mikhail Volkov
 
15.09.20
14:13
(2) Не просто кем-то открыта, а тем же пользователем, который в Альфа-Авто захотел открыть объект в ERP/КА2.
4 ASU_Diamond
 
15.09.20
14:29
(3) меня вообще смущает фраза "открыта ДЛЯ пользователя"
5 dka80
 
15.09.20
14:32
В расширении создаешь веб-сервис, который по запросу с параметром имени текущего пользователя будет выдавать соответствующий результат
6 Жан Пердежон
 
15.09.20
14:59
(0) открой для себя мир веб-сервисов
7 Mikhail Volkov
 
15.09.20
15:02
(5) А активные пользователи, зашедшие а базу по Com-соединению, чем-то отличаются от обычных?
8 ASU_Diamond
 
15.09.20
15:04
(7) если в список активных пользователей глянуть, то можно увидеть, что у них в качестве приложения указано COM-соединение
9 Mikhail Volkov
 
15.09.20
18:13
(4) Все пользователи перенесены (и переносятся с документами) из Альфа-Авто в КА1/КА2.
Обычно для получения списка активных пользователей приводят следующую процедуру (https://helpf.pro/faq/view/149.html):
    СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
    Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл                   
        ТЗ=ИтогСписокСоединений.Добавить();                                       
        ТЗ.Пользователь=Соединение.Пользователь.Имя;                              
        ТЗ.Приложение=ПредставлениеПриложения(Соединение.ИмяПриложения);          
        ТЗ.НачалоРаботы=Соединение.НачалоСеанса;                                  
        ТЗ.Компьютер=Соединение.ИмяКомпьютера;                                    
        ТЗ.Соединение=Соединение.НомерСоединения;                                 
    КонецЦикла;

Ее легко переделать для:
Функция БазаОткрытаПодПользователем(Пользователь)
    СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
    Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл                   
        Если Пользователь=Соединение.Пользователь И ПредставлениеПриложения(Соединение.ИмяПриложения)="Тонкий клиент" Тогда                              
            Возврат Истина;
        КонецЕсли;
    КонецЦикла;
    Возврат Ложь;
КонецФункции

Только как переделать под Com-соединение?
10 Жан Пердежон
 
15.09.20
19:50
(9) а что не получается?
11 Mikhail Volkov
 
15.09.20
20:06
Есть возможность автоматом запустить базу через параметры, если у пользователя ОС-аутентификация?
12 Mikhail Volkov
 
16.09.20
08:08
(10) Странно, в массиве ОбъектCom.ПолучитьСоединенияИнформационнойБазы() какие-то не те пользователи? Не из справочника Пользователи, не имеют реквизитов Код и Наименование. Вместо них: Имя и ПолноеИмя, их можно сменить, сделать различными в разных базах. Хотелось бы сделать, чтобы определялось по объекту Пользователь (по его GUID)?
13 Mikhail Volkov
 
16.09.20
12:46
В ERP/КА2 в справочнике Пользователи есть GUID ИдентификаторПользователяИБ (еще ИдентификаторПользователяСервиса). Наверное это и есть GUID пользователя из ПолучитьСоединенияИнформационнойБазы()?
14 Mikhail Volkov
 
16.09.20
15:04
Странно, Соединение.Пользователь.УникальныйИдентификатор() ошибку дает Метод объекта не обнаружен (УникальныйИдентификатор). Что пользователи из ПолучитьСоединенияИнформационнойБазы() не имеют GUID?
15 Жан Пердежон
 
16.09.20
15:32
в СП всё есть:

СоединениеИнформационнойБазы (InfoBaseConnection)
Пользователь (User)
Использование:
Только чтение.
Описание:
Тип: ПользовательИнформационнойБазы.
16 Mikhail Volkov
 
16.09.20
16:39
(15) Спс. Оказывается у ПользовательИнформационнойБазы в свойствах есть УникальныйИдентификатор. В итоге:
Функция БазаКАОткрытаПользователем() Экспорт
    Если ОбъектКА <> Неопределено Тогда
        ПользовательКА = НайтиЭлементСправочникаКА(ПараметрыСеанса.Пользователь, "Пользователи");
        GUIDПользователяИБ = ОбъектКА.XMLСтрока(ПользовательКА.ИдентификаторПользователяИБ);
        МассивСоединений = ОбъектКА.ПолучитьСоединенияИнформационнойБазы();
        Для Каждого Соединение Из МассивСоединений Цикл
            Если ОбъектКА.XMLСтрока(Соединение.Пользователь.УникальныйИдентификатор) = GUIDПользователяИБ
               И Найти(ПредставлениеПриложения(Соединение.ИмяПриложения), "клиент") > 0 Тогда                              
                Возврат Истина;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Возврат Ложь;
КонецФункции    // БазаКАОткрытаПользователем()
17 Mikhail Volkov
 
17.09.20
15:24
Остались от прежнего программиста фрагменты в коде: Ссылка.DataVersion - ссылка Com-объекта, иногда сам использую - проверяю заполненность поля DataVersion, то ссылка не пустая. То точно не знаю, что содержит это поле?
18 Mikhail Volkov
 
17.09.20
17:35
А что случилось, почему не могу новую тему создать?
Сайт forum.mista.ru пока не может обработать этот запрос.
HTTP ERROR 500
После обновления страницы пишет: ОШИБКА: Вход не выполнен.
19 Mikhail Volkov
 
17.09.20
18:21
Последняя новая тема была создана в 13:58 Добавить/удалить колонку в стандартном отчете СКД
20 Mikhail Volkov
 
18.09.20
07:25