(изменено: vitaly576, 7 апреля 2021 07:42:42)

Тема: Вызов команд над файлами

Добрый день!
Появилась необходимость из справочника номенклатуры сразу распечатать связанные документы для текущей номенклатуры. Через API Explorer удалось создать кнопку "Распечатать" (стандартная функция Windows - print), помимо кнопки "Открыть" (см. скриншот). Если нажимать вручную, все работает и документ отправляется сразу на печать.
Вопрос: как обратить к этой команде макросом?

Post's attachments

111.png 62.62 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

Re: Вызов команд над файлами

OpenDoc
туда нужно передать идентификатор команды. Его можно взять из команд над типом файла https://help.technologics.ru/7.9/TCSAPI … pes_13.htm, либо в файловом составе документа свойство COMMANDS

(изменено: vitaly576, 7 апреля 2021 10:34:24)

Re: Вызов команд над файлами

Как раз вопрос по свойству COMMANDS. Не могу понять как их использовать.
Если возможно напишите пожалуйста пример данного кода, а я по аналогии попробую дополнить под свои нужды.

Участок получившегося кода:

' переходим в раздел Документы номенклатуры
Set NMKTP = TCSActiveModule.Properties("NomenclatureDocuments").AsIDispatch
key = "TYPE_NOTE"

' ищем в составе документов МТК
If NMKTP.Locate(key, "МТК", 0) Then

set filemtk = NMKTP.Properties("FILES").AsIDispatch
Set printserv = filemtk.Properties("COMMANDS").AsIDispatch

--- Здесь должен быть код вызова функции print ---- 

  else
   NMKTP.next
End If

Re: Вызов команд над файлами

Даже еще проще оказалось, если это файл активный. Свойство у самого документа есть при этом.

Макрос запускается с архива, или с документов номенклатуры

Sub FormMacro_TestCommand(TCSActiveModule) 'Test Command
 LogObject.ScriptTimeOut = 0
 Set cmd = TCSActiveModule.Properties( "COMMANDS" ).AsIDispatch
 if not cmd is Nothing then
   if cmd.Locate( "NOTE", "Просмотр", 0 ) then TCSActiveModule.OpenDoc( cmd.Properties("ID").AsInteger )
 End if
End Sub

(изменено: vitaly576, 7 апреля 2021 10:55:41)

Re: Вызов команд над файлами

Так ведь команда OpenDoc работает только в Архиве. Данный макрос я запускаю из справочника Номенклатуры.
Команда OpenDoc открывает файл, а как потом его распечатать без участия пользователя?

Re: Вызов команд над файлами

Нет. Она работает там, где есть интерфейс DocCommands.

Это Архив, Папки, Документы номенклатуры, Документы позиции, SingleDoc и пр...

В номенклатуре она конечно не работает, в вот в документах номенклатуры (вы же его брали и документ искали нужный) - там должна работать. По свойствам надо смотреть. Если где то нет, то можно просто документ достать по идентификатору, и работать там с ним https://help.technologics.ru/7.9/TCSAPI … Doc_13.htm

Re: Вызов команд над файлами

Олег Зырянов пишет:

вы же его брали и документ искали нужный)

Я видимо что-то не понимаю.
Запускаю макрос из Номенклатуры:

Set Nmk = theApp.SingleNmkFromNMkNote(TCSActiveModule.Properties("NOTE").Value)
Nmk.UserModuleName = Nmk.UniqueUserModuleName
Call theApp.DeleteModuleByUserModuleName( Nmk.UserModuleName )
' переходим в раздел Документы номенклатуры

Set NMKTP = TCSActiveModule.Properties("NomenclatureDocuments").AsIDispatch
key = "TYPE_NOTE"

' ищем в составе документов МТК
If NMKTP.Locate(key, "МТК", 0) Then

set filemtk = NMKTP.Properties("FILES").AsIDispatch
Set printserv = filemtk.Properties("COMMANDS").AsIDispatch

В командах над файлом есть свойство Shellcmd "Команда Windows", в моем случае - это print. Как ее программно из макроса вызвать?

Re: Вызов команд над файлами

Ну можно по разному сдедать конечно.
Но гораздо проще в справочнике TechnologiCS назвать команду Печать, и найти ее по наименованию, а как она настроена - какая разница?

(изменено: vitaly576, 7 апреля 2021 11:32:56)

Re: Вызов команд над файлами

Команду добавил. Дальше я ее найду по наименованию, а как выполнить ее действие (распечатать документ)?

Post's attachments

22.png 33.54 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

Re: Вызов команд над файлами

А мой пример не помог? Я там команду просмотр вызывал, в вашем случае просто название другое, и все должно заработать.

Re: Вызов команд над файлами

Я макрос вызываю из Номенклатуры, соответственно выпадает ошибка: Объект не поддерживает это свойство или метод: 'TCSActiveModule.OpenDoc'

Re: Вызов команд над файлами

Так. Кажется понял. Я пример даю выполнения команды над документом (по активному файлу).
А вы работате с файлом. И если он не активный, то да, не вижу способа выполнить команду над ним :(

--------------

Вы мой макрос запустите из модуля Документы номенклатуры. Там он должен отработать успешно.
А потом это код прости используйтся для запуска  над нужным вам документом. Вместо моего TCSActiveModule у вас будет NMKTP после Locate (найденный документ)

Re: Вызов команд над файлами

Заранее спасибо за код и Ваше терпение.

Re: Вызов команд над файлами

не вижу способа выполнить команду над ним :(

Способ есть, просто в хелпе не описан :( если понадобиться подскажу, ну и хелп поправим конечно

Re: Вызов команд над файлами

Похоже у меня получилось:

' ищем в составе документов МТК
If NMKTP.Locate(key, "МТК", 0) Then
set filemtk = NMKTP.Properties("FILES").AsIDispatch
Set printserv = filemtk.Properties("COMMANDS").AsIDispatch
id = NMKTP.Properties("ID").AsInteger
Set Doc = TCSApp.SingleDoc( CSDN_Const.dspSearchDocByDocID, Id )

 if not printserv is Nothing then
   if printserv.Locate( "NOTE", "Распечатать", 0 ) then Doc.OpenDoc( printserv.Properties("ID").AsInteger )
 End if

По крайней мере печать идет :)

(изменено: , 7 апреля 2021 12:11:06)

Re: Вызов команд над файлами

Только добавьте

Doc.UserModuleName = NMk.UniqueUserModuleName
Call theApp.DeleteModuleByUserModuleName( Doc.UserModuleName )

чтобы документ в памяти не висел потом

Ну и COMMANDS можно взять у документа, файлы брать не обязательно и даже нельзя (так как файлов может быть несколько)

Re: Вызов команд над файлами

Спасибо за помощь! Буду пробовать.

Re: Вызов команд над файлами

Вот так видимо доожно быть в итоге

' ищем в составе документов МТК
If NMKTP.Locate(key, "МТК", 0) Then
  Set printserv = NMKTP.Properties("COMMANDS").AsIDispatch
 if not printserv is Nothing then
   if printserv.Locate( "NOTE", "Распечатать", 0 ) then NMKTP.OpenDoc( printserv.Properties("ID").AsInteger )
 End if
End If
Спасибо сказали: vitaly5761

Re: Вызов команд над файлами

Да, спасибо. В итоге такая конструкция и получилась.