Re: Как вставить в отчет имя текущего пользователя

Собственно сабж...
В общем, каким-то образом нужно вставить в отчет имя пользователя, который этот отчет генерирует т.е. тот кто залогинился в данны момент.
Как это сделать?

Re: Как вставить в отчет имя текущего пользователя

Сделать такое можно и уже осуществлялось практически  :wink: .
Только для этого необходимо ещё использовать такой инструмент как АПИ. Т.е. технология такова:
1. При построении отчёта осуществляете логин к текущему коннекту
(Я это делал с помощью области "Выполнить", в которой прописал процедуру для запуска. Сама процедура хранится в базе mdb в модулях).
2. Для вывода информации о пользователе в нужной ячейке используете конструкцию "CALL <Моя функция>". (Функция лишь выдает TCSApp.LoginUserName. Функция тоже находится в VBA модуле базы Access).

Естественно, TCSObj и TCSApp должны быть объявлены на весь модуль.

Re: Как вставить в отчет имя текущего пользователя

Понятно, только тогда лицензия API шная будет забираться... что не совсем гуд...
А нельзя в будующих версиях например в наборе данных где нибудь в спраочниках сделать че-нидь типа таблицы текущих параметров подключения???

Re: Как вставить в отчет имя текущего пользователя

Ну, АПИшная лицензия-то не навсегда забирается, а на время отчётопостроения :) Лицензия занята, теоретически, пока жив Access. Разве это проблема?

Re: Как вставить в отчет имя текущего пользователя

А нельзя листинг функции выложить и где её прописать?

Re: Как вставить в отчет имя текущего пользователя

Можно  :) 
Вот, пользуйтесь:

Option Compare Database

Public TCSObj As CSDN.TCS
Public TCSApp As CSDN.Tcs_Application
Public Connect_API

Public Sub Connect_TCS_API()
    Dim Mes
   
    Set TCSObj = CreateObject("CSDN.TCS")
    If Not (TCSObj Is Nothing) Then
        Set TCSApp = TCSObj.LoginCurrent
        If Not (TCSApp Is Nothing) Then
            'Mes = MsgBox("Библиотека API TechnologiCS ЗАрегистрирована!", vbSystemModal + vbCritical, "Ошибка")
            'MsgBox (TCSApp.LoginInfo.User)
            Connect_API = True
        Else
            Mes = MsgBox("Библиотека API TechnologiCS не зарегистрирована!", vbSystemModal + vbCritical, "Ошибка")
            Connect_API = False
        End If
    Else
        Mes = MsgBox("Библиотека API TechnologiCS не зарегистрирована!", vbSystemModal + vbCritical, "Ошибка")
        Connect_API = False
    End If
   
End Sub

Public Function FIO(ID, DID, Mas) As String

    FIO = TCSApp.LoginInfo.User
   
End Function


P.S.

1. Создаете модуль в базе ACCESS'а, там где у Вас набор данных, см. п. 14.3
2. Вставляете этот самый код туда
3. В шаблоне создаете область управления "Выполнить", см. п. 14.10.5.23
4. Прописываете в ней "CALL Connect_TCS_API", см. п. 14.10.5.23
5. В шаблоне создаете заголовочную область (собственно для размещения заголовочного реквизита типа "кто распечатал"), см. п. 14.10.3.2
6. Прописываете в ней "CALL FIO", см. п. 14.10.3.2

Re: Как вставить в отчет имя текущего пользователя

Создали модуль в базе "Module1", скопировали туда Ваш листинг.
В отчете выпонили все Ваши указания: создали области "Выполнить" и "ФИО", в которые вставили соответственно "CALL Connect_TCS_API" и "CALL FIO".
И ничего не происходит...

Похоже, что функции не запускаются вообще.
Для проверки добавляли MsgBox. Он так и не появился ни перед формированием отчета, ни во время.

Re: Как вставить в отчет имя текущего пользователя

У меня при выполнении выпадали сообщения: 
CALL Connect_TCS_API
Приложению 'Microsoft Access' не удается найти процедуру 'Connect_TCS_API'.
то же для 'FIO'

После замены

Option Compare Database 

Public TCSObj As CSDN.TCS 
Public TCSApp As CSDN.Tcs_Application 
Public Connect_API 

на

Option Compare Database 

Public TCSObj
Public TCSApp 
Public Connect_API 

все сработало
или подключайте в Tools->References... TcsApi.tlb

Re: Как вставить в отчет имя текущего пользователя

А у нас вообще никаки сообщения не выпадает, вообще ничего не происходит как-будто и нет модуля.

Re: Как вставить в отчет имя текущего пользователя

Яков писал(а):
В отчете выпонили все Ваши указания: создали области "Выполнить" и "ФИО", в которые вставили соответственно "CALL Connect_TCS_API" и "CALL FIO".
И ничего не происходит...
Похоже, что функции не запускаются вообще.


У меня именованные области "Выполнить" и "ФИО" находятся в пространстве имен листа (не книги!), т.е. при создании указывалось - "Лист1!Выполнить" и "Лист1!ФИО", ну и соответственно Лист1 - лист шаблона документа (содержит области "ЗаполнениеСоставаКарты", "Карта1", "СоставКарты1").
А У ВАС?
И формат ячеек бывает полезно установить в "Текстовый".

Re: Как вставить в отчет имя текущего пользователя

у нас все в точности также

Re: Как вставить в отчет имя текущего пользователя

Может поможет другая версия библиотеки <csdnrpt.dll> - у меня 4.03.0004.
Может влияют какие-то настройки безопасности Access-a? 
У меня MS Office 2000.
Можете выложить набор данных в архиве. Попробуем посмотреть.

Разработчики видимо уже Новый Год отмечают. :)

Re: Как вставить в отчет имя текущего пользователя

Rock писал(а):
..., вообще ничего не происходит как-будто и нет модуля.


Кстати, модуль надо создавать в базе MS Access, которую вы открыли средствами TCS т.е:
1.Шаблоны отчетов;
2.Выбрать набор данных;
3.Нажимаем <Редактировать> или (Ctrl+Enter);
4.Переходим на закладку MS Access;
5.Жмем кнопку <Редактировать>.
В результате запустится Access и откроет базу шаблона, вот здесь и надо создавать модуль.
Далее просто закрываем энтот Access с базой, и НЕ ЗАБЫВАЕМ НАЖАТЬ КНОПКУ <ЗАПИСАТЬ>!!! :)

Re: Как вставить в отчет имя текущего пользователя

Всех с прошедшими праздниками :D 


подключайте в Tools->References... TcsApi.tlb

важное замечание, я чего-то в своем ответе этот пункт пропустил  :oops: 

для Rock могу посоветовать выполнить отчёт без Макро после, а затем открыть mdb, указанный на листе ComplSheet и посмотреть есть ли вообще там модуль с нужной процедурой

Re: Как вставить в отчет имя текущего пользователя

Sh писал(а):
У меня именованные области "Выполнить" и "ФИО" находятся в пространстве имен листа (не книги!), т.е. при создании указывалось - "Лист1!Выполнить" и "Лист1!ФИО", ну и соответственно Лист1 - лист шаблона документа (содержит области "ЗаполнениеСоставаКарты", "Карта1", "СоставКарты1").
А У ВАС?
И формат ячеек бывает полезно установить в "Текстовый".

Именно

Sh писал(а):
модуль надо создавать в базе MS Access, которую вы открыли средствами TCS т.е:
1.Шаблоны отчетов;
2.Выбрать набор данных;
3.Нажимаем <Редактировать> или (Ctrl+Enter);
4.Переходим на закладку MS Access;
5.Жмем кнопку <Редактировать>.
В результате запустится Access и откроет базу шаблона, вот здесь и надо создавать модуль.
Далее просто закрываем энтот Access с базой, и НЕ ЗАБЫВАЕМ НАЖАТЬ КНОПКУ <ЗАПИСАТЬ>!!!

Так и сделано

Sh писал(а):
для Rock могу посоветовать выполнить отчёт без Макро после, а затем открыть mdb, указанный на листе ComplSheet и посмотреть есть ли вообще там модуль с нужной процедурой

Модуль есть.
Но ничего не происходит...

PS.

Sh писал(а):
Tools->References... TcsApi.tlb

включено

Re: Как вставить в отчет имя текущего пользователя

Яков может выложите свой примерчик с Msgbox'ом, интересно ж всё таки чего там. А то уже в догадках теряюсь  :roll:

Re: Как вставить в отчет имя текущего пользователя

По тупому был скопирован листинг Вашей функции в модуль "Module1" аксесовской базы и после объявления внутренней переменной вставлен MSGBox:


[code]
Option Compare Database

Public TCSObj As CSDN.TCS
Public TCSApp As CSDN.Tcs_Application
Public Connect_API

Public Sub Connect_TCS_API()
Dim Mes
''' здесь
MsgBox "Фигня", , "Фамилия из Аксеса"

Set TCSObj = CreateObject("CSDN.TCS")
If Not (TCSObj Is Nothing) Then
Set TCSApp = TCSObj.LoginCurrent
If Not (TCSApp Is Nothing) Then
'Mes = MsgBox("Библиотека API TechnologiCS ЗАрегистрирована!", vbSystemModal + vbCritical, "Ошибка")
'MsgBox (TCSApp.LoginInfo.User)
Connect_API = True
Else
Mes = MsgBox("Библиотека API TechnologiCS не зарегистрирована!", vbSystemModal + vbCritical, "Ошибка")
Connect_API = False
End If
Else
Mes = MsgBox("Библиотека API TechnologiCS не зарегистрирована!", vbSystemModal + vbCritical, "Ошибка")
Connect_API = False
End If

End Sub

Public Function FIO(ID, DID, Mas) As String

FIO = TCSApp.LoginInfo.User
MsgBox FIO, , "Фамилия"

End Function
[/code]


Ни один из мсжбоксов не проявился...

На листе бланка ("Ведомость") есть именованная область "Ведомость!Выполнить", в которой стоит "CALL Connect_TCS_API" (формат текстовый) и есть именованная область "Ведомость!ФИО" в которой стоит "CALL FIO" (формат текстовый). Правда последняя из этих двух областей находится внутри области "Ведомость!Карта1".[/code]

Re: Как вставить в отчет имя текущего пользователя

:D 
Мне сам листинг не очень интересен, потому как, судя по Вашим описаниям, дело до него даже не доходит :wink: 
Нужен выгруженный с помощью экспорта набор данных

Re: Как вставить в отчет имя текущего пользователя

В данном случае отчет "перечень учетных документов". Запускаться должен из режима "Учетные документы"
Прошу сильно не бить - это черновик

Re: Как вставить в отчет имя текущего пользователя

Заимпортил я Ваш набор данных... странно... но работает!  :D 
MsgBox'ы все увидел, отчёт получил с LogIn'ом пользователя.
У Вас всё сделано правильно. А Вы на другом компьютере пробовали построить? Безопасность какая стоит в Excel'е и Access'е?

Re: Как вставить в отчет имя текущего пользователя

похоже что есть какое-то админское ограничение на моем компе.:cry: 
У нас в конторе часть людей работает на локальных клиентах, а часть через терминальный доступ.
Так вот, при терминальном доступе данный отчет выдает следующую ошибку:
"TechnologiCS APi Common]
Ошибка при работе с конфигуратором. Не могу продолжать работу.
Access violation at address 1229CB08. Read of address 1229CB08"
После чего отчет продолжает формироваться, но потом выскакивает ошибка VBA Run-time error: Metod 'LoginCurrent' f object 'ITCS' failed

Может Вам что-то подскажет эта информация и Вы скажите, какие права необходимо изменить (добавить).

PS. Локально стоит Офис ХР, а на терминальной машине Офис 2003. Версия TechnologiCS 4.6.3

Re: Как вставить в отчет имя текущего пользователя

Скорей всего, это ограничение терминального режима.

Re: Как вставить в отчет имя текущего пользователя

А попробуйте вот что:
1. Запустите TechnologiCS через терминальный режим
2. Запустите Excel через терминальный режим
3. Выполните процедуру коннекта к TechnologiCS'y из VBA Excel'я
4. Выполните простейший ShowModal какого-нибудь справочника
Осуществится ли коннект?

Re: Как вставить в отчет имя текущего пользователя

Всем спасибо!!!
Надо было на терминальной машине выполнить зарегестрировать TCS API
Но что мне делать с моей локальной?

PS. Выяснилась еще одна хитрость: регестировать АПИ на терминале необходимо для каждого пользователя.

PPS. А по поводу локальной наш админ считает, что система забита мусором и в ней уже не все функции корректно работают. И выход единственный, хирургический - переустановить ось.

Re: Как вставить в отчет имя текущего пользователя

Выяснилась еще одна хитрость: регестировать АПИ на терминале необходимо для каждого пользователя.

Да-а-а... хитрость... До этого, наверно, только опытным путем и можно было дойти. Хорошо, что разобрались.


PPS. А по поводу локальной наш админ считает, что система забита мусором и в ней уже не все функции корректно работают. И выход единственный, хирургический - переустановить ось.


Ну, вобщем-то бывает полезно  :lol: