Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 243.37 KB | None | 0 0
  1. Option Explicit
  2. 'Dim swDraw1 As Object
  3. 'Dim swModExt As Object
  4. 'Dim swBomTable As Object
  5. 'Dim swTable As Object
  6. 'Dim swTable1 As Object
  7. 'Dim swAnn As Object
  8. 'Dim swTextFormat As Object
  9. 'Dim swTextFormatUnd As Object
  10. 'Dim swTextFormatTest As Object
  11. 'Dim swBomFeat As Object
  12. 'Dim swSelMgr As Object
  13. 'Dim swNote As Object
  14. 'Dim swConfig As Object
  15. Dim swDraw1 As SldWorks.DrawingDoc
  16. Dim swModExt As SldWorks.ModelDocExtension
  17. Dim swBomTable As SldWorks.BomTableAnnotation
  18. Dim swTable As SldWorks.TableAnnotation
  19. Dim swTable1 As SldWorks.TableAnnotation
  20. Dim swAnn As SldWorks.Annotation
  21. Dim swTextFormat As SldWorks.TextFormat
  22. Dim swTextFormatUnd As SldWorks.TextFormat
  23. Dim swTextFormatTest As SldWorks.TextFormat
  24. Dim swBomFeat As SldWorks.BomFeature
  25. Dim swSelMgr As SldWorks.SelectionMgr
  26. Dim swNote As SldWorks.Note
  27. Dim swConfig As SldWorks.Configuration
  28. Dim swFeat As SldWorks.Feature
  29. Dim fs As Object
  30. Dim nNumRow As Long ' Число строк
  31. Dim nNumRowTemp As Long ' Число строк для временного использования
  32. Dim nNumColumn As Long ' Число колонок
  33. Dim sSource As String
  34. Dim sSource1 As String
  35. Dim sSource2 As String
  36. Dim sSource3 As String
  37. Dim sSource6 As String
  38. Dim sSource7 As String
  39. Dim sSource11 As String
  40. Dim sSource12 As String
  41. Dim sSource13 As String
  42. Dim sSource15 As String
  43. Dim sSource16 As String
  44. Dim sSource17 As String
  45. Dim sSource18 As String
  46. Dim sSource19 As String
  47. Dim sConfigName As String
  48. Dim vConfNameArr As Variant
  49. Dim vConfVisible As Variant
  50. Dim vConfVisibleSP As Variant
  51. Dim vVisible As Variant
  52. Dim vModelViewNames As Variant
  53. Dim vRetval As Variant
  54. Dim dRetval As Double
  55. Dim lRetval As Long
  56. Dim bRetval As Boolean
  57. Dim ok As Boolean
  58. Dim nConfNumb As Long
  59. Dim sModelName As String
  60. Dim sNumber As String ' ini
  61. Dim sNumberText As String
  62. 'Dim mNumber As Integer ' Метка: 0 - св-во пользователя
  63. Dim sDescription As String ' ini
  64. Dim sDescriptionText As String
  65. 'Dim mDescription As Integer ' Метка: 0 - св-во пользователя
  66. 'Dim sFontName As String ' ini
  67. 'Dim dFontSize As Double ' ini
  68. 'Dim dFontSpace As Double ' ini
  69. Dim dFontWidth As Double ' ini
  70. Dim dRowWidth As Double ' ini
  71. Dim dRemarkWidth As Double ' ini
  72. Dim iSP1 As Integer ' ini
  73. Dim iSP2 As Integer ' ini
  74. Dim iGSP1 As Integer ' ini
  75. Dim iGSP2 As Integer ' ini
  76. Dim iVP1 As Integer ' ini
  77. Dim iVP2 As Integer ' ini
  78. Dim iLine As Integer ' ini
  79. Dim iLineCount As Integer ' ini
  80. Dim iSection As Integer ' ini
  81. Dim iSectionCount As Integer ' ini
  82. Dim iPosLine As Integer ' ini
  83. Dim iPosLineCount As Integer ' ini
  84. Dim iPosReserve As Integer ' ini
  85. Dim iPosSection As Integer ' ini
  86. Dim iPosSectionCount As Integer ' ini
  87. Dim iForm0 As Integer ' ini
  88. Dim iForm1 As Integer ' ini
  89. Dim iForm2 As Integer ' ini
  90. Dim iLRI As Integer ' ini
  91. Dim iSort As Integer ' ini
  92. Dim iOther As Integer ' ini
  93. Dim sTemp() As String
  94. Dim bTemp() As Boolean
  95. Dim iTemp As Integer
  96. Dim iTempArr() As Integer
  97. Dim vSheetProps As Variant
  98. Dim sSpecData() As String
  99. Dim sSpecDataSize As Integer
  100. Dim ComplectData() As String
  101. Dim ComplectDataSize As Integer
  102. Dim sSectionData() As String
  103. Dim sGroupData() As String
  104. Dim sMaterialGroupData() As String
  105. Dim strTemp As String
  106. Dim strTemp1 As String
  107. Dim strTemp2 As String
  108. Dim strTemp3 As String
  109. Dim strTemp4 As String
  110. Dim strTemp5 As String
  111. Dim strTempData1() As String
  112. Dim varTemp As Variant
  113. Dim varTemp1 As Variant
  114. Dim dblTemp As Double
  115. Dim dblTemp1 As Double
  116. Dim Result As String
  117. Dim iSheetNumb As Integer
  118. Dim DeleteOption As Long
  119. Dim MForm As Integer ' Метка флажка Задать формат: 0 - пользователь изменил флажок; 1 - флажок изменен из программы
  120. Dim MSort As Integer ' Метка кнопки сортировка
  121. Dim MType As Integer ' Метка списка CboType: 0 - пользователь изменил список; 1 - список изменен из программы
  122. Dim MTests As Integer ' Метка процедуры Tests: 0 - первичный вызов; 1 - вызов из ChkFormat_Click
  123. Dim MCmdProp As Integer ' Метка кнопки Внести свойства
  124. Dim MFormat As Integer ' Метка кнопки Форматировать: 0 - пользователь нажал кнопку; 1 - вызвано из программы
  125. Dim MPosition As Integer ' Метка кнопки Расставить позиции: 0 - пользователь нажал кнопку; 1 - вызвано из программы
  126. Dim sSheetsNames1 As String ' Имена листов со старыми версиями
  127. Dim sSheetsNames2 As String ' Имена листов с нечитаемыми форматами
  128. Dim sSheetsNames3 As String ' Имена листов с проблемами оформления
  129. Dim strMsg As String ' Строка сообщения пользователю
  130. Dim sFormatArray() As String
  131. Dim strSheetFormatName As String
  132. Dim intDRWSheet As Integer
  133. Dim DocDataReal() As String ' Массив документов раздела Документация с учетом выбранных пользователем
  134. Dim DocDataRealSize As Integer
  135. Dim sRevision2 As String
  136. Dim sRevision3 As String
  137. Dim sRevision4 As String
  138. Dim sDate As String
  139. Dim nFirst As Integer ' Число строк первого листа
  140. Dim nSecond As Integer ' Число строк второго листа
  141. Dim m As Integer ' Метка
  142. Dim m1 As Integer ' Метка
  143. Dim m2 As Integer
  144. Dim m3 As Integer
  145. Dim ConfigTest As Integer ' Метка проверки числа конфигураций
  146. Dim iResult As Integer
  147. Dim n As Integer ' Носитель
  148. Dim k As Integer ' Носитель
  149. Dim k1 As Integer ' Носитель
  150. Dim k2 As Integer
  151. Dim k3 As Integer
  152. Dim i As Integer ' Счетчик
  153. Dim ii As Integer ' Счетчик
  154. Dim j As Integer ' Счетчик
  155. Dim j1 As Integer ' Счетчик
  156. Dim jj As Integer
  157. Dim jjj As Integer
  158. Dim l As Integer
  159. Dim l1 As Integer
  160. Dim MyDateTime As Date
  161. Dim nIndex As Long
  162. Dim nCount As Long
  163. Dim nStart As Long
  164. Dim nEnd As Long
  165. Dim nSplitDir As Long
  166. ' *** MyProperties
  167. Dim prpNumber As String
  168. Dim prpDocCode As String
  169. Dim prpDocDescription As String
  170. Dim prpDescription As String
  171. Dim prpDescriptionMulti As String
  172. Dim prpCode As String
  173. Dim prpFormat As String
  174. Dim prpRemark As String
  175. Dim prpLit As String
  176. Dim prpLitTable As String
  177. Dim prpFirm As String
  178. Dim prpSection As String
  179. Dim prpGroup As String
  180. '
  181. Dim prpDesigner As String
  182. Dim prpTester As String
  183. Dim prpTechcontrol As String
  184. Dim prpWorkType As String
  185. Dim prpPerson As String
  186. Dim prpNormcontrol As String
  187. Dim prpApprove As String
  188. '
  189. Dim prpMass As String
  190. Dim prpMassTable As String
  191. Dim prpMaterial As String
  192. Dim prpMaterialTable As String
  193. '
  194. Dim prpFirstApply As String
  195. Dim prpInformNumber As String
  196. '
  197. Dim prpFirstApplySP As String
  198. Dim prpInformNumberSP As String
  199. Dim prpLitSP As String
  200. '
  201. Dim prpInformNumberVP As String
  202. Dim prpDescriptionVP As String
  203. Dim prpProductCodeVP As String
  204. Dim prpNumberDocVP As String
  205. Dim prpVendorVP As String
  206. Dim prpRemarkVP As String
  207. '
  208. Dim prpProject As String
  209. Dim prpDraftNumber As String
  210. Dim prpDraftDescription As String
  211. Dim prpDraftFirstApply As String
  212. Dim prpDraftFirstApplySP As String
  213. '
  214. Dim prpBlank As String
  215. '
  216. Dim prpBor As String
  217. '
  218. Dim prpQuantity As String
  219. '
  220. Dim prpTestVersion As Integer
  221. Dim prpTestFormat As Integer
  222. Dim prpTestName As Integer
  223. ' Dim prpTestStandard As Integer
  224. '
  225. Dim prpFileName As Integer
  226. Dim prpNameSep As String
  227. Dim prpFontSize As Integer
  228. '
  229. Dim prpAddPRP1 As String
  230. Dim prpAddPRP2 As String
  231. '
  232. 'Dim prpLeftTopCorner As Integer
  233. 'Dim prpTopAll As Integer
  234.  
  235. Private Sub ChkAssem_Click()
  236. MType = 1
  237. CboType_Change
  238. MType = 0
  239. End Sub
  240.  
  241. Private Sub CboType_Change()
  242.  
  243. If CboType.ListIndex = 0 Then ' Спецификация
  244. FrmSpecEditor.Width = 463
  245. CmdDoc.Enabled = True
  246. Frame6.Enabled = True
  247. ChkAssem.Visible = True
  248. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  249. FrmSpecEditor.Width = 567
  250. CmdDoc.Enabled = True
  251. Frame6.Enabled = True
  252. ChkAssem.Visible = False
  253. Else ' Ведомость покупных
  254. FrmSpecEditor.Width = 463
  255. CmdDoc.Enabled = False
  256. Frame6.Enabled = False
  257. ChkAssem.Visible = False
  258. End If
  259. If mSpecType = CboType.ListIndex And mSpec = 1 And ChkAssem.Value = mChkAssem Then
  260. CmdSort.Enabled = True
  261. FrmLine.Enabled = True
  262. If ChkAssem.Value = True Then
  263. FrmSheet.Enabled = False
  264. Else
  265. FrmSheet.Enabled = True
  266. End If
  267. CmdFormat.Enabled = True
  268. CmdAddFormat.Enabled = True
  269. If CboType.ListIndex = 2 Then ' Ведомость покупных
  270. CmdPosition.Enabled = False
  271. Else
  272. CmdPosition.Enabled = True
  273. End If
  274. Else
  275. CmdSort.Enabled = False
  276. FrmLine.Enabled = False
  277. FrmSheet.Enabled = False
  278. CmdFormat.Enabled = False
  279. CmdAddFormat.Enabled = False
  280. CmdPosition.Enabled = False
  281. End If
  282. ' Задаем количество строк на листах
  283. If CboType.ListIndex = 0 Then ' Спецификация
  284. nFirst = iSP1
  285. nSecond = iSP2
  286. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  287. nFirst = iGSP1
  288. nSecond = iGSP2
  289. Else ' Ведомость покупных
  290. nFirst = iVP1
  291. nSecond = iVP2
  292. End If
  293. If prpTestFormat = 1 And MType = 0 Then
  294. ChkFormat_Click
  295. End If
  296. End Sub
  297.  
  298. Private Sub CmdAddFormat_Click()
  299. lRetval = swApp.SendMsgToUser2("Внимание! Данное действие приведет к перезаписи ячеек таблицы и потере связей со свойствами моделей." & Chr$(10) & _
  300. "Чтобы исключить изменение свойств, проверьте, что установлен режим перезаписи ячеек." & Chr$(10) & _
  301. "Повторная сортировка таблицы будет ошибочной. Все еще хотите продолжить?", swMbWarning, swMbYesNo)
  302. If lRetval = swMbHitNo Then
  303. Exit Sub
  304. End If
  305. ImgInfo.Width = 5
  306. nNumRow = swTable.RowCount
  307. If iForm1 = 1 Then ' Выбрано убирать базовую часть обозначения для исполнений
  308. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  309. LblInfo.Caption = " Удаление базовой части обозначения"
  310. 'If CboType.ListIndex = 1 Then ' Групповая спецификация
  311. j = 0 ' Счетчик строк с исполнениями
  312. k = 0 ' Счетчик пустых строк
  313. For i = 1 To nNumRow - 1
  314. If i <> 1 Then ' Проверяем обозначения для исполнений
  315. If swTable.Text(i, 3) <> "" Then
  316. Debug.Print swTable.Text(i, 3), "i=", i
  317. strTemp = Right$(swTable.Text(i, 3), 4)
  318. varTemp = InStrRev(strTemp, "-")
  319. If varTemp > 0 Then ' Есть исполнение
  320. varTemp = InStrRev(swTable.Text(i, 3), "-")
  321. If Left$(swTable.Text(i, 3), 1) <> "-" Then ' Обозначение не укорочено, Сравниваем с базовой частью обозначения
  322. Debug.Print Left$(swTable.Text(i, 3), varTemp - 1), Left$(swTable.Text(i - j - k - 1, 3), varTemp - 1)
  323. If Left$(swTable.Text(i, 3), varTemp - 1) = Left$(swTable.Text(i - j - k - 1, 3), varTemp - 1) Then ' Совпадают
  324. j = j + 1
  325. strTemp = ""
  326. For ii = 1 To (varTemp - 1) * 2
  327. strTemp = strTemp & " "
  328. Next ii
  329. Debug.Print "*" & strTemp & "*"
  330. Debug.Print swTable.Text(i, 3)
  331. strTemp = strTemp & Right$(swTable.Text(i, 3), Len(swTable.Text(i, 3)) - varTemp + 1)
  332. swTable.Text(i, 3) = strTemp
  333. swTable.Text(i, 0) = " "
  334. If iForm0 = 1 Then ' Помечаем цветом
  335. ' Устанавливаем цвет
  336. End If
  337. Else
  338. j = 0
  339. End If
  340. End If
  341. Else
  342. j = 0
  343. End If
  344. k = 0
  345. Else
  346. k = k + 1
  347. If j <> 0 Then
  348. j = j + 1
  349. End If
  350. End If
  351. End If
  352. Next i
  353. End If
  354. End If
  355. ImgInfo.Width = 220
  356. If iForm2 = 1 Then ' Группировать стандартные
  357. Prepare ' Подготовка таблицы
  358. DeleteSpaceRow ' Удаление пустых строк
  359. LblInfo.Caption = " Группировка стандартных"
  360. i = 1
  361. jj = 1 ' Счетчик нужных строк
  362. j = 0 ' Номер первой строки одного ГОСТа
  363. n = 0 ' Метка конца одинаковых строк
  364. k = 1 ' Метка конца таблицы
  365. k1 = 1 ' Метка конца отбора первой строки
  366. k2 = 1 ' Метка конца отбора второй строки
  367. While k = 1
  368. Do While k1 = 1 ' Определяем первую строку
  369. If swTable.Text(i, 2) <> " " And swTable.Text(i, 2) <> "-" And swTable.Text(i, 3) = "" And swTable.Text(i, 4) <> "" Then ' Отсееваем лишние строки
  370. strTemp = swTable.Text(i, 4)
  371. Debug.Print strTemp, "jj=", jj
  372. ReDim Preserve iTempArr(jj)
  373. iTempArr(jj) = i
  374. jj = jj + 1
  375. Exit Do
  376. Else
  377. i = i + 1
  378. End If
  379. nNumRow = swTable.RowCount
  380. If i >= nNumRow - 2 Then
  381. k1 = 0
  382. Exit Do
  383. End If
  384. Loop
  385. If k1 <> 0 Then
  386. Do While k2 = 1 ' Определяем вторую строку
  387. If swTable.Text(i + 1, 2) <> " " And swTable.Text(i + 1, 2) <> "-" And swTable.Text(i + 1, 3) = "" And swTable.Text(i + 1, 4) <> "" Then ' Отсееваем лишние строки
  388. strTemp1 = swTable.Text(i + 1, 4)
  389. Exit Do
  390. Else
  391. i = i + 1
  392. End If
  393. nNumRow = swTable.RowCount
  394. If i >= nNumRow - 2 Then
  395. k2 = 0
  396. Exit Do
  397. End If
  398. Loop
  399. End If
  400. If k1 <> 0 And k2 <> 0 Then
  401. ' Заменяем переносы на пробелы
  402. strTemp = Replace(strTemp, Chr$(13) & Chr$(10), " ")
  403. strTemp = Replace(strTemp, Chr$(10), " ")
  404. strTemp1 = Replace(strTemp1, Chr$(13) & Chr$(10), " ")
  405. strTemp1 = Replace(strTemp1, Chr$(10), " ")
  406. varTemp = InStrRev(strTemp, " ") ' Находим первый пробел с конца
  407. If varTemp > 0 Then
  408. varTemp1 = InStrRev(strTemp, " ", varTemp - 1) ' Находим второй пробел с конца
  409. If varTemp1 > 0 Then
  410. Debug.Print Trim(Mid$(strTemp, varTemp1 + 1, varTemp - varTemp1 - 1))
  411. If Trim(Mid$(strTemp, varTemp1 + 1, varTemp - varTemp1 - 1)) = "Р" Then
  412. varTemp1 = InStrRev(strTemp, " ", varTemp1 - 1) ' Находим третий пробел с конца
  413. End If
  414. If varTemp1 > 0 Then
  415. If Len(strTemp) > Len(strTemp) - varTemp1 And Len(strTemp1) > Len(strTemp) - varTemp1 Then ' Сравниваем стандарты
  416. Debug.Print "Строки", strTemp, strTemp1
  417. Debug.Print "1", "*" & Right$(strTemp, Len(strTemp) - varTemp1) & "*"
  418. Debug.Print "2", "*" & Right$(strTemp1, Len(strTemp) - varTemp1) & "*"
  419. Debug.Print "**************"
  420. If Right$(strTemp, Len(strTemp) - varTemp1) = Right$(strTemp1, Len(strTemp) - varTemp1) Then ' Госты равны
  421. If j = 0 Then
  422. strTemp2 = Right$(strTemp, Len(strTemp) - varTemp1) ' ГОСТ
  423. varTemp = InStr(strTemp, " ")
  424. strTemp3 = Left$(strTemp, varTemp - 1) ' Тип
  425. Select Case strTemp3
  426. Case "Болт"
  427. strTemp4 = "Болты " & strTemp2
  428. Case "Винт"
  429. strTemp4 = "Винты " & strTemp2
  430. Case "Гайка"
  431. strTemp4 = "Гайки " & strTemp2
  432. Case "Шайба"
  433. strTemp4 = "Шайбы " & strTemp2
  434. Case "Шпонка"
  435. strTemp4 = "Шпонки " & strTemp2
  436. Case "Штифт"
  437. strTemp4 = "Штифты " & strTemp2
  438. Case "Кольцо"
  439. strTemp4 = "Кольца " & strTemp2
  440. Case "Подшипник"
  441. strTemp4 = "Подшипники " & strTemp2
  442. Case "Шарик"
  443. strTemp4 = "Шарики " & strTemp2
  444. Case "Шпилька"
  445. strTemp4 = "Шпильки " & strTemp2
  446. Case "Шуруп"
  447. strTemp4 = "Шурупы " & strTemp2
  448. Case Else
  449. strTemp4 = strTemp3 & " " & strTemp2
  450. End Select
  451. j = jj - 1 ' Запоминаем первую строчку
  452. End If
  453. n = 1
  454. End If
  455. End If
  456. End If
  457. End If
  458. End If
  459. End If
  460. nNumRow = swTable.RowCount
  461. If i >= nNumRow - 1 Then
  462. n = 0
  463. i = i + 1
  464. End If
  465. If j <> 0 And n = 0 Then ' Строчки с одним ГОСТом кончились
  466. For ii = j To jj - 1
  467. strTemp = swTable.Text(iTempArr(ii), 4)
  468. strTemp = Replace(strTemp, Chr$(13) & Chr$(10), " ")
  469. strTemp = Replace(strTemp, Chr$(10), " ")
  470. strTemp = RTrim(Left$(strTemp, Len(strTemp) - Len(strTemp2))) ' Отрезаем ГОСТ
  471. If strTemp3 <> "Шайба" Then ' Отрезаем Тип
  472. strTemp = LTrim(Right$(strTemp, Len(strTemp) - Len(strTemp3)))
  473. End If
  474. swTable.Text(iTempArr(ii), 4) = strTemp
  475. If iForm0 = 1 Then ' Помечаем цветом
  476. ' Устанавливаем цвет
  477. End If
  478. Next ii
  479. ok = swTable.InsertRow(swTableItemInsertPosition_Before, iTempArr(j))
  480. swTable.Text(iTempArr(j), 2) = " "
  481. swTable.Text(iTempArr(j), 4) = strTemp4
  482. i = i + 1
  483. j = 0
  484. End If
  485. n = 0
  486. i = i + 1
  487. nNumRow = swTable.RowCount
  488. If i > nNumRow - 1 Then
  489. k = 0
  490. End If
  491. Debug.Print "i=", i
  492. Wend
  493. SpaceRow ' Пустые строки
  494. MFormat = 1
  495. CmdFormat_Click ' Форматирование
  496. MFormat = 0
  497. End If
  498. ImgInfo.Width = 447
  499. LblInfo.Caption = " Готово"
  500. Finish
  501. End Sub
  502.  
  503. Private Sub CmdDoc_Click() ' Документация
  504. mDocShow = 0
  505. FrmSpecEditor_Doc.Show ' vbModeless
  506. mDocShow = 1
  507. FrmSpecEditor_Doc.Show ' vbModeless
  508. End Sub
  509.  
  510. Private Sub CmdLineUp_Click()
  511. Dim FirstRow As Long
  512. Dim LastRow As Long
  513. Dim FirstColumn As Long
  514. Dim LastColumn As Long
  515. Dim swSelData As SelectData
  516. Dim swSelMgr As SelectionMgr
  517. Set swSelMgr = swDraw.SelectionManager
  518. Set swSelData = swSelMgr.CreateSelectData
  519. swSelData.GetCellRange FirstRow, LastRow, FirstColumn, LastColumn
  520. Debug.Print FirstRow, LastRow, FirstColumn, LastColumn
  521. swTable.GetCellRange FirstRow, LastRow, FirstColumn, LastColumn
  522. Debug.Print FirstRow, LastRow, FirstColumn, LastColumn
  523. 'swTable.SetCellRange 3, 4, 2, 3
  524. End Sub
  525.  
  526. Private Sub CmdPosTest_Click()
  527.  
  528. Dim sTempArr1() As String
  529. Dim sTempArr2() As String
  530.  
  531. ImgInfo.Width = 5
  532.  
  533. ' Узнаем имя активного листа
  534. Set swSheet = swDraw.GetCurrentSheet
  535. strActiveSheetName = swSheet.GetName
  536.  
  537. ' Определяем количество позиций в таблице
  538. nNumRow = swTable.RowCount
  539. jj = 0
  540. ReDim sTempArr1(0)
  541. For i = 1 To nNumRow - 1
  542. If swTable.Text(i, 2) <> " " And swTable.Text(i, 2) <> "-" Then
  543. ReDim Preserve sTempArr1(jj)
  544. sTempArr1(jj) = swTable.Text(i, 2)
  545. jj = jj + 1
  546. End If
  547. Next i
  548.  
  549. ' Считываем позиции с листов чертежа
  550. vSheetNames = swDraw.GetSheetNames
  551. j = 0
  552. jj = 0
  553. ReDim sTempArr2(0)
  554. 'Debug.Print "UBound(vSheetNames)", UBound(vSheetNames)
  555. For i = 0 To UBound(vSheetNames)
  556. ' Проверка имени листа
  557. If Left$(vSheetNames(i), 3) = "DRW" Or Left$(vSheetNames(i), 4) = "Лист" Or Left$(vSheetNames(i), 5) = "Sheet" Then
  558. j = j + 1
  559. ok = swDraw.ActivateSheet(vSheetNames(i))
  560. Set swSheet = swDraw.GetCurrentSheet
  561. 'strTemp = "DRW" & CStr(j)
  562. 'vSheetProps = swSheet.GetProperties
  563. 'ok = swDraw.SetupSheet4(strTemp, vSheetProps(0), vSheetProps(1), Numerator, Denominator, vSheetProps(4), swSheet.GetTemplateName, vSheetProps(5), vSheetProps(6), swSheet.CustomPropertyView)
  564. Set swView = swDraw.GetFirstView
  565. Do While Not swView Is Nothing
  566. Set swNote = swView.GetFirstNote
  567. Do While Not swNote Is Nothing
  568. If swNote.IsBomBalloon Then
  569. If swNote.GetBomBalloonTextStyle(True) = swDetailingNoteTextItemNumber Then
  570. Debug.Print swNote.GetText
  571. ReDim Preserve sTempArr2(jj)
  572. sTempArr2(jj) = swNote.GetText
  573. jj = jj + 1
  574. End If
  575. End If
  576. Set swNote = swNote.GetNext
  577. Loop
  578. Set swView = swView.GetNextView
  579. Loop
  580. End If
  581. Next i
  582.  
  583. ' Проверка повторяющихся позиций
  584. strTemp = ""
  585. For i = 0 To UBound(sTempArr2) - 1
  586. For j = i + 1 To UBound(sTempArr2)
  587. If sTempArr2(i) = sTempArr2(j) Then
  588. If strTemp = "" Then
  589. strTemp = sTempArr2(j)
  590. Else
  591. strTemp = strTemp & ", " & sTempArr2(j)
  592. End If
  593. End If
  594. Next j
  595. Next i
  596.  
  597. ' Проверка пропущенных позиций
  598. strTemp1 = ""
  599. For i = 0 To UBound(sTempArr1)
  600. m = 0
  601. For ii = 0 To i - 1
  602. If sTempArr1(i) = sTempArr1(ii) Then
  603. m = 1
  604. Exit For
  605. End If
  606. Next ii
  607. If m = 0 Then
  608. For j = 0 To UBound(sTempArr2)
  609. If sTempArr1(i) = sTempArr2(j) Then
  610. m = 1
  611. Exit For
  612. End If
  613. Next j
  614. If m = 0 Then
  615. If strTemp1 = "" Then
  616. strTemp1 = sTempArr1(i)
  617. Else
  618. strTemp1 = strTemp1 & ", " & sTempArr1(i)
  619. End If
  620. End If
  621. End If
  622. Next i
  623. If strTemp = "" And strTemp1 = "" Then
  624. lRetval = swApp.SendMsgToUser2("Позиции проставлены правильно.", swMbWarning, swMbOk)
  625. ElseIf strTemp = "" And strTemp1 <> "" Then
  626. strMsg = "Пропущены следующие позиции: " & strTemp1 & "."
  627. lRetval = swApp.SendMsgToUser2(strMsg, swMbWarning, swMbOk)
  628. ElseIf strTemp <> "" And strTemp1 = "" Then
  629. strMsg = "Имеются повторы позиций: " & strTemp & "."
  630. lRetval = swApp.SendMsgToUser2(strMsg, swMbWarning, swMbOk)
  631. Else
  632. strMsg = "Пропущены следующие позиции: " & strTemp1 & "." & Chr$(10) & _
  633. "Имеются повторы позиций: " & strTemp & "."
  634. lRetval = swApp.SendMsgToUser2(strMsg, swMbWarning, swMbOk)
  635. End If
  636.  
  637. ' Возвращение активного листа
  638. ok = swDraw.ActivateSheet(strActiveSheetName)
  639.  
  640. ImgInfo.Width = 447
  641. LblInfo.Caption = " Готово"
  642. Finish
  643. End Sub
  644.  
  645. Private Sub CmdPref_Click() ' Настройки
  646. FrmSpecEditor_Pref.Show 'vbModeless
  647. End Sub
  648.  
  649. Function BOMPartNumber(swConfigTemp As Object) As String ' Part Number (swConfigTemp As SldWorks.Configuration)
  650. Select Case swConfigTemp.BOMPartNoSource
  651. Case swBOMPartNumber_ConfigurationName
  652. BOMPartNumber = swConfigTemp.Name
  653. Case swBOMPartNumber_DocumentName
  654. BOMPartNumber = sModelName
  655. Case swBOMPartNumber_UserSpecified
  656. BOMPartNumber = swConfigTemp.AlternateName
  657. Case swBOMPartNumber_ParentName
  658. Dim swParentConfig As SldWorks.Configuration
  659. Set swParentConfig = swConfigTemp.GetParent
  660. BOMPartNumber = BOMPartNumber(swParentConfig)
  661. End Select
  662. End Function
  663.  
  664. Private Sub CmdProp_Click()
  665.  
  666. If MCmdProp = 0 Then
  667. ImgInfo.Width = 5
  668. End If
  669. LblInfo.Caption = " Запись свойств"
  670.  
  671. ' Заносим свойства в модель
  672. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  673. ' Первичное применение
  674. ok = swModel.AddCustomInfo3(sConfigName, prpFirstApplySP, swCustomInfoText, TxtFirst.Value)
  675. swModel.CustomInfo2(sConfigName, prpFirstApplySP) = TxtFirst.Value
  676. ' Эскизное Первичное применение
  677. ok = swModel.AddCustomInfo3(sConfigName, prpDraftFirstApplySP, swCustomInfoText, TxtDraftFirst.Value)
  678. swModel.CustomInfo2(sConfigName, prpDraftFirstApplySP) = TxtDraftFirst.Value
  679. ' Справочный номер
  680. ok = swModel.AddCustomInfo3(sConfigName, prpInformNumberSP, swCustomInfoText, TxtInform.Value)
  681. swModel.CustomInfo2(sConfigName, prpInformNumberSP) = TxtInform.Value
  682. If CboType.ListIndex = 1 Then ' Групповая спецификация
  683. ok = swModel.AddCustomInfo3(sConfigName, prpLitSP, swCustomInfoText, "")
  684. If ChkLit.Value = True Then
  685. swModel.CustomInfo2(sConfigName, prpLitSP) = "-"
  686. Else
  687. swModel.CustomInfo2(sConfigName, prpLitSP) = swModel.CustomInfo2(sConfigName, prpLitTable)
  688. End If
  689. End If
  690. ' Код и Наименование документа
  691. If ChkAssem.Value = True Then
  692. swModel.CustomInfo2(sConfigName, prpDocCode) = ""
  693. swModel.CustomInfo2(sConfigName, prpDocDescription) = ""
  694. Else
  695. swModel.CustomInfo2(sConfigName, prpDocCode) = "СБ"
  696. If prpFontSize = 1 Then
  697. swModel.CustomInfo2(sConfigName, prpDocDescription) = "<FONT size=1> " & Chr$(10) & "<FONT size=2.5>" & "Сборочный чертеж"
  698. Else
  699. swModel.CustomInfo2(sConfigName, prpDocDescription) = "Сборочный чертеж"
  700. End If
  701. End If
  702. Else ' Ведомость покупных
  703. ' Первичное применение
  704. ok = swModel.AddCustomInfo3(sConfigName, prpFirstApply, swCustomInfoText, TxtFirst.Value)
  705. swModel.CustomInfo2(sConfigName, prpFirstApply) = TxtFirst.Value
  706. ' Справочный номер
  707. ok = swModel.AddCustomInfo3(sConfigName, prpInformNumberVP, swCustomInfoText, TxtInform.Value)
  708. swModel.CustomInfo2(sConfigName, prpInformNumberVP) = TxtInform.Value
  709. End If
  710.  
  711. ' Заносим свойства в чертеж
  712. ok = swDraw.AddCustomInfo2("CheckFormat", 30, "")
  713. swDraw.CustomInfo2("", "CheckFormat") = ChkFormat.Value
  714.  
  715. If MCmdProp = 0 Then
  716. swDraw.ForceRebuild3 (True)
  717. ImgInfo.Width = 447
  718. LblInfo.Caption = " Готово"
  719. Finish
  720. End If
  721.  
  722. End Sub
  723.  
  724. Private Sub Prepare() ' Подготовка таблицы
  725.  
  726. LblInfo.Caption = " Подготовка таблицы"
  727.  
  728. ' Получаем инфу о разделении таблицы
  729. nSplitDir = swTable.GetSplitInformation(nIndex, nCount, nStart, nEnd)
  730. 'Debug.Print nSplitDir
  731. 'Debug.Print nIndex
  732. 'Debug.Print nCount
  733. 'Debug.Print nStart
  734. 'Debug.Print nEnd
  735.  
  736. ' Объединяем части таблицы
  737. If nSplitDir <> swTableSplit_None Then
  738. For i = 1 To nCount - 1
  739. ok = swTable.Merge(swTableSplit_AfterRow)
  740. Next i
  741. End If
  742.  
  743. ' Скрываем таблицу
  744. Set swAnn = swTable.GetAnnotation
  745. swAnn.Visible = swAnnotationHidden
  746.  
  747. ' Разбиваем ячейки
  748. nNumRow = swTable.RowCount
  749. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  750. For i = 0 To nNumRow - 1
  751. ok = swTable.UnmergeCells(i, 3)
  752. ok = swTable.UnmergeCells(i, 4)
  753. ok = swTable.UnmergeCells(i, nNumColumn - 1)
  754. Next i
  755. ok = swTable.UnmergeCells(0, 5)
  756. Else ' Ведомость покупных
  757. For i = 0 To nNumRow - 1
  758. ok = swTable.UnmergeCells(i, 1)
  759. ok = swTable.UnmergeCells(i, 2)
  760. ok = swTable.UnmergeCells(i, 3)
  761. ok = swTable.UnmergeCells(i, 4)
  762. ok = swTable.UnmergeCells(i, 5)
  763. ok = swTable.UnmergeCells(i, nNumColumn - 1)
  764. Next i
  765. ok = swTable.UnmergeCells(0, 6)
  766. End If
  767.  
  768. End Sub
  769.  
  770. Private Sub DeleteSpaceRow()
  771.  
  772. LblInfo.Caption = " Удаление пустых строк"
  773.  
  774. ' Удаляем пустые строки
  775. nNumRow = swTable.RowCount
  776. nNumColumn = swTable.ColumnCount
  777. k = 1
  778. n = 0
  779. For i = 1 To nNumRow - 1 - n
  780. m = 0
  781. For j = 0 To nNumColumn - 1
  782. If swTable.Text(k, j) = "" Or swTable.Text(k, j) = " " Then
  783. Else
  784. m = 1
  785. End If
  786. Next j
  787. If m = 0 Then
  788. ok = swTable.DeleteRow(k)
  789. n = n + 1
  790. Else
  791. k = k + 1
  792. End If
  793. Next i
  794. End Sub
  795.  
  796. Private Sub CmdSort_Click() ' Сортировка
  797.  
  798. ' Проверка выбранных конфигураций
  799. If CboType.ListIndex = 1 Then ' Групповая спецификация
  800. LstConfigTest
  801. If ConfigTest = 0 Then
  802. swApp.SendMsgToUser ("Необходимо выбрать хотя бы одно исполнение.")
  803. Exit Sub
  804. End If
  805. End If
  806.  
  807. ImgInfo.Width = 5
  808.  
  809. Prepare ' Подготовка таблицы
  810. DeleteSpaceRow ' Удаление пустых строк
  811. 'For i = 0 To UBound(DocData)
  812. ' Debug.Print "DocData", i, "=", DocData(i)
  813. 'Next i
  814.  
  815. ' Добавляем/удаляем дополнительные пустые колонки для групповой спецификации
  816. If CboType.ListIndex = 1 Then ' Групповая спецификация
  817. If nNumColumn > 16 Then
  818. For i = 0 To nNumColumn - 16 - 1
  819. ok = swTable.DeleteColumn(14)
  820. Next i
  821. ElseIf nNumColumn < 16 Then
  822. For i = 0 To 16 - nNumColumn - 1
  823. ok = swTable.InsertColumn(swTableItemInsertPosition_After, nNumColumn - 2, "")
  824. ok = swTable.SetColumnType(swTable.ColumnCount - 2, swWeldTableColumnType_CustomProperty)
  825. Next i
  826. End If
  827. End If
  828. LblInfo.Caption = " Чтение разделов"
  829. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  830. ' Проверяем раздел Документация
  831. nNumRow = swTable.RowCount
  832. nNumColumn = swTable.ColumnCount
  833. If sNumber = "1" Then ' Обозначение
  834. strTemp = sNumberText
  835. If sNumberText = sModelName Then
  836. strTemp = "$PRPSHEET:" & Chr$(34) & "SW-File Name" & Chr$(34)
  837. End If
  838. Else
  839. strTemp = "$PRPSHEET:" & Chr$(34) & prpNumber & Chr$(34)
  840. End If
  841. k = -1 ' Cчетчик строк DocDataReal
  842. k1 = -1 ' Счетчик строк, включенных в списке "Добавления"
  843. l = -1 ' Номер последней добавленной строки из DocData
  844. n = 0 ' Счетчик удаленных строк
  845. ReDim DocDataReal(1000, nNumColumn - 1) ' Массив документов раздела Документация с учетом выбранных пользователем
  846. For i = 0 To nNumRow - 2 - n
  847. strTemp3 = swTable.Text(1, 4) ' Строка из таблицы
  848. m = 0 ' Метка конца раздела Документация
  849. For j = 1 To UBound(sSectionData) ' Проверяем конец раздела Документация
  850. If strTemp3 = sSectionData(j) Then ' Раздел Документация закончился
  851. m = 1
  852. End If
  853. Next j
  854. If m = 1 Then
  855. Exit For
  856. End If
  857. If strTemp3 = "" Or strTemp3 = "Документация" Then ' Пропускаем заголовок Документация
  858. Else ' Строка для анализа
  859. m = 0 ' Метка самопальной строки
  860. For j = 0 To UBound(strTempData) ' Проверяем список документов
  861. strTemp2 = strTempData(j)
  862. strTemp2 = Right$(strTemp2, Len(strTemp2) - InStr(strTemp2, "-"))
  863. strTemp2 = Trim(strTemp2)
  864. If strTemp3 = strTemp2 Then ' Строка есть в списке документов
  865. m = 1
  866. For jj = 0 To UBound(DocData) ' Проверяем включенные строки
  867. strTemp1 = DocData(jj)
  868. strTemp1 = Right$(strTemp1, Len(strTemp1) - InStr(strTemp1, "-"))
  869. strTemp1 = Trim(strTemp1)
  870. If strTemp3 = strTemp1 Then ' Строка включена
  871. If k <> -1 Then
  872. If strTemp3 <> DocDataReal(k, 4) Then ' Проверка для одинаковых документов груп. спец.
  873. k1 = k1 + 1
  874. End If
  875. Else
  876. k1 = k1 + 1
  877. End If
  878. k = k + 1
  879. If k1 < jj Then ' Есть новые включенные строки
  880. 'Debug.Print "k1 < jj", "k1=", k1, "jj=", jj, "l=", l
  881. For jjj = 0 To jj - k1 - 1
  882. strTemp1 = Left$(DocData(l + jjj + 1), InStr(DocData(l + jjj + 1), "-") - 1)
  883. strTemp1 = Trim(strTemp1)
  884. strTemp2 = Right$(DocData(l + jjj + 1), Len(DocData(l + jjj + 1)) - InStr(DocData(l + jjj + 1), "-"))
  885. strTemp2 = Trim(strTemp2)
  886. '!!!!!!!!!!!!!!' Формат
  887. DocDataReal(k, 2) = " " ' Позиция
  888. If Left$(strTemp1, 1) = "+" Then
  889. strTemp1 = Right$(strTemp1, Len(strTemp1) - 1)
  890. DocDataReal(k, 3) = strTemp1 ' Обозначение
  891. Else
  892. DocDataReal(k, 3) = strTemp & strTemp1 ' Обозначение
  893. End If
  894. DocDataReal(k, 4) = strTemp2 ' Наименование
  895. '!!!!!!!!!!!!!!' Примечание
  896. k = k + 1
  897. k1 = k1 + 1
  898. Next jjj
  899. End If
  900. For jjj = 0 To nNumColumn - 1
  901. DocDataReal(k, jjj) = swTable.Text(1, jjj)
  902. Next jjj
  903. l = jj
  904. Exit For
  905. End If
  906. Next jj
  907. Exit For
  908. End If
  909. Next j
  910. If m = 0 Then ' Строка самопальная
  911. If swTable.Text(1, 2) = " " Then ' Проверяем отображение позиции (для спецификаций, вставленных вручную)
  912. k = k + 1
  913. For jjj = 0 To nNumColumn - 1
  914. DocDataReal(k, jjj) = swTable.Text(1, jjj)
  915. Next jjj
  916. Else
  917. Exit For
  918. End If
  919. End If
  920. End If
  921. ok = swTable.DeleteRow(1)
  922. n = n + 1
  923. Next i
  924.  
  925. 'Debug.Print "UBound(DocData)", UBound(DocData)
  926. 'Debug.Print "k1", k1
  927. 'Debug.Print "k", k
  928.  
  929. If UBound(DocData) > k1 Then
  930. 'Debug.Print "Добавление в конец", UBound(DocData) - k1, "строк"
  931. For jjj = 0 To UBound(DocData) - k1 - 1
  932. k = k + 1
  933. strTemp1 = Left$(DocData(l + jjj + 1), InStr(DocData(l + jjj + 1), "-") - 1)
  934. strTemp1 = Trim(strTemp1)
  935. strTemp2 = Right$(DocData(l + jjj + 1), Len(DocData(l + jjj + 1)) - InStr(DocData(l + jjj + 1), "-"))
  936. strTemp2 = Trim(strTemp2)
  937. '!!!!!!!!!!!!!!' Формат
  938. DocDataReal(k, 2) = " " ' Позиция
  939. If Left$(strTemp1, 1) = "+" Then
  940. strTemp1 = Right$(strTemp1, Len(strTemp1) - 1)
  941. DocDataReal(k, 3) = strTemp1 ' Обозначение
  942. Else
  943. DocDataReal(k, 3) = strTemp & strTemp1 ' Обозначение
  944. End If
  945. DocDataReal(k, 4) = strTemp2 ' Наименование
  946. '!!!!!!!!!!!!!!' Примечание
  947. Next jjj
  948. End If
  949.  
  950. DocDataRealSize = k
  951. 'For i = 0 To DocDataRealSize
  952. 'Debug.Print "DocDataReal", i, "=", DocDataReal(i, 4)
  953. 'Next i
  954. End If
  955. MSort = 1
  956. CmdOk_Click
  957. MSort = 0
  958.  
  959. End Sub
  960.  
  961. Public Sub UserForm_Activate()
  962. HWNDActiveWindow
  963. MSort = 0
  964. MForm = 0
  965. MType = 1
  966. MCmdProp = 0
  967. MFormat = 0
  968. MPosition = 0
  969. LblInfo.Caption = ""
  970. If mRunPref = 0 Then ' Первичный запуск или после изменения настроек в окне Настройки
  971.  
  972. sSource = swApp.GetCurrentMacroPathName ' Get macro path+filename
  973. sSource1 = Left$(sSource, Len(sSource) - 4) & "_sp.sldbomtbt" ' Шаблон спецификации
  974. sSource2 = Left$(sSource, Len(sSource) - 14) & "SP-1.slddrt" ' Шаблон 1-го листа
  975. sSource3 = Left$(sSource, Len(sSource) - 14) & "SP-2.slddrt" ' Шаблон 2-го листа
  976. sSource4 = Left$(sSource, Len(sSource) - 3) & "ini" ' ini-файл
  977. sSource5 = Left$(sSource, Len(sSource) - 4) & "_Doc.txt" ' Документация
  978. sSource6 = Left$(sSource, Len(sSource) - 14) & "GSP-1.slddrt" ' Шаблон 1-го листа
  979. sSource7 = Left$(sSource, Len(sSource) - 14) & "GSP-2.slddrt" ' Шаблон 2-го листа
  980. sSource8 = Left$(sSource, Len(sSource) - 4) & "_Sections.txt" ' Разделы
  981. sSource9 = Left$(sSource, Len(sSource) - 4) & "_Groups.txt" ' Группы разделов "Стандартные изделия" и "Прочие изделия"
  982. sSource10 = Left$(sSource, Len(sSource) - 4) & "_MaterialGroups.txt" ' Группы раздела "Материалы"
  983. sSource11 = Left$(sSource, Len(sSource) - 4) & "_vp.sldbomtbt" ' Шаблон ведомости покупных
  984. sSource12 = Left$(sSource, Len(sSource) - 14) & "VP-1.slddrt" ' Шаблон 1-го листа
  985. sSource13 = Left$(sSource, Len(sSource) - 14) & "VP-2.slddrt" ' Шаблон 2-го листа
  986. sSource14 = Left$(sSource, Len(sSource) - 14) + "MyProperties.swp" ' Путь к макросу MyProperties
  987. sSource15 = Left$(sSource, Len(sSource) - 14) & "MyProperties_1.ini" ' Путь к списку свойств
  988. sSource16 = Left$(sSource, Len(sSource) - 14) & "MyProperties_2.ini" ' Путь к настройкам оформления
  989. sSource17 = Left$(sSource, Len(sSource) - 14) & "MyStandard.sldstd" ' Путь к файлу стандарта
  990. sSource18 = Left$(sSource, Len(sSource) - 14) & "SP-LRI.slddrt" ' Шаблон ЛРИ
  991. sSource19 = Left$(sSource, Len(sSource) - 14) & "VP-LRI.slddrt" ' Шаблон ЛРИ
  992.  
  993. ' Получаем параметры модели
  994. ok = swDraw.ActivateSheet(vSheetNames(0))
  995. Set swSheet = swDraw.GetCurrentSheet
  996. Set swView = swDraw.GetFirstView
  997. m = 0
  998. If swSheet.CustomPropertyView = "По умолчанию" Or swSheet.CustomPropertyView = "Default" Then
  999. Set swView = swView.GetNextView ' Получаем первый вид
  1000. Else
  1001. Do Until swView Is Nothing
  1002. If swView.GetName2 = swSheet.CustomPropertyView Then
  1003. m = 1
  1004. Exit Do
  1005. End If
  1006. Set swView = swView.GetNextView
  1007. Loop
  1008. If m = 0 Then
  1009. Set swView = swDraw.GetFirstView
  1010. Set swView = swView.GetNextView
  1011. swApp.SendMsgToUser ("Не удалось определить вид из свойств листа. Используется первый вид.")
  1012. End If
  1013. End If
  1014. sConfigName = swView.ReferencedConfiguration ' Имя конфигурации вида
  1015. 'Debug.Print "sConfigName=", sConfigName
  1016. Set swModel = swView.ReferencedDocument
  1017. Set swConfig = swModel.GetConfigurationByName(sConfigName)
  1018. 'Debug.Print swConfig.AlternateName, swConfig.UseAlternateNameInBOM
  1019. vConfNameArr = swModel.GetConfigurationNames ' Имена всех конфигураций если спецификация с исполнениями
  1020. Set swSelMgr = swDraw.SelectionManager
  1021. ' Получение имени модели
  1022. sModelName = swModel.GetTitle
  1023. vModelViewNames = swModel.GetModelViewNames
  1024. ' Проверка на наличие расширения в имени файла
  1025. If Len(sModelName) > 7 Then
  1026. strTemp = Mid$(sModelName, Len(sModelName) - 6, 4)
  1027. If strTemp = ".SLD" Or strTemp = ".sld" Then
  1028. sModelName = Left$(sModelName, Len(sModelName) - 7)
  1029. End If
  1030. End If
  1031.  
  1032. MyProperties
  1033. If prpTestStandard = 1 Then
  1034. MyStandard
  1035. End If
  1036.  
  1037. ' Чтение ini файла
  1038. Open sSource4 For Input As #1
  1039. If prpTestStandard = 1 Then
  1040. Line Input #1, strTemp
  1041. Line Input #1, strTemp
  1042. Line Input #1, strTemp
  1043. Line Input #1, strTemp
  1044. Else
  1045. Line Input #1, strTemp ' Шрифт
  1046. stdFontName = strTemp
  1047. Line Input #1, strTemp ' Размер шрифта
  1048. strTemp = Replace(strTemp, ".", ",")
  1049. stdFontSize = CDbl(strTemp)
  1050. Line Input #1, strTemp ' Наклонный
  1051. If strTemp = "1" Then
  1052. stdFontItalic = 1
  1053. Else
  1054. stdFontItalic = 0
  1055. End If
  1056. Line Input #1, strTemp ' Жирный
  1057. If strTemp = "1" Then
  1058. stdFontBold = 1
  1059. Else
  1060. stdFontBold = 0
  1061. End If
  1062. End If
  1063. Line Input #1, strTemp ' Сжатие общее
  1064. dFontWidth = CDbl(strTemp)
  1065. Line Input #1, strTemp ' Сжатие длинных строк
  1066. dRowWidth = CDbl(strTemp)
  1067. Line Input #1, strTemp ' Сжатие столбца Примечание
  1068. dRemarkWidth = CDbl(strTemp)
  1069. '
  1070. Line Input #1, sNumber ' Обозначение
  1071. Line Input #1, sDescription ' Наименование
  1072. '
  1073. Line Input #1, strTemp
  1074. iSP1 = strTemp
  1075. Line Input #1, strTemp
  1076. iSP2 = strTemp
  1077. Line Input #1, strTemp
  1078. iGSP1 = strTemp
  1079. Line Input #1, strTemp
  1080. iGSP2 = strTemp
  1081. Line Input #1, strTemp
  1082. iVP1 = strTemp
  1083. Line Input #1, strTemp
  1084. iVP2 = strTemp
  1085. '
  1086. Line Input #1, strTemp ' После каждой строки
  1087. If strTemp = "1" Then
  1088. iLine = 1
  1089. Else
  1090. iLine = 0
  1091. End If
  1092. Line Input #1, strTemp
  1093. iLineCount = CInt(strTemp)
  1094. '
  1095. Line Input #1, strTemp ' В конце раздела
  1096. If strTemp = "1" Then
  1097. iSection = 1
  1098. Else
  1099. iSection = 0
  1100. End If
  1101. Line Input #1, strTemp
  1102. iSectionCount = CInt(strTemp)
  1103. '
  1104. Line Input #1, strTemp ' После каждой строки
  1105. If strTemp = "1" Then
  1106. iPosLine = 1
  1107. Else
  1108. iPosLine = 0
  1109. End If
  1110. Line Input #1, strTemp
  1111. iPosLineCount = CInt(strTemp)
  1112. '
  1113. Line Input #1, strTemp ' В конце раздела
  1114. If strTemp = "1" Then
  1115. iPosSection = 1
  1116. Else
  1117. iPosSection = 0
  1118. End If
  1119. Line Input #1, strTemp
  1120. iPosSectionCount = CInt(strTemp)
  1121. '
  1122. Line Input #1, strTemp ' По числу резервированных строк
  1123. If strTemp = "1" Then
  1124. iPosReserve = 1
  1125. Else
  1126. iPosReserve = 0
  1127. End If
  1128. '
  1129. Line Input #1, strTemp ' Помечать цветом
  1130. If strTemp = "1" Then
  1131. iForm0 = 1
  1132. Else
  1133. iForm0 = 0
  1134. End If
  1135. Line Input #1, strTemp ' Убирать базовую часть обозначения для исполнений
  1136. If strTemp = "1" Then
  1137. iForm1 = 1
  1138. Else
  1139. iForm1 = 0
  1140. End If
  1141. Line Input #1, strTemp ' Группировать стандартные
  1142. If strTemp = "1" Then
  1143. iForm2 = 1
  1144. Else
  1145. iForm2 = 0
  1146. End If
  1147. Line Input #1, strTemp ' Добавлять ЛРИ
  1148. If strTemp = "1" Then
  1149. iLRI = 1
  1150. Else
  1151. iLRI = 0
  1152. End If
  1153. Line Input #1, strTemp ' Использовать быструю сортировку
  1154. If strTemp = "1" Then
  1155. iSort = 1
  1156. Else
  1157. iSort = 0
  1158. End If
  1159. Line Input #1, strTemp ' Сортировка Прочих как Стандартных
  1160. If strTemp = "1" Then
  1161. iOther = 1
  1162. Else
  1163. iOther = 0
  1164. End If
  1165. Close #1
  1166.  
  1167. ' Заполнение списка CboType
  1168. CboType.Clear
  1169. CboType.AddItem "Спецификация"
  1170. CboType.AddItem "Групповая спецификация (Вариант Б)"
  1171. CboType.AddItem "Ведомость покупных изделий"
  1172. CboType.ListIndex = 0
  1173. CboType_Change
  1174.  
  1175. ' Заполняем массив sSectionData
  1176. n = -1
  1177. Open sSource8 For Input As #1
  1178. Do While Not EOF(1)
  1179. Input #1, strTemp
  1180. n = n + 1
  1181. ReDim Preserve sSectionData(n)
  1182. sSectionData(n) = strTemp
  1183. Loop
  1184. Close #1
  1185.  
  1186. ' Заполняем массив sGroupData
  1187. n = -1
  1188. Open sSource9 For Input As #1
  1189. Do While Not EOF(1)
  1190. Input #1, strTemp
  1191. n = n + 1
  1192. ReDim Preserve sGroupData(n)
  1193. sGroupData(n) = strTemp
  1194. Loop
  1195. Close #1
  1196.  
  1197. ' Заполняем массив sMaterialGroupData
  1198. n = -1
  1199. Open sSource10 For Input As #1
  1200. Do While Not EOF(1)
  1201. Input #1, strTemp
  1202. n = n + 1
  1203. ReDim Preserve sMaterialGroupData(n)
  1204. sMaterialGroupData(n) = strTemp
  1205. Loop
  1206. Close #1
  1207.  
  1208. ' Обозначение
  1209. If sNumber = "1" Then
  1210. sNumberText = BOMPartNumber(swConfig)
  1211. Else
  1212. sNumberText = swModel.CustomInfo2(sConfigName, prpNumber)
  1213. If sNumberText = "" Then
  1214. sNumberText = swModel.CustomInfo2("", prpNumber)
  1215. End If
  1216. End If
  1217. LblNumber.Caption = sNumberText
  1218. ' Проверяем наличие ссылок
  1219. strTemp = "$PRP:" & Chr$(34) & "SW-File Name" & Chr$(34)
  1220. If InStr(sNumberText, strTemp) > 0 Then
  1221. LblNumber.Caption = Replace(sNumberText, strTemp, sModelName)
  1222. End If
  1223. While InStr(LblNumber.Caption, "$PRP:") > 0
  1224. n = InStr(LblNumber.Caption, "$PRP:") + 6 ' Начало имени свойства
  1225. l = InStr(n, LblNumber.Caption, Chr$(34)) - n ' Длина имени
  1226. strTemp = Mid$(LblNumber.Caption, n, l) ' Имя свойства
  1227. 'Debug.Print "Свойство", strTemp, "n=", n, "l=", l
  1228. strTemp1 = "$PRP:" & Chr$(34) & strTemp & Chr$(34)
  1229. strTemp2 = swModel.CustomInfo2(sConfigName, strTemp)
  1230. If strTemp2 = "" Then
  1231. strTemp2 = swModel.CustomInfo2("", strTemp)
  1232. End If
  1233. LblNumber.Caption = Replace(LblNumber.Caption, strTemp1, strTemp2)
  1234. Wend
  1235.  
  1236. ' Наименование
  1237. If sDescription = "1" Then
  1238. sDescriptionText = BOMPartNumber(swConfig)
  1239. LblDescription.Font.Size = 14
  1240. Else
  1241. sDescriptionText = swModel.CustomInfo2(sConfigName, prpDescription)
  1242. If sDescriptionText = "" Then
  1243. sDescriptionText = swModel.CustomInfo2("", prpDescription)
  1244. End If
  1245. strTemp = swModel.CustomInfo2("", prpDescriptionMulti)
  1246. If InStrRev(strTemp, "<FONT size=3.5>") > 0 Then
  1247. LblDescription.Font.Size = 11
  1248. Else
  1249. LblDescription.Font.Size = 14
  1250. End If
  1251. End If
  1252. LblDescription.Caption = sDescriptionText
  1253. ' Проверяем наличие ссылок
  1254. strTemp = "$PRP:" & Chr$(34) & "SW-File Name" & Chr$(34)
  1255. If InStr(sDescriptionText, strTemp) > 0 Then
  1256. LblDescription.Caption = Replace(sDescriptionText, strTemp, sModelName)
  1257. End If
  1258. While InStr(LblDescription.Caption, "$PRP:") > 0
  1259. n = InStr(LblDescription.Caption, "$PRP:") + 6 ' Начало имени свойства
  1260. l = InStr(n, LblDescription.Caption, Chr$(34)) - n ' Длина имени
  1261. strTemp = Mid$(LblDescription.Caption, n, l) ' Имя свойства
  1262. 'Debug.Print "Свойство", strTemp
  1263. strTemp1 = "$PRP:" & Chr$(34) & strTemp & Chr$(34)
  1264. strTemp2 = swModel.CustomInfo2(sConfigName, strTemp)
  1265. If strTemp2 = "" Then
  1266. strTemp2 = swModel.CustomInfo2("", strTemp)
  1267. End If
  1268. LblDescription.Caption = Replace(LblDescription.Caption, strTemp1, strTemp2)
  1269. Wend
  1270.  
  1271. ' Конфигурация
  1272. LblConfig.Caption = sConfigName
  1273. Debug.Print "LblConfig.Caption=", LblConfig.Caption
  1274. ' Сортируем список конфигураций
  1275. For i = 0 To UBound(vConfNameArr) - 1
  1276. For j = 0 To UBound(vConfNameArr) - 1 - i
  1277. If vConfNameArr(j) > vConfNameArr(j + 1) Then
  1278. strTemp = vConfNameArr(j + 1)
  1279. vConfNameArr(j + 1) = vConfNameArr(j)
  1280. vConfNameArr(j) = strTemp
  1281. End If
  1282. Next j
  1283. Next i
  1284. LstConfig.Clear
  1285. For i = 0 To UBound(vConfNameArr)
  1286. LstConfig.AddItem vConfNameArr(i)
  1287. If vConfNameArr(i) = sConfigName Then
  1288. LstConfig.Selected(i) = True
  1289. End If
  1290. Next i
  1291.  
  1292. ' Считываем информацию о датах и изменениях с первого листа
  1293. strSheetFormatName = swSheet.GetSheetFormatName()
  1294. strTemp = "Revision2@" & strSheetFormatName
  1295. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  1296. If ok = True Then
  1297. Set swNote = swSelMgr.GetSelectedObject2(1)
  1298. sRevision2 = swNote.GetText()
  1299. End If
  1300. strTemp = "Revision3@" & strSheetFormatName
  1301. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  1302. If ok = True Then
  1303. Set swNote = swSelMgr.GetSelectedObject2(1)
  1304. sRevision3 = swNote.GetText()
  1305. End If
  1306. strTemp = "Revision4@" & strSheetFormatName
  1307. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  1308. If ok = True Then
  1309. Set swNote = swSelMgr.GetSelectedObject2(1)
  1310. sRevision4 = swNote.GetText()
  1311. End If
  1312. strTemp = "Date@" & strSheetFormatName
  1313. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  1314. If ok = True Then
  1315. Set swNote = swSelMgr.GetSelectedObject2(1)
  1316. sDate = swNote.GetText()
  1317. End If
  1318.  
  1319. ' Формат и Примечание
  1320. ' Cвойство "Примечание"
  1321. TxtRemark.Value = ""
  1322. ' Заполнение списка Формат и проверка Формата
  1323. CboFormat.Clear
  1324. CboFormat.AddItem ""
  1325. CboFormat.AddItem "А4"
  1326. CboFormat.AddItem "А3"
  1327. CboFormat.AddItem "А2"
  1328. CboFormat.AddItem "А1"
  1329. CboFormat.AddItem "А0"
  1330. CboFormat.AddItem "БЧ"
  1331. CboFormat.AddItem "*)"
  1332. CboFormat.Value = ""
  1333. If prpTestFormat = 1 Then ' Есть проверка
  1334. MForm = 1 ' Метка флажка Задать формат: 0 - пользователь изменил флажок; 1 - флажок изменен из программы
  1335. ChkFormat.Enabled = True
  1336. If swDraw.CustomInfo2("", "CheckFormat") = "True" Or swDraw.CustomInfo2("", "CheckFormat") = "-1" Then
  1337. ChkFormat.Value = True
  1338. Else
  1339. ChkFormat.Value = False
  1340. End If
  1341. MForm = 0
  1342. Else ' Нет проверки
  1343. MForm = 1
  1344. ChkFormat.Enabled = False
  1345. ChkFormat.Value = True
  1346. CboFormat.Enabled = True
  1347. TxtRemark.Enabled = True
  1348. MForm = 0
  1349. End If
  1350. ' Читаем файл Doc.txt и заполняем им массив strTempData
  1351. Open sSource5 For Input As #1
  1352. n = 0
  1353. ReDim strTempData(0)
  1354. strTempData(0) = "СБ - Сборочный чертеж"
  1355. Do While Not EOF(1)
  1356. n = n + 1
  1357. ReDim Preserve strTempData(n)
  1358. Input #1, strTemp
  1359. strTempData(n) = strTemp
  1360. Loop
  1361. Close #1
  1362. ' Проверяем существование спецификации и определяем ее тип
  1363. CmdSort.Enabled = False
  1364. FrmLine.Enabled = False
  1365. FrmSheet.Enabled = False
  1366. CmdFormat.Enabled = False
  1367. CmdAddFormat.Enabled = False
  1368. CmdPosition.Enabled = False
  1369. CmdPosTest.Enabled = False
  1370. ' Проверяем первый лист
  1371. ChkAssem.Value = False
  1372. ok = swDraw.ActivateSheet(vSheetNames(0))
  1373. Set swSheet = swDraw.GetCurrentSheet
  1374. Set swView = swDraw.GetFirstView
  1375. If Not swView Is Nothing Then
  1376. Set swTable = swView.GetFirstTableAnnotation
  1377. If Not swTable Is Nothing Then ' Спецификация найдена на листе сборки
  1378. nNumColumn = swTable.ColumnCount
  1379. If nNumColumn = 7 Then
  1380. mSpecType = 0
  1381. CboType.ListIndex = 0 ' Спецификация
  1382. mChkAssem = 1
  1383. ChkAssem.Value = True
  1384. mSpec = 1
  1385. CmdSort.Enabled = True
  1386. FrmLine.Enabled = True
  1387. CmdFormat.Enabled = True
  1388. CmdAddFormat.Enabled = True
  1389. CmdPosition.Enabled = True
  1390. CmdPosTest.Enabled = True
  1391. End If
  1392. End If
  1393. End If
  1394. If mChkAssem = 0 Then ' Проверяем остальные листы
  1395. For i = 0 To UBound(vSheetNames)
  1396. If vSheetNames(i) = "SP1" Or vSheetNames(i) = "VP1" Then
  1397. ok = swDraw.ActivateSheet(vSheetNames(i))
  1398. If ok Then
  1399. Set swSheet = swDraw.GetCurrentSheet
  1400. Set swView = swDraw.GetFirstView
  1401. If Not swView Is Nothing Then
  1402. Set swTable = swView.GetFirstTableAnnotation
  1403. If Not swTable Is Nothing Then ' Спецификация найдена
  1404. nNumColumn = swTable.ColumnCount
  1405. If nNumColumn = 7 Then
  1406. mSpecType = 0
  1407. CboType.ListIndex = 0 ' Спецификация
  1408. CmdPosition.Enabled = True
  1409. CmdPosTest.Enabled = True
  1410. ElseIf nNumColumn = 11 And vSheetNames(i) = "VP1" Then
  1411. mSpecType = 2
  1412. CboType.ListIndex = 2 ' Ведомость покупных
  1413. Else
  1414. CboType.ListIndex = 1 ' Групповая спецификация
  1415. mSpecType = 1
  1416. Set swBomFeat = swTable.BomFeature
  1417. 'vConfVisibleSP = swBomFeat.GetConfigurations(True, Null)
  1418. vVisible = Null
  1419. vConfVisibleSP = swBomFeat.GetConfigurations(True, vVisible)
  1420. For j = 0 To LstConfig.ListCount - 1
  1421. LstConfig.Selected(j) = False
  1422. For jj = 0 To UBound(vConfVisibleSP)
  1423. If LstConfig.List(j) = vConfVisibleSP(jj) Then
  1424. LstConfig.Selected(j) = True
  1425. Exit For
  1426. End If
  1427. Next jj
  1428. Next j
  1429. CmdPosition.Enabled = True
  1430. CmdPosTest.Enabled = True
  1431. End If
  1432. mSpec = 1
  1433. CmdSort.Enabled = True
  1434. FrmLine.Enabled = True
  1435. FrmSheet.Enabled = True
  1436. CmdFormat.Enabled = True
  1437. CmdAddFormat.Enabled = True
  1438. End If
  1439. End If
  1440. End If
  1441. End If
  1442. Next i
  1443. End If
  1444. If mRunDoc = 0 Then ' Первичный запуск или в окне "Дополнения" не было изменений
  1445. ' Проверяем спецификацию
  1446. If mSpec = 1 Then
  1447. ' Читаем таблицу
  1448. ' Раздел Документация
  1449. k = 0 ' Счетчик массива DocData
  1450. m1 = 0 ' Метка считывания строки Сборочный чертеж
  1451. ReDim DocData(0) ' Массив документов раздела документация прочитанных из спецификации
  1452. DocData(0) = "СБ - Сборочный чертеж"
  1453. nNumRow = swTable.RowCount
  1454. nNumColumn = swTable.ColumnCount
  1455. ' Debug.Print "nNumColumn=", nNumColumn
  1456. Debug.Print "nNumRow=", nNumRow
  1457. For i = 1 To nNumRow - 1
  1458. strTemp = swTable.Text(i, 4)
  1459. 'Debug.Print "i=", i, "strTemp=", strTemp
  1460. m = 0 ' Метка конца раздела Документация
  1461. For j = 1 To UBound(sSectionData)
  1462. If strTemp = sSectionData(j) Or InStr(strTemp, "Устанавливают") > 0 Then ' Раздел Документация закончился
  1463. m = 1
  1464. End If
  1465. Next j
  1466. If m = 1 Then
  1467. Exit For
  1468. End If
  1469. If strTemp = "" Or strTemp = "Документация" Then ' Пропускаем заголовок Документация
  1470. ElseIf strTemp = "Сборочный чертеж" And m1 = 0 Then
  1471. m1 = 1
  1472. If prpTestFormat = 0 Then ' Нет считывания формата из чертежа
  1473. CboFormat.Value = swTable.Text(i, 0)
  1474. TxtRemark.Value = swTable.Text(i, nNumColumn - 1)
  1475. Else
  1476. If swDraw.CustomInfo2("", "CheckFormat") = "True" Or swDraw.CustomInfo2("", "CheckFormat") = "-1" Then
  1477. CboFormat.Value = swTable.Text(i, 0)
  1478. TxtRemark.Value = swTable.Text(i, nNumColumn - 1)
  1479. 'Debug.Print "ChkFormat.Value = True"
  1480. ' MForm = 1
  1481. ' ChkFormat.Value = True
  1482. ' MForm = 0
  1483. End If
  1484. End If
  1485. Else ' Строка для анализа
  1486. For j = 0 To n
  1487. strTemp2 = strTempData(j)
  1488. strTemp2 = Right$(strTemp2, Len(strTemp2) - InStr(strTemp2, "-"))
  1489. strTemp2 = Trim(strTemp2)
  1490. If strTemp = strTemp2 Then ' Строка есть в списке документов
  1491. If strTemp <> swTable.Text(i - 1, 4) Then ' Проверка для одинаковых документов груп. спец.
  1492. k = k + 1
  1493. ReDim Preserve DocData(k)
  1494. DocData(k) = strTempData(j)
  1495. End If
  1496. End If
  1497. Next j
  1498. End If
  1499. Next i
  1500. If m1 = 0 And CboType.ListIndex = 0 Or m1 = 0 And CboType.ListIndex = 1 Then ' Строки "Сборочный чертеж" не было
  1501. ChkADrw.Value = True
  1502. Else
  1503. ChkADrw.Value = False
  1504. End If
  1505. ' Раздел Комплекты и Электромонтаж
  1506. For i = 1 To nNumRow - 1
  1507. strTemp = swTable.Text(i, 4)
  1508. If strTemp = "Комплекты" Then ' Найден раздел Комплекты
  1509. mComplect = 1
  1510. End If
  1511. If strTemp = "Устанавливают при электромонтаже" Then ' Найден раздел электромонтаж
  1512. mElectro = 1
  1513. End If
  1514. If InStr(strTemp, "Устанавливают по") > 0 Then ' Найден раздел электромонтаж
  1515. If InStr(strTemp, "МЭ") > 0 Then
  1516. mElectro = 2
  1517. Else
  1518. mElectro = 3
  1519. End If
  1520. End If
  1521. Next i
  1522. End If
  1523. End If
  1524.  
  1525. Tests (0)
  1526.  
  1527. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1528. ' Первичное применение
  1529. TxtFirst.Value = swModel.CustomInfo2(sConfigName, prpFirstApplySP)
  1530. ' Эскизное Первичное применение
  1531. TxtDraftFirst.Value = swModel.CustomInfo2(sConfigName, prpDraftFirstApplySP)
  1532. ' Справочный номер
  1533. TxtInform.Value = swModel.CustomInfo2(sConfigName, prpInformNumberSP)
  1534. Else ' Ведомость покупных
  1535. ' Первичное применение
  1536. TxtFirst.Value = swModel.CustomInfo2(sConfigName, prpFirstApply)
  1537. ' Справочный номер
  1538. TxtInform.Value = swModel.CustomInfo2(sConfigName, prpInformNumberVP)
  1539. End If
  1540. If swModel.CustomInfo2(sConfigName, prpLitSP) = "-" Then
  1541. ChkLit.Value = True
  1542. Else
  1543. ChkLit.Value = False
  1544. End If
  1545. End If
  1546. MType = 0
  1547. mRunPref = 1
  1548. If prpLeftTopCorner = 1 Then ' Окно макроса в левом верхнем углу
  1549. FrmSpecEditor.Left = 10
  1550. FrmSpecEditor.Top = 10
  1551. End If
  1552. If prpTopAll = 1 Then ' Окно макроса поверх всех
  1553. KeepFormOnTop
  1554. End If
  1555. End Sub
  1556.  
  1557. Private Sub CmdOk_Click()
  1558.  
  1559. ' Проверка выбранных конфигураций
  1560. If CboType.ListIndex = 1 Then ' Групповая спецификация
  1561. LstConfigTest
  1562. If ConfigTest = 0 Then
  1563. swApp.SendMsgToUser ("Необходимо выбрать хотя бы одно исполнение.")
  1564. Exit Sub
  1565. End If
  1566. End If
  1567.  
  1568. ImgInfo.Width = 5
  1569.  
  1570. MCmdProp = 1
  1571. CmdProp_Click
  1572. MCmdProp = 0
  1573.  
  1574. ' Предварительно выставляем параметры документа
  1575. ok = swDraw.SetUserPreferenceToggle(swBomTableDontAddQTYNextToConfigName, True)
  1576. ok = swDraw.SetUserPreferenceToggle(swDontCopyQTYColumnNameFromTemplate, True)
  1577. ok = swDraw.SetUserPreferenceToggle(swOneConfigOnlyTopLevelBom, False)
  1578. ok = swDraw.SetUserPreferenceToggle(swDetailingTablesUseTemplateSettings, True)
  1579. ok = swDraw.SetUserPreferenceDoubleValue(swDetailingTablesVerticalPadding, 0.00003)
  1580. ok = swDraw.SetUserPreferenceIntegerValue(swBomTableZeroQuantityDisplay, swZeroQuantityBlank)
  1581.  
  1582. If MSort = 0 Then ' Новая спецификация
  1583. LblInfo.Caption = " Подготовка листов"
  1584. ' Находим и удаляем ранее вставленные листы спецификации и таблицы
  1585. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1586. If mChkAssem = 1 Then ' Есть спецификация на листе сборки
  1587. ok = swDraw.ActivateSheet(vSheetNames(0))
  1588. Set swSheet = swDraw.GetCurrentSheet
  1589. Set swView = swDraw.GetFirstView
  1590. If Not swView Is Nothing Then
  1591. swDraw.ClearSelection2 True
  1592. Set swTable = swView.GetFirstTableAnnotation
  1593. If Not swTable Is Nothing Then ' Спецификация найдена
  1594. Set swAnn = swTable.GetAnnotation
  1595. ok = swAnn.Select3(False, Nothing)
  1596. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  1597. DeleteOption = 3
  1598. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  1599. End If
  1600. End If
  1601. End If
  1602. For i = 0 To UBound(vSheetNames)
  1603. ' Проверка имени листа
  1604. If Left$(vSheetNames(i), 2) = "SP" Then
  1605. ok = swDraw.ActivateSheet(vSheetNames(i))
  1606. Set swSheet = swDraw.GetCurrentSheet
  1607. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  1608. DeleteOption = 3
  1609. ok = swDraw.Extension.SelectByID2(swSheet.GetName, "SHEET", 0, 0, 0, False, 0, Nothing, 0)
  1610. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  1611. End If
  1612. Next i
  1613. Else ' Ведомость покупных
  1614. ' Удаляем вторые листы
  1615. For i = 0 To UBound(vSheetNames)
  1616. ' Проверка имени листа
  1617. If Left$(vSheetNames(i), 2) = "VP" And Mid$(vSheetNames(i), 3, 1) <> "1" Then
  1618. ok = swDraw.ActivateSheet(vSheetNames(i))
  1619. Set swSheet = swDraw.GetCurrentSheet
  1620. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  1621. DeleteOption = 3
  1622. ok = swDraw.Extension.SelectByID2(swSheet.GetName, "SHEET", 0, 0, 0, False, 0, Nothing, 0)
  1623. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  1624. End If
  1625. Next i
  1626. vSheetNames = swDraw.GetSheetNames
  1627. ' Проверяем первый лист
  1628. m = 0
  1629. If UBound(vSheetNames) = 0 Then ' Лист всего один
  1630. If vSheetNames(0) = "VP1" Then ' Переименовываем лист
  1631. m = 1
  1632. ok = swDraw.ActivateSheet(vSheetNames(0))
  1633. Set swSheet = swDraw.GetCurrentSheet
  1634. swSheet.SetName "Temp"
  1635. End If
  1636. Else ' Удаляем первый лист
  1637. For i = 0 To UBound(vSheetNames)
  1638. If Left$(vSheetNames(i), 3) = "VP1" Then
  1639. ok = swDraw.ActivateSheet(vSheetNames(i))
  1640. Set swSheet = swDraw.GetCurrentSheet
  1641. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  1642. DeleteOption = 3
  1643. ok = swDraw.Extension.SelectByID2(swSheet.GetName, "SHEET", 0, 0, 0, False, 0, Nothing, 0)
  1644. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  1645. Exit For
  1646. End If
  1647. Next i
  1648. End If
  1649. End If
  1650. vSheetNames = swDraw.GetSheetNames
  1651.  
  1652. If ChkAssem.Value = False Then ' Нет спецификации на листе сборки
  1653. ' Добавляем лист
  1654. If CboType.ListIndex = 0 Then ' Спецификация
  1655. vRetval = swDraw.NewSheet3("SP1", swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource2, 0.21, 0.297, "По умолчанию")
  1656. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  1657. If mConfigCount = 0 Then
  1658. vRetval = swDraw.NewSheet3("SP1", swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource6, 0.297, 0.21, "По умолчанию")
  1659. Else
  1660. vRetval = swDraw.NewSheet3("SP1", swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource6, 0.297, 0.21, "По умолчанию")
  1661. End If
  1662. Else ' Ведомость покупных
  1663. vRetval = swDraw.NewSheet3("VP1", swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource12, 0.42, 0.297, "По умолчанию")
  1664. If m = 1 Then ' Удаляем прежний VP1
  1665. ok = swDraw.ActivateSheet("Temp")
  1666. Set swSheet = swDraw.GetCurrentSheet
  1667. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  1668. DeleteOption = 3
  1669. ok = swDraw.Extension.SelectByID2(swSheet.GetName, "SHEET", 0, 0, 0, False, 0, Nothing, 0)
  1670. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  1671. End If
  1672. End If
  1673. 'vRetval = swDraw.SetupSheet4("SP1", swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource2, 0.21, 0.297, "")
  1674. Set swSheet = swDraw.GetCurrentSheet
  1675. swSheet.SheetFormatVisible = True
  1676.  
  1677. ' Вставляем вид
  1678. Set swView = swDraw.CreateDrawViewFromModelView3(swModel.GetPathName, vModelViewNames(0), -0.1, 0, 0)
  1679. swView.ReferencedConfiguration = sConfigName
  1680. swDraw.SuppressView
  1681. End If
  1682. LblInfo.Caption = " Вставка таблицы"
  1683. ' Вставляем таблицу
  1684. If CboType.ListIndex = 0 Then ' Спецификация
  1685. If ChkAssem.Value = True Then ' Есть спецификация на листе сборки
  1686. ok = swDraw.ActivateSheet(vSheetNames(0))
  1687. Set swSheet = swDraw.GetCurrentSheet
  1688. Set swView = swDraw.GetFirstView
  1689. If swSheet.CustomPropertyView = "По умолчанию" Or swSheet.CustomPropertyView = "Default" Then
  1690. Set swView = swView.GetNextView ' Получаем первый вид
  1691. Else
  1692. Do Until swView Is Nothing
  1693. If swView.GetName2 = swSheet.CustomPropertyView Then
  1694. Exit Do
  1695. End If
  1696. Set swView = swView.GetNextView
  1697. Loop
  1698. End If
  1699. vSheetProps = swSheet.GetProperties
  1700. Set swBomTable = swView.InsertBomTable4(True, vSheetProps(5) - 0.005, 0.068, swBOMConfigurationAnchor_BottomRight, swBomType_TopLevelOnly, sConfigName, sSource1, False, swNumberingType_e.swIndentedBOMNotSet, False)
  1701. Set swBomFeat = swBomTable.BomFeature ' ********
  1702. ReDim sTemp(0)
  1703. sTemp(0) = sConfigName
  1704. vConfVisible = sTemp
  1705. vVisible = Null
  1706. bRetval = swBomFeat.SetConfigurations(True, vVisible, vConfVisible)
  1707. swBomFeat.DisplayAsOneItem = True '***********
  1708. swBomFeat.PartConfigurationGrouping = swDisplay_ConfigurationWithSameName_AsOneItem
  1709. Else
  1710. Set swBomTable = swView.InsertBomTable4(True, 0.02, 0.292, swBOMConfigurationAnchor_TopLeft, swBomType_TopLevelOnly, sConfigName, sSource1, False, swNumberingType_e.swIndentedBOMNotSet, False)
  1711. Set swBomFeat = swBomTable.BomFeature ' ********
  1712. ReDim sTemp(0)
  1713. sTemp(0) = sConfigName
  1714. vConfVisible = sTemp
  1715. vVisible = Null
  1716. bRetval = swBomFeat.SetConfigurations(True, vVisible, vConfVisible)
  1717. swBomFeat.DisplayAsOneItem = True '***********
  1718. swBomFeat.PartConfigurationGrouping = swDisplay_ConfigurationWithSameName_AsOneItem
  1719. End If
  1720. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  1721. Set swBomTable = swView.InsertBomTable2(True, 0.005, 0.19, swBOMConfigurationAnchor_TopLeft, swBomType_TopLevelOnly, sConfigName, sSource1)
  1722. Set swBomFeat = swBomTable.BomFeature
  1723. swBomFeat.DisplayAsOneItem = True '***********
  1724. swBomFeat.PartConfigurationGrouping = swDisplay_ConfigurationWithSameName_AsOneItem
  1725. Else ' Ведомость покупных
  1726. ' Set swBomTable = swView.InsertBomTable2(True, 0.02, 0.292, swBOMConfigurationAnchor_TopLeft, swBomType_Indented, sConfigName, sSource11)
  1727. Set swBomTable = swView.InsertBomTable4(True, 0.02, 0.292, swBOMConfigurationAnchor_TopLeft, swBomType_PartsOnly, sConfigName, sSource11, False, swNumberingType_e.swIndentedBOMNotSet, False)
  1728. Set swBomFeat = swBomTable.BomFeature
  1729. ReDim sTemp(0)
  1730. sTemp(0) = sConfigName
  1731. vConfVisible = sTemp
  1732. vVisible = Null
  1733. bRetval = swBomFeat.SetConfigurations(True, vVisible, vConfVisible)
  1734. swBomFeat.DisplayAsOneItem = True '***********
  1735. swBomFeat.PartConfigurationGrouping = swDisplay_ConfigurationWithSameName_AsOneItem
  1736. End If
  1737. Set swTable = swBomTable
  1738. End If
  1739.  
  1740. If CboType.ListIndex = 1 Then ' Групповая спецификация
  1741. ' Устанавливаем исполнения для групповой спецификации
  1742. j = 0
  1743. For i = 0 To LstConfig.ListCount - 1
  1744. If LstConfig.Selected(i) = True Then
  1745. ReDim Preserve sTemp(j)
  1746. sTemp(j) = vConfNameArr(i)
  1747. j = j + 1
  1748. End If
  1749. Next i
  1750. vConfVisible = sTemp
  1751. vVisible = Null
  1752. bRetval = swBomFeat.SetConfigurations(True, vVisible, vConfVisible)
  1753.  
  1754. ' Сортируем столбцы с количеством
  1755. ' Получаем заголовки столбцов
  1756. ReDim sTemp(UBound(vConfVisible))
  1757. For i = 0 To UBound(vConfVisible)
  1758. sTemp(i) = swTable.GetColumnTitle(i + 5)
  1759. Next i
  1760. ' Сопоставляем столбцы с конфигурациями
  1761. For i = 0 To UBound(vConfVisible)
  1762. m = 0
  1763. For j = 1 To UBound(vConfVisible)
  1764. If vConfVisible(i) = sTemp(j) Then
  1765. m = 1
  1766. Exit For
  1767. End If
  1768. Next j
  1769. If m = 0 Then
  1770. ok = swTable.SetColumnTitle(5, vConfVisible(i))
  1771. Exit For
  1772. End If
  1773. Next i
  1774. ' Перемещаем столбцы таблицы
  1775. For i = UBound(vConfVisible) To 0 Step -1
  1776. For j = 1 To UBound(vConfVisible)
  1777. If swTable.GetColumnTitle(5 + j) = vConfVisible(i) Then
  1778. ok = swTable.MoveColumn(5 + j, swTableItemInsertPosition_After, 4)
  1779. Exit For
  1780. End If
  1781. Next j
  1782. Next i
  1783. End If
  1784.  
  1785. ImgInfo.Width = 40
  1786. LblInfo.Caption = " Подготовка таблицы"
  1787.  
  1788. ' Скрываем таблицу
  1789. Set swAnn = swTable.GetAnnotation
  1790. swAnn.Visible = swAnnotationHidden
  1791.  
  1792. ' Назначение заголовков столбцов
  1793. nNumColumn = swTable.ColumnCount
  1794. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1795. ok = swTable.SetColumnCustomProperty(0, prpFormat) ' Формат
  1796. If sNumber = "1" Then ' Обозначение
  1797. ok = swTable.SetColumnType(3, swBomTableColumnType_PartNumber)
  1798. 'ok = swTable.SetColumnUseTitleAsPartNumber(3, True)
  1799. Else
  1800. ok = swTable.SetColumnCustomProperty(3, prpNumber)
  1801. End If
  1802. If sDescription = "1" Then ' Наименование
  1803. ok = swTable.SetColumnType(4, swBomTableColumnType_PartNumber)
  1804. 'ok = swTable.SetColumnUseTitleAsPartNumber(4, True)
  1805. Else
  1806. ok = swTable.SetColumnCustomProperty(4, prpDescription)
  1807. End If
  1808. ok = swTable.SetColumnCustomProperty(nNumColumn - 1, prpRemark) ' Примечание
  1809. Else ' Ведомость покупных
  1810. ok = swTable.SetColumnCustomProperty(1, prpDescriptionVP) ' Наименование для ВП
  1811. ok = swTable.SetColumnCustomProperty(2, prpProductCodeVP) ' Код продукции
  1812. ok = swTable.SetColumnCustomProperty(3, prpNumberDocVP) ' Обозначение документа на поставку
  1813. ok = swTable.SetColumnCustomProperty(4, prpVendorVP) ' Поставщик
  1814. ok = swTable.SetColumnCustomProperty(nNumColumn - 1, prpRemarkVP) ' Примечание для ВП
  1815. End If
  1816.  
  1817. ' Добавляем/удаляем дополнительные пустые колонки для групповой спецификации
  1818. If CboType.ListIndex = 1 Then ' Групповая спецификация
  1819. If nNumColumn > 16 Then
  1820. For i = 0 To nNumColumn - 16 - 1
  1821. ok = swTable.DeleteColumn(14)
  1822. Next i
  1823. ElseIf nNumColumn < 16 Then
  1824. For i = 0 To 16 - nNumColumn - 1
  1825. ok = swTable.InsertColumn(swTableItemInsertPosition_After, nNumColumn - 2, "")
  1826. ok = swTable.SetColumnType(swTable.ColumnCount - 2, swWeldTableColumnType_CustomProperty)
  1827. Next i
  1828. End If
  1829. End If
  1830.  
  1831. ' Добавляем временные колонки
  1832. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, "Имя папки")
  1833. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1834. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1835. strTemp = "SW-Имя папки(Folder Name)"
  1836. ok = swTable.SetColumnCustomProperty(swTable.ColumnCount - 1, strTemp)
  1837.  
  1838. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, "Имя файла")
  1839. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1840. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1841. strTemp = "SW-Имя файла(File Name)"
  1842. ok = swTable.SetColumnCustomProperty(swTable.ColumnCount - 1, strTemp)
  1843.  
  1844. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, prpSection)
  1845. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1846. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1847. ok = swTable.SetColumnCustomProperty(swTable.ColumnCount - 1, prpSection)
  1848.  
  1849. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, prpGroup)
  1850. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1851. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1852. ok = swTable.SetColumnCustomProperty(swTable.ColumnCount - 1, prpGroup)
  1853.  
  1854. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, prpBlank) ' Заготовка
  1855. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1856. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1857. ok = swTable.SetColumnCustomProperty(swTable.ColumnCount - 1, prpBlank)
  1858.  
  1859. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, prpBor) ' Заимствование
  1860. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1861. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1862. ok = swTable.SetColumnCustomProperty(swTable.ColumnCount - 1, prpBor)
  1863.  
  1864. ok = swTable.InsertColumn(swTableItemInsertPosition_Last, 0, "Номер_SP")
  1865. ok = swTable.SetColumnType(swTable.ColumnCount - 1, swWeldTableColumnType_CustomProperty)
  1866. dRetval = swTable.SetColumnWidth(swTable.ColumnCount - 1, 0.2, swTableRowColChange_TableSizeCanChange)
  1867.  
  1868. ImgInfo.Width = 80
  1869. LblInfo.Caption = " Чтение таблицы"
  1870.  
  1871. 'Считываем таблицу
  1872. nNumRow = swTable.RowCount
  1873. nNumColumn = swTable.ColumnCount
  1874. ' Нулевая строка массива sSpecData соответствует первой строке реальной таблицы
  1875. ReDim sSpecData(nNumRow + 100, nNumColumn) ' Последний столбец для отметки самопальных строк
  1876. ReDim strTempData1(nNumRow + 100, nNumColumn) ' Массив-дублер для sSpecDataSize
  1877. Set fs = CreateObject("Scripting.FileSystemObject")
  1878. k = 0 ' Счетчик строк sSpecData
  1879. k1 = 0 ' Счетчик считанных строк таблицы
  1880. k2 = -1 ' Счетчик строк ComplectData
  1881. n = 0 ' Счетчик удаленных строк
  1882. ReDim ComplectData(nNumRow, nNumColumn - 8)
  1883. For i = 0 To nNumRow - 2 - n ' (-1 т.к с 0, -1 т.к. пропускаем первую строку таблицы)
  1884. ' Проверяем заголовки разделов и удаляем их
  1885. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1886. strTemp = swTable.Text(k1 + 1, 4)
  1887. Set swTextFormatTest = swTable.GetCellTextFormat(k1 + 1, 4)
  1888. m = 0
  1889. For j = 1 To UBound(sSectionData) ' С 1, т.к. первая строка Документация
  1890. If strTemp = sSectionData(j) Then
  1891. m = 1
  1892. ok = swTable.DeleteRow(k1 + 1)
  1893. l = j
  1894. End If
  1895. Next j
  1896. If m <> 1 And InStr(strTemp, "Устанавливают") > 0 And swTextFormatTest.Underline Then ' Найден раздел электромонтаж
  1897. m = 1
  1898. ok = swTable.DeleteRow(k1 + 1)
  1899. End If
  1900. Else ' Ведомость покупных
  1901. strTemp = swTable.Text(k1 + 1, 1)
  1902. m = 0
  1903. For j = 0 To UBound(sGroupData)
  1904. If strTemp = sGroupData(j) Then
  1905. m = 1
  1906. ok = swTable.DeleteRow(k1 + 1)
  1907. l = j
  1908. End If
  1909. Next j
  1910. End If
  1911. If m = 0 Then ' Строка рядовая
  1912. sSpecData(k, nNumColumn - 1) = k ' Номер строки
  1913. swTable.Text(k1 + 1, nNumColumn - 1) = k ' Номер строки
  1914. For j = 0 To nNumColumn - 2 ' Последний - столбец Заимствование
  1915. sSpecData(k, j) = swTable.Text(k1 + 1, j) ' Первую строку таблицы пропускаем
  1916. If j = nNumColumn - 5 Then ' Проверка свойства раздел
  1917. If sSpecData(k, nNumColumn - 5) = "" Then ' Раздел пустой
  1918. If MSort = 1 And swTable.Text(k1 + 1, nNumColumn - 6) = "" Then ' Ручной ввод при наличии спецификации
  1919. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1920. If sSectionData(l) = "Комплекты" Then ' Комплекты
  1921. If mComplect = 1 Then ' Раздел Комплекты включен
  1922. k2 = k2 + 1
  1923. For jj = 0 To nNumColumn - 8
  1924. ComplectData(k2, jj) = swTable.Text(k1 + 1, jj)
  1925. Next jj
  1926. End If
  1927. m = 1
  1928. Else
  1929. m = 2
  1930. End If
  1931. ' Назначаем раздел
  1932. sSpecData(k, nNumColumn - 5) = sSectionData(l)
  1933. If k > 0 Then
  1934. If sSpecData(k - 1, nNumColumn - 4) <> "" Then
  1935. If sSpecData(k, nNumColumn - 5) = "Прочие изделия" Or sSpecData(k, nNumColumn - 5) = "Стандартные изделия" Or _
  1936. sSpecData(k, nNumColumn - 5) = "ЭМ-Прочие изделия" Or sSpecData(k, nNumColumn - 5) = "ЭМ-Стандартные изделия" Or _
  1937. sSpecData(k, nNumColumn - 5) = "Материалы" Or sSpecData(k, nNumColumn - 5) = "ЭМ-Материалы" Then
  1938. sSpecData(k, nNumColumn - 4) = sSpecData(k - 1, nNumColumn - 4)
  1939. End If
  1940. End If
  1941. End If
  1942. ok = swTable.DeleteRow(k1 + 1) ' Удаляем ручную строку
  1943. Exit For
  1944. Else ' Ведомость покупных
  1945. ' Назначаем раздел "Прочие изделия" и группу
  1946. m = 2
  1947. sSpecData(k, nNumColumn - 5) = "Прочие изделия"
  1948. sSpecData(k, nNumColumn - 4) = sGroupData(l)
  1949. ok = swTable.DeleteRow(k1 + 1) ' Удаляем ручную строку
  1950. Exit For
  1951. End If
  1952. Else ' Проверка наличия файла
  1953. strTemp = sSpecData(k, nNumColumn - 7) & sSpecData(k, nNumColumn - 6) & ".SLDASM"
  1954. If fs.FileExists(strTemp) = True Then
  1955. sSpecData(k, j) = "Сборочные единицы"
  1956. Else
  1957. sSpecData(k, j) = "Детали"
  1958. End If
  1959. End If
  1960. End If
  1961. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1962. If sSpecData(k, j) = "Сборочные единицы" Then ' Заменяем формат у сборок
  1963. sSpecData(k, 0) = "A4"
  1964. swTable.Text(k1 + 1, 0) = "A4"
  1965. End If
  1966. Else ' Ведомость покупных
  1967. If sSpecData(k, nNumColumn - 5) = "Прочие изделия" Or sSpecData(k, nNumColumn - 5) = "Стандартные изделия" Then
  1968. Else
  1969. Debug.Print swTable.Text(k1 + 1, 12), swTable.Text(k1 + 1, 13)
  1970. If swTable.Text(k1 + 1, nNumColumn - 3) = "" Then ' нет заготовки
  1971. m = 1
  1972. ok = swTable.DeleteRow(k1 + 1) ' Удаляем строку другого раздела
  1973. Exit For
  1974. End If
  1975. Debug.Print swTable.Text(k1 + 1, nNumColumn - 3)
  1976. End If
  1977. End If
  1978. ElseIf j = nNumColumn - 3 And MSort = 0 Then ' Заготовка
  1979. If sSpecData(k, nNumColumn - 3) <> "" Then ' Есть заготовка
  1980. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  1981. m = 3
  1982. strTemp = sSpecData(k, nNumColumn - 3)
  1983. varTemp = InStr(strTemp, "$")
  1984. If varTemp > 0 Then
  1985. If varTemp > 1 Then
  1986. sSpecData(k + 1, 0) = Left$(strTemp, varTemp - 1) ' Формат
  1987. Else
  1988. sSpecData(k + 1, 0) = ""
  1989. End If
  1990. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  1991. varTemp = InStr(strTemp, "$")
  1992. If varTemp > 0 Then
  1993. If varTemp > 1 Then
  1994. sSpecData(k + 1, 3) = Left$(strTemp, varTemp - 1) ' Обозначение
  1995. Else
  1996. sSpecData(k + 1, 3) = ""
  1997. End If
  1998. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  1999. varTemp = InStr(strTemp, "$")
  2000. If varTemp > 0 Then
  2001. If varTemp > 1 Then
  2002. sSpecData(k + 1, 4) = Left$(strTemp, varTemp - 1) & " (Заготовка для " & sSpecData(k, 3) & ")" ' Наименование
  2003. Else
  2004. sSpecData(k + 1, 4) = ""
  2005. End If
  2006. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2007. varTemp = InStr(strTemp, "$")
  2008. If varTemp > 0 Then
  2009. If varTemp > 1 Then
  2010. sSpecData(k + 1, nNumColumn - 8) = Left$(strTemp, varTemp - 1) ' Примечание
  2011. Else
  2012. sSpecData(k + 1, nNumColumn - 8) = ""
  2013. End If
  2014. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2015. varTemp = InStr(strTemp, "$")
  2016. If varTemp > 0 Then
  2017. If varTemp > 1 Then
  2018. sSpecData(k + 1, nNumColumn - 5) = Left$(strTemp, varTemp - 1) ' Раздел
  2019. Else
  2020. sSpecData(k + 1, nNumColumn - 5) = sSpecData(k, nNumColumn - 5)
  2021. End If
  2022. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2023. varTemp = InStr(strTemp, "$")
  2024. If varTemp > 0 Then
  2025. If varTemp > 1 Then
  2026. sSpecData(k + 1, nNumColumn - 4) = Left$(strTemp, varTemp - 1) ' Группа
  2027. Else
  2028. sSpecData(k + 1, nNumColumn - 4) = sSpecData(k, nNumColumn - 4)
  2029. End If
  2030. End If
  2031. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2032. varTemp = InStr(strTemp, "$")
  2033. If varTemp > 0 Then
  2034. If varTemp > 1 And sSpecData(k + 1, 4) <> "" Then
  2035. strTemp = Left$(strTemp, varTemp - 1) ' Обозначение ДНП
  2036. If sSpecData(k + 1, nNumColumn - 5) = "Прочие изделия" Or sSpecData(k + 1, nNumColumn - 5) = "Стандартные изделия" Then ' Меняем Наименование
  2037. varTemp = InStr(sSpecData(k + 1, 4), " (Заготовка")
  2038. If varTemp > 0 Then
  2039. sSpecData(k + 1, 4) = Left$(sSpecData(k + 1, 4), varTemp) & strTemp & Right$(sSpecData(k + 1, 4), Len(sSpecData(k + 1, 4)) - varTemp + 1)
  2040. End If
  2041. End If
  2042. End If
  2043. End If
  2044. End If
  2045. End If
  2046. End If
  2047. End If
  2048. End If
  2049. sSpecData(k + 1, 2) = "-" ' Позиция
  2050. Else ' Ведомость покупных
  2051. m = 4
  2052. strTemp = sSpecData(k, nNumColumn - 3)
  2053. varTemp = InStr(strTemp, "$")
  2054. If varTemp > 0 Then
  2055. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2056. varTemp = InStr(strTemp, "$")
  2057. If varTemp > 0 Then
  2058. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2059. varTemp = InStr(strTemp, "$")
  2060. If varTemp > 0 Then
  2061. If varTemp > 1 Then
  2062. sSpecData(k + 1, 1) = Left$(strTemp, varTemp - 1) ' Наименование
  2063. Else
  2064. sSpecData(k + 1, 1) = ""
  2065. End If
  2066. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2067. varTemp = InStr(strTemp, "$")
  2068. If varTemp > 0 Then
  2069. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2070. varTemp = InStr(strTemp, "$")
  2071. If varTemp > 0 Then
  2072. If varTemp > 1 Then
  2073. sSpecData(k + 1, nNumColumn - 5) = Left$(strTemp, varTemp - 1) ' Раздел
  2074. Else
  2075. sSpecData(k + 1, nNumColumn - 5) = sSpecData(k, nNumColumn - 5)
  2076. End If
  2077. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2078. varTemp = InStr(strTemp, "$")
  2079. If varTemp > 0 Then
  2080. If varTemp > 1 Then
  2081. sSpecData(k + 1, nNumColumn - 4) = Left$(strTemp, varTemp - 1) ' Группа
  2082. Else
  2083. sSpecData(k + 1, nNumColumn - 4) = sSpecData(k, nNumColumn - 4)
  2084. End If
  2085. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2086. varTemp = InStr(strTemp, "$")
  2087. If varTemp > 0 Then
  2088. If varTemp > 1 Then
  2089. sSpecData(k + 1, 3) = Left$(strTemp, varTemp - 1) ' Обозначение ДНП
  2090. If Right$(sSpecData(k + 1, 1), Len(sSpecData(k + 1, 3))) = sSpecData(k + 1, 3) Then
  2091. sSpecData(k + 1, 1) = Trim(Left$(sSpecData(k + 1, 1), Len(sSpecData(k + 1, 1)) - Len(sSpecData(k + 1, 3))))
  2092. End If
  2093. Else
  2094. sSpecData(k + 1, 3) = ""
  2095. End If
  2096. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2097. varTemp = InStr(strTemp, "$")
  2098. If varTemp > 0 Then
  2099. If varTemp > 1 Then
  2100. sSpecData(k + 1, nNumColumn - 8) = Left$(strTemp, varTemp - 1) ' Примечание ВП
  2101. Else
  2102. sSpecData(k + 1, nNumColumn - 8) = ""
  2103. End If
  2104. strTemp = Right$(strTemp, Len(strTemp) - varTemp)
  2105. varTemp = InStr(strTemp, "$")
  2106. If varTemp > 0 Then
  2107. If varTemp > 1 Then
  2108. sSpecData(k + 1, 4) = Left$(strTemp, varTemp - 1) ' Поставщик
  2109. Else
  2110. sSpecData(k + 1, 4) = ""
  2111. End If
  2112. sSpecData(k + 1, 2) = Right$(strTemp, Len(strTemp) - varTemp) ' Код продукции
  2113. End If
  2114. End If
  2115. End If
  2116. End If
  2117. End If
  2118. End If
  2119. End If
  2120. End If
  2121. End If
  2122. End If
  2123. sSpecData(k + 1, nNumColumn - 1) = k + 1 ' Номер строки
  2124. sSpecData(k + 1, nNumColumn) = 1 ' Ручная строка
  2125. If CboType.ListIndex = 0 Then ' Спецификация
  2126. sSpecData(k + 1, 5) = sSpecData(k, 5) ' Количество
  2127. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  2128. For jj = 5 To 14
  2129. sSpecData(k + 1, jj) = sSpecData(k, jj) ' Количество
  2130. Next jj
  2131. Else ' Ведомость покупных
  2132. sSpecData(k + 1, 6) = sSpecData(k, 6) ' Количество
  2133. End If
  2134. End If
  2135. End If
  2136. Next j
  2137. End If
  2138. If m = 0 Then
  2139. sSpecData(k, nNumColumn) = 0 ' Нормальная строка
  2140. k = k + 1
  2141. k1 = k1 + 1
  2142. ElseIf m = 1 Then ' Строка из отдела Комплекты или строка другого раздела ВП
  2143. n = n + 1
  2144. ElseIf m = 2 Then ' Ручная строка
  2145. sSpecData(k, nNumColumn) = 1 ' Ручная строка
  2146. k = k + 1
  2147. n = n + 1
  2148. ElseIf m = 3 Then ' Заготовка
  2149. sSpecData(k, nNumColumn) = 0
  2150. k = k + 2
  2151. k1 = k1 + 1
  2152. Else ' Заготовка и ВП
  2153. If sSpecData(k, nNumColumn - 5) = "Прочие изделия" Or sSpecData(k, nNumColumn - 5) = "Стандартные изделия" Then
  2154. sSpecData(k, nNumColumn) = 0
  2155. k = k + 2
  2156. k1 = k1 + 1
  2157. Else
  2158. ok = swTable.DeleteRow(k1 + 1) ' Удаляем строку другого раздела
  2159. For j = 0 To nNumColumn
  2160. sSpecData(k, j) = sSpecData(k + 1, j)
  2161. Next j
  2162. n = n + 1
  2163. k = k + 1
  2164. End If
  2165. End If
  2166. Next i
  2167. sSpecDataSize = k - 1
  2168. ComplectDataSize = k2
  2169.  
  2170. Debug.Print "Из таблицы считали ", k, " строк"
  2171. For i = 0 To sSpecDataSize
  2172. Debug.Print sSpecData(i, 1), sSpecData(i, nNumColumn - 4) ', sSpecData(i, nNumColumn - 1), sSpecData(i, nNumColumn)
  2173. Next i
  2174.  
  2175. ' Освобождаем позиции
  2176. Set swBomFeat = swTable.BomFeature
  2177. swBomFeat.KeepCurrentItemNumbers = False
  2178.  
  2179. ' Борьба с переколбасом (для существующих таблиц у которых пользователь перемещал строки)
  2180. nNumRow = swTable.RowCount
  2181. k = 1
  2182. While k = 1
  2183. k = 0
  2184. For i = 2 To nNumRow - 1
  2185. If swTable.Text(i, nNumColumn - 1) < i - 1 Then
  2186. ok = swTable.MoveRow(i, swTableItemInsertPosition_First, i - 1)
  2187. k = 1
  2188. Exit For
  2189. End If
  2190. Next i
  2191. Wend
  2192.  
  2193. ImgInfo.Width = 120
  2194. LblInfo.Caption = " Сортировка"
  2195. 'Вызываем процедуру сортировки
  2196. If iSort = 1 Then ' Новая сортировка
  2197. nNumRow = swTable.RowCount
  2198. Debug.Print "nNumRow", nNumRow
  2199. k = 1 ' Метка конца цикла
  2200. n = 0
  2201. strTempData1 = sSpecData
  2202. While k = 1
  2203. k = 0
  2204. For i = 0 To sSpecDataSize - 1 ' (-1 т.к. берем сразу две строки)
  2205. Sort
  2206. If Result = "S_GREAT" Then
  2207. k = 1
  2208. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2209. ' Проверяем верхнюю строку
  2210. k1 = 0 ' Счетчик строк с одинаковыми позициями вверх
  2211. If i <> 0 Then
  2212. For j = i To 1 Step -1 ' Проверяем строки с одинаковыми позициями
  2213. If sSpecData(j, 2) = " " Or sSpecData(j, 2) = "-" Then ' Пустая позиция
  2214. Exit For
  2215. Else
  2216. If sSpecData(j, 2) = sSpecData(j - 1, 2) Then
  2217. k1 = k1 + 1 ' Количество строк с одинаковыми позициями (с нуля)
  2218. Else
  2219. Exit For
  2220. End If
  2221. End If
  2222. Next j
  2223. End If
  2224. ' Проверяем нижнюю строку
  2225. k2 = 0 ' Счетчик строк с одинаковыми позициями вниз
  2226. For j = i + 1 To sSpecDataSize - 2 ' Проверяем строки с одинаковыми позициями
  2227. If sSpecData(j, 2) = " " Or sSpecData(j, 2) = "-" Then ' Пустая позиция
  2228. Exit For
  2229. Else
  2230. If sSpecData(j, 2) = sSpecData(j + 1, 2) Then
  2231. k2 = k2 + 1 ' Количество строк с одинаковыми позициями (с нуля)
  2232. Else
  2233. Exit For
  2234. End If
  2235. End If
  2236. Next j
  2237. Else ' Ведомость покупных
  2238. k1 = 0
  2239. k2 = 0
  2240. End If
  2241. ' Перемещаем строки в sSpecData
  2242. ' Верхнюю строку вниз
  2243. For jj = i - k1 To i
  2244. For j = 0 To nNumColumn
  2245. strTempData1(jj + k2 + 1, j) = sSpecData(jj, j)
  2246. Next j
  2247. Next jj
  2248. ' Нижнюю строку вверх
  2249. For jj = i + 1 To i + 1 + k2
  2250. For j = 0 To nNumColumn
  2251. strTempData1(jj - k1 - 1, j) = sSpecData(jj, j)
  2252. Next j
  2253. Next jj
  2254. sSpecData = strTempData1
  2255. End If
  2256. Next i
  2257. n = n + 1
  2258. If n = 200 Then
  2259. ' swDraw.ForceRebuild3 (True)
  2260. ' n = 0
  2261. End If
  2262. Wend
  2263. ' Перемещаем строки таблицы
  2264. For i = sSpecDataSize To 0 Step -1
  2265. If sSpecData(i, nNumColumn) = 0 Then ' Проверяем удаленные самопальные строки
  2266. 'Debug.Print "Перемещаем строку таблицы", i
  2267. For j = 1 To nNumRow - 1
  2268. If swTable.Text(j, nNumColumn - 1) = sSpecData(i, nNumColumn - 1) Then
  2269. strTemp = swTable.Text(j, nNumColumn - 1)
  2270. Debug.Print "Перемещаем строку", swTable.Text(j, 4), swTable.Text(j, nNumColumn - 1), sSpecData(i, nNumColumn - 1)
  2271. ok = swTable.MoveRow(j, swTableItemInsertPosition_First, 0) ' Перемещаем строку
  2272. Exit For
  2273. End If
  2274. Next j
  2275. End If
  2276. ' Debug.Print ok, "Move", "i=", i
  2277. Next i
  2278. Else ' Старая сортировка
  2279. nNumRow = swTable.RowCount
  2280. Debug.Print "nNumRow", nNumRow
  2281. k = 1 ' Метка конца цикла
  2282. n = 0
  2283. strTempData1 = sSpecData
  2284. While k = 1
  2285. k = 0
  2286. For i = 0 To sSpecDataSize - 1 ' (-1 т.к. берем сразу две строки)
  2287. Sort
  2288. If Result = "S_GREAT" Then
  2289. k = 1
  2290. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2291. ' Проверяем верхнюю строку
  2292. k1 = 0 ' Счетчик строк с одинаковыми позициями вверх
  2293. If i <> 0 Then
  2294. For j = i To 1 Step -1 ' Проверяем строки с одинаковыми позициями
  2295. If sSpecData(j, 2) = " " Or sSpecData(j, 2) = "-" Then ' Пустая позиция
  2296. Exit For
  2297. Else
  2298. If sSpecData(j, 2) = sSpecData(j - 1, 2) Then
  2299. k1 = k1 + 1 ' Количество строк с одинаковыми позициями (с нуля)
  2300. Else
  2301. Exit For
  2302. End If
  2303. End If
  2304. Next j
  2305. End If
  2306. ' Проверяем нижнюю строку
  2307. k2 = 0 ' Счетчик строк с одинаковыми позициями вниз
  2308. For j = i + 1 To sSpecDataSize - 2 ' Проверяем строки с одинаковыми позициями
  2309. If sSpecData(j, 2) = " " Or sSpecData(j, 2) = "-" Then ' Пустая позиция
  2310. Exit For
  2311. Else
  2312. If sSpecData(j, 2) = sSpecData(j + 1, 2) Then
  2313. k2 = k2 + 1 ' Количество строк с одинаковыми позициями (с нуля)
  2314. Else
  2315. Exit For
  2316. End If
  2317. End If
  2318. Next j
  2319. Else ' Ведомость покупных
  2320. k1 = 0
  2321. k2 = 0
  2322. End If
  2323. ' Перемещаем строки таблицы
  2324. If sSpecData(i, nNumColumn) = 0 And sSpecData(i + 1, nNumColumn) = 0 Then ' Проверяем удаленные самопальные строки
  2325. 'Debug.Print "Перемещаемые строки таблицы", i, i + 1
  2326. For j = 1 To nNumRow - 1
  2327. If swTable.Text(j, nNumColumn - 1) = sSpecData(i, nNumColumn - 1) Then
  2328. strTemp = swTable.Text(j, nNumColumn - 1)
  2329. Debug.Print "Перемещаем строку", swTable.Text(j, 4), swTable.Text(j, nNumColumn - 1), sSpecData(i, nNumColumn - 1)
  2330. ok = swTable.MoveRow(j, swTableItemInsertPosition_After, j + 1) ' Перемещаем строку
  2331. ' Проверяем, не помешала ли перемещению удаленная строка таблицы (особенно актуально для ВП)
  2332. l = 0
  2333. While l = 0
  2334. If swTable.Text(j, nNumColumn - 1) = strTemp Then
  2335. Debug.Print "Перемещаем строку", swTable.Text(j, 4), swTable.Text(j, nNumColumn - 1), sSpecData(i, nNumColumn - 1)
  2336. ok = swTable.MoveRow(j, swTableItemInsertPosition_After, j + 1) ' Перемещаем строку
  2337. Else
  2338. l = 1
  2339. End If
  2340. Wend
  2341. Exit For
  2342. End If
  2343. Next j
  2344. End If
  2345. ' Debug.Print ok, "Move", "i=", i
  2346. ' Перемещаем строки в sSpecData
  2347. ' Верхнюю строку вниз
  2348. For jj = i - k1 To i
  2349. For j = 0 To nNumColumn
  2350. strTempData1(jj + k2 + 1, j) = sSpecData(jj, j)
  2351. Next j
  2352. Next jj
  2353. ' Нижнюю строку вверх
  2354. For jj = i + 1 To i + 1 + k2
  2355. For j = 0 To nNumColumn
  2356. strTempData1(jj - k1 - 1, j) = sSpecData(jj, j)
  2357. Next j
  2358. Next jj
  2359. sSpecData = strTempData1
  2360. End If
  2361. Next i
  2362. n = n + 1
  2363. If n = 200 Then
  2364. ' swDraw.ForceRebuild3 (True)
  2365. ' n = 0
  2366. End If
  2367. Wend
  2368. End If
  2369.  
  2370. 'Debug.Print "После сортировки"
  2371. 'For i = 0 To sSpecDataSize
  2372. ' Debug.Print sSpecData(i, 1), sSpecData(i, nNumColumn - 4) ', sSpecData(i, nNumColumn - 1)
  2373. 'Next i
  2374.  
  2375. ImgInfo.Width = 200
  2376. LblInfo.Caption = " Добавление дополнительных строк"
  2377.  
  2378. ' Добавляем удаленные самопальные строки
  2379. For i = 0 To sSpecDataSize
  2380. If sSpecData(i, nNumColumn) = 1 And sSpecData(i, 2) <> "-" Then ' Вставляем строку
  2381. ok = swTable.InsertRow(swTableItemInsertPosition_After, i)
  2382. For j = 0 To nNumColumn - 8
  2383. If j <> 2 Then
  2384. swTable.Text(i + 1, j) = sSpecData(i, j)
  2385. End If
  2386. Next j
  2387. End If
  2388. Next i
  2389.  
  2390. ' Фиксируем номера позиций
  2391. 'Set swBomFeat = swTable.BomFeature
  2392. 'swBomFeat.KeepCurrentItemNumbers = True
  2393.  
  2394. ' Добавляем удаленные строки Заготовки
  2395. For i = 0 To sSpecDataSize
  2396. If sSpecData(i, nNumColumn) = 1 And sSpecData(i, 2) = "-" Then ' Вставляем строку
  2397. ok = swTable.InsertRow(swTableItemInsertPosition_After, i)
  2398. For j = 0 To nNumColumn - 8
  2399. swTable.Text(i + 1, j) = sSpecData(i, j)
  2400. Next j
  2401. End If
  2402. Next i
  2403.  
  2404. ' Удаляем временные колонки
  2405. ok = swTable.DeleteColumn(nNumColumn - 1)
  2406. ok = swTable.DeleteColumn(nNumColumn - 2)
  2407. ok = swTable.DeleteColumn(nNumColumn - 3)
  2408. ok = swTable.DeleteColumn(nNumColumn - 4)
  2409. ok = swTable.DeleteColumn(nNumColumn - 5)
  2410. ok = swTable.DeleteColumn(nNumColumn - 6)
  2411. ok = swTable.DeleteColumn(nNumColumn - 7)
  2412. nNumColumn = swTable.ColumnCount
  2413.  
  2414. ImgInfo.Width = 240
  2415.  
  2416. LblInfo.Caption = " Добавление разделов"
  2417.  
  2418. nNumRow = swTable.RowCount
  2419. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2420. ' Вставляем заголовки разделов
  2421. Set swTextFormat = swTable.GetCellTextFormat(1, 4)
  2422. Set swTextFormatUnd = swTable.GetCellTextFormat(1, 4)
  2423. swTextFormatUnd.Underline = True
  2424. k = 0
  2425. m = 0
  2426. For j = 0 To UBound(sSectionData)
  2427. For i = 0 To nNumRow - 2 ' (-1 т.к с 0, -1 т.к. пропускаем первую строку)
  2428. Debug.Print sSpecData(i, 4), sSpecData(i, nNumColumn + 2)
  2429. If sSpecData(i, nNumColumn + 2) = sSectionData(j) Then
  2430. If Left$(sSectionData(j), 3) = "ЭМ-" And m = 0 Then ' Вставляем Заголовок Электромонтаж
  2431. If sNumber = "1" Then ' Обозначение
  2432. strTemp = sNumberText
  2433. If sNumberText = sModelName Then
  2434. strTemp = "$PRPSHEET:" & Chr$(34) & "SW-File Name" & Chr$(34)
  2435. End If
  2436. Else
  2437. strTemp = "$PRPSHEET:" & Chr$(34) & prpNumber & Chr$(34)
  2438. End If
  2439. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i + 1 + k)
  2440. swTable.Text(i + 1 + k, 2) = " "
  2441. If mElectro = 2 Then
  2442. swTable.Text(i + 1 + k, 4) = "Устанавливают по " & strTemp & "МЭ"
  2443. ElseIf mElectro = 3 Then
  2444. swTable.Text(i + 1 + k, 4) = "Устанавливают по " & strTemp & "ТБ"
  2445. Else
  2446. swTable.Text(i + 1 + k, 4) = "Устанавливают при электромонтаже"
  2447. End If
  2448. ok = swTable.SetCellTextFormat(i + 1 + k, 4, False, swTextFormatUnd)
  2449. swTable.CellTextHorizontalJustification(i + 1 + k, 4) = swTextJustificationCenter
  2450. m = i + 1 + k
  2451. k = k + 1
  2452. End If
  2453. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i + 1 + k)
  2454. swTable.Text(i + 1 + k, 2) = " "
  2455. If Left$(sSectionData(j), 3) = "ЭМ-" Then
  2456. swTable.Text(i + 1 + k, 4) = Right$(sSectionData(j), Len(sSectionData(j)) - 3)
  2457. Else
  2458. swTable.Text(i + 1 + k, 4) = sSectionData(j)
  2459. End If
  2460. ok = swTable.SetCellTextFormat(i + 1 + k, 4, False, swTextFormatUnd)
  2461. swTable.CellTextHorizontalJustification(i + 1 + k, 4) = swTextJustificationCenter
  2462. k = k + 1
  2463. Exit For
  2464. End If
  2465. Next i
  2466. Next j
  2467.  
  2468. nNumRow = swTable.RowCount
  2469. ' Вставляем раздел Комплекты
  2470. If mComplect = 1 Then ' Нужно вставить раздел Комплекты
  2471. If m = 0 Then ' Определяем место вставки
  2472. m = nNumRow
  2473. End If
  2474. ok = swTable.InsertRow(swTableItemInsertPosition_After, m - 1)
  2475. swTable.Text(m, 2) = " "
  2476. swTable.Text(m, 4) = "Комплекты"
  2477. ok = swTable.SetCellTextFormat(m, 4, False, swTextFormatUnd)
  2478. swTable.CellTextHorizontalJustification(m, 4) = swTextJustificationCenter
  2479. If ComplectDataSize <> "-1" Then ' Есть документы
  2480. For i = ComplectDataSize To 0 Step -1
  2481. ok = swTable.InsertRow(swTableItemInsertPosition_After, m)
  2482. ok = swTable.SetCellTextFormat(m + 1, 4, False, swTextFormat)
  2483. swTable.CellTextHorizontalJustification(m + 1, 4) = swTextJustificationLeft
  2484. swTable.Text(m + 1, 2) = " "
  2485. For j = 0 To nNumColumn - 1
  2486. If j <> 2 Then
  2487. swTable.Text(m + 1, j) = ComplectData(i, j)
  2488. End If
  2489. Next j
  2490. Next i
  2491. End If
  2492. End If
  2493.  
  2494. ' Раздел Документация
  2495. If MSort = 0 Then ' Спецификации нет
  2496. If ChkAssem.Value = False And UBound(DocData) = 0 And ChkADrw.Value = False Or ChkAssem.Value = False And UBound(DocData) <> 0 Or ChkAssem.Value = True And UBound(DocData) <> 0 Then
  2497. ok = swTable.InsertRow(swTableItemInsertPosition_Before, 1)
  2498. swTable.Text(1, 2) = " "
  2499. swTable.Text(1, 4) = "Документация"
  2500. ok = swTable.SetCellTextFormat(1, 4, False, swTextFormatUnd)
  2501. swTable.CellTextHorizontalJustification(1, 4) = swTextJustificationCenter
  2502. If sNumber = "1" Then ' Обозначение
  2503. strTemp = sNumberText
  2504. If sNumberText = sModelName Then
  2505. strTemp = "$PRPSHEET:" & Chr$(34) & "SW-File Name" & Chr$(34)
  2506. End If
  2507. Else
  2508. strTemp = "$PRPSHEET:" & Chr$(34) & prpNumber & Chr$(34)
  2509. End If
  2510. If ChkAssem.Value = True Or ChkADrw.Value = True Then ' Исключаем Сборочный чертеж
  2511. iTemp = 1
  2512. Else
  2513. iTemp = 0
  2514. End If
  2515. For i = UBound(DocData) To iTemp Step -1
  2516. strTemp1 = Left$(DocData(i), InStr(DocData(i), "-") - 1)
  2517. strTemp1 = Trim(strTemp1)
  2518. strTemp2 = Right$(DocData(i), Len(DocData(i)) - InStr(DocData(i), "-"))
  2519. strTemp2 = Trim(strTemp2)
  2520. ok = swTable.InsertRow(swTableItemInsertPosition_Before, 2)
  2521. ok = swTable.SetCellTextFormat(2, 4, False, swTextFormat)
  2522. swTable.CellTextHorizontalJustification(2, 4) = swTextJustificationLeft
  2523. swTable.Text(2, 2) = " "
  2524. '!!!!!!!!!!!!!!' Формат
  2525. If Left$(strTemp1, 1) = "+" Then
  2526. strTemp1 = Right$(strTemp1, Len(strTemp1) - 1)
  2527. swTable.Text(2, 3) = strTemp1 ' Обозначение
  2528. Else
  2529. swTable.Text(2, 3) = strTemp & strTemp1 ' Обозначение
  2530. End If
  2531. swTable.Text(2, 4) = strTemp2 ' Наименование
  2532. '!!!!!!!!!!!!!!' Примечание
  2533. If CboType.ListIndex = 1 Then ' Групповая спецификация
  2534. For j = 0 To UBound(vConfVisible)
  2535. swTable.Text(2, 5 + j) = "X"
  2536. Next j
  2537. End If
  2538. Next i
  2539. End If
  2540. Else ' Спецификация есть
  2541. If DocDataRealSize <> "-1" Then ' Есть отмеченные документы
  2542. If ChkAssem.Value = False And DocDataRealSize = 0 And ChkADrw.Value = False Or ChkAssem.Value = False And DocDataRealSize <> 0 Or ChkAssem.Value = True And DocDataRealSize <> 0 Then
  2543. ok = swTable.InsertRow(swTableItemInsertPosition_Before, 1)
  2544. swTable.Text(1, 2) = " "
  2545. swTable.Text(1, 4) = "Документация"
  2546. ok = swTable.SetCellTextFormat(1, 4, False, swTextFormatUnd)
  2547. swTable.CellTextHorizontalJustification(1, 4) = swTextJustificationCenter
  2548. If ChkAssem.Value = True Or ChkADrw.Value = True Then ' Исключаем Сборочный чертеж
  2549. iTemp = 1
  2550. Else
  2551. iTemp = 0
  2552. End If
  2553. For i = DocDataRealSize To iTemp Step -1
  2554. ok = swTable.InsertRow(swTableItemInsertPosition_Before, 2)
  2555. ok = swTable.SetCellTextFormat(2, 4, False, swTextFormat)
  2556. swTable.CellTextHorizontalJustification(2, 4) = swTextJustificationLeft
  2557. swTable.Text(2, 2) = " "
  2558. If CboType.ListIndex = 0 Then ' Спецификация
  2559. For j = 0 To nNumColumn - 1
  2560. swTable.Text(2, j) = DocDataReal(i, j)
  2561. Next j
  2562. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  2563. ' Debug.Print "vConfVisibleSP", UBound(vConfVisibleSP)
  2564. ' For j = 0 To UBound(vConfVisibleSP)
  2565. ' Debug.Print vConfVisibleSP(j)
  2566. ' Next j
  2567. ' Debug.Print "vConfVisible", UBound(vConfVisible)
  2568. ' For j = 0 To UBound(vConfVisible)
  2569. ' Debug.Print vConfVisible(j)
  2570. ' Next j
  2571. For j = 0 To 4
  2572. swTable.Text(2, j) = DocDataReal(i, j)
  2573. Next j
  2574. For j = 5 To 14
  2575. If j > UBound(vConfVisible) + 5 Then
  2576. swTable.Text(2, j) = ""
  2577. Else
  2578. For jj = 0 To UBound(vConfVisibleSP)
  2579. swTable.Text(2, j) = "X"
  2580. If vConfVisible(j - 5) = vConfVisibleSP(jj) Then
  2581. swTable.Text(2, j) = DocDataReal(i, 5 + jj)
  2582. Exit For
  2583. End If
  2584. Next jj
  2585. End If
  2586. Next j
  2587. swTable.Text(2, 15) = DocDataReal(i, 15)
  2588. Else ' Ведомость покупных
  2589. ' ***********
  2590. End If
  2591. Next i
  2592. End If
  2593. End If
  2594. End If
  2595. If ChkAssem.Value = False Then
  2596. swTable.Text(2, 0) = CboFormat.Value ' Формат для СБ
  2597. swTable.Text(2, nNumColumn - 1) = TxtRemark.Value ' Примечание для СБ
  2598. End If
  2599. Else ' Ведомость покупных
  2600. ' Вставляем заголовки групп и дополнительные строки
  2601. Set swTextFormat = swTable.GetCellTextFormat(1, 1)
  2602. Set swTextFormatUnd = swTable.GetCellTextFormat(1, 1)
  2603. swTextFormatUnd.Underline = True
  2604. k = 0
  2605. For j = 0 To UBound(sGroupData)
  2606. For i = 0 To nNumRow - 2 ' (-1 т.к с 0, -1 т.к. пропускаем первую строку)
  2607. 'Debug.Print "Перед вставкой групп"
  2608. 'Debug.Print sSpecData(i, 1), sSpecData(i, nNumColumn +3)
  2609. If sSpecData(i, nNumColumn + 3) = sGroupData(j) Then
  2610. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i + 1 + k)
  2611. swTable.Text(i + 1 + k, 1) = sGroupData(j)
  2612. ok = swTable.SetCellTextFormat(i + 1 + k, 1, False, swTextFormatUnd)
  2613. swTable.CellTextHorizontalJustification(i + 1 + k, 1) = swTextJustificationCenter
  2614. k = k + 1
  2615. Exit For
  2616. End If
  2617. Next i
  2618. Next j
  2619. ' Удаление вылезших ранее удаленных строк
  2620. nNumRowTemp = swTable.RowCount
  2621. If nNumRowTemp > nNumRow + k Then
  2622. For i = 1 To nNumRowTemp - nNumRow - k
  2623. ok = swTable.DeleteRow(nNumRowTemp - i)
  2624. Next i
  2625. End If
  2626. End If
  2627.  
  2628. ImgInfo.Width = 280
  2629.  
  2630. SetFont ' Устанавливаем шрифт
  2631.  
  2632. ImgInfo.Width = 320
  2633.  
  2634. SpaceRow ' Пустые строки
  2635.  
  2636. ImgInfo.Width = 360
  2637.  
  2638. MFormat = 1
  2639. CmdFormat_Click ' Форматирование
  2640. MFormat = 0
  2641.  
  2642. ImgInfo.Width = 400
  2643.  
  2644. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2645. MPosition = 1
  2646. CmdPosition_Click ' Позиции
  2647. MPosition = 0
  2648. RView
  2649. End If
  2650.  
  2651. ImgInfo.Width = 447
  2652. LblInfo.Caption = " Готово"
  2653. Finish
  2654. End Sub
  2655.  
  2656. Private Sub Finish()
  2657. ' Возвращение активного листа
  2658. ok = swDraw.ActivateSheet(strActiveSheetName)
  2659. swModelView.EnableGraphicsUpdate = True
  2660. swModelView.UpdateAllGraphicsLayers = True
  2661. Hide
  2662. Unload Me
  2663. End
  2664. End Sub
  2665.  
  2666. Private Sub CmdCancel_Click()
  2667. swDraw.ClearSelection2 True
  2668. Finish
  2669. End Sub
  2670.  
  2671. Private Sub SetFont()
  2672.  
  2673. LblInfo.Caption = " Применение шрифта"
  2674.  
  2675. ' Устанавливаем шрифт
  2676. nNumRow = swTable.RowCount
  2677. nNumColumn = swTable.ColumnCount
  2678. Set swTextFormat = swTable.GetCellTextFormat(1, 4)
  2679. Debug.Print swTextFormat.BackWards, swTextFormat.Bold, swTextFormat.CharHeight
  2680. Debug.Print swTextFormat.CharHeightInPts, swTextFormat.CharSpacingFactor, swTextFormat.Escapement
  2681. Debug.Print swTextFormat.Italic, swTextFormat.LineLength, swTextFormat.LineSpacing
  2682. Debug.Print swTextFormat.ObliqueAngle, swTextFormat.Strikeout, swTextFormat.TypeFaceName
  2683. Debug.Print swTextFormat.Underline, swTextFormat.UpsideDown, swTextFormat.Vertical
  2684. Debug.Print swTextFormat.WidthFactor
  2685. Set swTextFormatUnd = swTable.GetCellTextFormat(1, 4)
  2686. swTextFormat.TypeFaceName = stdFontName
  2687. swTextFormatUnd.TypeFaceName = stdFontName
  2688. 'swTextFormat.CharHeightInPts = Int(stdFontSize * 3.9) ' 3.891
  2689. swTextFormat.CharHeight = stdFontSize / 1000
  2690. swTextFormatUnd.CharHeight = stdFontSize / 1000
  2691. swTextFormat.LineSpacing = (8 - stdFontSize - 0.3) / 1000
  2692. swTextFormatUnd.LineSpacing = (8 - stdFontSize - 0.3) / 1000
  2693. swTextFormat.WidthFactor = dFontWidth
  2694. swTextFormatUnd.WidthFactor = dFontWidth
  2695. 'swTextFormatUnd.Escapement = 1.57
  2696. 'swTextFormatUnd.ObliqueAngle = 1.57
  2697. If stdFontItalic = 1 Then
  2698. swTextFormat.Italic = True
  2699. swTextFormatUnd.Italic = True
  2700. Else
  2701. swTextFormat.Italic = False
  2702. swTextFormatUnd.Italic = False
  2703. End If
  2704. If stdFontBold = 1 Then
  2705. swTextFormat.Bold = True
  2706. swTextFormatUnd.Bold = True
  2707. Else
  2708. swTextFormat.Bold = False
  2709. swTextFormatUnd.Bold = False
  2710. End If
  2711. swTextFormat.Underline = False
  2712. swTextFormatUnd.Underline = True
  2713. For i = 1 To nNumRow - 1
  2714. For j = 0 To nNumColumn - 1
  2715. Set swTextFormatTest = swTable.GetCellTextFormat(i, j)
  2716. If swTextFormatTest.Underline Then ' Заголовок
  2717. ok = swTable.SetCellTextFormat(i, j, False, swTextFormatUnd)
  2718. swTable.CellTextHorizontalJustification(i, j) = swTextJustificationCenter
  2719. Else
  2720. ok = swTable.SetCellTextFormat(i, j, False, swTextFormat)
  2721. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2722. If j = 3 Or j = 4 Or j = nNumColumn - 1 Then
  2723. swTable.CellTextHorizontalJustification(i, j) = swTextJustificationLeft
  2724. Else
  2725. swTable.CellTextHorizontalJustification(i, j) = swTextJustificationCenter
  2726. End If
  2727. Else ' Ведомость покупных
  2728. If j = 1 Or j = 2 Or j = 3 Or j = 4 Or j = 5 Or j = nNumColumn - 1 Then
  2729. swTable.CellTextHorizontalJustification(i, j) = swTextJustificationLeft
  2730. Else
  2731. swTable.CellTextHorizontalJustification(i, j) = swTextJustificationCenter
  2732. End If
  2733. End If
  2734. End If
  2735. swTable.CellTextVerticalJustification(i, j) = swTextAlignmentTop
  2736. Next j
  2737. 'ok = swTable.SetRowVerticalGap(i, 0.03 / 1000)
  2738. Next i
  2739. If ChkAssem.Value = True Then ' Устанавливаем шрифт шапки для специи на листе СБ
  2740. For i = 0 To 6
  2741. Set swTextFormat = swTable.GetCellTextFormat(0, i)
  2742. swTextFormat.TypeFaceName = stdFontName
  2743. 'Debug.Print swTextFormat.Vertical, swTextFormat.Escapement, swTextFormat.ObliqueAngle
  2744. 'swTextFormat.Escapement = 1.57
  2745. 'swTextFormat.ObliqueAngle = 90
  2746. 'swTextFormat.Vertical = True
  2747. If stdFontItalic = 1 Then
  2748. swTextFormat.Italic = True
  2749. Else
  2750. swTextFormat.Italic = False
  2751. End If
  2752. If stdFontBold = 1 Then
  2753. swTextFormat.Bold = True
  2754. Else
  2755. swTextFormat.Bold = False
  2756. End If
  2757. ok = swTable.SetCellTextFormat(0, i, False, swTextFormat)
  2758. Next i
  2759. End If
  2760. End Sub
  2761.  
  2762. Private Sub SpaceRow() ' Пустые строки
  2763.  
  2764. LblInfo.Caption = " Добавление пустых строк"
  2765.  
  2766. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2767. Set swTextFormat = swTable.GetCellTextFormat(2, 4)
  2768. Else ' Ведомость покупных
  2769. Set swTextFormat = swTable.GetCellTextFormat(2, 1)
  2770. End If
  2771.  
  2772. ' Добавляем основные пустые строки
  2773. i = 1 ' Счетчик строк
  2774. k = 1 ' Метка конца таблицы
  2775. While k = 1
  2776. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2777. If swTable.Text(i, 4) <> "" Then
  2778. Set swTextFormatTest = swTable.GetCellTextFormat(i, 4)
  2779. If swTextFormatTest.Underline Then ' Заголовок
  2780. If InStr(swTable.Text(i, 4), "Устанавливают") > 0 Then ' Найден раздел электромонтаж
  2781. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i)
  2782. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  2783. swTable.CellTextHorizontalJustification(i, 4) = swTextJustificationLeft
  2784. swTable.Text(i, 2) = " "
  2785. i = i + 1
  2786. Else
  2787. ok = swTable.InsertRow(swTableItemInsertPosition_After, i)
  2788. ok = swTable.SetCellTextFormat(i + 1, 4, False, swTextFormat)
  2789. swTable.CellTextHorizontalJustification(i + 1, 4) = swTextJustificationLeft
  2790. swTable.Text(i + 1, 2) = " "
  2791. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i)
  2792. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  2793. swTable.CellTextHorizontalJustification(i, 4) = swTextJustificationLeft
  2794. swTable.Text(i, 2) = " "
  2795. i = i + 2
  2796. End If
  2797. End If
  2798. End If
  2799. Else ' Ведомость покупных
  2800. If swTable.Text(i, 1) <> "" Then
  2801. Set swTextFormatTest = swTable.GetCellTextFormat(i, 1)
  2802. If swTextFormatTest.Underline Then ' Заголовок
  2803. ok = swTable.InsertRow(swTableItemInsertPosition_After, i)
  2804. ok = swTable.SetCellTextFormat(i + 1, 1, False, swTextFormat)
  2805. swTable.CellTextHorizontalJustification(i + 1, 1) = swTextJustificationLeft
  2806. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i)
  2807. ok = swTable.SetCellTextFormat(i, 1, False, swTextFormat)
  2808. swTable.CellTextHorizontalJustification(i, 1) = swTextJustificationLeft
  2809. i = i + 2
  2810. End If
  2811. End If
  2812. End If
  2813. i = i + 1
  2814. nNumRow = swTable.RowCount
  2815. If i > nNumRow - 1 Then
  2816. k = 0
  2817. End If
  2818. Wend
  2819.  
  2820. ' Добавляем резервированные строки
  2821. If iLine = 1 Then ' Добавляем строки после каждой строки
  2822. i = 1 ' Счетчик строк
  2823. k = 1 ' Метка конца таблицы
  2824. While k = 1
  2825. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2826. If swTable.Text(i, 3) <> "" Or swTable.Text(i, 4) <> "" Then
  2827. Set swTextFormatTest = swTable.GetCellTextFormat(i, 4)
  2828. If swTextFormatTest.Underline Then ' Заголовок
  2829. Else
  2830. For j = 1 To iLineCount
  2831. ok = swTable.InsertRow(swTableItemInsertPosition_After, i)
  2832. swTable.Text(i + 1, 2) = " "
  2833. i = i + 1
  2834. Next j
  2835. End If
  2836. End If
  2837. Else ' Ведомость покупных
  2838. If swTable.Text(i, 1) <> "" Then
  2839. Set swTextFormatTest = swTable.GetCellTextFormat(i, 1)
  2840. If swTextFormatTest.Underline Then ' Заголовок
  2841. Else
  2842. For j = 1 To iLineCount
  2843. ok = swTable.InsertRow(swTableItemInsertPosition_After, i)
  2844. i = i + 1
  2845. Next j
  2846. End If
  2847. End If
  2848. End If
  2849. i = i + 1
  2850. nNumRow = swTable.RowCount
  2851. If i > nNumRow - 1 Then
  2852. k = 0
  2853. End If
  2854. Wend
  2855. nNumRow = swTable.RowCount
  2856. For j = 1 To iLineCount ' Удаляем лишнее
  2857. ok = swTable.DeleteRow(nNumRow - j)
  2858. Next j
  2859. End If
  2860. If iSection = 1 Then ' Добавляем строки после каждого раздела
  2861. i = 1 ' Счетчик строк
  2862. k = 1 ' Метка конца таблицы
  2863. m = 0
  2864. While k = 1
  2865. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2866. If swTable.Text(i, 4) <> "" Then
  2867. Set swTextFormatTest = swTable.GetCellTextFormat(i, 4)
  2868. If swTextFormatTest.Underline Then ' Заголовок
  2869. If m = 1 Then
  2870. For j = 1 To iSectionCount
  2871. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i)
  2872. swTable.Text(i, 2) = " "
  2873. i = i + 1
  2874. Next j
  2875. End If
  2876. m = 1
  2877. End If
  2878. End If
  2879. Else ' Ведомость покупных
  2880. If swTable.Text(i, 1) <> "" Then
  2881. Set swTextFormatTest = swTable.GetCellTextFormat(i, 1)
  2882. If swTextFormatTest.Underline Then ' Заголовок
  2883. If m = 1 Then
  2884. For j = 1 To iSectionCount
  2885. ok = swTable.InsertRow(swTableItemInsertPosition_Before, i)
  2886. i = i + 1
  2887. Next j
  2888. End If
  2889. m = 1
  2890. End If
  2891. End If
  2892. End If
  2893. i = i + 1
  2894. nNumRow = swTable.RowCount - 1
  2895. If i > nNumRow - 1 Then
  2896. k = 0
  2897. End If
  2898. Wend
  2899. End If
  2900.  
  2901. ' Добавляем пустые строки в конец таблицы
  2902. nNumRow = swTable.RowCount
  2903. If mBlankRow = 1 Then
  2904. For i = 0 To CInt(strBlankRow) - 1
  2905. ok = swTable.InsertRow(swTableItemInsertPosition_After, nNumRow - 1)
  2906. swTable.Text(nNumRow, 2) = " "
  2907. Next i
  2908. End If
  2909.  
  2910. End Sub
  2911.  
  2912. Private Sub CmdFormat_Click() ' Форматирование
  2913.  
  2914. If MFormat = 0 Then
  2915. ImgInfo.Width = 5
  2916. Prepare ' Подготовка таблицы
  2917. DeleteSpaceRow ' Удаление пустых строк
  2918. ImgInfo.Width = 110
  2919. SetFont ' Устанавливаем шрифт
  2920. SpaceRow ' Пустые строки
  2921. ImgInfo.Width = 220
  2922. MSort = 1
  2923. End If
  2924.  
  2925. LblInfo.Caption = " Форматирование"
  2926.  
  2927. ' Форматируем
  2928. ' Столбцы
  2929. nNumRow = swTable.RowCount
  2930. nNumColumn = swTable.ColumnCount
  2931.  
  2932. ' Затираем заголовки столбцов
  2933. If ChkAssem.Value = False Then
  2934. For i = 0 To nNumColumn - 1
  2935. ok = swTable.SetColumnTitle(i, " ")
  2936. Next i
  2937. Else
  2938. End If
  2939.  
  2940. If CboType.ListIndex = 0 Then ' Спецификация
  2941. dRetval = swTable.SetColumnWidth(0, 0.006, swTableRowColChange_TableSizeCanChange)
  2942. dRetval = swTable.SetColumnWidth(1, 0.006, swTableRowColChange_TableSizeCanChange)
  2943. dRetval = swTable.SetColumnWidth(2, 0.008, swTableRowColChange_TableSizeCanChange)
  2944. dRetval = swTable.SetColumnWidth(3, 0.07, swTableRowColChange_TableSizeCanChange)
  2945. dRetval = swTable.SetColumnWidth(4, 0.063, swTableRowColChange_TableSizeCanChange)
  2946. dRetval = swTable.SetColumnWidth(5, 0.01, swTableRowColChange_TableSizeCanChange)
  2947. dRetval = swTable.SetColumnWidth(6, 0.022, swTableRowColChange_TableSizeCanChange)
  2948. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  2949. dRetval = swTable.SetColumnWidth(0, 0.006, swTableRowColChange_TableSizeCanChange)
  2950. dRetval = swTable.SetColumnWidth(1, 0.006, swTableRowColChange_TableSizeCanChange)
  2951. dRetval = swTable.SetColumnWidth(2, 0.008, swTableRowColChange_TableSizeCanChange)
  2952. dRetval = swTable.SetColumnWidth(3, 0.07, swTableRowColChange_TableSizeCanChange)
  2953. dRetval = swTable.SetColumnWidth(4, 0.063, swTableRowColChange_TableSizeCanChange)
  2954. For i = 5 To nNumColumn - 2
  2955. dRetval = swTable.SetColumnWidth(i, 0.01, swTableRowColChange_TableSizeCanChange)
  2956. Next i
  2957. dRetval = swTable.SetColumnWidth(nNumColumn - 1, 0.034, swTableRowColChange_TableSizeCanChange)
  2958. ok = swTable.MergeCells(0, 5, 0, 14)
  2959. Else ' Ведомость покупных
  2960. dRetval = swTable.SetColumnWidth(0, 0.007, swTableRowColChange_TableSizeCanChange)
  2961. dRetval = swTable.SetColumnWidth(1, 0.06, swTableRowColChange_TableSizeCanChange)
  2962. dRetval = swTable.SetColumnWidth(2, 0.045, swTableRowColChange_TableSizeCanChange)
  2963. dRetval = swTable.SetColumnWidth(3, 0.07, swTableRowColChange_TableSizeCanChange)
  2964. dRetval = swTable.SetColumnWidth(4, 0.055, swTableRowColChange_TableSizeCanChange)
  2965. dRetval = swTable.SetColumnWidth(5, 0.07, swTableRowColChange_TableSizeCanChange)
  2966. For i = 6 To 9
  2967. dRetval = swTable.SetColumnWidth(i, 0.016, swTableRowColChange_TableSizeCanChange)
  2968. Next i
  2969. dRetval = swTable.SetColumnWidth(10, 0.024, swTableRowColChange_TableSizeCanChange)
  2970. ok = swTable.MergeCells(0, 6, 0, 9)
  2971. End If
  2972. ' Строки
  2973. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2974. dRetval = swTable.SetRowHeight(0, 0.015, swTableRowColChange_TableSizeCanChange)
  2975. Else ' Ведомость покупных
  2976. dRetval = swTable.SetRowHeight(0, 0.027, swTableRowColChange_TableSizeCanChange)
  2977. End If
  2978. For i = 1 To nNumRow - 1
  2979. ' Поджимаем стобец Формат
  2980. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2981. Set swTextFormat = swTable.GetCellTextFormat(1, 0)
  2982. swTextFormat.WidthFactor = dFontWidth / 1.4
  2983. ok = swTable.SetCellTextFormat(i, 0, False, swTextFormat)
  2984. End If
  2985. ' Общее сжатие и столбец Примечание
  2986. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  2987. Set swTextFormat = swTable.GetCellTextFormat(i, 4)
  2988. swTextFormat.WidthFactor = dFontWidth
  2989. ok = swTable.SetCellTextFormat(i, 3, False, swTextFormat)
  2990. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  2991. swTextFormat.WidthFactor = dFontWidth * dRemarkWidth
  2992. ok = swTable.SetCellTextFormat(i, nNumColumn - 1, False, swTextFormat)
  2993. Set swTextFormat = swTable.GetCellTextFormat(i, 1)
  2994. swTextFormat.WidthFactor = dFontWidth
  2995. ok = swTable.SetCellTextFormat(i, 1, False, swTextFormat)
  2996. ok = swTable.SetCellTextFormat(i, 2, False, swTextFormat)
  2997. For j = 5 To nNumColumn - 2
  2998. ok = swTable.SetCellTextFormat(i, j, False, swTextFormat)
  2999. Next j
  3000. Else ' Ведомость покупных
  3001. Set swTextFormat = swTable.GetCellTextFormat(i, 1)
  3002. swTextFormat.WidthFactor = dFontWidth
  3003. ok = swTable.SetCellTextFormat(i, 1, False, swTextFormat)
  3004. ok = swTable.SetCellTextFormat(i, 2, False, swTextFormat)
  3005. ok = swTable.SetCellTextFormat(i, 3, False, swTextFormat)
  3006. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  3007. ok = swTable.SetCellTextFormat(i, 5, False, swTextFormat)
  3008. swTextFormat.WidthFactor = dFontWidth * dRemarkWidth
  3009. ok = swTable.SetCellTextFormat(i, nNumColumn - 1, False, swTextFormat)
  3010. Set swTextFormat = swTable.GetCellTextFormat(i, 6)
  3011. swTextFormat.WidthFactor = dFontWidth
  3012. For j = 6 To nNumColumn - 2
  3013. ok = swTable.SetCellTextFormat(i, j, False, swTextFormat)
  3014. Next j
  3015. End If
  3016. ' Поджимаем длинные строки
  3017. k1 = 0 ' число добавленных строк по высоте
  3018. dRetval = swTable.SetRowHeight(i, 0.008, swTableRowColChange_TableSizeCanChange)
  3019. If dRetval > 0.008 Then ' Поджимаем текст
  3020. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3021. Set swTextFormat = swTable.GetCellTextFormat(i, 4)
  3022. swTextFormat.WidthFactor = dFontWidth * dRowWidth
  3023. ok = swTable.SetCellTextFormat(i, 3, False, swTextFormat)
  3024. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  3025. swTextFormat.WidthFactor = dFontWidth * dRowWidth * dRemarkWidth
  3026. ok = swTable.SetCellTextFormat(i, nNumColumn - 1, False, swTextFormat)
  3027. Else ' Ведомость покупных
  3028. Set swTextFormat = swTable.GetCellTextFormat(i, 1)
  3029. swTextFormat.WidthFactor = dFontWidth * dRowWidth
  3030. ok = swTable.SetCellTextFormat(i, 1, False, swTextFormat)
  3031. ok = swTable.SetCellTextFormat(i, 2, False, swTextFormat)
  3032. ok = swTable.SetCellTextFormat(i, 3, False, swTextFormat)
  3033. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  3034. ok = swTable.SetCellTextFormat(i, 5, False, swTextFormat)
  3035. swTextFormat.WidthFactor = dFontWidth * dRowWidth * dRemarkWidth
  3036. ok = swTable.SetCellTextFormat(i, nNumColumn - 1, False, swTextFormat)
  3037. End If
  3038. dRetval = swTable.SetRowHeight(i, 0.008, swTableRowColChange_TableSizeCanChange)
  3039. If dRetval > 0.008 Then ' Увеличиваем высоту строки
  3040. swTextFormat.CharHeight = stdFontSize / 1000
  3041. swTextFormat.LineSpacing = (8 - stdFontSize - 0.1) / 1000
  3042. swTextFormat.WidthFactor = dFontWidth * dRowWidth
  3043. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3044. ok = swTable.SetCellTextFormat(i, 3, False, swTextFormat)
  3045. swTable.CellTextVerticalJustification(i, 3) = swTextAlignmentTop
  3046. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  3047. swTable.CellTextVerticalJustification(i, 4) = swTextAlignmentTop
  3048. swTextFormat.WidthFactor = dFontWidth * dRowWidth * dRemarkWidth
  3049. ok = swTable.SetCellTextFormat(i, nNumColumn - 1, False, swTextFormat)
  3050. swTable.CellTextVerticalJustification(i, nNumColumn - 1) = swTextAlignmentTop
  3051. Else ' Ведомость покупных
  3052. ok = swTable.SetCellTextFormat(i, 1, False, swTextFormat)
  3053. swTable.CellTextVerticalJustification(i, 1) = swTextAlignmentTop
  3054. ok = swTable.SetCellTextFormat(i, 2, False, swTextFormat)
  3055. swTable.CellTextVerticalJustification(i, 2) = swTextAlignmentTop
  3056. ok = swTable.SetCellTextFormat(i, 3, False, swTextFormat)
  3057. swTable.CellTextVerticalJustification(i, 3) = swTextAlignmentTop
  3058. ok = swTable.SetCellTextFormat(i, 4, False, swTextFormat)
  3059. swTable.CellTextVerticalJustification(i, 4) = swTextAlignmentTop
  3060. ok = swTable.SetCellTextFormat(i, 5, False, swTextFormat)
  3061. swTable.CellTextVerticalJustification(i, 5) = swTextAlignmentTop
  3062. swTextFormat.WidthFactor = dFontWidth * dRowWidth * dRemarkWidth
  3063. ok = swTable.SetCellTextFormat(i, nNumColumn - 1, False, swTextFormat)
  3064. swTable.CellTextVerticalJustification(i, nNumColumn - 1) = swTextAlignmentTop
  3065. End If
  3066. k1 = Round(dRetval / (7.7 / 1000)) - 1 ' Определяем число дополнительных строк
  3067. dblTemp = k1 * 0.008 + 0.008
  3068. dRetval = swTable.SetRowHeight(i, dblTemp, swTableRowColChange_TableSizeCanChange)
  3069. End If
  3070. End If
  3071. Next i
  3072.  
  3073. ' Перенос раздела Электромонтаж на новый лист для первого листа
  3074. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3075. nNumRow = swTable.RowCount
  3076. dblTemp = 0#
  3077. k3 = 0 ' Номер строки электромонтаж
  3078. m = 0 ' Метка обработки электромонтажа
  3079. For i = 1 To nNumRow - 1 ' Проверяем электромонтаж
  3080. dblTemp = dblTemp + swTable.GetRowHeight(i)
  3081. strTemp = swTable.Text(i, 4)
  3082. Set swTextFormatTest = swTable.GetCellTextFormat(i, 4)
  3083. If InStr(strTemp, "Устанавливают") > 0 And swTextFormatTest.Underline Then ' Найден раздел электромонтаж
  3084. k3 = i
  3085. l = Int(((dblTemp - CDbl(nFirst) * 0.008) / (CDbl(nSecond) * 0.008)) + 1.99) ' Номер листа на котором есть раздел электромонтаж
  3086. dblTemp = nFirst * 0.008 + nSecond * (l - 1) * 0.008 - dblTemp + swTable.GetRowHeight(k3)
  3087. l1 = CInt(dblTemp / 0.008) ' Число строк, которое нужно добавить перед заголовком электромонтаж
  3088. If l = 1 Then ' Если электромонтаж найден на первом листе
  3089. For jj = 1 To l1 ' Двигаем заголовок электромонтаж
  3090. ok = swTable.InsertRow(swTableItemInsertPosition_Before, k3)
  3091. swTable.Text(k3, 2) = " "
  3092. dRetval = swTable.SetRowHeight(k3, 0.008, swTableRowColChange_TableSizeCanChange)
  3093. Next jj
  3094. m = 1
  3095. End If
  3096. Exit For
  3097. End If
  3098. Next i
  3099. End If
  3100.  
  3101. ' Добавляем строки для корректного переноса
  3102. nNumRow = swTable.RowCount
  3103. nNumColumn = swTable.ColumnCount
  3104. dblTemp = 0#
  3105. For i = 1 To nNumRow - 1 ' Вычисляем общую высоту таблицы
  3106. dblTemp = dblTemp + swTable.GetRowHeight(i)
  3107. Next i
  3108. k = 1 ' Метка конца таблицы
  3109. n = nFirst
  3110. i = 0 ' Счетчик листов
  3111. If dblTemp > nFirst * 0.008 + 0.001 Then ' Если не помещаемся на одном листе
  3112. While k = 1
  3113. k = 0 ' Метка конца таблицы
  3114. k1 = 0 ' Счетчик строк, добавляемых для переноса широких строк
  3115. k2 = 0 ' Счетчик строк, добавляемых для переноса подвисших заголовков
  3116. ' Проверяем многострочные записи
  3117. dblTemp = 0#
  3118. j = 0 ' Счетчик строк
  3119. While dblTemp + 0.001 < n * 0.008 ' Определяем количество строк до границы листов
  3120. j = j + 1
  3121. dblTemp = dblTemp + swTable.GetRowHeight(j)
  3122. Wend
  3123. If dblTemp > n * 0.008 + 0.001 Then ' Определяем, есть ли высокая строка на границе и количество добавляемых строк
  3124. dblTemp = dblTemp - n * 0.008
  3125. dblTemp = swTable.GetRowHeight(j) - dblTemp
  3126. k1 = CInt(dblTemp / 0.008)
  3127. End If
  3128. For jj = 1 To k1 ' Добавляем строки
  3129. ok = swTable.InsertRow(swTableItemInsertPosition_Before, j)
  3130. swTable.Text(j, 2) = " "
  3131. dRetval = swTable.SetRowHeight(j, 0.008, swTableRowColChange_TableSizeCanChange)
  3132. Next jj
  3133. ' Боремся с подвисшими заголовками
  3134. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3135. jjj = 4
  3136. Else ' Ведомость покупных
  3137. jjj = 1
  3138. End If
  3139. If k1 > 0 Then ' Определяем шаг для выбра строки
  3140. j1 = 1
  3141. Else
  3142. j1 = 0
  3143. End If
  3144. Set swTextFormat = swTable.GetCellTextFormat(j - j1, jjj) ' Проверяем ячейку в последней (если не было добавлений) строке страницы, если было то в предпоследней
  3145. If swTextFormat.Underline Then ' Добавляем строки
  3146. k2 = CInt(swTable.GetRowHeight(j - j1) / 0.008) ' Определяем количество добавляемых строк
  3147. For jj = 1 To k2 + k1 ' Добавляем строки
  3148. ok = swTable.InsertRow(swTableItemInsertPosition_Before, j - j1)
  3149. swTable.Text(j - j1, 2) = " "
  3150. dRetval = swTable.SetRowHeight(j - j1, 0.008, swTableRowColChange_TableSizeCanChange)
  3151. Next jj
  3152. For jj = 1 To k1 ' Удаляем лишние строки
  3153. ok = swTable.DeleteRow(j + 3)
  3154. Next jj
  3155. Else ' Проверяем предпоследнюю строку страницы
  3156. Set swTextFormat = swTable.GetCellTextFormat(j - 1 - j1, jjj) ' Проверяем ячейку в предпоследней (если не было добавлений) строке страницы, если было то в предпредпоследней
  3157. If swTextFormat.Underline Then ' Добавляем строки
  3158. k2 = CInt(swTable.GetRowHeight(j - 1 - j1) / 0.008) + 1 ' Определяем количество добавляемых строк
  3159. For jj = 1 To k2 + k1 ' Добавляем строки
  3160. ok = swTable.InsertRow(swTableItemInsertPosition_Before, j - 1 - j1)
  3161. swTable.Text(j - 1 - j1, 2) = " "
  3162. dRetval = swTable.SetRowHeight(j - 1 - j1, 0.008, swTableRowColChange_TableSizeCanChange)
  3163. Next jj
  3164. For jj = 1 To k1 ' Удаляем лишние строки
  3165. ok = swTable.DeleteRow(j + 3)
  3166. Next jj
  3167. End If
  3168. End If
  3169.  
  3170. ' Перенос раздела Электромонтаж на новый лист
  3171. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3172. If m = 0 And k3 <> 0 Then ' Найден раздел электромонтаж и он еще не обрабатывался
  3173. dblTemp = 0#
  3174. j1 = 0 ' Счетчик строк последней страницы в цикле
  3175. m1 = 0 ' Метка строк с текстом на последней странице, чтобы не получилось пустой страницы перед электромонтажем
  3176. For jjj = 1 To nNumRow - 1
  3177. dblTemp = dblTemp + swTable.GetRowHeight(jjj)
  3178. If dblTemp > n * 0.008 + 0.001 And dblTemp <= (n + nSecond) * 0.008 Then
  3179. strTemp = swTable.Text(jjj, 4)
  3180. Set swTextFormatTest = swTable.GetCellTextFormat(jjj, 4)
  3181. If InStr(strTemp, "Устанавливают") > 0 And swTextFormatTest.Underline Then ' Найден раздел электромонтаж
  3182. k3 = jjj
  3183. 'l = Int(((dblTemp - CDbl(nFirst) * 0.008) / (CDbl(nSecond) * 0.008)) + 1.99) ' Номер листа на котором есть раздел электромонтаж
  3184. 'l = i + 1
  3185. 'dblTemp = nFirst * 0.008 + nSecond * (l - 1) * 0.008 - dblTemp + swTable.GetRowHeight(k3)
  3186. dblTemp = (n + nSecond) * 0.008 - dblTemp + swTable.GetRowHeight(k3)
  3187. l1 = CInt(dblTemp / 0.008) ' Число строк, которое нужно добавить перед заголовком электромонтаж
  3188. ' Проверяем предыдущие строки на пустоту
  3189. If m1 <> 0 Then ' Найдены строки с текстом
  3190. For jj = 1 To l1 ' Двигаем заголовок электромонтаж
  3191. ok = swTable.InsertRow(swTableItemInsertPosition_Before, k3)
  3192. swTable.Text(k3, 2) = " "
  3193. dRetval = swTable.SetRowHeight(k3, 0.008, swTableRowColChange_TableSizeCanChange)
  3194. Next jj
  3195. Else
  3196. If j1 = 0 Then ' Строчка электромонтаж первая на странице
  3197. ok = swTable.InsertRow(swTableItemInsertPosition_Before, k3)
  3198. swTable.Text(k3, 2) = " "
  3199. dRetval = swTable.SetRowHeight(k3, 0.008, swTableRowColChange_TableSizeCanChange)
  3200. Else ' Удаляем лишние пустые строки
  3201. For jj = 1 To j1 - 1 ' Двигаем заголовок электромонтаж
  3202. ok = swTable.DeleteRow(k3 - jj)
  3203. Next jj
  3204. End If
  3205. End If
  3206. m = 1
  3207. Exit For
  3208. End If
  3209. j1 = j1 + 1
  3210. For jj = 0 To nNumColumn - 1
  3211. If swTable.Text(jjj, jj) = "" Or swTable.Text(jjj, jj) = " " Then
  3212. Else
  3213. m1 = 1 ' Найдены строки с текстом
  3214. End If
  3215. Next jj
  3216. End If
  3217. Next jjj
  3218. End If
  3219. End If
  3220.  
  3221. ' Вычисляем общую высоту таблицы
  3222. nNumRow = swTable.RowCount
  3223. dblTemp = 0#
  3224. For jj = 1 To nNumRow - 1
  3225. dblTemp = dblTemp + swTable.GetRowHeight(jj)
  3226. Next jj
  3227. i = i + 1
  3228. If dblTemp > (nFirst + i * nSecond) * 0.008 + 0.001 Then ' Работаем со следующим листом
  3229. k = 1
  3230. n = nFirst + i * nSecond
  3231. End If
  3232. Wend
  3233. End If
  3234.  
  3235. ' Форматируем строки еще раз
  3236. 'nNumRow = swTable.RowCount
  3237. 'For i = 1 To nNumRow - 1
  3238. ' dRetval = swTable.SetRowHeight(i, 0.008, swTableRowColChange_TableSizeCanChange)
  3239. 'Next i
  3240.  
  3241. ' Добавляем уравнение для ВП
  3242. If CboType.ListIndex = 2 Then
  3243. nNumRow = swTable.RowCount
  3244. For i = 1 To nNumRow - 1
  3245. If swTable.Text(i, 6) = "" Then
  3246. swTable.Text(i, 9) = ""
  3247. Else
  3248. n = 0
  3249. For j = 6 To 8
  3250. If IsNumeric(swTable.Text(i, j)) = True Then
  3251. n = n + CInt(swTable.Text(i, j))
  3252. End If
  3253. Next j
  3254. If n = 0 Then
  3255. swTable.Text(i, 9) = ""
  3256. Else
  3257. swTable.Text(i, 9) = n ' "=SUM(G" & i + 1 & ":I" & i + 1 & ")"
  3258. End If
  3259. End If
  3260. Next i
  3261. End If
  3262.  
  3263. 'If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3264. ' MPosition = 1
  3265. ' CmdPosition_Click ' Позиции
  3266. ' MPosition = 0
  3267. 'End If
  3268.  
  3269. If MFormat = 0 Then
  3270. ImgInfo.Width = 330
  3271. End If
  3272.  
  3273. Sheets ' Разделение на листы
  3274.  
  3275. If MFormat = 0 Then
  3276. ImgInfo.Width = 447
  3277. LblInfo.Caption = " Готово"
  3278. Finish
  3279. End If
  3280.  
  3281. End Sub
  3282.  
  3283. Private Sub CmdPosition_Click() ' Расстановка позиций
  3284.  
  3285. If MPosition = 0 Then
  3286. ImgInfo.Width = 5
  3287. End If
  3288. LblInfo.Caption = " Расстановка позиций"
  3289.  
  3290. nNumRow = swTable.RowCount
  3291. Debug.Print "nNumRow=", nNumRow
  3292. j = 0 ' Счетчик номеров позиций
  3293. ii = 1 ' Счетчик строк с позициями
  3294. jj = 1 ' Счетчик исполнений
  3295. jjj = 0 ' Счетчик пустых строк
  3296. m = 0 ' Метка обнаружения заголовка раздела
  3297. n = 0 ' Метка прохождения первого раздела
  3298. m1 = 0
  3299. For i = 1 To nNumRow - 1
  3300. If iPosReserve = 1 Then ' Ищем пустые строки
  3301. If swTable.Text(i, 0) = " " And swTable.Text(i, 2) = " " Then
  3302. jjj = jjj + 1
  3303. End If
  3304. End If
  3305. If iPosSection = 1 Then
  3306. If swTable.Text(i, 4) <> "" Then
  3307. Set swTextFormat = swTable.GetCellTextFormat(i, 4)
  3308. If swTextFormat.Underline Then ' Заголовок
  3309. m = 1
  3310. End If
  3311. End If
  3312. End If
  3313. If swTable.Text(i, 2) <> " " Then
  3314. Debug.Print swTable.Text(i, 3)
  3315. If swTable.Text(i, 2) <> "-" Then
  3316. If swTable.Text(i, 3) <> "" Or swTable.Text(i, 4) <> "" Then
  3317. If CboType.ListIndex = 1 Then ' Групповая спецификация
  3318. ReDim Preserve iTempArr(ii)
  3319. iTempArr(ii) = i
  3320. If ii <> 1 Then ' Проверяем необходимые повторы позиций
  3321. varTemp = InStr(swTable.Text(iTempArr(ii), 3), "-")
  3322. If varTemp > 0 Then ' Есть исполнение
  3323. Debug.Print Left$(swTable.Text(iTempArr(ii), 3), 1)
  3324. If Left$(swTable.Text(iTempArr(ii), 3), 1) = "-" Then ' Есть укороченное обозначение
  3325. m1 = 1
  3326. Else ' Сравниваем с базовой частью обозначения
  3327. Debug.Print Left$(swTable.Text(iTempArr(ii), 3), varTemp - 1), swTable.Text(iTempArr(ii - jj), 3)
  3328. If Left$(swTable.Text(iTempArr(ii), 3), varTemp - 1) = Left$(swTable.Text(iTempArr(ii - jj), 3), varTemp - 1) Then
  3329. m1 = 1
  3330. End If
  3331. End If
  3332. If m1 = 1 Then ' Проверяем в каких исполнениях сборки присутствует
  3333. For j1 = 5 To 14
  3334. If swTable.Text(iTempArr(ii), j1) <> "" And swTable.Text(iTempArr(ii - jj), j1) <> "" Then
  3335. m1 = 0
  3336. Exit For
  3337. End If
  3338. Next j1
  3339. 'Else
  3340. ' jj = 1
  3341. End If
  3342. 'Else
  3343. ' jj = 1
  3344. End If
  3345. End If
  3346. If m1 = 1 Then
  3347. jj = jj + 1
  3348. Else
  3349. jj = 1
  3350. End If
  3351. ii = ii + 1
  3352. End If
  3353. If m1 = 0 Then
  3354. If iPosReserve = 1 Then
  3355. If n = 0 Then
  3356. jjj = 0
  3357. End If
  3358. j = j + jjj
  3359. n = 1
  3360. Else
  3361. If m = 1 And n = 1 Then ' В конце раздела
  3362. j = j + iPosSectionCount
  3363. End If
  3364. m = 0
  3365. n = 1
  3366. If iPosLine = 1 And j > 0 Then ' После каждой строки
  3367. j = j + iPosLineCount
  3368. End If
  3369. End If
  3370. j = j + 1
  3371. swTable.Text(i, 2) = j
  3372. 'swTable.Text(i, 2) = CStr(j)
  3373. 'swTable.Text(i, 2) = Str$(j)
  3374. 'Debug.Print swTable.Text(i, 2), Trim(CStr(j))
  3375. Else
  3376. swTable.Text(i, 2) = j
  3377. 'swTable.Text(i, 2) = Str$(j)
  3378. 'Debug.Print swTable.Text(i, 2), Trim(CStr(j))
  3379. End If
  3380. m1 = 0
  3381. jjj = 0
  3382. Else
  3383. swTable.Text(i, 2) = " "
  3384. jjj = jjj + 1
  3385. End If
  3386. Else
  3387. jjj = 0
  3388. End If
  3389. End If
  3390. Next i
  3391.  
  3392. If MPosition = 0 Then
  3393. swDraw.ForceRebuild3 (True)
  3394. End If
  3395.  
  3396. If MPosition = 0 Then
  3397. ImgInfo.Width = 447
  3398. LblInfo.Caption = " Готово"
  3399. Finish
  3400. End If
  3401. End Sub
  3402.  
  3403. Private Sub Sheets() ' Разделение на листы
  3404.  
  3405. OpenClipboard (0&)
  3406. EmptyClipboard
  3407. CloseClipboard
  3408.  
  3409. ' Отображаем таблицу
  3410. Set swAnn = swTable.GetAnnotation
  3411. swAnn.Visible = swAnnotationVisible
  3412.  
  3413. LblInfo.Caption = " Разделение на листы"
  3414.  
  3415. If ChkAssem.Value = False Then
  3416. ' Определяем количество листов и указываем его на первом листе
  3417. nNumRow = swTable.RowCount
  3418. dblTemp = 0
  3419. For i = 1 To nNumRow - 1 ' Вычисляем общую высоту таблицы
  3420. dblTemp = dblTemp + swTable.GetRowHeight(i)
  3421. Next i
  3422. If dblTemp - 0.001 > nFirst * 0.008 Then ' Если не помещаемся на одном листе
  3423. iSheetNumb = Int(((dblTemp - CDbl(nFirst) * 0.008) / (CDbl(nSecond) * 0.008)) + 1.99) ' Число листов спецификации
  3424. Else
  3425. iSheetNumb = 1
  3426. End If
  3427. Debug.Print "iSheetNumb=", iSheetNumb
  3428. ' Заполняем заметки
  3429. strSheetFormatName = swSheet.GetSheetFormatName()
  3430. strTemp = "Sheet1@" & strSheetFormatName
  3431. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3432. If ok = True Then
  3433. If iSheetNumb > 1 Then ' Листов больше одного
  3434. strTemp = "1"
  3435. Else
  3436. strTemp = " "
  3437. End If
  3438. Set swNote = swSelMgr.GetSelectedObject2(1)
  3439. swNote.SetText strTemp
  3440. End If
  3441. strTemp = "Sheet2@" & strSheetFormatName
  3442. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3443. If ok = True Then
  3444. Set swNote = swSelMgr.GetSelectedObject2(1)
  3445. If iSheetNumb > 2 And iLRI = 1 Then
  3446. swNote.SetText iSheetNumb + 1
  3447. Else
  3448. swNote.SetText iSheetNumb
  3449. End If
  3450. End If
  3451. strTemp = "Revision2@" & strSheetFormatName
  3452. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3453. If ok = True Then
  3454. Set swNote = swSelMgr.GetSelectedObject2(1)
  3455. swNote.SetText sRevision2
  3456. End If
  3457. strTemp = "Revision3@" & strSheetFormatName
  3458. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3459. If ok = True Then
  3460. Set swNote = swSelMgr.GetSelectedObject2(1)
  3461. swNote.SetText sRevision3
  3462. End If
  3463. strTemp = "Revision4@" & strSheetFormatName
  3464. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3465. If ok = True Then
  3466. Set swNote = swSelMgr.GetSelectedObject2(1)
  3467. swNote.SetText sRevision4
  3468. End If
  3469. strTemp = "Date@" & strSheetFormatName
  3470. Debug.Print "Date", sDate
  3471. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3472. If ok = True Then
  3473. Set swNote = swSelMgr.GetSelectedObject2(1)
  3474. swNote.SetText sDate
  3475. End If
  3476. ' Скрываем/Отображаем исполнения, код и литеру для групповой спецификации
  3477. If CboType.ListIndex = 1 Then ' Групповая спецификация
  3478. j = 0
  3479. For i = 0 To LstConfig.ListCount - 1
  3480. If LstConfig.Selected(i) = True Then
  3481. ReDim Preserve sTemp(j)
  3482. sTemp(j) = vConfNameArr(i)
  3483. j = j + 1
  3484. End If
  3485. Next i
  3486. vConfVisible = sTemp
  3487. For i = 0 To 9
  3488. ' Исполнение
  3489. strTemp = "Conf_0" & i & "@" & strSheetFormatName
  3490. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3491. If ok = True Then
  3492. Set swNote = swSelMgr.GetSelectedObject2(1)
  3493. Set swAnn = swNote.GetAnnotation
  3494. If i > UBound(vConfVisible) Then
  3495. swAnn.Visible = swAnnotationHidden
  3496. Else
  3497. swAnn.Visible = swAnnotationVisible
  3498. End If
  3499. End If
  3500. ' Код
  3501. strTemp = "Code0" & i & "@" & strSheetFormatName
  3502. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3503. If ok = True Then
  3504. Set swNote = swSelMgr.GetSelectedObject2(1)
  3505. If i > UBound(vConfVisible) Then
  3506. swNote.SetText " "
  3507. Else
  3508. strTemp = swModel.CustomInfo2(vConfVisible(i), prpCode)
  3509. If strTemp = "" Then
  3510. swNote.SetText " "
  3511. Else
  3512. swNote.SetText strTemp
  3513. End If
  3514. End If
  3515. End If
  3516. ' Литера
  3517. strTemp = "Lit0" & i & "@" & strSheetFormatName
  3518. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3519. If ok = True Then
  3520. Set swNote = swSelMgr.GetSelectedObject2(1)
  3521. If i > UBound(vConfVisible) Then
  3522. swNote.SetText " "
  3523. Else
  3524. strTemp = swModel.CustomInfo2(vConfVisible(i), prpLit)
  3525. If strTemp = "" Then
  3526. swNote.SetText " "
  3527. Else
  3528. swNote.SetText strTemp
  3529. End If
  3530. End If
  3531. End If
  3532. Next i
  3533. End If
  3534. swDraw.ClearSelection2 True
  3535.  
  3536. 'Разделение таблицы и перенос на другой лист или листы
  3537. strActiveSheetName = swSheet.GetName
  3538. If iSheetNumb > 1 Then
  3539. n = nFirst
  3540. For i = 1 To iSheetNumb - 1
  3541. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3542. strTemp = "SP" & LTrim(CStr(i + 1))
  3543. Else ' Ведомость покупных
  3544. strTemp = "VP" & LTrim(CStr(i + 1))
  3545. End If
  3546. m = 0
  3547. For j = 0 To UBound(vSheetNames) ' Проверяем существование листа
  3548. If vSheetNames(j) = strTemp Then
  3549. m = 1
  3550. End If
  3551. Next j
  3552. Debug.Print "m=", m
  3553. If m = 0 Then ' Листа не было
  3554. ' Добавляем лист
  3555. If CboType.ListIndex = 0 Then ' Спецификация
  3556. vRetval = swDraw.NewSheet3(strTemp, swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource3, 0.21, 0.297, "По умолчанию")
  3557. ElseIf CboType.ListIndex = 1 Then ' Групповая спецификация
  3558. vRetval = swDraw.NewSheet3(strTemp, swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource7, 0.297, 0.21, "По умолчанию")
  3559. Else ' Ведомость покупных
  3560. vRetval = swDraw.NewSheet3(strTemp, swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource13, 0.42, 0.297, "По умолчанию")
  3561. End If
  3562. Set swSheet = swDraw.GetCurrentSheet
  3563. swSheet.SheetFormatVisible = True
  3564. ' Вставляем вид
  3565. Set swView = swDraw.CreateDrawViewFromModelView3(swModel.GetPathName, vModelViewNames(0), -0.1, 0, 0)
  3566. swView.ReferencedConfiguration = sConfigName
  3567. swDraw.SuppressView
  3568. swDraw.ForceRebuild3 (True)
  3569. Else ' Лист был
  3570. ok = swDraw.ActivateSheet(strTemp)
  3571. Set swSheet = swDraw.GetCurrentSheet
  3572. End If
  3573.  
  3574. ' Заполняем номер листа и инфу про изменение
  3575. strSheetFormatName = swSheet.GetSheetFormatName()
  3576. strTemp1 = "Sheet1@" & strSheetFormatName
  3577. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3578. If ok = True Then
  3579. Set swNote = swSelMgr.GetSelectedObject2(1)
  3580. strTemp1 = LTrim(CStr(i + 1))
  3581. swNote.SetText strTemp1
  3582. End If
  3583. strTemp1 = "Revision2@" & strSheetFormatName
  3584. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3585. If ok = True Then
  3586. Set swNote = swSelMgr.GetSelectedObject2(1)
  3587. swNote.SetText sRevision2
  3588. End If
  3589. strTemp1 = "Revision3@" & strSheetFormatName
  3590. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3591. If ok = True Then
  3592. Set swNote = swSelMgr.GetSelectedObject2(1)
  3593. swNote.SetText sRevision3
  3594. End If
  3595. strTemp1 = "Revision4@" & strSheetFormatName
  3596. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3597. If ok = True Then
  3598. Set swNote = swSelMgr.GetSelectedObject2(1)
  3599. swNote.SetText sRevision4
  3600. End If
  3601. ' Скрываем/Отображаем исполнения для групповой спецификации
  3602. If CboType.ListIndex = 1 Then ' Групповая спецификация
  3603. For j = 0 To 9
  3604. strTemp1 = "Conf_0" & j & "@" & strSheetFormatName
  3605. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3606. Set swNote = swSelMgr.GetSelectedObject2(1)
  3607. Set swAnn = swNote.GetAnnotation
  3608. If ok = True Then
  3609. If j > UBound(vConfVisible) Then
  3610. swAnn.Visible = swAnnotationHidden
  3611. Else
  3612. swAnn.Visible = swAnnotationVisible
  3613. End If
  3614. End If
  3615. Next j
  3616. End If
  3617. swDraw.ClearSelection2 True
  3618.  
  3619. ' Делим таблицу
  3620. j = 0
  3621. dblTemp = 0#
  3622. While dblTemp + 0.001 < n * 0.008 ' Определяем количество строк на одном листе
  3623. j = j + 1
  3624. dblTemp = dblTemp + swTable.GetRowHeight(j)
  3625. Wend
  3626. Set swTable1 = swTable.Split(swTableSplit_BeforeRow, j + 1)
  3627. swDraw.EditCut
  3628. ok = swDraw.ActivateSheet(strTemp)
  3629. swDraw.Paste
  3630. swTable1.Anchored = True
  3631. Set swTable = swTable1
  3632. n = nFirst + i * nSecond
  3633. Next i
  3634. End If
  3635. If iSheetNumb > 2 And iLRI = 1 Then ' Добавляем ЛРИ
  3636. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3637. strTemp = "SP_LRI"
  3638. Else ' Ведомость покупных
  3639. strTemp = "VP_LRI"
  3640. End If
  3641. m = 0
  3642. For j = 0 To UBound(vSheetNames) ' Проверяем существование листа
  3643. If vSheetNames(j) = strTemp Then
  3644. m = 1
  3645. End If
  3646. Next j
  3647. Debug.Print "m=", m
  3648. If m = 0 Then ' Листа не было
  3649. ' Добавляем лист
  3650. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3651. vRetval = swDraw.NewSheet3(strTemp, swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource18, 0.21, 0.297, "По умолчанию")
  3652. Else
  3653. vRetval = swDraw.NewSheet3(strTemp, swDwgPapersUserDefined, swDwgTemplateCustom, 1#, 1#, True, sSource19, 0.21, 0.297, "По умолчанию")
  3654. End If
  3655. Set swSheet = swDraw.GetCurrentSheet
  3656. swSheet.SheetFormatVisible = True
  3657. ' Вставляем вид
  3658. Set swView = swDraw.CreateDrawViewFromModelView3(swModel.GetPathName, vModelViewNames(0), -0.1, 0, 0)
  3659. swView.ReferencedConfiguration = sConfigName
  3660. swDraw.SuppressView
  3661. swDraw.ForceRebuild3 (True)
  3662. Else ' Лист был
  3663. ok = swDraw.ActivateSheet(strTemp)
  3664. Set swSheet = swDraw.GetCurrentSheet
  3665. End If
  3666. ' Заполняем номер листа и инфу про изменение
  3667. strSheetFormatName = swSheet.GetSheetFormatName()
  3668. strTemp1 = "Sheet1@" & strSheetFormatName
  3669. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3670. If ok = True Then
  3671. Set swNote = swSelMgr.GetSelectedObject2(1)
  3672. strTemp1 = iSheetNumb + 1
  3673. swNote.SetText strTemp1
  3674. End If
  3675. strTemp1 = "Revision2@" & strSheetFormatName
  3676. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3677. If ok = True Then
  3678. Set swNote = swSelMgr.GetSelectedObject2(1)
  3679. swNote.SetText sRevision2
  3680. End If
  3681. strTemp1 = "Revision3@" & strSheetFormatName
  3682. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3683. If ok = True Then
  3684. Set swNote = swSelMgr.GetSelectedObject2(1)
  3685. swNote.SetText sRevision3
  3686. End If
  3687. strTemp1 = "Revision4@" & strSheetFormatName
  3688. ok = swDraw.Extension.SelectByID2(strTemp1, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  3689. If ok = True Then
  3690. Set swNote = swSelMgr.GetSelectedObject2(1)
  3691. swNote.SetText sRevision4
  3692. End If
  3693. End If
  3694. If MSort = 1 Then
  3695. ' Находим и удаляем лишние листы спецификации
  3696. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3697. strTemp = "SP"
  3698. Else ' Ведомость покупных
  3699. strTemp = "VP"
  3700. End If
  3701. For i = 0 To UBound(vSheetNames)
  3702. ' Проверка имени листа
  3703. m = 0
  3704. If Left$(vSheetNames(i), 2) = strTemp Then
  3705. If Mid$(vSheetNames(i), 3, 4) = "_LRI" Then
  3706. If iSheetNumb <= 2 Or iLRI = 0 Then
  3707. m = 1
  3708. End If
  3709. Else
  3710. If CInt(Mid$(vSheetNames(i), 3, 1)) > iSheetNumb Then
  3711. m = 1
  3712. End If
  3713. End If
  3714. End If
  3715. If m = 1 Then
  3716. ok = swDraw.ActivateSheet(vSheetNames(i))
  3717. Set swSheet = swDraw.GetCurrentSheet
  3718. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  3719. DeleteOption = 3
  3720. ok = swDraw.Extension.SelectByID2(swSheet.GetName, "SHEET", 0, 0, 0, False, 0, Nothing, 0)
  3721. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  3722. End If
  3723. Next i
  3724. End If
  3725.  
  3726. ' Удаляем лишние листы
  3727. If CboType.ListIndex = 2 Then ' Ведомость покупных
  3728. vSheetNames = swDraw.GetSheetNames
  3729. For i = 0 To UBound(vSheetNames)
  3730. If Left$(vSheetNames(i), 2) <> "VP" Then
  3731. strTemp = "Удалить лист " & vSheetNames(i)
  3732. lRetval = swApp.SendMsgToUser2(strTemp, swMbQuestion, swMbYesNo)
  3733. If lRetval = swMbHitYes Then
  3734. ok = swDraw.ActivateSheet(vSheetNames(i))
  3735. Set swSheet = swDraw.GetCurrentSheet
  3736. 'DeleteOption = SwConst.swDelete_Absorbed + SwConst.swDelete_Children
  3737. DeleteOption = 3
  3738. ok = swDraw.Extension.SelectByID2(swSheet.GetName, "SHEET", 0, 0, 0, False, 0, Nothing, 0)
  3739. ok = swDraw.Extension.DeleteSelection2(DeleteOption)
  3740. End If
  3741. End If
  3742. Next i
  3743. End If
  3744. End If
  3745. swDraw.ClearSelection2 True
  3746. swDraw.ForceRebuild3 (True)
  3747. End Sub
  3748.  
  3749. Private Sub Sort() ' Модуль сортировки
  3750. Dim iCompare As Integer
  3751. Dim sSecond As String
  3752. Dim sFirst As String
  3753. Dim iResult1 As Integer
  3754. Dim iResult2 As Integer
  3755. Dim iResult3 As Integer
  3756. Dim iResult4 As Integer
  3757.  
  3758. Dim vFindFirst As Variant
  3759. Dim vFindSecond As Variant
  3760.  
  3761. Dim lPartLenFirst As Long
  3762. Dim lPartLenSecond As Long
  3763.  
  3764. Dim sPartFirst As String
  3765. Dim sPartSecond As String
  3766. Dim sPartFirst1 As String
  3767. Dim sPartSecond1 As String
  3768.  
  3769. Dim iPartFirst As Long
  3770. Dim iPartSecond As Long
  3771.  
  3772. Dim sStandardNameFirst As String
  3773. Dim sStandardNameSecond As String
  3774. Dim vStandardNameFirst As Variant
  3775. Dim vStandardNameSecond As Variant
  3776.  
  3777. Dim sStandardNumberFirst As String
  3778. Dim sStandardNumberSecond As String
  3779.  
  3780. Dim sNameFirst As String
  3781. Dim sNameSecond As String
  3782.  
  3783. Dim sNumFirst() As String
  3784. Dim sNumSecond() As String
  3785.  
  3786. Result = "S_ERROR"
  3787. Debug.Print "Sort "; sSpecData(i, 1) & " " & sSpecData(i, 3) & " и ", sSpecData(i + 1, 1) & " " & sSpecData(i + 1, 3)
  3788. Debug.Print "**********************"
  3789.  
  3790. iCompare = 0
  3791.  
  3792. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  3793. sFirst = sSpecData(i, 4) ' Поле Наименование
  3794. sSecond = sSpecData(i + 1, 4) ' Поле Наименование
  3795. Else ' Ведомость покупных
  3796. sFirst = sSpecData(i, 1) & " " & sSpecData(i, 3) ' Поле Наименование
  3797. sSecond = sSpecData(i + 1, 1) & " " & sSpecData(i + 1, 3) ' Поле Наименование
  3798. End If
  3799. sFirst = Trim(sFirst)
  3800. sSecond = Trim(sSecond)
  3801.  
  3802. If sSpecData(i, nNumColumn - 5) = sSpecData(i + 1, nNumColumn - 5) Then ' Строки из одного раздела
  3803. If sSpecData(i, nNumColumn - 5) = "Стандартные изделия" Or sSpecData(i, nNumColumn - 5) = "Прочие изделия" Or sSpecData(i, nNumColumn - 5) = "Материалы" _
  3804. Or sSpecData(i, nNumColumn - 5) = "ЭМ-Стандартные изделия" Or sSpecData(i, nNumColumn - 5) = "ЭМ-Прочие изделия" Or sSpecData(i, nNumColumn - 5) = "ЭМ-Материалы" Then ' Строка из разделов Стандартные изделия или Прочие изделия или Материалы
  3805. If sFirst = "" Or sSecond = "" Then ' Если одна из строк пустая
  3806. If sFirst = "" And sSecond <> "" Then
  3807. Result = "S_GREAT"
  3808. ElseIf sSecond = "" And sFirst <> "" Then
  3809. Result = "S_LESS"
  3810. Else
  3811. Result = "S_EQUAL"
  3812. End If
  3813. Else
  3814. If iOther = 0 And sSpecData(i, nNumColumn - 5) = "Прочие изделия" Or iOther = 0 And sSpecData(i, nNumColumn - 5) = "ЭМ-Прочие изделия" Then ' Строка из раздела Прочие изделия
  3815. m1 = UBound(sGroupData) + 1
  3816. m2 = UBound(sGroupData) + 1
  3817. For ii = 0 To UBound(sGroupData) ' Проверяем группу
  3818. If sSpecData(i, nNumColumn - 4) = sGroupData(ii) Then
  3819. m1 = ii
  3820. End If
  3821. If sSpecData(i + 1, nNumColumn - 4) = sGroupData(ii) Then
  3822. m2 = ii
  3823. End If
  3824. Next ii
  3825. If m1 > m2 Then
  3826. Result = "S_GREAT"
  3827. ElseIf m1 < m2 Then
  3828. Result = "S_LESS"
  3829. Else
  3830. iCompare = 1
  3831. End If
  3832. ElseIf sSpecData(i, nNumColumn - 5) = "Материалы" Or sSpecData(i, nNumColumn - 5) = "ЭМ-Материалы" Then ' Строка из раздела Материалы
  3833. m1 = UBound(sGroupData) + 1
  3834. m2 = UBound(sGroupData) + 1
  3835. For ii = 0 To UBound(sMaterialGroupData) ' Проверяем группу материала
  3836. If sSpecData(i, nNumColumn - 4) = sMaterialGroupData(ii) Then
  3837. m1 = ii
  3838. End If
  3839. If sSpecData(i + 1, nNumColumn - 4) = sMaterialGroupData(ii) Then
  3840. m2 = ii
  3841. End If
  3842. Next ii
  3843. If m1 > m2 Then
  3844. Result = "S_GREAT"
  3845. ElseIf m1 < m2 Then
  3846. Result = "S_LESS"
  3847. Else
  3848. iCompare = 1
  3849. End If
  3850. Else ' Строка из раздела Стандартные изделия
  3851. m = 0
  3852. If CboType.ListIndex = 2 Then ' Ведомость покупных
  3853. m1 = UBound(sGroupData) + 1
  3854. m2 = UBound(sGroupData) + 1
  3855. For ii = 0 To UBound(sGroupData) ' Проверяем группу
  3856. If sSpecData(i, nNumColumn - 4) = sGroupData(ii) Then
  3857. m1 = ii
  3858. End If
  3859. If sSpecData(i + 1, nNumColumn - 4) = sGroupData(ii) Then
  3860. m2 = ii
  3861. End If
  3862. Next ii
  3863. If m1 > m2 Then
  3864. Result = "S_GREAT"
  3865. m = 1
  3866. ElseIf m1 < m2 Then
  3867. Result = "S_LESS"
  3868. m = 1
  3869. End If
  3870. End If
  3871. If m = 0 Then
  3872. ' Заменяем перевод строки на пробел
  3873. sFirst = Replace(sFirst, Chr$(13) & Chr$(10), " ")
  3874. sFirst = Replace(sFirst, Chr$(10), " ")
  3875. sSecond = Replace(sSecond, Chr$(13) & Chr$(10), " ")
  3876. sSecond = Replace(sSecond, Chr$(10), " ")
  3877. ' Сравниваем типы стандартов
  3878. ReDim sTemp(11)
  3879. sTemp(0) = " ГОСТ "
  3880. sTemp(1) = " ISO "
  3881. sTemp(2) = " ГОСТ Р "
  3882. sTemp(3) = " ГОСТ Р ИСО "
  3883. sTemp(4) = " ANSI "
  3884. sTemp(5) = " ASME "
  3885. sTemp(6) = " ASTM "
  3886. sTemp(7) = " BSI "
  3887. sTemp(8) = " DIN "
  3888. sTemp(9) = " GB "
  3889. sTemp(10) = " JIS "
  3890. sTemp(11) = " ОСТ "
  3891. m1 = UBound(sTemp) + 1
  3892. m2 = UBound(sTemp) + 1
  3893. For ii = 0 To UBound(sTemp) ' Ищем тип стандарта
  3894. vFindFirst = InStrRev(sFirst, sTemp(ii))
  3895. If vFindFirst > 0 Then
  3896. vStandardNameFirst = InStrRev(sFirst, sTemp(ii))
  3897. m1 = ii
  3898. sStandardNameFirst = sTemp(ii)
  3899. End If
  3900. Next ii
  3901. For ii = 0 To UBound(sTemp) ' Ищем тип стандарта
  3902. vFindSecond = InStrRev(sSecond, sTemp(ii))
  3903. If vFindSecond > 0 Then
  3904. vStandardNameSecond = InStrRev(sSecond, sTemp(ii))
  3905. m2 = ii
  3906. sStandardNameSecond = sTemp(ii)
  3907. End If
  3908. Next ii
  3909. If m1 > m2 Then
  3910. Result = "S_GREAT"
  3911. ElseIf m1 < m2 Then
  3912. Result = "S_LESS"
  3913. ElseIf m1 = m2 And m1 = UBound(sTemp) + 1 Then ' Стандарт не найден в обеих строках
  3914. iCompare = 1
  3915. Else ' Стандарт найден в обеих строках
  3916. ' Сравниваем группы
  3917. m1 = UBound(sGroupData) + 1
  3918. m2 = UBound(sGroupData) + 1
  3919. For ii = 0 To UBound(sGroupData) ' Проверяем группу
  3920. If sSpecData(i, nNumColumn - 4) = sGroupData(ii) Then
  3921. m1 = ii
  3922. End If
  3923. If sSpecData(i + 1, nNumColumn - 4) = sGroupData(ii) Then
  3924. m2 = ii
  3925. End If
  3926. Next ii
  3927. If m1 > m2 Then
  3928. Result = "S_GREAT"
  3929. ElseIf m1 < m2 Then
  3930. Result = "S_LESS"
  3931. Else
  3932. ' Сравниваем типы изделий (Винт, Шайба ...)
  3933. sNameFirst = Left(sFirst, vStandardNameFirst - 1) ' Выделяем тип
  3934. sNameFirst = Trim(sNameFirst)
  3935. sNameSecond = Left(sSecond, vStandardNameSecond - 1) ' Выделяем тип
  3936. sNameSecond = Trim(sNameSecond)
  3937. If sNameFirst = "" Or sNameSecond = "" Then ' Если одна из строк пустая
  3938. iCompare = 1
  3939. Else
  3940. lPartLenFirst = Len(sNameFirst)
  3941. For ii = 1 To lPartLenFirst ' Ищем числовые части
  3942. sPartFirst = Mid(sNameFirst, ii, 1)
  3943. If IsNumeric(sPartFirst) = True Then ' Если найденный символ число
  3944. vFindFirst = InStrRev(sFirst, " ", ii) ' Находим первый пробел до числа
  3945. If vFindFirst > 0 Then
  3946. sNameFirst = Left(sFirst, vFindFirst - 1) ' Выделяем тип
  3947. sNameFirst = Trim(sNameFirst)
  3948. Else
  3949. iCompare = 1
  3950. End If
  3951. Exit For
  3952. End If
  3953. Next ii
  3954. lPartLenSecond = Len(sNameSecond)
  3955. For ii = 1 To lPartLenSecond ' Ищем числовые части
  3956. sPartSecond = Mid(sNameSecond, ii, 1)
  3957. If IsNumeric(sPartSecond) = True Then ' Если найденный символ число
  3958. vFindSecond = InStrRev(sSecond, " ", ii) ' Находим первый пробел до числа
  3959. If vFindSecond > 0 Then
  3960. sNameSecond = Left(sSecond, vFindSecond - 1) ' Выделяем тип
  3961. sNameSecond = Trim(sNameSecond)
  3962. Else
  3963. iCompare = 1
  3964. End If
  3965. Exit For
  3966. End If
  3967. Next ii
  3968. End If
  3969. If iCompare = 0 Then
  3970. iResult1 = StrComp(sNameFirst, sNameSecond, 1) ' Сравниваем типы
  3971. Select Case iResult1
  3972. Case 1
  3973. Result = "S_GREAT"
  3974. Case -1
  3975. Result = "S_LESS"
  3976. Case 0
  3977. ' Сравниваем номера стандартов
  3978. sStandardNumberFirst = Right$(sFirst, Len(sFirst) - vStandardNameFirst + 1 - Len(sStandardNameFirst))
  3979. sStandardNumberFirst = Trim(sStandardNumberFirst)
  3980. sStandardNumberSecond = Right$(sSecond, Len(sSecond) - vStandardNameSecond + 1 - Len(sStandardNameSecond))
  3981. sStandardNumberSecond = Trim(sStandardNumberSecond)
  3982. If sStandardNumberFirst = "" Or sStandardNumberSecond = "" Then ' Если одна из строк пустая
  3983. iCompare = 1
  3984. Else
  3985. vFindFirst = InStr(sStandardNumberFirst, " ") ' Находим первый пробел с начала
  3986. If vFindFirst > 0 Then
  3987. sStandardNumberFirst = Left$(sStandardNumberFirst, vFindFirst - 1) ' Выделяем номер стандарта
  3988. End If
  3989. vFindFirst = InStr(sStandardNumberFirst, "-") ' Находим "-"
  3990. If vFindFirst > 0 Then ' Если "-" найден
  3991. sStandardNumberFirst = Left$(sStandardNumberFirst, vFindFirst - 1) ' Выделяем номер стандарта
  3992. End If
  3993.  
  3994. vFindSecond = InStr(sStandardNumberSecond, " ") ' Находим первый пробел с начала
  3995. If vFindSecond > 0 Then
  3996. sStandardNumberSecond = Left$(sStandardNumberSecond, vFindSecond - 1) ' Выделяем номер стандарта
  3997. End If
  3998. vFindSecond = InStr(sStandardNumberSecond, "-") ' Находим "-"
  3999. If vFindSecond > 0 Then ' Если "-" найден
  4000. sStandardNumberSecond = Left$(sStandardNumberSecond, vFindSecond - 1) ' Выделяем номер стандарта
  4001. End If
  4002.  
  4003. If IsNumeric(sStandardNumberFirst) = True And IsNumeric(sStandardNumberSecond) = True Then ' Если выделенные номера числа, то
  4004. iPartFirst = CLng(sStandardNumberFirst)
  4005. iPartSecond = CLng(sStandardNumberSecond)
  4006. If iPartFirst < iPartSecond Then ' Сравниваем номера как числа
  4007. iResult2 = -1
  4008. ElseIf iPartFirst > iPartSecond Then
  4009. iResult2 = 1
  4010. Else
  4011. iResult2 = 0
  4012. End If
  4013. Else ' Если нет,
  4014. iResult2 = StrComp(sStandardNumberFirst, sStandardNumberSecond, 1) ' Сравниваем номера как строки
  4015. End If
  4016. Select Case iResult2
  4017. Case 1
  4018. Result = "S_GREAT"
  4019. Case -1
  4020. Result = "S_LESS"
  4021. Case 0
  4022. ' Сравниваем свойства
  4023. ' Определяем положение свойств (конец или начало)
  4024. sPartFirst = Left(sFirst, vStandardNameFirst - 1)
  4025. sPartFirst = Trim(sPartFirst)
  4026. If sPartFirst = sNameFirst Then ' Свойства в конце
  4027. vFindFirst = InStr(vStandardNameFirst, sFirst, "-") ' Находим "-"
  4028. sPartFirst = Right(sFirst, Len(sFirst) - vFindFirst)
  4029. Else ' Свойства в начале
  4030. sPartFirst = Mid(sFirst, Len(sNameFirst) + 1, vStandardNameFirst - Len(sNameFirst) - 1)
  4031. End If
  4032. sPartFirst = Trim(sPartFirst)
  4033.  
  4034. sPartSecond = Left(sSecond, vStandardNameSecond - 1)
  4035. sPartSecond = Trim(sPartSecond)
  4036. If sPartSecond = sNameSecond Then ' Свойства в конце
  4037. vFindSecond = InStr(vStandardNameSecond, sSecond, "-") ' Находим "-"
  4038. sPartSecond = Right(sSecond, Len(sSecond) - vFindSecond)
  4039. Else ' Свойства в начале
  4040. sPartSecond = Mid(sSecond, Len(sNameSecond) + 1, vStandardNameSecond - Len(sNameSecond) - 1)
  4041. End If
  4042. sPartSecond = Trim(sPartSecond)
  4043.  
  4044. lPartLenFirst = Len(sPartFirst) ' Длина свойства
  4045. lPartLenSecond = Len(sPartSecond) ' Длина свойства
  4046.  
  4047. m = 0 ' Если 1 - найдена цифра, если 2 - найдена буква
  4048. m1 = 1 ' Счетчик числовых частей
  4049. ReDim Preserve sNumFirst(m1)
  4050. sNumFirst(m1) = ""
  4051. For ii = 1 To lPartLenFirst ' Ищем числовые части
  4052. sPartFirst1 = Mid(sPartFirst, ii, 1)
  4053. If IsNumeric(sPartFirst1) = True Or sPartFirst1 = "," Then ' Если найденный символ число,
  4054. If m = 2 Then ' и это первое число в части
  4055. m1 = m1 + 1
  4056. ReDim Preserve sNumFirst(m1)
  4057. sNumFirst(m1) = "" ' готовим следующий элемент массива
  4058. End If
  4059. sNumFirst(m1) = sNumFirst(m1) & sPartFirst1 ' добавляем цифру в массив
  4060. m = 1
  4061. ElseIf IsNumeric(sPartFirst1) = False And m = 1 Then ' Если не число, но до этого было число
  4062. m = 2
  4063. End If
  4064. Next ii
  4065.  
  4066. m = 0 ' Если 1 - найдена цифра, если 2 - найдена буква
  4067. m2 = 1 ' Счетчик числовых частей
  4068. ReDim Preserve sNumSecond(m2)
  4069. sNumSecond(m2) = ""
  4070. For ii = 1 To lPartLenSecond ' Ищем числовые части
  4071. sPartSecond1 = Mid(sPartSecond, ii, 1)
  4072. If IsNumeric(sPartSecond1) = True Or sPartSecond1 = "," Then ' Если найденный символ число,
  4073. If m = 2 Then ' и это первое число в части
  4074. m2 = m2 + 1
  4075. ReDim Preserve sNumSecond(m2)
  4076. sNumSecond(m2) = "" ' готовим следующий элемент массива
  4077. End If
  4078. sNumSecond(m2) = sNumSecond(m2) & sPartSecond1 ' добавляем цифру в массив
  4079. m = 1
  4080. ElseIf IsNumeric(sPartSecond1) = False And m = 1 Then ' Если не число, но до этого было число
  4081. m = 2
  4082. End If
  4083. Next ii
  4084.  
  4085. If sNumFirst(1) <> "" And sNumSecond(1) <> "" Then ' Если в обеих строках найдены числовые части, то
  4086. If m2 > m1 Then ' Находим наименьшее число частей
  4087. m = m1
  4088. Else
  4089. m = m2
  4090. End If
  4091.  
  4092. m3 = 0 ' Если 1 - то сравнение прекращается
  4093. For ii = 1 To m ' Cравниваем числовые части
  4094. If m3 = 0 Then
  4095. If CDbl(sNumFirst(ii)) = CDbl(sNumSecond(ii)) Then
  4096. iResult3 = 0
  4097. ElseIf CDbl(sNumFirst(ii)) > CDbl(sNumSecond(ii)) Then
  4098. iResult3 = 1
  4099. m3 = 1
  4100. ElseIf CDbl(sNumFirst(ii)) < CDbl(sNumSecond(ii)) Then
  4101. iResult3 = -1
  4102. m3 = 1
  4103. End If
  4104. End If
  4105. Next ii
  4106. Else ' Если числовых частей нет
  4107. iResult3 = StrComp(sPartFirst, sPartSecond, 1) ' просто сравниваем свойства
  4108. End If
  4109. Select Case iResult3
  4110. Case 1
  4111. Result = "S_GREAT"
  4112. Case -1
  4113. Result = "S_LESS"
  4114. Case 0
  4115. Result = "S_EQUAL"
  4116. End Select ' Для iResult3
  4117. End Select ' Для iResult2
  4118. End If
  4119. End Select ' Для iResult1
  4120. End If
  4121. End If
  4122. End If
  4123. End If
  4124. End If
  4125. End If
  4126. Else ' Строка из разделов Документация или Комплексы или Сборочные единицы или Детали или Комплекты или другого
  4127. sFirst = sSpecData(i, 3) ' Поле Обозначение
  4128. sSecond = sSpecData(i + 1, 3) ' Поле Обозначение
  4129. sFirst = Trim(sFirst)
  4130. sSecond = Trim(sSecond)
  4131.  
  4132. If sFirst = "" Or sSecond = "" Then ' Если одна из строк пустая
  4133. If sFirst = "" And sSecond <> "" Then
  4134. Result = "S_GREAT"
  4135. ElseIf sSecond = "" And sFirst <> "" Then
  4136. Result = "S_LESS"
  4137. Else
  4138. Result = "S_EQUAL"
  4139. End If
  4140. ElseIf sSpecData(i, nNumColumn - 5) = "Документация" Or sSpecData(i, nNumColumn - 5) = "Комплекты" Then
  4141. Else
  4142. iCompare = 1
  4143. End If
  4144. End If
  4145. Else ' Строки из разных разделов
  4146. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  4147. For ii = 0 To UBound(sSectionData)
  4148. If sSpecData(i, nNumColumn - 5) = sSectionData(ii) Then
  4149. m1 = ii
  4150. End If
  4151. If sSpecData(i + 1, nNumColumn - 5) = sSectionData(ii) Then
  4152. m2 = ii
  4153. End If
  4154. Next ii
  4155. If m1 > m2 Then
  4156. Result = "S_GREAT"
  4157. ElseIf m1 < m2 Then
  4158. Result = "S_LESS"
  4159. Else
  4160. Result = "S_EQUAL"
  4161. End If
  4162. Else ' Ведомость покупных
  4163. m1 = UBound(sGroupData) + 1
  4164. m2 = UBound(sGroupData) + 1
  4165. For ii = 0 To UBound(sGroupData) ' Проверяем группу
  4166. If sSpecData(i, nNumColumn - 4) = sGroupData(ii) Then
  4167. m1 = ii
  4168. End If
  4169. If sSpecData(i + 1, nNumColumn - 4) = sGroupData(ii) Then
  4170. m2 = ii
  4171. End If
  4172. Next ii
  4173. If m1 > m2 Then
  4174. Result = "S_GREAT"
  4175. ElseIf m1 < m2 Then
  4176. Result = "S_LESS"
  4177. Else
  4178. For ii = 0 To UBound(sSectionData)
  4179. If sSpecData(i, nNumColumn - 5) = sSectionData(ii) Then
  4180. m1 = ii
  4181. End If
  4182. If sSpecData(i + 1, nNumColumn - 5) = sSectionData(ii) Then
  4183. m2 = ii
  4184. End If
  4185. Next ii
  4186. If m1 > m2 Then
  4187. Result = "S_GREAT"
  4188. ElseIf m1 < m2 Then
  4189. Result = "S_LESS"
  4190. Else
  4191. iCompare = 1
  4192. End If
  4193. End If
  4194. End If
  4195. End If
  4196. If iCompare = 1 Then
  4197. iResult4 = StrComp(sFirst, sSecond, 1) ' Просто сравниваем строки
  4198. Select Case iResult4
  4199. Case 1
  4200. Result = "S_GREAT"
  4201. Case -1
  4202. Result = "S_LESS"
  4203. Case 0
  4204. Result = "S_EQUAL"
  4205. End Select
  4206. End If
  4207.  
  4208. 'Debug.Print Result
  4209. End Sub
  4210.  
  4211. Private Sub ChkFormat_Click()
  4212. If MForm = 0 Then ' Изменения разрешены
  4213. Tests (1)
  4214. End If
  4215. End Sub
  4216. Private Sub Tests(MTests)
  4217. If prpTestVersion = 1 Or prpTestFormat = 1 Or prpTestStandard = 1 Then
  4218. strActiveSheetName = swSheet.GetName
  4219. ReDim sFormatArray(UBound(vSheetNames))
  4220. ' Считываем и проверяем форматы всех листов
  4221. intDRWSheet = 0
  4222. k = 0
  4223. k1 = 0
  4224. k2 = 0
  4225. sSheetsNames1 = ""
  4226. sSheetsNames2 = ""
  4227. sSheetsNames3 = ""
  4228. For i = 0 To UBound(vSheetNames)
  4229. ok = swDraw.ActivateSheet(vSheetNames(i))
  4230. Set swSheet = swDraw.GetCurrentSheet
  4231. strSheetFormatName = swSheet.GetSheetFormatName()
  4232. ' Проверка версии и оформления
  4233. If Left$(vSheetNames(i), 3) = "DRW" Or Left$(vSheetNames(i), 4) = "Лист" Or Left$(vSheetNames(i), 5) = "Sheet" Or Left$(vSheetNames(i), 2) = "SP" Or Left$(vSheetNames(i), 2) = "VP" Or Left$(vSheetNames(i), 3) = "LRI" Then
  4234. If prpTestVersion = 1 And MTests = 0 Then
  4235. ' Проверка версии форматки
  4236. strTemp = "Version@" & strSheetFormatName
  4237. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  4238. If ok = True Then
  4239. Set swNote = swSelMgr.GetSelectedObject2(1)
  4240. strTemp = swNote.GetText()
  4241. ' Проверка версии
  4242. If Right$(strTemp, 1) <> "3" Then
  4243. k1 = k1 + 1
  4244. sSheetsNames1 = sSheetsNames1 & vSheetNames(i) & ", "
  4245. End If
  4246. Else
  4247. k1 = k1 + 1
  4248. sSheetsNames1 = sSheetsNames1 & vSheetNames(i) & ", "
  4249. End If
  4250. End If
  4251. If prpTestStandard = 1 And MTests = 0 Then
  4252. ' Проверка оформления
  4253. m = 0
  4254. Set swView = swDraw.GetFirstView
  4255. If Not swView Is Nothing Then
  4256. Set swNote = swView.GetFirstNote()
  4257. j = 0
  4258. While j = 0
  4259. If Not swNote Is Nothing Then
  4260. Set swAnn = swNote.GetAnnotation()
  4261. If Not swAnn.OwnerType = swAnnotationOwner_DrawingTemplate Then ' Исключаем объекты форматки
  4262. Set swNote = swNote.GetNext
  4263. Else
  4264. j = 1
  4265. End If
  4266. Else
  4267. j = 1
  4268. End If
  4269. Wend
  4270. If Not swNote Is Nothing Then
  4271. Set swAnn = swNote.GetAnnotation()
  4272. Set swTextFormat = swAnn.GetTextFormat(0)
  4273. If swTextFormat.TypeFaceName <> stdFontName Then
  4274. m = 1
  4275. End If
  4276. If swTextFormat.Italic = True And stdFontItalic = 0 Then
  4277. m = 1
  4278. ElseIf swTextFormat.Italic = False And stdFontItalic = 1 Then
  4279. m = 1
  4280. End If
  4281. If swTextFormat.Bold = True And stdFontBold = 0 Then
  4282. m = 1
  4283. ElseIf swTextFormat.Bold = False And stdFontBold = 1 Then
  4284. m = 1
  4285. End If
  4286. Else
  4287. m = 1
  4288. End If
  4289. Else
  4290. m = 1
  4291. End If
  4292. Set swView = swView.GetNextView
  4293. If Not swView Is Nothing Then
  4294. Set swNote = swView.GetFirstNote()
  4295. If Not swNote Is Nothing Then
  4296. Set swAnn = swNote.GetAnnotation()
  4297. Set swTextFormat = swAnn.GetTextFormat(0)
  4298. If swTextFormat.TypeFaceName <> stdFontName Then
  4299. m = 1
  4300. End If
  4301. If swTextFormat.Italic = True And stdFontItalic = 0 Then
  4302. m = 1
  4303. ElseIf swTextFormat.Italic = False And stdFontItalic = 1 Then
  4304. m = 1
  4305. End If
  4306. If swTextFormat.Bold = True And stdFontBold = 0 Then
  4307. m = 1
  4308. ElseIf swTextFormat.Bold = False And stdFontBold = 1 Then
  4309. m = 1
  4310. End If
  4311. End If
  4312. End If
  4313. Set swModExt = swDraw.Extension
  4314. Set swTextFormat = swModExt.GetUserPreferenceTextFormat(swDetailingDimensionTextFormat, swDetailingDimension)
  4315. If swTextFormat.TypeFaceName <> stdFontName Or swTextFormat.CharHeight <> stdFontSize / 1000 Then
  4316. m = 1
  4317. End If
  4318. If swTextFormat.Italic = True And stdFontItalic = 0 Then
  4319. m = 1
  4320. ElseIf swTextFormat.Italic = False And stdFontItalic = 1 Then
  4321. m = 1
  4322. End If
  4323. If swTextFormat.Bold = True And stdFontBold = 0 Then
  4324. m = 1
  4325. ElseIf swTextFormat.Bold = False And stdFontBold = 1 Then
  4326. m = 1
  4327. End If
  4328. If m = 1 Then
  4329. k2 = k2 + 1
  4330. sSheetsNames2 = sSheetsNames2 & vSheetNames(i) & ", "
  4331. End If
  4332. End If
  4333. End If
  4334. If prpTestFormat = 1 And ChkFormat.Value = False And CboType.ListIndex <> 2 Then ' Формат читается из чертежа
  4335. If Left$(vSheetNames(i), 3) = "DRW" Or Left$(vSheetNames(i), 4) = "Лист" Or Left$(vSheetNames(i), 5) = "Sheet" Or Left$(vSheetNames(i), 3) = "LRI" Then
  4336. ' Проверка имени формата
  4337. strTemp = "Format@" & strSheetFormatName
  4338. ok = swDraw.Extension.SelectByID2(strTemp, "NOTE", 0, 0, 0, False, 0, Nothing, 0)
  4339. If ok = True Then
  4340. Set swNote = swSelMgr.GetSelectedObject2(1)
  4341. strTemp = swNote.GetText()
  4342. ' Проверка корректности и длины записи
  4343. If Len(Trim(strTemp)) > 8 And Left$(strTemp, 6) = "Формат" Then
  4344. sFormatArray(intDRWSheet) = Right$(strTemp, Len(strTemp) - 7)
  4345. intDRWSheet = intDRWSheet + 1
  4346. Else
  4347. k = k + 1
  4348. sSheetsNames3 = sSheetsNames3 & vSheetNames(i) & ", "
  4349. End If
  4350. Else
  4351. k = k + 1
  4352. sSheetsNames3 = sSheetsNames3 & vSheetNames(i) & ", "
  4353. End If
  4354. End If
  4355. End If
  4356. Next i
  4357. If k1 > 0 Then
  4358. sSheetsNames1 = Left$(sSheetsNames1, Len(sSheetsNames1) - 2)
  4359. strMsg = "Лист(ы) " & sSheetsNames1 & " имеют нестандартную или устаревшую основную надпись." & Chr$(10) & "Текст основной надписи может отображаться неверно." & Chr$(10) & "Для исправления используйте макрос DProp"
  4360. lRetval = swApp.SendMsgToUser2(strMsg, swMbWarning, swMbOk)
  4361. End If
  4362. If k2 > 0 Then
  4363. sSheetsNames2 = Left$(sSheetsNames2, Len(sSheetsNames2) - 2)
  4364. strMsg = "Лист(ы) " & sSheetsNames2 & " имеют ошибки оформления." & Chr$(10) & "Для исправления используйте макрос DProp"
  4365. lRetval = swApp.SendMsgToUser2(strMsg, swMbWarning, swMbOk)
  4366. End If
  4367. If prpTestFormat = 1 Then ' Есть проверка формата
  4368. If ChkFormat.Value = False And CboType.ListIndex <> 2 Then ' Формат читается из чертежа
  4369. CboFormat.Enabled = False
  4370. If k = 0 And intDRWSheet > 0 Then ' Все прочитанные форматы определены
  4371. ' Определяем число листов
  4372. If intDRWSheet > 1 Then ' Листов больше одного
  4373. m = 0
  4374. ' Сортируем форматы
  4375. For i = 0 To intDRWSheet - 1
  4376. strTemp = sFormatArray(i)
  4377. n = i
  4378. For j = i To intDRWSheet - 2
  4379. ' Длина равна, левые части нет
  4380. If Len(strTemp) = Len(sFormatArray(j + 1)) And Left$(strTemp, 2) <> Left$(sFormatArray(j + 1), 2) Then
  4381. iResult = StrComp(Left$(sFormatArray(j + 1), 2), Left$(strTemp, 2), 1)
  4382. Select Case iResult
  4383. Case -1 ' меньше
  4384. m = 1
  4385. Case 0 ' равняется
  4386. Case 1 ' больше
  4387. strTemp = sFormatArray(j + 1)
  4388. n = j + 1
  4389. m = 1
  4390. End Select
  4391. ' Длина не равна, левые части равны
  4392. ElseIf Len(strTemp) <> Len(sFormatArray(j + 1)) And Left$(strTemp, 2) = Left$(sFormatArray(j + 1), 2) Then
  4393. iResult = StrComp(sFormatArray(j + 1), strTemp, 1)
  4394. Select Case iResult
  4395. Case -1
  4396. strTemp = sFormatArray(j + 1)
  4397. n = j + 1
  4398. m = 1
  4399. Case 0
  4400. Case 1
  4401. m = 1
  4402. End Select
  4403. ' Длина равна, левые части тоже
  4404. ElseIf Len(strTemp) = Len(sFormatArray(j + 1)) And Left$(strTemp, 2) = Left$(sFormatArray(j + 1), 2) Then
  4405. iResult = StrComp(Right$(sFormatArray(j + 1), 1), Right$(strTemp, 1), 1)
  4406. Select Case iResult
  4407. Case -1
  4408. strTemp = sFormatArray(j + 1)
  4409. n = j + 1
  4410. m = 1
  4411. Case 0
  4412. Case 1
  4413. m = 1
  4414. End Select
  4415. ' Длина не равна, левые части не равны
  4416. Else
  4417. iResult = StrComp(Left$(sFormatArray(j + 1), 2), Left$(strTemp, 2), 1)
  4418. Select Case iResult
  4419. Case -1
  4420. m = 1
  4421. Case 0
  4422. Case 1
  4423. strTemp = sFormatArray(j + 1)
  4424. n = j + 1
  4425. m = 1
  4426. End Select
  4427. End If
  4428. Next j
  4429. sFormatArray(n) = sFormatArray(i)
  4430. sFormatArray(i) = strTemp
  4431. Next i
  4432. End If
  4433. ' Заносим формат
  4434. If m = 0 Or intDRWSheet = 1 Then ' Все форматы одинаковые или формат всего один
  4435. If Len(sFormatArray(0)) > 2 Then ' Формат кратный
  4436. CboFormat.ListIndex = 7
  4437. TxtRemark.Value = "*) " & sFormatArray(0)
  4438. Else ' Формат обычный
  4439. CboFormat.Value = sFormatArray(0)
  4440. End If
  4441. Else 'Форматов много и они разные
  4442. ' Формируем запись форматов в примечание
  4443. strTemp = ""
  4444. For i = 0 To intDRWSheet - 1
  4445. If i <> intDRWSheet - 1 Then
  4446. If sFormatArray(i) <> sFormatArray(i + 1) Then
  4447. strTemp = strTemp & " " & sFormatArray(i) & ","
  4448. End If
  4449. Else
  4450. strTemp = strTemp & " " & sFormatArray(i) & ","
  4451. End If
  4452. Next i
  4453. CboFormat.ListIndex = 7
  4454. TxtRemark.Value = "*)" & Left$(strTemp, Len(strTemp) - 1)
  4455. End If
  4456. If CboFormat.ListIndex = 7 Then
  4457. TxtRemark.Enabled = False
  4458. Else
  4459. TxtRemark.Enabled = True
  4460. End If
  4461. ElseIf k = 0 And intDRWSheet = 0 Then ' Нет подходящих листов чертежа
  4462. swApp.SendMsgToUser ("Формат не определен.")
  4463. CboFormat.Value = ""
  4464. TxtRemark.Enabled = True
  4465. Else ' Один или более форматов не определены
  4466. sSheetsNames3 = Left$(sSheetsNames3, Len(sSheetsNames3) - 2)
  4467. strMsg = "Лист(ы) " & sSheetsNames3 & " не позволяют определить формат." & Chr$(10) & "Для исправления используйте макрос DProp"
  4468. lRetval = swApp.SendMsgToUser2(strMsg, swMbWarning, swMbOk)
  4469. CboFormat.Value = ""
  4470. TxtRemark.Enabled = True
  4471. End If
  4472. Else ' Формат устанавливается пользователем
  4473. CboFormat.Enabled = True
  4474. TxtRemark.Enabled = True
  4475. End If
  4476. ' Очистка Примечания от *)
  4477. strTemp = TxtRemark.Value
  4478. 'Debug.Print "TxtRemark.Value=", TxtRemark.Value
  4479. 'Debug.Print "CboFormat.Value=", CboFormat.Value
  4480. If CboFormat.Value <> "*)" And Left$(strTemp, 2) = "*)" Then
  4481. 'Debug.Print "***"
  4482. TxtRemark.Value = ""
  4483. End If
  4484. End If
  4485. ' Возвращаем активный лист
  4486. ok = swDraw.ActivateSheet(strActiveSheetName)
  4487. Set swSheet = swDraw.GetCurrentSheet
  4488. End If
  4489. End Sub
  4490.  
  4491. Function RealText(RichText As String) As String
  4492. Dim n1 As Integer ' Начало
  4493. Dim n2 As String ' Длина
  4494. Dim DelText As String
  4495. While InStr(RichText, "<") > 0
  4496. n1 = InStr(RichText, "<")
  4497. n2 = InStr(RichText, ">") - n1 + 1
  4498. DelText = Mid$(RichText, n1, n2)
  4499. RichText = Replace(RichText, DelText, "")
  4500. Wend
  4501. RealText = RichText
  4502. End Function
  4503.  
  4504. Private Sub CmdAbout_Click()
  4505. swApp.SendMsgToUser ("Made by Leon, 2017")
  4506. End Sub
  4507.  
  4508. Private Sub LstConfigTest() ' Проверка выбранных конфигураций
  4509. ConfigTest = 0
  4510. mConfigCount = 0
  4511. j = 0
  4512. For i = 0 To LstConfig.ListCount - 1
  4513. If LstConfig.Selected(i) = True Then
  4514. j = j + 1
  4515. End If
  4516. Next i
  4517. If j > 0 Then
  4518. ConfigTest = 1
  4519. If j > 9 Then
  4520. mConfigCount = 1
  4521. End If
  4522. End If
  4523. End Sub
  4524.  
  4525. Private Sub RView()
  4526. vSheetNames = swDraw.GetSheetNames
  4527. Set swBomFeat = swTable.BomFeature
  4528. vVisible = Null
  4529. vConfVisibleSP = swBomFeat.GetConfigurations(True, vVisible)
  4530. For i = 0 To UBound(vSheetNames)
  4531. If (Left$(vSheetNames(i), 3) = "DRW" Or Left$(vSheetNames(i), 4) = "Лист" Or Left$(vSheetNames(i), 5) = "Sheet") Then
  4532. ok = swDraw.ActivateSheet(vSheetNames(i))
  4533. Set swSheet = swDraw.GetCurrentSheet
  4534. Set swView = swDraw.GetFirstView
  4535. Set swView = swView.GetNextView ' Получаем первый вид
  4536. Do Until swView Is Nothing
  4537. strTemp = swView.ReferencedConfiguration ' Имя конфигурации вида
  4538. m = 0
  4539. If CboType.ListIndex = 1 Then ' Групповая спецификация
  4540. For j = 0 To UBound(vConfVisibleSP)
  4541. If strTemp = vConfVisibleSP(j) Then
  4542. m = 1
  4543. Exit For
  4544. End If
  4545. Next j
  4546. Else
  4547. If strTemp = sConfigName Then
  4548. m = 1
  4549. End If
  4550. End If
  4551. If m = 0 Then
  4552. Set swBomFeat = swTable.BomFeature
  4553. Set swFeat = swBomFeat.GetFeature
  4554. strTemp = swFeat.Name
  4555. ok = swView.SetKeepLinkedToBOM(True, strTemp)
  4556. End If
  4557. Set swView = swView.GetNextView
  4558. Loop
  4559. End If
  4560. Next i
  4561. Finish
  4562. End Sub
  4563.  
  4564. Sub MyProperties()
  4565. ' Чтение ini файла
  4566. Open sSource15 For Input As #1
  4567. Line Input #1, strTemp
  4568. prpNumber = strTemp ' Обозначение
  4569. Line Input #1, strTemp
  4570. prpDocCode = strTemp ' Код документа
  4571. Line Input #1, strTemp
  4572. prpDocDescription = strTemp ' Наименование документа
  4573. Line Input #1, strTemp
  4574. prpDescription = strTemp ' Наименование изделия в одну строку
  4575. Line Input #1, strTemp
  4576. prpDescriptionMulti = strTemp ' Наименование изделия в несколько строк
  4577. Line Input #1, strTemp
  4578. prpCode = strTemp ' Условное наименование (код)
  4579. Line Input #1, strTemp
  4580. prpFormat = strTemp ' Формат
  4581. Line Input #1, strTemp
  4582. prpRemark = strTemp ' Примечание
  4583. Line Input #1, strTemp
  4584. prpLit = strTemp ' Литера
  4585. Line Input #1, strTemp
  4586. prpLitTable = strTemp ' Литера для таблицы параметров
  4587. Line Input #1, strTemp
  4588. prpFirm = strTemp ' Наименование организации
  4589. Line Input #1, strTemp
  4590. prpSection = strTemp ' Раздел
  4591. Line Input #1, strTemp
  4592. prpGroup = strTemp ' Группа
  4593. '
  4594. Line Input #1, strTemp
  4595. prpDesigner = strTemp ' Разраб.
  4596. Line Input #1, strTemp
  4597. prpTester = strTemp ' Пров.
  4598. Line Input #1, strTemp
  4599. prpTechcontrol = strTemp ' Т.контр.
  4600. Line Input #1, strTemp
  4601. prpWorkType = strTemp ' Характер работы
  4602. Line Input #1, strTemp
  4603. prpPerson = strTemp ' Фамилия для "Характер работы"
  4604. Line Input #1, strTemp
  4605. prpNormcontrol = strTemp ' Н.контр
  4606. Line Input #1, strTemp
  4607. prpApprove = strTemp ' Утв.
  4608. '
  4609. Line Input #1, strTemp
  4610. prpMass = strTemp ' Масса
  4611. Line Input #1, strTemp
  4612. prpMassTable = strTemp ' Масса для таблицы параметров
  4613. Line Input #1, strTemp
  4614. prpMaterial = strTemp ' Материал
  4615. Line Input #1, strTemp
  4616. prpMaterialTable = strTemp ' Материал для таблицы параметров
  4617. '
  4618. Line Input #1, strTemp
  4619. prpFirstApply = strTemp ' Перв.примен. для чертежей и ВП
  4620. Line Input #1, strTemp
  4621. prpInformNumber = strTemp ' Справ.№ для чертежей
  4622. '
  4623. Line Input #1, strTemp
  4624. prpFirstApplySP = strTemp ' Перв.примен. для спецификации
  4625. Line Input #1, strTemp
  4626. prpInformNumberSP = strTemp ' Справ.№ для спецификаций
  4627. Line Input #1, strTemp
  4628. prpLitSP = strTemp ' Литера для спецификаций
  4629. '
  4630. Line Input #1, strTemp
  4631. prpInformNumberVP = strTemp ' Справ.№ для ВП
  4632. Line Input #1, strTemp
  4633. prpDescriptionVP = strTemp ' Наименование для ВП
  4634. Line Input #1, strTemp
  4635. prpProductCodeVP = strTemp ' Код продукции
  4636. Line Input #1, strTemp
  4637. prpNumberDocVP = strTemp ' Обозначение документа на поставку
  4638. Line Input #1, strTemp
  4639. prpVendorVP = strTemp ' Поставщик
  4640. Line Input #1, strTemp
  4641. prpRemarkVP = strTemp ' Примечание для ВП
  4642. '
  4643. Line Input #1, strTemp
  4644. prpProject = strTemp ' Проект (дополнительное свойство)
  4645. Line Input #1, strTemp
  4646. prpDraftNumber = strTemp ' Эскизное Обозначение (дополнительное свойство)
  4647. Line Input #1, strTemp
  4648. prpDraftDescription = strTemp ' Эскизное Наименование (дополнительное свойство)
  4649. Line Input #1, strTemp
  4650. prpDraftFirstApply = strTemp ' Эскизное Перв.примен. для чертежей и ВП(дополнительное свойство)
  4651. Line Input #1, strTemp
  4652. prpDraftFirstApplySP = strTemp ' Эскизное Перв.примен. для спецификации (дополнительное свойство)
  4653. '
  4654. Line Input #1, strTemp
  4655. prpBlank = strTemp ' Заготовка
  4656. '
  4657. Line Input #1, strTemp
  4658. prpBor = strTemp ' Заимствование
  4659. '
  4660. Line Input #1, strTemp
  4661. prpQuantity = strTemp ' Количество в СП
  4662. '
  4663. Line Input #1, strTemp
  4664. If strTemp = "1" Then ' Проверка версии
  4665. prpTestVersion = 1
  4666. Else
  4667. prpTestVersion = 0
  4668. End If
  4669. Line Input #1, strTemp
  4670. If strTemp = "1" Then ' Проверка формата
  4671. prpTestFormat = 1
  4672. Else
  4673. prpTestFormat = 0
  4674. End If
  4675. Line Input #1, strTemp
  4676. If strTemp = "1" Then ' Проверка имен
  4677. prpTestName = 1
  4678. Else
  4679. prpTestName = 0
  4680. End If
  4681. Line Input #1, strTemp
  4682. If strTemp = "1" Then ' Проверка оформления
  4683. prpTestStandard = 1
  4684. Else
  4685. prpTestStandard = 0
  4686. End If
  4687. '
  4688. Line Input #1, strTemp
  4689. If strTemp = "1" Then ' Имя файла
  4690. prpFileName = 1
  4691. Else
  4692. prpFileName = 0
  4693. End If
  4694. Line Input #1, strTemp
  4695. prpNameSep = strTemp ' Разделитель
  4696. '
  4697. Line Input #1, strTemp
  4698. If strTemp = "1" Then ' Управление шрифтом
  4699. prpFontSize = 1
  4700. Else
  4701. prpFontSize = 0
  4702. End If
  4703. '
  4704. Line Input #1, strTemp
  4705. Line Input #1, strTemp
  4706. If strTemp = "1" Then ' Доп. свойство №1
  4707. prpAddPRP1 = 1
  4708. Else
  4709. prpAddPRP1 = 0
  4710. End If
  4711. Line Input #1, strTemp
  4712. Line Input #1, strTemp
  4713. If strTemp = "1" Then ' Доп. свойство №2
  4714. prpAddPRP2 = 1
  4715. Else
  4716. prpAddPRP2 = 0
  4717. End If
  4718. '
  4719. Line Input #1, strTemp
  4720. If strTemp = "1" Then ' Окно макроса в левом верхнем углу
  4721. prpLeftTopCorner = 1
  4722. Else
  4723. prpLeftTopCorner = 0
  4724. End If
  4725. Line Input #1, strTemp
  4726. If strTemp = "1" Then ' Окно макроса поверх всех
  4727. prpTopAll = 1
  4728. Else
  4729. prpTopAll = 0
  4730. End If
  4731. Close #1
  4732. End Sub
  4733.  
  4734. Sub MyStandard()
  4735. ' Чтение ini файла
  4736. Open sSource16 For Input As #1
  4737. Line Input #1, strTemp ' Шрифт
  4738. stdFontName = strTemp
  4739. Line Input #1, strTemp ' Размер шрифта
  4740. strTemp = Replace(strTemp, ".", ",")
  4741. stdFontSize = CDbl(strTemp)
  4742. Line Input #1, strTemp ' Наклонный
  4743. If strTemp = "1" Then
  4744. stdFontItalic = 1
  4745. Else
  4746. stdFontItalic = 0
  4747. End If
  4748. Line Input #1, strTemp ' Жирный
  4749. If strTemp = "1" Then
  4750. stdFontBold = 1
  4751. Else
  4752. stdFontBold = 0
  4753. End If
  4754. Line Input #1, strTemp
  4755. stdDay = strTemp
  4756. Line Input #1, strTemp
  4757. stdMonth = strTemp
  4758. Line Input #1, strTemp
  4759. stdYear = strTemp
  4760. Line Input #1, strTemp
  4761. stdHour = strTemp
  4762. Line Input #1, strTemp
  4763. stdMinute = strTemp
  4764. Line Input #1, strTemp
  4765. stdSecond = strTemp
  4766. Close #1
  4767. ' Проверяем дату у файла стандарта
  4768. MyDateTime = FileDateTime(sSource17)
  4769. If stdDay = Day(MyDateTime) And stdMonth = Month(MyDateTime) And stdYear = Year(MyDateTime) And stdHour = Hour(MyDateTime) And stdMinute = Minute(MyDateTime) And stdSecond = Second(MyDateTime) Then
  4770. Else
  4771. strTemp = swApp.GetUserPreferenceStringValue(swDefaultTemplateDrawing)
  4772. Set swDraw1 = swApp.NewDocument(strTemp, 0, 0, 0)
  4773. Set swModExt = swDraw1.Extension
  4774. ok = swModExt.LoadDraftingStandard(sSource17)
  4775. Set swTextFormat = swModExt.GetUserPreferenceTextFormat(swDetailingDimensionTextFormat, swDetailingDimension)
  4776. strTemp = swDraw1.GetTitle
  4777. swApp.QuitDoc strTemp
  4778.  
  4779. stdFontName = swTextFormat.TypeFaceName
  4780. stdFontSize = swTextFormat.CharHeight * 1000
  4781. If swTextFormat.Italic Then
  4782. stdFontItalic = 1
  4783. Else
  4784. stdFontItalic = 0
  4785. End If
  4786. If swTextFormat.Bold Then
  4787. stdFontBold = 1
  4788. Else
  4789. stdFontBold = 0
  4790. End If
  4791.  
  4792. ' Запись ini
  4793. Open sSource16 For Output As #1
  4794. Print #1, stdFontName
  4795. strTemp = LTrim(CStr(stdFontSize))
  4796. strTemp = Replace(strTemp, ".", ",")
  4797. Print #1, strTemp
  4798. If stdFontItalic = 1 Then
  4799. Print #1, "1"
  4800. Else
  4801. Print #1, "0"
  4802. End If
  4803. If stdFontBold = 1 Then
  4804. Print #1, "1"
  4805. Else
  4806. Print #1, "0"
  4807. End If
  4808. strTemp = Day(MyDateTime)
  4809. Print #1, strTemp
  4810. strTemp = Month(MyDateTime)
  4811. Print #1, strTemp
  4812. strTemp = Year(MyDateTime)
  4813. Print #1, strTemp
  4814. strTemp = Hour(MyDateTime)
  4815. Print #1, strTemp
  4816. strTemp = Minute(MyDateTime)
  4817. Print #1, strTemp
  4818. strTemp = Second(MyDateTime)
  4819. Print #1, strTemp
  4820. Close #1
  4821. End If
  4822. End Sub
  4823.  
  4824.  
  4825. Private Sub tempAddRow()
  4826. ' Добавляем строки для корректного переноса
  4827. nNumRow = swTable.RowCount
  4828. dblTemp = 0#
  4829. For i = 1 To nNumRow - 1 ' Вычисляем общую высоту таблицы
  4830. dblTemp = dblTemp + swTable.GetRowHeight(i)
  4831. Next i
  4832. k = 1 ' Метка конца таблицы
  4833. n = nFirst
  4834. i = 0
  4835. If dblTemp > nFirst * 0.008 Then ' Если не помещаемся на одном листе
  4836. While k = 1
  4837. k = 0
  4838. k1 = 0
  4839. ' Проверяем многострочные записи
  4840. dblTemp = 0#
  4841. j = 0
  4842. While dblTemp < n * 0.008 ' Определяем количество строк на одном листе
  4843. j = j + 1
  4844. dblTemp = dblTemp + swTable.GetRowHeight(j)
  4845. Wend
  4846. If dblTemp > n * 0.008 Then ' Определяем, есть ли высокая строка на границе и количество добавляемых строк
  4847. dblTemp = dblTemp - n * 0.008
  4848. k1 = CInt(dblTemp / 0.008)
  4849. End If
  4850. For jj = 1 To k1 ' Добавляем строки
  4851. ok = swTable.InsertRow(swTableItemInsertPosition_Before, j)
  4852. swTable.Text(j, 2) = " "
  4853. dRetval = swTable.SetRowHeight(j, 0.008, swTableRowColChange_TableSizeCanChange)
  4854. Next jj
  4855. ' Боремся с подвисшими заголовками
  4856. If CboType.ListIndex = 0 Or CboType.ListIndex = 1 Then ' Спецификация или Групповая спецификация
  4857. jjj = 4
  4858. Else ' Ведомость покупных
  4859. jjj = 1
  4860. End If
  4861. Set swTextFormat = swTable.GetCellTextFormat(j - k1, jjj) ' Проверяем ячейку в последней (если не было добавлений) строке страницы
  4862. If swTextFormat.Underline Then ' Добавляем строки
  4863. k2 = CInt(swTable.GetRowHeight(j - k1) / 0.008) ' Определяем количество добавляемых строк
  4864. For jj = 1 To k2 + k1 ' Добавляем строки
  4865. ok = swTable.InsertRow(swTableItemInsertPosition_Before, j - k1)
  4866. swTable.Text(j - k1, 2) = " "
  4867. dRetval = swTable.SetRowHeight(j - k1, 0.008, swTableRowColChange_TableSizeCanChange)
  4868. Next jj
  4869. For jj = 1 To k1 ' Удаляем лишние строки
  4870. ok = swTable.DeleteRow(j + 2)
  4871. Next jj
  4872. Else ' Проверяем предпоследнюю строку страницы
  4873. Set swTextFormat = swTable.GetCellTextFormat(j - 1 - k1, jjj) ' Проверяем ячейку в предпоследней (если не было добавлений) строке страницы
  4874. If swTextFormat.Underline Then ' Добавляем строки
  4875. k2 = CInt(swTable.GetRowHeight(j - 1 - k1) / 0.008) + 1 ' Определяем количество добавляемых строк
  4876. For jj = 1 To k2 + k1 ' Добавляем строки
  4877. ok = swTable.InsertRow(swTableItemInsertPosition_Before, j - 1 - k1)
  4878. swTable.Text(j - 1 - k1, 2) = " "
  4879. dRetval = swTable.SetRowHeight(j - 1 - k1, 0.008, swTableRowColChange_TableSizeCanChange)
  4880. Next jj
  4881. For jj = 1 To k1 ' Удаляем лишние строки
  4882. ok = swTable.DeleteRow(j + 2)
  4883. Next jj
  4884. End If
  4885. End If
  4886. nNumRow = swTable.RowCount
  4887. dblTemp = 0
  4888. For j = 1 To nNumRow - 1 ' Вычисляем общую высоту таблицы
  4889. dblTemp = dblTemp + swTable.GetRowHeight(j)
  4890. Next j
  4891. i = i + 1
  4892. If dblTemp > (nFirst + i * nSecond) * 0.008 Then ' Работаем со следующим листом
  4893. k = 1
  4894. n = nFirst + i * nSecond
  4895. End If
  4896. If i = 300 Then
  4897. End
  4898. End If
  4899. Wend
  4900. End If
  4901. End Sub
  4902.  
  4903.  
  4904. Private Sub Temp_CmdAddFormat_Click()
  4905. nNumRow = swTable.RowCount
  4906. If CboType.ListIndex = 1 And iForm1 = 1 Then ' Групповая спецификация и выбрано убирать базовую часть обозначения для исполнений
  4907. j = 0
  4908. For i = 1 To nNumRow - 1
  4909. If i <> 1 Then ' Проверяем обозначения для исполнений
  4910. If swTable.Text(i, 3) <> "" Then
  4911. varTemp = InStr(swTable.Text(i, 3), "-")
  4912. If varTemp > 0 Then ' Есть исполнение
  4913. j = j + 1
  4914. If Left$(swTable.Text(i, 3), 1) <> "-" Then ' Обозначение не укорочено, Сравниваем с базовой частью обозначения
  4915. If Left$(swTable.Text(i, 3), varTemp - 1) = swTable.Text(i - j, 3) Then ' Совпадают
  4916. swTable.Text(i, 3) = Right$(swTable.Text(i, 3), varTemp)
  4917. If iForm0 = 1 Then ' Помечаем цветом
  4918. ' Устанавливаем цвет
  4919. End If
  4920. End If
  4921. End If
  4922. Else
  4923. j = 0
  4924. End If
  4925. Else
  4926. If j <> 0 Then
  4927. j = j + 1
  4928. End If
  4929. End If
  4930. End If
  4931. Next i
  4932. End If
  4933.  
  4934. If iForm2 = 1 Then ' Группировать стандартные
  4935. i = 1
  4936. jj = 1 ' Счетчик нужных строк
  4937. j = 0 ' Номер первой строки одного ГОСТа
  4938. n = 0 ' Метка конца одинаковых строк
  4939. k = 1 ' Метка конца таблицы
  4940. k1 = 1 ' Метка конца отбора первой строки
  4941. k2 = 1 ' Метка конца отбора второй строки
  4942. While k = 1
  4943. Do While k1 = 1 ' Определяем первую строку
  4944. If swTable.Text(i, 2) <> " " And swTable.Text(i, 2) <> "-" And swTable.Text(i, 3) = "" And swTable.Text(i, 4) <> "" Then ' Отсееваем лишние строки
  4945. strTemp = swTable.Text(i, 4)
  4946. Debug.Print strTemp, "jj=", jj
  4947. ReDim Preserve iTempArr(jj)
  4948. iTempArr(jj) = i
  4949. jj = jj + 1
  4950. Exit Do
  4951. Else
  4952. i = i + 1
  4953. End If
  4954. nNumRow = swTable.RowCount
  4955. If i >= nNumRow - 2 Then
  4956. k1 = 0
  4957. Exit Do
  4958. End If
  4959. Loop
  4960. If k1 <> 0 Then
  4961. Do While k2 = 1 ' Определяем вторую строку
  4962. If swTable.Text(i + 1, 2) <> " " And swTable.Text(i + 1, 2) <> "-" And swTable.Text(i + 1, 3) = "" And swTable.Text(i + 1, 4) <> "" Then ' Отсееваем лишние строки
  4963. strTemp1 = swTable.Text(i + 1, 4)
  4964. Exit Do
  4965. Else
  4966. i = i + 1
  4967. End If
  4968. nNumRow = swTable.RowCount
  4969. If i >= nNumRow - 2 Then
  4970. k2 = 0
  4971. Exit Do
  4972. End If
  4973. Loop
  4974. End If
  4975. If k1 <> 0 And k2 <> 0 Then
  4976. ' Заменяем переносы на пробелы
  4977. strTemp = Replace(strTemp, Chr$(13) & Chr$(10), " ")
  4978. strTemp = Replace(strTemp, Chr$(10), " ")
  4979. strTemp1 = Replace(strTemp1, Chr$(13) & Chr$(10), " ")
  4980. strTemp1 = Replace(strTemp1, Chr$(10), " ")
  4981. varTemp = InStrRev(strTemp, " ") ' Находим первый пробел с конца
  4982. If varTemp > 0 Then
  4983. varTemp1 = InStrRev(strTemp, " ", varTemp - 1) ' Находим второй пробел с конца
  4984. If varTemp1 > 0 Then
  4985. Debug.Print Trim(Mid$(strTemp, varTemp1 + 1, varTemp - varTemp1 - 1))
  4986. If Trim(Mid$(strTemp, varTemp1 + 1, varTemp - varTemp1 - 1)) = "Р" Then
  4987. varTemp1 = InStrRev(strTemp, " ", varTemp1 - 1) ' Находим третий пробел с конца
  4988. End If
  4989. If varTemp1 > 0 Then
  4990. If Len(strTemp) > varTemp1 And Len(strTemp1) > varTemp1 Then ' Сравниваем стандарты
  4991. Debug.Print "Строки", strTemp, strTemp1
  4992. Debug.Print "1", "*" & Right$(strTemp, Len(strTemp) - varTemp1) & "*"
  4993. Debug.Print "2", "*" & Right$(strTemp1, Len(strTemp) - varTemp1) & "*"
  4994. Debug.Print "**************"
  4995. If Right$(strTemp, Len(strTemp) - varTemp1) = Right$(strTemp1, Len(strTemp) - varTemp1) Then ' Госты равны
  4996. If j = 0 Then
  4997. strTemp2 = Right$(strTemp, Len(strTemp) - varTemp1) ' ГОСТ
  4998. varTemp = InStr(strTemp, " ")
  4999. strTemp3 = Left$(strTemp, varTemp - 1) ' Тип
  5000. Select Case strTemp3
  5001. Case "Болт"
  5002. strTemp4 = "Болты " & strTemp2
  5003. Case "Винт"
  5004. strTemp4 = "Винты " & strTemp2
  5005. Case "Гайка"
  5006. strTemp4 = "Гайки " & strTemp2
  5007. Case "Шайба"
  5008. strTemp4 = "Шайбы " & strTemp2
  5009. Case "Шпонка"
  5010. strTemp4 = "Шпонки " & strTemp2
  5011. Case "Штифт"
  5012. strTemp4 = "Штифты " & strTemp2
  5013. Case "Кольцо"
  5014. strTemp4 = "Кольца " & strTemp2
  5015. Case "Подшипник"
  5016. strTemp4 = "Подшипники " & strTemp2
  5017. Case "Шарик"
  5018. strTemp4 = "Шарики " & strTemp2
  5019. Case "Шпилька"
  5020. strTemp4 = "Шпильки " & strTemp2
  5021. Case "Шуруп"
  5022. strTemp4 = "Шурупы " & strTemp2
  5023. Case Else
  5024. strTemp4 = strTemp3 & " " & strTemp2
  5025. End Select
  5026. j = jj - 1 ' Запоминаем первую строчку
  5027. End If
  5028. n = 1
  5029. End If
  5030. End If
  5031. End If
  5032. End If
  5033. End If
  5034. End If
  5035. nNumRow = swTable.RowCount
  5036. If i >= nNumRow - 1 Then
  5037. n = 0
  5038. i = i + 1
  5039. End If
  5040. If j <> 0 And n = 0 Then ' Строчки с одним ГОСТом кончились
  5041. For ii = j To jj - 1
  5042. strTemp = swTable.Text(iTempArr(ii), 4)
  5043. strTemp = Replace(strTemp, Chr$(13) & Chr$(10), " ")
  5044. strTemp = Replace(strTemp, Chr$(10), " ")
  5045. strTemp = RTrim(Left$(strTemp, Len(strTemp) - Len(strTemp2))) ' Отрезаем ГОСТ
  5046. If strTemp3 <> "Шайба" Then ' Отрезаем Тип
  5047. strTemp = LTrim(Right$(strTemp, Len(strTemp) - Len(strTemp3)))
  5048. End If
  5049. swTable.Text(iTempArr(ii), 4) = strTemp
  5050. If iForm0 = 1 Then ' Помечаем цветом
  5051. ' Устанавливаем цвет
  5052. End If
  5053. Next ii
  5054. ok = swTable.InsertRow(swTableItemInsertPosition_Before, iTempArr(j))
  5055. swTable.Text(iTempArr(j), 2) = " "
  5056. swTable.Text(iTempArr(j), 4) = strTemp4
  5057. i = i + 1
  5058. j = 0
  5059. End If
  5060. n = 0
  5061. i = i + 1
  5062. nNumRow = swTable.RowCount
  5063. If i > nNumRow - 1 Then
  5064. k = 0
  5065. End If
  5066. Debug.Print "i=", i
  5067. Wend
  5068. MFormat = 1
  5069. 'CmdFormat_Click ' Форматирование
  5070. MFormat = 0
  5071. End If
  5072.  
  5073. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement