Re: Как вставить в отчет имя текущего пользователя
Собственно сабж...
В общем, каким-то образом нужно вставить в отчет имя пользователя, который этот отчет генерирует т.е. тот кто залогинился в данны момент.
Как это сделать?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Настройка отчетов и расчетных форм → Как вставить в отчет имя текущего пользователя
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Собственно сабж...
В общем, каким-то образом нужно вставить в отчет имя пользователя, который этот отчет генерирует т.е. тот кто залогинился в данны момент.
Как это сделать?
Сделать такое можно и уже осуществлялось практически :wink: .
Только для этого необходимо ещё использовать такой инструмент как АПИ. Т.е. технология такова:
1. При построении отчёта осуществляете логин к текущему коннекту
(Я это делал с помощью области "Выполнить", в которой прописал процедуру для запуска. Сама процедура хранится в базе mdb в модулях).
2. Для вывода информации о пользователе в нужной ячейке используете конструкцию "CALL <Моя функция>". (Функция лишь выдает TCSApp.LoginUserName. Функция тоже находится в VBA модуле базы Access).
Естественно, TCSObj и TCSApp должны быть объявлены на весь модуль.
Понятно, только тогда лицензия API шная будет забираться... что не совсем гуд...
А нельзя в будующих версиях например в наборе данных где нибудь в спраочниках сделать че-нидь типа таблицы текущих параметров подключения???
Ну, АПИшная лицензия-то не навсегда забирается, а на время отчётопостроения :) Лицензия занята, теоретически, пока жив Access. Разве это проблема?
А нельзя листинг функции выложить и где её прописать?
Можно :)
Вот, пользуйтесь:
Option Compare Database
Public TCSObj As CSDN.TCS
Public TCSApp As CSDN.Tcs_Application
Public Connect_APIPublic 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 SubPublic 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
Создали модуль в базе "Module1", скопировали туда Ваш листинг.
В отчете выпонили все Ваши указания: создали области "Выполнить" и "ФИО", в которые вставили соответственно "CALL Connect_TCS_API" и "CALL FIO".
И ничего не происходит...
Похоже, что функции не запускаются вообще.
Для проверки добавляли MsgBox. Он так и не появился ни перед формированием отчета, ни во время.
У меня при выполнении выпадали сообщения:
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
А у нас вообще никаки сообщения не выпадает, вообще ничего не происходит как-будто и нет модуля.
Яков писал(а):
В отчете выпонили все Ваши указания: создали области "Выполнить" и "ФИО", в которые вставили соответственно "CALL Connect_TCS_API" и "CALL FIO".
И ничего не происходит...
Похоже, что функции не запускаются вообще.
У меня именованные области "Выполнить" и "ФИО" находятся в пространстве имен листа (не книги!), т.е. при создании указывалось - "Лист1!Выполнить" и "Лист1!ФИО", ну и соответственно Лист1 - лист шаблона документа (содержит области "ЗаполнениеСоставаКарты", "Карта1", "СоставКарты1").
А У ВАС?
И формат ячеек бывает полезно установить в "Текстовый".
у нас все в точности также
Может поможет другая версия библиотеки <csdnrpt.dll> - у меня 4.03.0004.
Может влияют какие-то настройки безопасности Access-a?
У меня MS Office 2000.
Можете выложить набор данных в архиве. Попробуем посмотреть.
Разработчики видимо уже Новый Год отмечают. :)
Rock писал(а):
..., вообще ничего не происходит как-будто и нет модуля.
Кстати, модуль надо создавать в базе MS Access, которую вы открыли средствами TCS т.е:
1.Шаблоны отчетов;
2.Выбрать набор данных;
3.Нажимаем <Редактировать> или (Ctrl+Enter);
4.Переходим на закладку MS Access;
5.Жмем кнопку <Редактировать>.
В результате запустится Access и откроет базу шаблона, вот здесь и надо создавать модуль.
Далее просто закрываем энтот Access с базой, и НЕ ЗАБЫВАЕМ НАЖАТЬ КНОПКУ <ЗАПИСАТЬ>!!! :)
Всех с прошедшими праздниками :D
подключайте в Tools->References... TcsApi.tlb
важное замечание, я чего-то в своем ответе этот пункт пропустил :oops:
для Rock могу посоветовать выполнить отчёт без Макро после, а затем открыть mdb, указанный на листе ComplSheet и посмотреть есть ли вообще там модуль с нужной процедурой
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
включено
Яков может выложите свой примерчик с Msgbox'ом, интересно ж всё таки чего там. А то уже в догадках теряюсь :roll:
По тупому был скопирован листинг Вашей функции в модуль "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]
:D
Мне сам листинг не очень интересен, потому как, судя по Вашим описаниям, дело до него даже не доходит :wink:
Нужен выгруженный с помощью экспорта набор данных
В данном случае отчет "перечень учетных документов". Запускаться должен из режима "Учетные документы"
Прошу сильно не бить - это черновик
Заимпортил я Ваш набор данных... странно... но работает! :D
MsgBox'ы все увидел, отчёт получил с LogIn'ом пользователя.
У Вас всё сделано правильно. А Вы на другом компьютере пробовали построить? Безопасность какая стоит в Excel'е и Access'е?
похоже что есть какое-то админское ограничение на моем компе.: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
Скорей всего, это ограничение терминального режима.
А попробуйте вот что:
1. Запустите TechnologiCS через терминальный режим
2. Запустите Excel через терминальный режим
3. Выполните процедуру коннекта к TechnologiCS'y из VBA Excel'я
4. Выполните простейший ShowModal какого-нибудь справочника
Осуществится ли коннект?
Всем спасибо!!!
Надо было на терминальной машине выполнить зарегестрировать TCS API
Но что мне делать с моей локальной?
PS. Выяснилась еще одна хитрость: регестировать АПИ на терминале необходимо для каждого пользователя.
PPS. А по поводу локальной наш админ считает, что система забита мусором и в ней уже не все функции корректно работают. И выход единственный, хирургический - переустановить ось.
Выяснилась еще одна хитрость: регестировать АПИ на терминале необходимо для каждого пользователя.
Да-а-а... хитрость... До этого, наверно, только опытным путем и можно было дойти. Хорошо, что разобрались.
PPS. А по поводу локальной наш админ считает, что система забита мусором и в ней уже не все функции корректно работают. И выход единственный, хирургический - переустановить ось.
Ну, вобщем-то бывает полезно :lol:
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Настройка отчетов и расчетных форм → Как вставить в отчет имя текущего пользователя