Тема: Привязка документа к номенклатуре

Добрый день!
В процессе работы появились две проблемы, которые никак не получается реализовать:
1. При выводе техпроцесса на печать у нас формируется бланк только по выполняемым операциям (маршрутно-технологическая карта). Необходимо отчет сохранить в архиве в формате пдф. Пробовал делать так:

Sub TCSRpt_End()
  If TCSRpt.RptHdr.IsBlankRpt Then
  Nomer_MTK = Trim( TCSRpt.RptFunc.GetNamedValue( "Îáîçíà÷åíèå" ) ) & " ÌÒÊ"
  if Nomer_MTK<>"" Then
      PackName = TCSRpt.RptHdr.BlankName
      PackName = Replace( PackName, "(Excel)", "" )
      PackName = Replace( PackName, "(Calc)", "" )
      Note = TCSRpt.RptFunc.GetNamedValue( "Îáîçíà÷åíèå" )
      Name = TCSRpt.RptFunc.GetNamedValue( "Íàèìåíîâàíèå" )
      DocName = "ÌÒÊ """ & Note & " - " & Name & """"
      VerName = TCSRpt.RptFunc.GetNamedValue( "Âåðñèÿ" )
      FileName = Nomer_MTK & "_" & PackName + Mid( TCSRpt.FileName, InStrRev( TCSRpt.FileName, "." ) )
      pdf = TCSRpt.ExportToPdf(FileName, Null)
      if MsgBox( "Ñîõðàíèòü îò÷åò ÌÒÊ â TechnologiCS '" + Nomer_MTK + " - " + DocName + "#" + VerName + "'?", vbYesNo or vbDefaultButton2, "Ïîäòâåðæäåíèå" )=6 Then
       Call TCSRpt.SaveToDocument(pdf, Nomer_MTK, Name, VerName, "ÌÒÊ", FileName, Null, Null, Null, True )
           End If
    Else
      Call TCSRpt.WriteReportErrorLog( "Íå ñîçäàí äîêóìåíò ÌÒÊ èëè íîìåð ÌÒÊ íå ïî øàáëîíó!" )
    End If
 End If

Программа все равно сохраняет файл xlsx, вместо pdf.

2. Вторая проблема: как при распечатывании документа (МТК) привязать ее к номенклатуре?

Re: Привязка документа к номенклатуре

vitaly576 пишет:

Программа все равно сохраняет файл xlsx, вместо pdf.

Судя по коду, мне кажется, что в файловый состав сохраняется документ в формате "pdf", но с расширением "xlsx".

Проверьте, какое значение имеет переменная FileName перед вызовом Call TCSRpt.SaveToDocument(...).

Re: Привязка документа к номенклатуре

Если просматривать временную папку, то файл с расширением pdf создается.
Согласно справке по api функция ExportToPdf должна возвращать полный путь файла, а путь должен включать расширение.
Пытался также указать явное расширение типа такого:

pdf = TCSRpt.ExportToPdf(FileName, Null) & ".pdf"

А что можете сказать касаемо второго вопроса?

Re: Привязка документа к номенклатуре

Добрый день!
Передаете имя файла с расширением (6-й параметр SaveToDocument), вот и сохраняется "pdf" с переданным расширением.
ExportToPdf - возвращает путь к файлу pdf уже с расширением

Re: Привязка документа к номенклатуре

Сделал. Программа сохраняет нечитаемый поврежденный файл pdf.

 pdf = "МТК " & TCSRpt.RptFunc.GetNamedValue( "Обозначение" ) & Name & ".pdf"
      if MsgBox( "Сохранить в TechnologiCS '" + Nomer_MTK + " - " + DocName + "#" + VerName + "'?", vbYesNo or vbDefaultButton2, "Ïîäòâåðæäåíèå" )=6 Then
       Call TCSRpt.SaveToDocument( "", Nomer_MTK, Name, VerName, "МТК", pdf, Null, Null, Null, True )

Re: Привязка документа к номенклатуре

Шестой параметр FileName, функции SaveToDocument должен быть имя файла без пути и расширения.
Вы передаёте полный путь, да еще первый параметр пустой, это значит брать файл по умолчанию, то есть xlsx.

      Call TCSRpt.SaveToDocument( pdf, Nomer_MTK, Name, VerName, "МТК", "ИмяФайлаБезРасширения", Null, Null, Null, True )

Re: Привязка документа к номенклатуре

По второму вопросу смотрите

INomenclatureDocuments 
  LinkNomenclatureToDocument
  LinkNmkVersionToDocument

Ссылку на документ можно получть через theApp.SingleDoc(CSDN_Const.dspSearchDocByVerID, verid)
TCSRpt.SaveToDocument - возвращает идентификатор версии документа
Номенклатуру найдете по классу и обозначению или как то еще.

Re: Привязка документа к номенклатуре

Виктор Бебякин пишет:

Шестой параметр FileName, функции SaveToDocument должен быть имя файла без пути и расширения.
Вы передаёте полный путь, да еще первый параметр пустой, это значит брать файл по умолчанию, то есть xlsx.

      Call TCSRpt.SaveToDocument( pdf, Nomer_MTK, Name, VerName, "МТК", "ИмяФайлаБезРасширения", Null, Null, Null, True )

Странно, но не выходит. Пишет, что файл не найден, хотя во временной папке он есть.

pdf = "МТК " & TCSRpt.RptFunc.GetNamedValue( "Обозначение" ) & " " & Name & ".pdf"
      pdf2 = "МТК " & TCSRpt.RptFunc.GetNamedValue( "Обозначение" ) & " " & Name

      if MsgBox( "Ñîõðàíèòü îò÷åò ÌÒÊ â TechnologiCS '" + Nomer_MTK + " - " + DocName + "#" + VerName + "'?", vbYesNo or vbDefaultButton2, "Ïîäòâåðæäåíèå" )=6 Then
      Call TCSRpt.ExportToPdf(FileName, Null)
       Call TCSRpt.SaveToDocument( pdf, Nomer_MTK, Name, VerName, "ÌÒÊ", pdf2, Null, Null, Null, True )

(изменено: Дмитрий Гамий, 28 декабря 2020 17:47:28)

Re: Привязка документа к номенклатуре

Попробуйте вот так:

      

pdf =  TCSRpt.ExportToPdf("", Null) ' Берем имя файла отчета

' Формируем имя файла, которое будет записано в файловій состав
FileName = "МТК " & TCSRpt.RptFunc.GetNamedValue( "Обозначение" ) & " " & Name

Call TCSRpt.SaveToDocument( pdf, Nomer_MTK, Name, VerName, "ÌÒÊ", FileName, Null, Null, Null, True )

Re: Привязка документа к номенклатуре

Дмитрий Гамий пишет:

Попробуйте вот так:

      

pdf =  TCSRpt.ExportToPdf("", Null) ' Берем имя файла отчета

' Формируем имя файла, которое будет записано в файловій состав
FileName = "МТК " & TCSRpt.RptFunc.GetNamedValue( "Обозначение" ) & " " & Name

Call TCSRpt.SaveToDocument( pdf, Nomer_MTK, Name, VerName, "ÌÒÊ", FileName, Null, Null, Null, True )

Программа сохраняет файл без расширения.

Re: Привязка документа к номенклатуре

Сделал так:

 pdf = TCSRpt.ExportToPdf(Nomer_MTK, Null)
      FileName = Nomer_MTK + ".pdf"
     Call TCSRpt.SaveToDocument( pdf, Nomer_MTK, Name, VerName, "МТК", FileName, Null, Null, Null, True )
      Call TCSRpt.ExportToPdf(Nomer_MTK, Null)

Но появилась другая проблема, во временных файлах файл пдф создается с урезанным названием. Допустим обозначение МТК - АБВГ.123.02.01.500 МТК, а сохраняется файл с именем: АБВГ.123.02.01