Compare commits

..
Author SHA1 Message Date
codex a523e1f542 docs: define Plant 3D 2026 migration agent contract 2026-08-03 08:12:24 +03:00
116 changed files with 187 additions and 31411 deletions
-11
View File
@@ -1,11 +0,0 @@
/link/
/link
# DocumentAutomation generated files and local source data
DocumentAutomation/**/bin/
DocumentAutomation/**/obj/
DocumentAutomation/.vs/
DocumentAutomation/samples/**/*.docx
DocumentAutomation/samples/**/*.pdf
DocumentAutomation/samples/**/*.json
DocumentAutomation/**/*.csproj.user
+129
View File
@@ -0,0 +1,129 @@
# AGENTS.md
## Назначение проекта
Этот репозиторий содержит аудит, архитектуру, исходный код, тесты, runtime
evidence и документацию миграции корпоративной экосистемы Autodesk AutoCAD
Plant 3D 2019 на Autodesk AutoCAD Plant 3D 2026.
Конечная цель — функционально эквивалентная рабочая схема Plant 3D 2026:
корпоративный Launcher, локальная доставка и активация пакетов, managed
плагины, команды, Ribbon, Plant project integration, DataLinks, Ortho,
аннотации, обновление, диагностика и rollback. Миграция не считается
завершённой после успешной компиляции: необходима runtime-проверка реальных
сценариев в Plant 3D 2026.
## Связанные репозитории
- основной Autodesk-репозиторий: `C:\dev\autodesk`;
- Launcher Next: `C:\dev\launcher-next`;
- legacy launcher (read-only): `C:\dev\launcher\git`, `C:\dev\p_serv_starter`;
- legacy P_Rec_Annot (read-only): `C:\dev\autodesk\link\P_Rec_Annot\v1.0.4\repo`.
Legacy и deployed-файлы нельзя изменять без отдельного прямого задания.
## Целевая платформа и принцип миграции
- Autodesk AutoCAD Plant 3D 2026, series R25.1, Windows x64, .NET 8;
- использовать реальные Autodesk 2026 managed assemblies;
- managed package загружается локально, не напрямую с UNC;
- Autodesk DLL нельзя коммитить, помещать в package/fixture или публиковать.
Переносится функциональное поведение, а не историческая структура файлов. Не
воспроизводить без отдельного доказательства 20 последовательных `NETLOAD`,
legacy LISP bootstrap, `OrthoLoader.dll`, загрузку с сети или прежние
workaround. Предпочтительная цепочка:
`Launcher Next → versioned local package → один managed entry assembly → internal dependencies → commands and Ribbon`.
## Статус legacy-команд
Ни одна активная команда Plant 3D 2019 не исчезает молча. Для каждой команды
фиксируется ровно один статус: `IMPLEMENTED`, `RUNTIME_VERIFIED`,
`REPLACED_WITH_NATIVE`, `RETIRED_APPROVED` или `BLOCKED_WITH_REASON`.
Aliases сохраняются, пока их удаление не утверждено отдельно.
## Runtime уровни
`Smoke` проверяет assembly load, регистрацию команд, Plant context, Ribbon,
отсутствие необработанных исключений и отсутствие записи в DWG.
`DryRun` проверяет реальные Plant data, Ortho/sheet/view definitions, DataLinks,
Plant objects, детерминированный план и отсутствие записи в DWG/project DB.
`Apply` разрешается только отдельным явным заданием: write guard, ограниченная
DWG transaction, тестовая копия проекта, baseline, rollback/UNDO, duplicate
protection и runtime evidence обязательны. Apply нельзя включать только
локальной конфигурацией.
## Runtime важнее предположений
Build и unit tests не доказывают Autodesk integration. Для
`RUNTIME_VERIFIED` необходимы фактические результаты: команда, module path,
DBMOD, Ribbon, DataLinks, Ortho status, telemetry и состояние файлов после
закрытия. Не выдумывать UI evidence: использовать `null`, `NOT VERIFIED` или
`BLOCKED WITH REASON`.
На тестовой машине реальный Plant 3D запуск разрешён, если он входит в задачу
и есть test branch, локальный fixture, пройденные build/tests, rollback и нет
production deploy. Не создавать искусственный review-gate перед Process.Start.
Остановка допустима лишь после завершения доступной части работы и при
конкретном внешнем blocker: установка, ОС, права, Autodesk runtime, fixture или
необходимость production-данных.
## Test fixtures и отсутствие записи
Fixtures создаются вне Git, например `<TEST_FIXTURE_ROOT>`. Ortho fixture —
настоящий Plant project с Pipe, DataLinks row, line group, Ortho drawing,
Ortho viewport и source-model connection; обычный AutoCAD viewport не годится.
Production DWG/project использовать нельзя без прямого разрешения.
Нельзя коммитить DWG, DCF, Project.xml с runtime-data, project DB, Ortho
generated files или реальные engineering values.
Для Smoke/DryRun проверять DBMOD до/после, SHA-256 содержательных project
files, отсутствие непредусмотренных transactions/DCF/project-metadata writes.
`LastWriteTime` недостаточен. Отделять служебные Plant cache/session files от
содержательных данных.
## Ribbon, механика и evidence
Ribbon — часть продукта: проверять tab, panel, button, command binding, stable
IDs, отсутствие дубликатов при документах/workspace/reinitialization. Команда
может быть отдельно рабочей, но plugin slice не завершён без Ribbon evidence
или отдельного UI defect.
Документировать каждую runtime-цепочку: component/project/class/method,
input/output, Autodesk transaction mode, writes, telemetry, failure code и
rollback action. Документация соответствует фактическому коду.
Evidence содержит только проверенные значения. Не добавлять username, permit,
полный environment, real project paths/line numbers/ObjectId/RowId/properties,
полные logs, local manifest или startup scripts. Путь fixture заменять на
`<TEST_FIXTURE_ROOT>`.
## Warnings и Git
Известный `MSB3277` WindowsBase 4.0.0.0/8.0.0.0 допустим только при полном
совпадении с ранее зафиксированным warning. Новые warnings исследовать; не
подавлять `NoWarn` без причины.
Запрещены force push, amend/rebase опубликованной истории, push binaries,
изменение неизвестного remote и production deployment из test branch. Перед
commit выполнять:
```powershell
git diff --check
git status --short
git diff --cached --check
```
Не смешивать Launcher defect, plugin defect, runtime evidence и unrelated
formatting в одном commit.
## Definition of Done
Срез завершён, когда реализованы код, build/tests, валидный package и требуемый
runtime-сценарий; записаны фактические результаты; выполнен rollback; fixture и
production изолированы; механика документирована; ветка опубликована обычным
push.
-9
View File
@@ -1,9 +0,0 @@
<Project>
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<LangVersion>latest</LangVersion>
</PropertyGroup>
</Project>
-206
View File
@@ -1,206 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocumentAutomation.Shared", "src\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj", "{3D48D7EE-4C18-47A8-9F8F-E296491C0463}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.App", "src\DocxWorkbench.App\DocxWorkbench.App.csproj", "{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.Core", "src\DocxWorkbench.Core\DocxWorkbench.Core.csproj", "{5D7A031E-06AE-4725-89D8-C4EAD75700B1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.OpenXml", "src\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj", "{6560936F-10A6-406E-8957-24E577A3F7EE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.WordInterop", "src\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj", "{3349BB3A-001A-480D-9867-CF7199BDA04B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.App", "src\StandardsWorkbench.App\StandardsWorkbench.App.csproj", "{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Core", "src\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj", "{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Pdf", "src\StandardsWorkbench.Pdf\StandardsWorkbench.Pdf.csproj", "{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Ollama", "src\StandardsWorkbench.Ollama\StandardsWorkbench.Ollama.csproj", "{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocumentAutomation.IntegrationTests", "tests\DocumentAutomation.IntegrationTests\DocumentAutomation.IntegrationTests.csproj", "{6D7ED423-F943-4DF0-8D18-F69C127F3D67}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocxWorkbench.Tests", "tests\DocxWorkbench.Tests\DocxWorkbench.Tests.csproj", "{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StandardsWorkbench.Tests", "tests\StandardsWorkbench.Tests\StandardsWorkbench.Tests.csproj", "{6E533AAB-42E6-4C60-AE06-A89F2B283187}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x64.ActiveCfg = Debug|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x64.Build.0 = Debug|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x86.ActiveCfg = Debug|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Debug|x86.Build.0 = Debug|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|Any CPU.Build.0 = Release|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x64.ActiveCfg = Release|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x64.Build.0 = Release|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x86.ActiveCfg = Release|Any CPU
{3D48D7EE-4C18-47A8-9F8F-E296491C0463}.Release|x86.Build.0 = Release|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x64.ActiveCfg = Debug|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x64.Build.0 = Debug|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Debug|x86.Build.0 = Debug|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|Any CPU.Build.0 = Release|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x64.ActiveCfg = Release|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x64.Build.0 = Release|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x86.ActiveCfg = Release|Any CPU
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5}.Release|x86.Build.0 = Release|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x64.ActiveCfg = Debug|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x64.Build.0 = Debug|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x86.ActiveCfg = Debug|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Debug|x86.Build.0 = Debug|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|Any CPU.Build.0 = Release|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x64.ActiveCfg = Release|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x64.Build.0 = Release|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x86.ActiveCfg = Release|Any CPU
{5D7A031E-06AE-4725-89D8-C4EAD75700B1}.Release|x86.Build.0 = Release|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x64.ActiveCfg = Debug|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x64.Build.0 = Debug|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x86.ActiveCfg = Debug|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Debug|x86.Build.0 = Debug|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|Any CPU.Build.0 = Release|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x64.ActiveCfg = Release|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x64.Build.0 = Release|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x86.ActiveCfg = Release|Any CPU
{6560936F-10A6-406E-8957-24E577A3F7EE}.Release|x86.Build.0 = Release|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x64.ActiveCfg = Debug|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x64.Build.0 = Debug|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x86.ActiveCfg = Debug|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Debug|x86.Build.0 = Debug|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|Any CPU.Build.0 = Release|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x64.ActiveCfg = Release|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x64.Build.0 = Release|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x86.ActiveCfg = Release|Any CPU
{3349BB3A-001A-480D-9867-CF7199BDA04B}.Release|x86.Build.0 = Release|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x64.ActiveCfg = Debug|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x64.Build.0 = Debug|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x86.ActiveCfg = Debug|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Debug|x86.Build.0 = Debug|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|Any CPU.Build.0 = Release|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x64.ActiveCfg = Release|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x64.Build.0 = Release|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x86.ActiveCfg = Release|Any CPU
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5}.Release|x86.Build.0 = Release|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x64.ActiveCfg = Debug|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x64.Build.0 = Debug|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x86.ActiveCfg = Debug|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Debug|x86.Build.0 = Debug|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|Any CPU.Build.0 = Release|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x64.ActiveCfg = Release|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x64.Build.0 = Release|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x86.ActiveCfg = Release|Any CPU
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D}.Release|x86.Build.0 = Release|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x64.ActiveCfg = Debug|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x64.Build.0 = Debug|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x86.ActiveCfg = Debug|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Debug|x86.Build.0 = Debug|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|Any CPU.Build.0 = Release|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x64.ActiveCfg = Release|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x64.Build.0 = Release|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x86.ActiveCfg = Release|Any CPU
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1}.Release|x86.Build.0 = Release|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x64.ActiveCfg = Debug|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x64.Build.0 = Debug|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x86.ActiveCfg = Debug|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Debug|x86.Build.0 = Debug|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|Any CPU.Build.0 = Release|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x64.ActiveCfg = Release|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x64.Build.0 = Release|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x86.ActiveCfg = Release|Any CPU
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9}.Release|x86.Build.0 = Release|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x64.ActiveCfg = Debug|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x64.Build.0 = Debug|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x86.ActiveCfg = Debug|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Debug|x86.Build.0 = Debug|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|Any CPU.Build.0 = Release|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x64.ActiveCfg = Release|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x64.Build.0 = Release|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x86.ActiveCfg = Release|Any CPU
{6D7ED423-F943-4DF0-8D18-F69C127F3D67}.Release|x86.Build.0 = Release|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x64.ActiveCfg = Debug|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x64.Build.0 = Debug|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x86.ActiveCfg = Debug|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Debug|x86.Build.0 = Debug|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|Any CPU.Build.0 = Release|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x64.ActiveCfg = Release|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x64.Build.0 = Release|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x86.ActiveCfg = Release|Any CPU
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE}.Release|x86.Build.0 = Release|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x64.ActiveCfg = Debug|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x64.Build.0 = Debug|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x86.ActiveCfg = Debug|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Debug|x86.Build.0 = Debug|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|Any CPU.Build.0 = Release|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x64.ActiveCfg = Release|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x64.Build.0 = Release|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x86.ActiveCfg = Release|Any CPU
{6E533AAB-42E6-4C60-AE06-A89F2B283187}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{3D48D7EE-4C18-47A8-9F8F-E296491C0463} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{BB7057EA-13F7-4F9E-BC1F-6E4FE0C8C9D5} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{5D7A031E-06AE-4725-89D8-C4EAD75700B1} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{6560936F-10A6-406E-8957-24E577A3F7EE} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{3349BB3A-001A-480D-9867-CF7199BDA04B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{4A79AA2B-7E40-456A-9BBF-D6F8A444EDC5} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{71C7E7B1-1E3E-470B-A942-EFCD58CC692D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{463BCC3A-3836-4DAC-A2A1-B786A9B263F1} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{7EA1410E-03BF-46B3-9C6D-20983C4FA2C9} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{6D7ED423-F943-4DF0-8D18-F69C127F3D67} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{8539CA78-AB1A-499E-9C9C-C0FBBFC7AFAE} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{6E533AAB-42E6-4C60-AE06-A89F2B283187} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
EndGlobalSection
EndGlobal
-15
View File
@@ -1,15 +0,0 @@
# DocumentAutomation
Первый локальный прототип состоит из независимых `DOCX Workbench` и `Standards Workbench` на .NET 8 Windows Forms.
DOCX Workbench анализирует DOCX через Open XML, формирует документ через локальный Microsoft Word COM, сохраняет шаблонные секции/колонтитулы, обновляет поля и экспортирует PDF. Standards Workbench импортирует PDF, сохраняет checksum, извлекает страницы и кандидатные пункты, обращается к Ollama только за предложением candidate-rule и экспортирует переносимый профиль.
## Ограничения MVP
- OCR только обозначен интерфейсом; страницы без текстового слоя получают статус `OCR_REQUIRED`.
- Автоматическое утверждение нормативных правил запрещено.
- Word COM требует установленного Microsoft Word и запускается только интерактивно, не как service.
- Реальный `156-титул-ПД.docx` и нормативные PDF не добавлялись в Git.
- PDF preview использует локальный Word ExportAsFixedFormat.
Подробности: `docs/architecture.md`, `docs/docx-template-contract.md`, `docs/word-com-lifecycle.md`, `docs/standards-rule-model.md`.
-9
View File
@@ -1,9 +0,0 @@
# Architecture
`DocxWorkbench.App` and `StandardsWorkbench.App` are separate WinForms applications. They share only DTOs in `DocumentAutomation.Shared`.
DOCX flow: GUI -> `DocxWorkbench.Core` contracts -> `DocxWorkbench.OpenXml` read-only inspection or `DocxWorkbench.WordInterop` sequential Word COM queue -> DOCX/PDF and technical JSON log.
Standards flow: GUI -> `StandardsWorkbench.Pdf` page/clause extraction and `StandardsWorkbench.Ollama` candidate-only suggestions -> manually approved portable profile -> `StandardsWorkbench.Core.RulesEngine`.
COM is isolated from Core and UI. Standards rules are not hardcoded into document generation.
-9
View File
@@ -1,9 +0,0 @@
# Development
```powershell
dotnet restore .\DocumentAutomation\DocumentAutomation.sln
dotnet build .\DocumentAutomation\DocumentAutomation.sln --configuration Release
dotnet test .\DocumentAutomation\DocumentAutomation.sln --configuration Release
```
Run `DocxWorkbench.App` or `StandardsWorkbench.App` from Visual Studio/VS Code. Microsoft Word is required only for DOCX generation and PDF export. Ollama is configured at `http://192.168.200.112:11434`; the model must be selected from `/api/tags`.
@@ -1,7 +0,0 @@
# DOCX template contract
The preferred insertion point is a Content Control with tag or title `DOC_BODY`, then a bookmark named `DOC_BODY`, then the exact marker `{{DOC_BODY}}`. If none is present, generation fails explicitly; the body is never silently appended.
The template is copied to a temporary working file. Body headers/footers are not imported. Template sections and headers/footers are retained, fields are updated, and Word repaginates before saving.
Before Word starts, the template is checked for the insertion point. If none is found, the build is rejected without starting Word. The GUI routes `.docx` through Open XML and `.txt` through `TextDocumentInspector`; template and body analysis results remain independent.
@@ -1,5 +0,0 @@
# Standards rule model
PDF metadata includes SHA-256, page count, text-layer status and import time. Pages without text are marked `OCR_REQUIRED`; no text is invented. Clause extraction preserves clause number, text, page and confidence.
Ollama receives only a small clause context and may return a candidate JSON rule. Candidates remain `New` until human approval. Only `Approved`, `Implemented` or `Tested` rules are evaluated. Profiles contain manifest, approved rules, references and a signature hash.
@@ -1,14 +0,0 @@
# Learned document templates
DOCX Workbench supports two deterministic workflows:
1. `TemplateLearningService` normalizes a `.doc` or copies a `.docx` into a temporary working directory, inspects it, adds a safe `{{DOC_BODY}}` insertion marker to the working copy, and writes a portable `.dtemplate` ZIP package.
2. `TemplateDocumentGenerator` opens the package, replaces explicitly supplied scalar tokens, imports a `.doc`, `.docx`, or `.txt` body through the existing main-story importer, and creates DOCX, PDF, generation, and validation outputs.
The package contains `manifest.json`, `template.docx`, source metadata, page archetypes, regions, slots, field bindings, mapping suggestions, and a validation profile. It contains no original source binary unless it is the normalized template copy.
All Word automation is late-bound and serialized through the existing STA queue. Binary `.doc` sources are opened read-only, macros are disabled through Word automation security, and the source SHA-256 is checked before and after normalization. The source body’s headers, footers, section properties, and page setup are excluded by `DocxBodyImporter`.
The current UI exposes three modes: template learning, document generation, and the existing quick `DOC_BODY` path. Page archetypes and slot proposals are deterministic suggestions and require later user confirmation; Ollama is not required for the workflow.
Known limitation: the first slice stores the learned structural model and default slots, but does not yet provide a pixel-level page editor or automatic extraction of every scalar field from an arbitrary engineering drawing. Those operations remain explicit user mapping work.
@@ -1,5 +0,0 @@
# Word COM lifecycle
Word is resolved late-bound through `Word.Application`; the Word PIA and `office.dll` are not required at application load time. Each service owns one serial `StaWordQueue`, and every Word job runs on its dedicated STA thread with `Visible=false` and alerts disabled. The service opens a working copy, performs one operation, updates fields, repaginates, saves, closes the Document, quits the Application, and releases owned COM proxies in `finally`.
The prototype does not run as a Windows Service, does not kill unrelated `WINWORD.EXE` processes, and does not execute macros. Integration tests compare process IDs before and after each job and verify that no newly-created Word process remains.
View File
-3
View File
@@ -1,3 +0,0 @@
# Samples
Реальные проектные DOCX/PDF и нормативные документы сюда не добавляются. Тесты создают синтетические документы во временном каталоге. Для локальной проверки укажите входные файлы через GUI.
@@ -1,9 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
@@ -1,171 +0,0 @@
using System.Text.Json.Serialization;
namespace DocumentAutomation.Shared;
public sealed record InspectionWarning
{
public required string Code { get; init; }
public required string Message { get; init; }
public string? Part { get; init; }
public string? Location { get; init; }
public string? MatchedValue { get; init; }
public string? DetectionRule { get; init; }
}
public sealed record DocumentFieldInfo
{
public required string Type { get; init; }
public required string Part { get; init; }
public int? Section { get; init; }
public string? Instruction { get; init; }
}
public sealed record DocumentImageSummary
{
public int RasterImages { get; init; }
public int DrawingObjects { get; init; }
public int VmlShapes { get; init; }
public int ExternalImages { get; init; }
}
public sealed record DocumentStyleInfo
{
public required string StyleId { get; init; }
public string? Name { get; init; }
public string? Type { get; init; }
public bool IsDefault { get; init; }
public string? BasedOn { get; init; }
public string? LinkedStyle { get; init; }
public int UsageCount { get; init; }
}
public sealed record SectionPartAssignment
{
public required int Section { get; init; }
public IReadOnlyList<string> Headers { get; init; } = [];
public IReadOnlyList<string> Footers { get; init; } = [];
public bool LinkToPrevious { get; init; }
}
public sealed record InsertionPointInfo
{
public required string Type { get; init; }
public string? Location { get; init; }
}
public enum SectionBreakPolicy { Remove, ConvertToParagraph, ConvertToPageBreak }
public enum RevisionImportPolicy { PreserveAndWarn, AcceptAll, RejectAll, BlockImport }
public enum CommentImportPolicy { PreserveAndWarn, Exclude, BlockImport }
public enum StyleConflictPolicy { KeepSourceFormatting, UseDestinationStyles, MapKnownStyles }
public sealed record WordOperationProgress
{
public required string Stage { get; init; }
public string? Message { get; init; }
public int? Percent { get; init; }
}
public sealed record BodyImportPlan
{
public required int ParagraphCount { get; init; }
public required int TableCount { get; init; }
public required int InlineShapeCount { get; init; }
public required int FloatingShapeCount { get; init; }
public required int InternalSectionBreakCount { get; init; }
public required int PageBreakCount { get; init; }
public required IReadOnlyList<string> IncludedStories { get; init; }
public required IReadOnlyList<string> ExcludedStories { get; init; }
public required IReadOnlyList<string> Warnings { get; init; }
}
public sealed record DocxBodyImportRequest
{
public required string SourcePath { get; init; }
public required object DestinationRangeHandle { get; init; }
public SectionBreakPolicy SectionBreakPolicy { get; init; } = SectionBreakPolicy.ConvertToPageBreak;
public RevisionImportPolicy RevisionPolicy { get; init; } = RevisionImportPolicy.PreserveAndWarn;
public CommentImportPolicy CommentPolicy { get; init; } = CommentImportPolicy.Exclude;
public StyleConflictPolicy StyleConflictPolicy { get; init; } = StyleConflictPolicy.KeepSourceFormatting;
}
public sealed record BodyImportResult
{
public required BodyImportPlan Plan { get; init; }
public required string InsertionMode { get; init; }
public required IReadOnlyList<string> Warnings { get; init; }
}
public sealed record DocumentInspectionResult
{
public required string FilePath { get; init; }
public long FileSize { get; init; }
public DateTime LastWriteTimeUtc { get; init; }
public int Sections { get; init; }
public int Paragraphs { get; init; }
public int Tables { get; init; }
public int Images { get; init; }
public DocumentImageSummary ImageSummary { get; init; } = new();
public int Headers { get; init; }
public int Footers { get; init; }
public bool HasPageFields { get; init; }
public bool HasNumPagesFields { get; init; }
public bool HasSectionPagesFields { get; init; }
public IReadOnlyList<DocumentFieldInfo> Fields { get; init; } = [];
public int Bookmarks { get; init; }
public int ContentControls { get; init; }
public int Comments { get; init; }
public bool HasTrackedChanges { get; init; }
public bool HasProtectedParts { get; init; }
public IReadOnlyList<DocumentStyleInfo> StyleDetails { get; init; } = [];
public IReadOnlyList<SectionPartAssignment> SectionAssignments { get; init; } = [];
public InsertionPointInfo InsertionPoint { get; init; } = new() { Type = "None" };
public BodyImportPlan? BodyImportPlan { get; init; }
public IReadOnlyList<InspectionWarning> Warnings { get; init; } = [];
public IReadOnlyList<string> Styles => StyleDetails.Select(x => x.StyleId).ToArray();
}
public sealed record WordDocumentBuildRequest
{
public required string TemplatePath { get; init; }
public required string BodyPath { get; init; }
public required string OutputDocxPath { get; init; }
public string? RulesProfilePath { get; init; }
public bool PreserveBodyFormatting { get; init; } = true;
public bool PreservePageBreaks { get; init; } = true;
}
public sealed record WordDocumentResult
{
public required string OutputDocxPath { get; init; }
public string? OutputPdfPath { get; init; }
public required string LogPath { get; init; }
public required TimeSpan Duration { get; init; }
public required string InsertionPoint { get; init; }
public BodyImportResult? BodyImport { get; init; }
}
public sealed record WordPreviewResult
{
public required string PdfPath { get; init; }
public required TimeSpan Duration { get; init; }
}
public enum RuleEvaluationStatus { Pass, Fail, NotApplicable, NeedsReview, Error }
public sealed record RuleEvaluationResult
{
public required string RuleId { get; init; }
public required RuleEvaluationStatus Status { get; init; }
public required string Message { get; init; }
public string? ClauseId { get; init; }
public int? SourcePage { get; init; }
public string? DocumentLocation { get; init; }
public bool CanAutoFix { get; init; }
}
public sealed record OllamaSettings
{
public string BaseUrl { get; init; } = "http://192.168.200.112:11434";
public string Model { get; init; } = "";
public int TimeoutSeconds { get; init; } = 120;
}
@@ -1,153 +0,0 @@
namespace DocumentAutomation.Shared;
public enum TemplateSlotKind { PlainText, RichText, MainBody, Table, RepeatingTableRows, Image, Signature, Date, DocumentField }
public enum TemplateRegionKind { Fixed, Variable, Repeating, Ignored }
public sealed record TemplateSlotOccurrence
{
public required string Location { get; init; }
public int? Page { get; init; }
public string? Story { get; init; }
public string? XPath { get; init; }
}
public sealed record TemplateSlot
{
public required string Id { get; init; }
public required string Name { get; init; }
public required TemplateSlotKind Kind { get; init; }
public required string ContentControlTag { get; init; }
public bool IsRequired { get; init; }
public bool IsRepeating { get; init; }
public string? PageArchetypeId { get; init; }
public string? RepeatGroup { get; init; }
public required IReadOnlyList<TemplateSlotOccurrence> Occurrences { get; init; }
}
public sealed record FixedRegion
{
public required string Id { get; init; }
public required string Name { get; init; }
public required TemplateRegionKind Kind { get; init; }
public required IReadOnlyList<int> Pages { get; init; }
public required string Fingerprint { get; init; }
public string? Story { get; init; }
public string? Location { get; init; }
public double Confidence { get; init; }
}
public sealed record RepeatingRegion
{
public required string Id { get; init; }
public required string Name { get; init; }
public required IReadOnlyList<int> Pages { get; init; }
public required string Fingerprint { get; init; }
public required TemplateRegionKind Kind { get; init; }
public string? Location { get; init; }
}
public sealed record PageArchetype
{
public required string Id { get; init; }
public required string Name { get; init; }
public bool IsFirstPage { get; init; }
public bool IsRepeating { get; init; }
public required IReadOnlyList<int> ExamplePages { get; init; }
public required IReadOnlyList<string> FixedRegionIds { get; init; }
public required IReadOnlyList<string> SlotIds { get; init; }
}
public sealed record TemplateFieldBinding
{
public required string SourceField { get; init; }
public required string TargetSlot { get; init; }
public required string Scope { get; init; }
public string? SourceStyle { get; init; }
public string? TargetStyle { get; init; }
}
public sealed record SourceDocumentStructure
{
public required string SourcePath { get; init; }
public required string Sha256 { get; init; }
public required string NormalizedPath { get; init; }
public required string NormalizedSha256 { get; init; }
public required int PageCount { get; init; }
public required int SectionCount { get; init; }
public required IReadOnlyList<string> Stories { get; init; }
public required IReadOnlyList<string> RepeatedFingerprints { get; init; }
public required DocumentInspectionResult Inspection { get; init; }
}
public sealed record TemplateLearningSuggestion
{
public required string SuggestionType { get; init; }
public required string SourceLocation { get; init; }
public string? TargetSlot { get; init; }
public string? ProposedName { get; init; }
public double Confidence { get; init; }
public required string Reason { get; init; }
public bool RequiresConfirmation { get; init; } = true;
}
public sealed record LearnedTemplate
{
public required string TemplateId { get; init; }
public required string Name { get; init; }
public required string SourceFileName { get; init; }
public required string SourceSha256 { get; init; }
public required string NormalizedSha256 { get; init; }
public required string CreatedAt { get; init; }
public string MinimumEngineVersion { get; init; } = "1.0";
public required SourceDocumentStructure Source { get; init; }
public required IReadOnlyList<PageArchetype> PageArchetypes { get; init; }
public required IReadOnlyList<FixedRegion> FixedRegions { get; init; }
public required IReadOnlyList<RepeatingRegion> RepeatingRegions { get; init; }
public required IReadOnlyList<TemplateSlot> Slots { get; init; }
public required IReadOnlyList<TemplateFieldBinding> FieldBindings { get; init; }
public required IReadOnlyList<TemplateLearningSuggestion> Suggestions { get; init; }
}
public sealed record DocumentNormalizationRequest
{
public required string SourcePath { get; init; }
public required string WorkingDirectory { get; init; }
public bool OpenReadOnly { get; init; } = true;
public bool DisableMacros { get; init; } = true;
}
public sealed record DocumentNormalizationResult
{
public required string SourcePath { get; init; }
public required string NormalizedPath { get; init; }
public required string SourceSha256 { get; init; }
public required string NormalizedSha256 { get; init; }
public required bool WasConverted { get; init; }
public required TimeSpan Duration { get; init; }
public int? PageCount { get; init; }
}
public sealed record TemplateLearningRequest
{
public required string SourcePath { get; init; }
public required string TemplateName { get; init; }
public required string OutputPackagePath { get; init; }
public bool CreateDefaultSlots { get; init; } = true;
}
public sealed record TemplateGenerationRequest
{
public required string TemplatePackagePath { get; init; }
public required string ContentSourcePath { get; init; }
public required string OutputDocxPath { get; init; }
public IReadOnlyDictionary<string, string> ScalarValues { get; init; } = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
public sealed record TemplateGenerationResult
{
public required string OutputDocxPath { get; init; }
public required string OutputPdfPath { get; init; }
public required string GenerationLogPath { get; init; }
public required string ValidationLogPath { get; init; }
public required IReadOnlyList<RuleEvaluationResult> Validation { get; init; }
}
@@ -1,18 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
<ProjectReference Include="..\DocxWorkbench.Core\DocxWorkbench.Core.csproj" />
<ProjectReference Include="..\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj" />
<ProjectReference Include="..\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj" />
</ItemGroup>
</Project>
@@ -1,71 +0,0 @@
using System.Diagnostics;
using System.Text.Json;
using DocumentAutomation.Shared;
using DocxWorkbench.Core;
using DocxWorkbench.OpenXml;
using DocxWorkbench.WordInterop;
namespace DocxWorkbench.App;
public sealed class MainForm : Form
{
private readonly ComboBox _mode = new() { DropDownStyle = ComboBoxStyle.DropDownList, Width = 230 };
private readonly TextBox _template = new() { Width = 560 };
private readonly TextBox _body = new() { Width = 560 };
private readonly TextBox _package = new() { Width = 560 };
private readonly TextBox _templateName = new() { Width = 560, Text = "Learned document template" };
private readonly TextBox _output = new() { Width = 560 };
private readonly RichTextBox _structure = new() { Dock = DockStyle.Fill, ReadOnly = true };
private readonly RichTextBox _preview = new() { Dock = DockStyle.Fill, ReadOnly = true };
private readonly TextBox _log = new() { Multiline = true, ScrollBars = ScrollBars.Vertical, Dock = DockStyle.Fill, ReadOnly = true };
private readonly TextBox _technicalError = new() { Multiline = true, ScrollBars = ScrollBars.Vertical, Dock = DockStyle.Fill, ReadOnly = true };
private readonly Label _status = new() { AutoSize = true, Text = "Ready" };
private readonly Button _analyze; private readonly Button _learn; private readonly Button _generate; private readonly Button _build; private readonly Button _validate; private readonly Button _openDocx; private readonly Button _openPdf;
private readonly WorkbenchStateController _state = new();
private readonly IDocumentInspector _docx = new OpenXmlDocumentInspector(); private readonly IDocumentInspector _txt = new TextDocumentInspector(); private readonly IWordDocumentService _word = new WordDocumentService();
private DocumentInspectionResult? _templateResult; private DocumentInspectionResult? _bodyResult; private string? _builtDocx; private string? _builtPdf;
public MainForm()
{
Text = "DOCX Workbench"; Width = 1200; Height = 780; StartPosition = FormStartPosition.CenterScreen;
_mode.Items.AddRange(["Template learning", "Document generation", "Quick DOC_BODY"]); _mode.SelectedIndex = 2; _mode.SelectedIndexChanged += (_, _) => RefreshButtons();
var grid = new TableLayoutPanel { Dock = DockStyle.Top, Height = 245, ColumnCount = 3, RowCount = 7, Padding = new Padding(8) }; grid.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 155)); grid.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100)); grid.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 110));
AddControlRow(grid, 0, "Mode", _mode, null); AddControlRow(grid, 1, "Template DOC/DOCX", _template, BrowseTemplate); AddControlRow(grid, 2, "Template name", _templateName, null); AddControlRow(grid, 3, "Content DOC/DOCX/TXT", _body, BrowseBody); AddControlRow(grid, 4, "Package .dtemplate", _package, BrowsePackage); AddControlRow(grid, 5, "Output DOCX", _output, BrowseOutput);
var buttons = new FlowLayoutPanel { Dock = DockStyle.Fill }; _analyze = Button("Analyze", async (_, _) => await AnalyzeAsync()); _learn = Button("Learn template", async (_, _) => await LearnAsync()); _generate = Button("Generate", async (_, _) => await GenerateAsync()); _build = Button("Quick build", async (_, _) => await QuickBuildAsync()); _validate = Button("Validate", async (_, _) => await ValidateAsync()); _openDocx = Button("Open DOCX", (_, _) => Open(_builtDocx)); _openPdf = Button("Open PDF", (_, _) => Open(_builtPdf)); buttons.Controls.AddRange([_analyze, _learn, _generate, _build, _validate, _openDocx, _openPdf]); grid.Controls.Add(buttons, 1, 6); grid.SetColumnSpan(buttons, 2);
var tabs = new TabControl { Dock = DockStyle.Fill }; AddTab(tabs, "Structure", _structure); AddTab(tabs, "Preview", _preview); AddTab(tabs, "Log", _log); AddTab(tabs, "Technical error", _technicalError); Controls.Add(tabs); Controls.Add(grid); _status.Dock = DockStyle.Bottom; Controls.Add(_status); foreach (var box in new[] { _template, _body, _package, _output }) box.TextChanged += (_, _) => InputsChanged(); FormClosed += (_, _) => (_word as IDisposable)?.Dispose(); RefreshButtons();
}
private static void AddTab(TabControl tabs, string title, Control content) { var tab = new TabPage(title); tab.Controls.Add(content); tabs.TabPages.Add(tab); }
private static void AddControlRow(TableLayoutPanel panel, int row, string title, Control control, EventHandler? browse) { panel.Controls.Add(new Label { Text = title, AutoSize = true, Anchor = AnchorStyles.Left }, 0, row); panel.Controls.Add(control, 1, row); if (browse is not null) { var button = new Button { Text = "Browse...", Width = 95 }; button.Click += browse; panel.Controls.Add(button, 2, row); } }
private static Button Button(string text, EventHandler handler) { var button = new Button { Text = text, AutoSize = true }; button.Click += handler; return button; }
private void BrowseTemplate(object? sender, EventArgs e) { using var dialog = new OpenFileDialog { Filter = "Word document|*.doc;*.docx" }; if (dialog.ShowDialog() == DialogResult.OK) _template.Text = dialog.FileName; }
private void BrowseBody(object? sender, EventArgs e) { using var dialog = new OpenFileDialog { Filter = "Word or text|*.doc;*.docx;*.txt" }; if (dialog.ShowDialog() == DialogResult.OK) _body.Text = dialog.FileName; }
private void BrowsePackage(object? sender, EventArgs e) { using var dialog = new OpenFileDialog { Filter = "Learned template|*.dtemplate" }; if (dialog.ShowDialog() == DialogResult.OK) _package.Text = dialog.FileName; }
private void BrowseOutput(object? sender, EventArgs e) { using var dialog = new SaveFileDialog { Filter = "DOCX|*.docx", DefaultExt = "docx" }; if (dialog.ShowDialog() == DialogResult.OK) _output.Text = dialog.FileName; }
private async Task LearnAsync()
{
try { _status.Text = "Learning template..."; using var normalizer = new WordDocumentNormalizer(); var service = new TemplateLearningService(normalizer, new TemplatePackageStore(), _docx); var learned = await service.LearnAsync(new TemplateLearningRequest { SourcePath = _template.Text, TemplateName = _templateName.Text, OutputPackagePath = _package.Text }, null, CancellationToken.None); _structure.Text = JsonSerializer.Serialize(learned, new JsonSerializerOptions { WriteIndented = true }); AppendLog($"Template package created: {_package.Text}"); _status.Text = "Template learned"; } catch (Exception ex) { ShowError(ex, "Template learning failed"); }
}
private async Task GenerateAsync()
{
try { _status.Text = "Generating..."; using var normalizer = new WordDocumentNormalizer(); using var generator = new TemplateDocumentGenerator(new TemplatePackageStore(), normalizer, _docx); var result = await generator.GenerateAsync(new TemplateGenerationRequest { TemplatePackagePath = _package.Text, ContentSourcePath = _body.Text, OutputDocxPath = _output.Text }, null, CancellationToken.None); _builtDocx = result.OutputDocxPath; _builtPdf = result.OutputPdfPath; _preview.Text = JsonSerializer.Serialize(result.Validation, new JsonSerializerOptions { WriteIndented = true }); AppendLog(JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true })); _status.Text = "Generation succeeded"; } catch (Exception ex) { ShowError(ex, "Generation failed"); }
}
private async Task AnalyzeAsync()
{
_status.Text = "Analyzing..."; var template = await InspectPathAsync(_template.Text); var body = await InspectPathAsync(_body.Text); _templateResult = template.Result; _bodyResult = body.Result; if (_templateResult is not null) ShowStructure(_templateResult); if (_bodyResult is not null) _preview.Text = _body.Text.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) ? File.ReadAllText(_body.Text) : JsonSerializer.Serialize(_bodyResult, new JsonSerializerOptions { WriteIndented = true }); LogInspection("Template", template); LogInspection("Body", body); _state.InputsSelected(template.Result is not null && body.Result is not null); _state.AnalysisCompleted(template.Result is not null, body.Result is not null, template.Result?.InsertionPoint.Type != "None"); _status.Text = _state.State == WorkbenchState.ReadyToBuild ? "Ready" : "Analysis completed with warnings"; RefreshButtons();
}
private Task<(DocumentInspectionResult? Result, Exception? Error, string Inspector)> InspectPathAsync(string path) => Task.Run(() => { try { if (path.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) return (_docx.Inspect(path), (Exception?)null, "OpenXmlDocumentInspector"); if (path.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) return (_txt.Inspect(path), (Exception?)null, "TextDocumentInspector"); throw new UnsupportedDocumentFormatException($"Unsupported format {Path.GetExtension(path)}. Use DOC/DOCX/TXT or normalize DOC first."); } catch (Exception ex) { return ((DocumentInspectionResult?)null, ex, "format-router"); } });
private async Task QuickBuildAsync() { if (!_state.CanBuild) { await AnalyzeAsync(); if (!_state.CanBuild) return; } _state.BeginBuild(); RefreshButtons(); try { var result = await _word.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = _template.Text, BodyPath = _body.Text, OutputDocxPath = _output.Text }, null, CancellationToken.None); var pdf = await _word.ExportPdfAsync(result.OutputDocxPath, Path.ChangeExtension(result.OutputDocxPath, ".pdf"), CancellationToken.None); _builtDocx = result.OutputDocxPath; _builtPdf = pdf.PdfPath; _state.BuildSucceeded(); AppendLog(JsonSerializer.Serialize(new { result, pdf }, new JsonSerializerOptions { WriteIndented = true })); _status.Text = "Quick build succeeded"; } catch (Exception ex) { _state.BuildFailed(); ShowError(ex, "Build failed"); } finally { RefreshButtons(); } }
private async Task ValidateAsync() { if (!_state.CanValidate || _builtDocx is null || !File.Exists(_builtDocx)) return; try { var result = await Task.Run(() => _docx.Inspect(_builtDocx)); AppendLog(JsonSerializer.Serialize(new { label = "Output", result }, new JsonSerializerOptions { WriteIndented = true })); _status.Text = "Validation succeeded"; } catch (Exception ex) { ShowError(ex, "Validation failed"); } }
private void ShowStructure(DocumentInspectionResult result) => _structure.Text = JsonSerializer.Serialize(new { result.FilePath, result.Sections, result.Paragraphs, result.Tables, result.Headers, result.Footers, result.Fields, result.ImageSummary, result.SectionAssignments, result.StyleDetails, result.Warnings }, new JsonSerializerOptions { WriteIndented = true });
private void LogInspection(string label, (DocumentInspectionResult? Result, Exception? Error, string Inspector) value) { AppendLog(JsonSerializer.Serialize(new { label, inspector = value.Inspector, result = value.Result, error = value.Error?.Message }, new JsonSerializerOptions { WriteIndented = true })); if (value.Error is not null) _technicalError.Text = value.Error.Message; }
private void InputsChanged() { _builtDocx = null; _builtPdf = null; RefreshButtons(); }
private void RefreshButtons() { var mode = _mode.SelectedIndex; var templateSupported = _template.Text.EndsWith(".doc", StringComparison.OrdinalIgnoreCase) || _template.Text.EndsWith(".docx", StringComparison.OrdinalIgnoreCase); _analyze.Enabled = mode != 1 && File.Exists(_template.Text) && File.Exists(_body.Text); _learn.Enabled = mode == 0 && templateSupported && File.Exists(_template.Text) && !string.IsNullOrWhiteSpace(_package.Text); _generate.Enabled = mode == 1 && File.Exists(_package.Text) && File.Exists(_body.Text) && !string.IsNullOrWhiteSpace(_output.Text); _build.Enabled = mode == 2 && _state.CanBuild; _validate.Enabled = _state.CanValidate && _builtDocx is not null && File.Exists(_builtDocx); _openDocx.Enabled = _builtDocx is not null && File.Exists(_builtDocx); _openPdf.Enabled = _builtPdf is not null && File.Exists(_builtPdf); }
private void ShowError(Exception ex, string title) { _technicalError.Text = ex.ToString(); AppendLog(title + ": " + ex.Message); _status.Text = title; MessageBox.Show(ex.Message, title, MessageBoxButtons.OK, MessageBoxIcon.Error); }
private void AppendLog(string text) => _log.AppendText(text + Environment.NewLine);
private static void Open(string? path) { if (!string.IsNullOrWhiteSpace(path) && File.Exists(path)) Process.Start(new ProcessStartInfo(path) { UseShellExecute = true }); }
}
@@ -1,16 +0,0 @@
namespace DocxWorkbench.App;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new MainForm());
}
}
@@ -1,73 +0,0 @@
using DocumentAutomation.Shared;
namespace DocxWorkbench.Core;
public interface IDocumentInspector
{
DocumentInspectionResult Inspect(string docxPath);
}
public sealed class UnsupportedDocumentFormatException(string message) : InvalidOperationException(message);
public enum WorkbenchState { Empty, InputsSelected, Analyzed, ReadyToBuild, Building, BuildSucceeded, BuildFailed, Validating, ValidationSucceeded, ValidationFailed }
public sealed class WorkbenchStateController
{
public WorkbenchState State { get; private set; } = WorkbenchState.Empty;
public bool CanBuild => State == WorkbenchState.ReadyToBuild;
public bool CanValidate => State == WorkbenchState.BuildSucceeded;
public bool CanOpenDocx { get; private set; }
public bool CanOpenPdf { get; private set; }
public void InputsSelected(bool selected) { State = selected ? WorkbenchState.InputsSelected : WorkbenchState.Empty; if (!selected) ClearArtifacts(); }
public void AnalysisCompleted(bool templateOk, bool bodyOk, bool insertionPointFound) { State = templateOk && bodyOk && insertionPointFound ? WorkbenchState.ReadyToBuild : WorkbenchState.Analyzed; ClearArtifacts(); }
public void BeginBuild() { if (!CanBuild) throw new InvalidOperationException("Build is unavailable in the current state."); State = WorkbenchState.Building; ClearArtifacts(); }
public void BuildSucceeded() { State = WorkbenchState.BuildSucceeded; CanOpenDocx = true; CanOpenPdf = true; }
public void BuildFailed() { State = WorkbenchState.BuildFailed; ClearArtifacts(); }
public void BeginValidation() { if (!CanValidate) throw new InvalidOperationException("Validation is available only after a successful build."); State = WorkbenchState.Validating; }
public void ValidationCompleted(bool success) => State = success ? WorkbenchState.ValidationSucceeded : WorkbenchState.ValidationFailed;
private void ClearArtifacts() { CanOpenDocx = false; CanOpenPdf = false; }
}
public interface IWordDocumentService
{
Task<WordDocumentResult> BuildDocumentAsync(WordDocumentBuildRequest request, IProgress<string>? progress, CancellationToken cancellationToken);
Task<WordPreviewResult> ExportPdfAsync(string docxPath, string outputPdfPath, CancellationToken cancellationToken);
}
public interface IDocxBodyImporter
{
Task<BodyImportResult> ImportAsync(DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
}
public interface IWordDocumentNormalizer
{
Task<DocumentNormalizationResult> NormalizeAsync(DocumentNormalizationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
}
public interface ITemplateLearningService
{
Task<LearnedTemplate> LearnAsync(TemplateLearningRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
}
public interface ITemplatePackageStore
{
void Save(string packagePath, LearnedTemplate template, string normalizedDocxPath);
(LearnedTemplate Template, string TemplateDocxPath, string WorkingDirectory) Open(string packagePath);
}
public interface ITemplateDocumentGenerator
{
Task<TemplateGenerationResult> GenerateAsync(TemplateGenerationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken);
}
public static class DocumentInputValidation
{
public static void Validate(WordDocumentBuildRequest request)
{
if (!File.Exists(request.TemplatePath)) throw new FileNotFoundException("Шаблон DOCX не найден.", request.TemplatePath);
if (!File.Exists(request.BodyPath)) throw new FileNotFoundException("Файл тела документа не найден.", request.BodyPath);
if (!request.TemplatePath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) throw new ArgumentException("Шаблон должен быть DOCX.");
if (Path.GetFullPath(request.TemplatePath).Equals(Path.GetFullPath(request.OutputDocxPath), StringComparison.OrdinalIgnoreCase)) throw new InvalidOperationException("Нельзя перезаписывать исходный шаблон.");
Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(request.OutputDocxPath))!);
}
}
@@ -1,13 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
</ItemGroup>
</Project>
@@ -1,77 +0,0 @@
using System.Text.RegularExpressions;
using DocumentAutomation.Shared;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocxWorkbench.Core;
namespace DocxWorkbench.OpenXml;
public sealed class OpenXmlDocumentInspector : IDocumentInspector
{
private static readonly string[] KnownFields = ["PAGE", "NUMPAGES", "SECTIONPAGES", "FILENAME"];
public DocumentInspectionResult Inspect(string docxPath)
{
if (!File.Exists(docxPath)) throw new FileNotFoundException("DOCX was not found.", docxPath);
if (!docxPath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException($"Open XML inspector accepts DOCX only, received {Path.GetExtension(docxPath)}.");
var info = new FileInfo(docxPath); using var package = WordprocessingDocument.Open(docxPath, false); var main = package.MainDocumentPart ?? throw new InvalidDataException("The DOCX has no main document part."); var roots = GetRoots(main); var fields = roots.SelectMany(x => FindFields(x.Root, x.Part, x.Section)).ToArray(); var images = CountImages(main, roots);
return new DocumentInspectionResult
{
FilePath = docxPath, FileSize = info.Length, LastWriteTimeUtc = info.LastWriteTimeUtc, Sections = Math.Max(1, main.Document.Descendants<SectionProperties>().Count()), Paragraphs = main.Document.Descendants<Paragraph>().Count(), Tables = main.Document.Descendants<Table>().Count(), Images = images.RasterImages, ImageSummary = images,
Headers = main.HeaderParts.Count(), Footers = main.FooterParts.Count(), HasPageFields = fields.Any(x => x.Type == "PAGE"), HasNumPagesFields = fields.Any(x => x.Type == "NUMPAGES"), HasSectionPagesFields = fields.Any(x => x.Type == "SECTIONPAGES"), Fields = fields,
Bookmarks = main.Document.Descendants<BookmarkStart>().Count(), ContentControls = main.Document.Descendants<SdtElement>().Count(), Comments = main.GetPartsOfType<WordprocessingCommentsPart>().Count(), HasTrackedChanges = main.Document.Descendants<Inserted>().Any() || main.Document.Descendants<Deleted>().Any(), HasProtectedParts = main.Document.Descendants<DocumentProtection>().Any(),
StyleDetails = GetStyles(main), SectionAssignments = GetSectionAssignments(main), InsertionPoint = FindInsertionPoint(main.Document), BodyImportPlan = CreateBodyImportPlan(main), Warnings = FindWarnings(roots)
};
}
private static IReadOnlyList<(OpenXmlPartRootElement Root, string Part, int? Section)> GetRoots(MainDocumentPart main)
{
var roots = new List<(OpenXmlPartRootElement, string, int?)> { (main.Document, "MainDocumentPart", null) }; roots.AddRange(main.HeaderParts.Select((p, i) => ((OpenXmlPartRootElement)p.Header, $"HeaderPart[{i + 1}]", (int?)null))); roots.AddRange(main.FooterParts.Select((p, i) => ((OpenXmlPartRootElement)p.Footer, $"FooterPart[{i + 1}]", (int?)null))); if (main.DocumentSettingsPart?.Settings is not null) roots.Add((main.DocumentSettingsPart.Settings, "SettingsPart", null)); if (main.FootnotesPart?.Footnotes is not null) roots.Add((main.FootnotesPart.Footnotes, "FootnotesPart", null)); if (main.EndnotesPart?.Endnotes is not null) roots.Add((main.EndnotesPart.Endnotes, "EndnotesPart", null)); foreach (var comments in main.GetPartsOfType<WordprocessingCommentsPart>()) if (comments.Comments is not null) roots.Add((comments.Comments, "CommentsPart", null)); return roots;
}
private static IEnumerable<DocumentFieldInfo> FindFields(OpenXmlElement root, string part, int? section)
{
foreach (var simple in root.Descendants<SimpleField>()) { var type = NormalizeField(simple.Instruction?.Value); if (type is not null) yield return new DocumentFieldInfo { Type = type, Part = part, Section = section, Instruction = simple.Instruction?.Value }; }
var active = new List<string>(); foreach (var element in root.Descendants()) { if (element is FieldChar begin && begin.FieldCharType?.Value == FieldCharValues.Begin) active.Add(""); else if (element is FieldCode code && active.Count > 0) active[^1] += " " + code.Text; else if (element is FieldChar end && end.FieldCharType?.Value == FieldCharValues.End && active.Count > 0) { var raw = active[^1]; active.RemoveAt(active.Count - 1); var type = NormalizeField(raw); if (type is not null) yield return new DocumentFieldInfo { Type = type, Part = part, Section = section, Instruction = raw.Trim() }; } }
}
private static string? NormalizeField(string? value) { if (string.IsNullOrWhiteSpace(value)) return null; var normalized = Regex.Replace(value, @"\s+", " ").Trim(); var name = Regex.Match(normalized, @"(?i)^(PAGE|NUMPAGES|SECTIONPAGES|FILENAME)\b").Value.ToUpperInvariant(); return KnownFields.Contains(name) ? name : null; }
private static DocumentImageSummary CountImages(MainDocumentPart main, IReadOnlyList<(OpenXmlPartRootElement Root, string Part, int? Section)> roots)
{
var imageParts = new HashSet<OpenXmlPart>(); var drawings = roots.Sum(x => x.Root.Descendants<Drawing>().Count()); var shapes = roots.Sum(x => x.Root.Descendants<DocumentFormat.OpenXml.Vml.Shape>().Count()); var external = 0;
foreach (var image in main.GetPartsOfType<ImagePart>()) imageParts.Add(image); foreach (var header in main.HeaderParts) { foreach (var image in header.GetPartsOfType<ImagePart>()) imageParts.Add(image); external += header.ExternalRelationships.Count(x => x.Uri?.ToString().Contains("image", StringComparison.OrdinalIgnoreCase) == true); } foreach (var footer in main.FooterParts) { foreach (var image in footer.GetPartsOfType<ImagePart>()) imageParts.Add(image); external += footer.ExternalRelationships.Count(x => x.Uri?.ToString().Contains("image", StringComparison.OrdinalIgnoreCase) == true); }
external += main.ExternalRelationships.Count(x => x.Uri?.ToString().Contains("image", StringComparison.OrdinalIgnoreCase) == true); return new DocumentImageSummary { RasterImages = imageParts.Count, DrawingObjects = drawings, VmlShapes = shapes, ExternalImages = external };
}
private static IReadOnlyList<DocumentStyleInfo> GetStyles(MainDocumentPart main)
{
var usage = main.Document.Descendants<ParagraphStyleId>().GroupBy(x => x.Val?.Value ?? "").ToDictionary(x => x.Key, x => x.Count()); return main.StyleDefinitionsPart?.Styles?.Elements<Style>().Select(style => new DocumentStyleInfo { StyleId = style.StyleId?.Value ?? "", Name = style.StyleName?.Val?.Value, Type = style.Type is null ? null : style.Type.Value.ToString(), IsDefault = style.Default?.Value == true, BasedOn = style.BasedOn?.Val?.Value, UsageCount = usage.GetValueOrDefault(style.StyleId?.Value ?? "") }).Where(x => x.StyleId.Length > 0).ToArray() ?? [];
}
private static IReadOnlyList<SectionPartAssignment> GetSectionAssignments(MainDocumentPart main)
{
var result = new List<SectionPartAssignment>(); var sections = main.Document.Body?.Elements<SectionProperties>().ToArray() ?? []; for (var i = 0; i < sections.Length; i++) { var section = sections[i]; var headers = section.Elements<HeaderReference>().Select(x => $"{x.Type?.Value}:{PartName(main, x.Id?.Value)}").ToArray(); var footers = section.Elements<FooterReference>().Select(x => $"{x.Type?.Value}:{PartName(main, x.Id?.Value)}").ToArray(); result.Add(new SectionPartAssignment { Section = i + 1, Headers = headers, Footers = footers, LinkToPrevious = i > 0 && headers.Length == 0 && footers.Length == 0 }); } return result;
}
private static string PartName(MainDocumentPart main, string? id) { if (id is null) return "missing"; try { return main.GetPartById(id).Uri.ToString(); } catch { return "unresolved:" + id; } }
private static InsertionPointInfo FindInsertionPoint(Document root) { if (root.Descendants<SdtElement>().Any(x => string.Equals(x.SdtProperties?.GetFirstChild<Tag>()?.Val?.Value, "DOC_BODY", StringComparison.OrdinalIgnoreCase))) return new InsertionPointInfo { Type = "ContentControl", Location = "MainDocumentPart" }; if (root.Descendants<BookmarkStart>().Any(x => string.Equals(x.Name?.Value, "DOC_BODY", StringComparison.OrdinalIgnoreCase))) return new InsertionPointInfo { Type = "Bookmark", Location = "MainDocumentPart" }; if (root.InnerText.Contains("{{DOC_BODY}}", StringComparison.Ordinal)) return new InsertionPointInfo { Type = "TextMarker", Location = "MainDocumentPart" }; return new InsertionPointInfo { Type = "None" }; }
private static IReadOnlyList<InspectionWarning> FindWarnings(IReadOnlyList<(OpenXmlPartRootElement Root, string Part, int? Section)> roots) { var result = new List<InspectionWarning>(); foreach (var root in roots) foreach (Match match in Regex.Matches(root.Root.InnerText, @"(?i)\b(2019|legacy|старый)\b")) result.Add(new InspectionWarning { Code = "PossibleLegacyProjectData", Message = "A value matched the legacy-project heuristic.", Part = root.Part, Location = "text", MatchedValue = match.Value, DetectionRule = "word-boundary: 2019|legacy|старый" }); return result; }
private static BodyImportPlan CreateBodyImportPlan(MainDocumentPart main)
{
var body = main.Document.Body; if (body is null) return new BodyImportPlan { ParagraphCount = 0, TableCount = 0, InlineShapeCount = 0, FloatingShapeCount = 0, InternalSectionBreakCount = 0, PageBreakCount = 0, IncludedStories = ["wdMainTextStory"], ExcludedStories = ["wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFirstPageFooterStory", "wdEvenPagesFooterStory"], Warnings = [] };
var drawings = body.Descendants<Drawing>(); return new BodyImportPlan { ParagraphCount = body.Descendants<Paragraph>().Count(), TableCount = body.Descendants<Table>().Count(), InlineShapeCount = drawings.Count(x => x.Ancestors<DocumentFormat.OpenXml.Drawing.Wordprocessing.Inline>().Any()), FloatingShapeCount = drawings.Count(x => x.Ancestors<DocumentFormat.OpenXml.Drawing.Wordprocessing.Anchor>().Any()), InternalSectionBreakCount = Math.Max(0, body.Descendants<SectionProperties>().Count() - 1), PageBreakCount = body.Descendants<Break>().Count(x => x.Type?.Value == BreakValues.Page), IncludedStories = ["wdMainTextStory"], ExcludedStories = ["wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFirstPageFooterStory", "wdEvenPagesFooterStory"], Warnings = ["Source headers, footers, page setup and final section properties are excluded."] };
}
}
public sealed class TextDocumentInspector : IDocumentInspector
{
public DocumentInspectionResult Inspect(string path) { if (!File.Exists(path)) throw new FileNotFoundException("TXT was not found.", path); if (!path.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException($"TXT inspector accepts TXT only, received {Path.GetExtension(path)}."); var info = new FileInfo(path); return new DocumentInspectionResult { FilePath = path, FileSize = info.Length, LastWriteTimeUtc = info.LastWriteTimeUtc, Sections = 1, Paragraphs = File.ReadAllLines(path).Length, InsertionPoint = new InsertionPointInfo { Type = "None" } }; }
}
public sealed class DocumentInspector : IDocumentInspector
{
private readonly OpenXmlDocumentInspector _inner = new();
public DocumentInspectionResult Inspect(string docxPath) => _inner.Inspect(docxPath);
}
@@ -1,15 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
<ProjectReference Include="..\DocxWorkbench.Core\DocxWorkbench.Core.csproj" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
</ItemGroup>
</Project>
@@ -1,73 +0,0 @@
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text.Json;
using DocumentAutomation.Shared;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocxWorkbench.Core;
namespace DocxWorkbench.OpenXml;
public sealed class TemplatePackageStore : ITemplatePackageStore
{
private static readonly JsonSerializerOptions JsonOptions = new() { WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
public void Save(string packagePath, LearnedTemplate template, string normalizedDocxPath)
{
Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(packagePath))!);
if (File.Exists(packagePath)) File.Delete(packagePath);
using var archive = ZipFile.Open(packagePath, ZipArchiveMode.Create);
WriteJson(archive, "manifest.json", new { schemaVersion = "1.0", templateId = template.TemplateId, name = template.Name, sourceFileName = template.SourceFileName, sourceSha256 = template.SourceSha256, normalizedSha256 = template.NormalizedSha256, createdAt = template.CreatedAt, minimumEngineVersion = template.MinimumEngineVersion });
WriteJson(archive, "source-metadata.json", template.Source);
WriteJson(archive, "page-archetypes.json", template.PageArchetypes);
WriteJson(archive, "fixed-regions.json", template.FixedRegions.Concat(template.RepeatingRegions.Select(x => new FixedRegion { Id = x.Id, Name = x.Name, Kind = x.Kind, Pages = x.Pages, Fingerprint = x.Fingerprint, Location = x.Location })).ToArray());
WriteJson(archive, "slots.json", template.Slots);
WriteJson(archive, "field-bindings.json", template.FieldBindings);
WriteJson(archive, "mapping-rules.json", template.Suggestions);
WriteJson(archive, "validation-profile.json", new { schemaVersion = "1.0", requiredSlots = template.Slots.Where(x => x.IsRequired).Select(x => x.ContentControlTag).ToArray(), allowTrackedChanges = false, allowExternalLinks = false });
var entry = archive.CreateEntry("template.docx", CompressionLevel.Optimal); using var input = File.OpenRead(normalizedDocxPath); using var output = entry.Open(); input.CopyTo(output);
}
public (LearnedTemplate Template, string TemplateDocxPath, string WorkingDirectory) Open(string packagePath)
{
if (!File.Exists(packagePath)) throw new FileNotFoundException("Template package was not found.", packagePath);
var work = Path.Combine(Path.GetTempPath(), "DocumentAutomation", "template-" + Guid.NewGuid().ToString("N")); Directory.CreateDirectory(work); ZipFile.ExtractToDirectory(packagePath, work);
var manifest = ReadJson<Manifest>(Path.Combine(work, "manifest.json")); if (manifest.SchemaVersion != "1.0") throw new InvalidDataException($"Unsupported template schema: {manifest.SchemaVersion}");
var template = new LearnedTemplate { TemplateId = manifest.TemplateId, Name = manifest.Name, SourceFileName = manifest.SourceFileName, SourceSha256 = manifest.SourceSha256, NormalizedSha256 = manifest.NormalizedSha256, CreatedAt = manifest.CreatedAt, MinimumEngineVersion = manifest.MinimumEngineVersion, Source = ReadJson<SourceDocumentStructure>(Path.Combine(work, "source-metadata.json")), PageArchetypes = ReadJson<List<PageArchetype>>(Path.Combine(work, "page-archetypes.json")), FixedRegions = ReadJson<List<FixedRegion>>(Path.Combine(work, "fixed-regions.json")).Where(x => x.Kind != TemplateRegionKind.Repeating).ToArray(), RepeatingRegions = ReadJson<List<FixedRegion>>(Path.Combine(work, "fixed-regions.json")).Where(x => x.Kind == TemplateRegionKind.Repeating).Select(x => new RepeatingRegion { Id = x.Id, Name = x.Name, Pages = x.Pages, Fingerprint = x.Fingerprint, Kind = x.Kind, Location = x.Location }).ToArray(), Slots = ReadJson<List<TemplateSlot>>(Path.Combine(work, "slots.json")), FieldBindings = ReadJson<List<TemplateFieldBinding>>(Path.Combine(work, "field-bindings.json")), Suggestions = ReadJson<List<TemplateLearningSuggestion>>(Path.Combine(work, "mapping-rules.json")) };
var docx = Path.Combine(work, "template.docx"); if (!File.Exists(docx)) throw new InvalidDataException("Template package does not contain template.docx."); return (template, docx, work);
}
private static void WriteJson<T>(ZipArchive archive, string name, T value) { var entry = archive.CreateEntry(name, CompressionLevel.Optimal); using var writer = new StreamWriter(entry.Open()); writer.Write(JsonSerializer.Serialize(value, JsonOptions)); }
private static T ReadJson<T>(string path) => JsonSerializer.Deserialize<T>(File.ReadAllText(path), JsonOptions) ?? throw new InvalidDataException($"Invalid template package entry: {Path.GetFileName(path)}");
private sealed record Manifest(string SchemaVersion, string TemplateId, string Name, string SourceFileName, string SourceSha256, string NormalizedSha256, string CreatedAt, string MinimumEngineVersion);
}
public sealed class TemplateLearningService : ITemplateLearningService
{
private readonly IWordDocumentNormalizer _normalizer;
private readonly ITemplatePackageStore _packages;
private readonly IDocumentInspector _inspector;
public TemplateLearningService(IWordDocumentNormalizer normalizer, ITemplatePackageStore packages, IDocumentInspector? inspector = null) { _normalizer = normalizer; _packages = packages; _inspector = inspector ?? new OpenXmlDocumentInspector(); }
public async Task<LearnedTemplate> LearnAsync(TemplateLearningRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
{
if (!File.Exists(request.SourcePath)) throw new FileNotFoundException("Template source was not found.", request.SourcePath);
var normalized = await _normalizer.NormalizeAsync(new DocumentNormalizationRequest { SourcePath = request.SourcePath, WorkingDirectory = Path.Combine(Path.GetTempPath(), "DocumentAutomation", "learning-" + Guid.NewGuid().ToString("N")) }, progress, cancellationToken);
try
{
progress?.Report(new WordOperationProgress { Stage = "AnalyzeTemplate", Message = "Inspecting normalized template" });
EnsureBodyMarker(normalized.NormalizedPath); var normalizedHash = Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(normalized.NormalizedPath))); var inspection = _inspector.Inspect(normalized.NormalizedPath) with { FilePath = "template.docx" }; var pages = Math.Max(1, normalized.PageCount ?? inspection.Sections); var archetypes = CreateArchetypes(pages, inspection); var repeated = FindRepeatedRegions(inspection); var slots = request.CreateDefaultSlots ? DefaultSlots() : [];
var source = new SourceDocumentStructure { SourcePath = Path.GetFileName(request.SourcePath), Sha256 = normalized.SourceSha256, NormalizedPath = "template.docx", NormalizedSha256 = normalizedHash, PageCount = pages, SectionCount = inspection.Sections, Stories = ["wdMainTextStory", "wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFootnotesStory", "wdEndnotesStory", "wdCommentsStory", "wdTextFrameStory"], RepeatedFingerprints = repeated.Select(x => x.Fingerprint).ToArray(), Inspection = inspection };
var learned = new LearnedTemplate { TemplateId = Guid.NewGuid().ToString("D"), Name = request.TemplateName, SourceFileName = Path.GetFileName(request.SourcePath), SourceSha256 = normalized.SourceSha256, NormalizedSha256 = normalizedHash, CreatedAt = DateTimeOffset.Now.ToString("O"), Source = source, PageArchetypes = archetypes, FixedRegions = [], RepeatingRegions = repeated, Slots = slots, FieldBindings = [], Suggestions = BuildSuggestions(inspection, slots) };
_packages.Save(request.OutputPackagePath, learned, normalized.NormalizedPath); return learned;
}
finally { TryDeleteDirectory(normalized.NormalizedPath, normalized.SourcePath); }
}
private static void EnsureBodyMarker(string path) { using var doc = WordprocessingDocument.Open(path, true); var main = doc.MainDocumentPart ?? throw new InvalidDataException("Main document part is missing."); var body = main.Document.Body ?? throw new InvalidDataException("Document body is missing."); if (main.Document.InnerText.Contains("{{DOC_BODY}}", StringComparison.Ordinal)) return; body.AppendChild(new Paragraph(new Run(new Text("{{DOC_BODY}}")))); main.Document.Save(); }
private static IReadOnlyList<PageArchetype> CreateArchetypes(int pages, DocumentInspectionResult inspection) { var result = new List<PageArchetype> { new() { Id = "FirstPage", Name = "FirstPage", IsFirstPage = true, IsRepeating = false, ExamplePages = [1], FixedRegionIds = [], SlotIds = [] } }; if (pages > 1) result.Add(new PageArchetype { Id = "RepeatingPage", Name = "RepeatingPage", IsRepeating = true, ExamplePages = Enumerable.Range(2, pages - 1).ToArray(), FixedRegionIds = [], SlotIds = [] }); return result; }
private static IReadOnlyList<RepeatingRegion> FindRepeatedRegions(DocumentInspectionResult inspection) => inspection.SectionAssignments.GroupBy(x => string.Join("|", x.Headers.Concat(x.Footers))).Where(x => x.Count() > 1 && x.Key.Length > 0).Select((x, i) => new RepeatingRegion { Id = "region-" + (i + 1), Name = "Repeated header/footer", Pages = x.Select(y => y.Section).ToArray(), Fingerprint = Convert.ToHexString(SHA256.HashData(System.Text.Encoding.UTF8.GetBytes(x.Key))), Kind = TemplateRegionKind.Repeating, Location = "section assignments" }).ToArray();
private static IReadOnlyList<TemplateSlot> DefaultSlots() => new[] { "PROJECT.CODE", "PROJECT.NAME", "PROJECT.OBJECT", "DOCUMENT.CODE", "DOCUMENT.TITLE", "DOCUMENT.STAGE", "DOCUMENT.SHEET", "DOCUMENT.SHEET_COUNT", "REGISTER.CONTENTS", "REGISTER.MAIN_DRAWING_SETS", "REGISTER.DRAWINGS", "REGISTER.REFERENCE_DOCUMENTS", "DOCUMENT.GENERAL_NOTES", "DOCUMENT.MAIN_BODY" }.Select(x => new TemplateSlot { Id = x, Name = x, Kind = x == "DOCUMENT.MAIN_BODY" ? TemplateSlotKind.MainBody : TemplateSlotKind.PlainText, ContentControlTag = x, IsRequired = x is "DOCUMENT.CODE" or "DOCUMENT.TITLE" or "DOCUMENT.MAIN_BODY", Occurrences = [] }).ToArray();
private static IReadOnlyList<TemplateLearningSuggestion> BuildSuggestions(DocumentInspectionResult inspection, IReadOnlyList<TemplateSlot> slots) => [new TemplateLearningSuggestion { SuggestionType = "PageArchetype", SourceLocation = "document", ProposedName = inspection.Sections > 1 ? "FirstPage + RepeatingPage" : "SinglePage", Confidence = 0.5, Reason = "Initial deterministic proposal based on document sections." }];
private static void TryDeleteDirectory(string normalized, string source) { var directory = Path.GetDirectoryName(normalized); if (directory is not null && !Path.GetFullPath(source).Equals(Path.GetFullPath(normalized), StringComparison.OrdinalIgnoreCase)) try { if (Directory.Exists(directory)) Directory.Delete(directory, true); } catch { } }
}
@@ -1,80 +0,0 @@
using System.Runtime.InteropServices;
using System.IO.Compression;
using System.Text;
using System.Xml.Linq;
using DocumentAutomation.Shared;
using DocxWorkbench.Core;
namespace DocxWorkbench.WordInterop;
public sealed class DocxBodyImporter : IDocxBodyImporter, IDisposable
{
private readonly StaWordQueue _queue;
private readonly bool _ownsQueue;
public DocxBodyImporter() : this(new StaWordQueue(), true) { }
internal DocxBodyImporter(StaWordQueue queue) : this(queue, false) { }
private DocxBodyImporter(StaWordQueue queue, bool ownsQueue) { _queue = queue; _ownsQueue = ownsQueue; }
public Task<BodyImportResult> ImportAsync(DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
=> _queue.Enqueue(() => ImportStandalone(request, progress, cancellationToken), cancellationToken);
private BodyImportResult ImportStandalone(DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken token)
{
dynamic? application = null; var proxies = new List<object?>(); try { var type = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Activator.CreateInstance(type) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; return ImportOnSta(application, null, request.DestinationRangeHandle, request, progress, token, proxies); } finally { try { if (application is not null) application.Quit(0); } catch { } Release(application); ReleaseAll(proxies); }
}
internal BodyImportResult ImportOnSta(dynamic application, dynamic destinationDocument, dynamic destinationRange, DocxBodyImportRequest request, IProgress<WordOperationProgress>? progress, CancellationToken token, List<object?> proxies)
{
if (!File.Exists(request.SourcePath)) throw new FileNotFoundException("Source DOCX was not found.", request.SourcePath); if (!request.SourcePath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException("DocxBodyImporter accepts DOCX only.");
var plan = BuildPlanFromOpenXml(request.SourcePath);
var temp = Path.Combine(Path.GetTempPath(), "DocumentAutomation", "body-" + Guid.NewGuid().ToString("N")); Directory.CreateDirectory(temp); var sourceCopy = Path.Combine(temp, "source.docx"); File.Copy(request.SourcePath, sourceCopy, true); NormalizeSourceSections(sourceCopy, request.SectionBreakPolicy); dynamic? sourceDocument = null; dynamic? sourceDocuments = null; dynamic? sourceRange = null; dynamic? importRange = null; var localProxies = new List<object?>();
try
{
token.ThrowIfCancellationRequested(); progress?.Report(new WordOperationProgress { Stage = "OpenSource", Message = "Opening source DOCX read-only" }); sourceDocuments = Own(application.Documents, localProxies); sourceDocument = Own(sourceDocuments.Open(sourceCopy, true, false, false), localProxies); dynamic stories = Own(sourceDocument.StoryRanges, localProxies); sourceRange = Own(stories[1], localProxies); var start = (int)sourceRange.Start; var end = (int)sourceRange.End; if (end > start) end -= 1; importRange = Own(sourceDocument.Range(start, end), localProxies);
var warnings = new List<string>(); var sourceRevisions = TryCount(importRange.Revisions); var sourceComments = TryCount(importRange.Comments); if (sourceRevisions > 0) { if (request.RevisionPolicy == RevisionImportPolicy.BlockImport) throw new WordAutomationException("Source DOCX contains tracked changes and RevisionPolicy is BlockImport."); if (request.RevisionPolicy == RevisionImportPolicy.AcceptAll) importRange.Revisions.AcceptAll(); if (request.RevisionPolicy == RevisionImportPolicy.RejectAll) importRange.Revisions.RejectAll(); if (request.RevisionPolicy == RevisionImportPolicy.PreserveAndWarn) warnings.Add($"Tracked changes preserved: {sourceRevisions}."); } if (sourceComments > 0) { if (request.CommentPolicy == CommentImportPolicy.BlockImport) throw new WordAutomationException("Source DOCX contains comments and CommentPolicy is BlockImport."); if (request.CommentPolicy == CommentImportPolicy.PreserveAndWarn) warnings.Add($"Comments preserved: {sourceComments}."); }
progress?.Report(new WordOperationProgress { Stage = "FormattedText", Message = "Copying only the main text story" }); destinationRange.FormattedText = importRange.FormattedText; if (request.CommentPolicy == CommentImportPolicy.Exclude) RemoveImportedComments(destinationRange); if (request.RevisionPolicy == RevisionImportPolicy.PreserveAndWarn) warnings.Add("Revision policy: PreserveAndWarn.");
plan = plan with { Warnings = warnings }; return new BodyImportResult { Plan = plan, InsertionMode = "FormattedText", Warnings = warnings };
}
finally { try { if (sourceDocument is not null) sourceDocument.Close(0); } catch { } ReleaseAll(localProxies); TryDelete(temp); }
}
private static BodyImportPlan BuildPlanFromOpenXml(string path)
{
using var archive = ZipFile.OpenRead(path);
var entry = archive.GetEntry("word/document.xml") ?? throw new InvalidDataException("Source DOCX document.xml is missing.");
using var reader = new StreamReader(entry.Open());
var document = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace);
var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main");
var wp = XNamespace.Get("http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing");
var body = document.Root?.Element(w + "body") ?? throw new InvalidDataException("Source DOCX body is missing.");
var sectionMarks = body.Descendants(w + "sectPr").ToList();
var internalSections = Math.Max(0, sectionMarks.Count - 1);
var pageBreaks = body.Descendants(w + "br").Count(x => string.Equals((string?)x.Attribute(w + "type"), "page", StringComparison.OrdinalIgnoreCase));
return new BodyImportPlan
{
ParagraphCount = body.Descendants(w + "p").Count(),
TableCount = body.Descendants(w + "tbl").Count(),
InlineShapeCount = body.Descendants(wp + "inline").Count(),
FloatingShapeCount = body.Descendants(wp + "anchor").Count(),
InternalSectionBreakCount = internalSections,
PageBreakCount = pageBreaks,
IncludedStories = ["wdMainTextStory"],
ExcludedStories = ["wdPrimaryHeaderStory", "wdFirstPageHeaderStory", "wdEvenPagesHeaderStory", "wdPrimaryFooterStory", "wdFirstPageFooterStory", "wdEvenPagesFooterStory"],
Warnings = []
};
}
private static void NormalizeSourceSections(string path, SectionBreakPolicy policy)
{
if (policy == SectionBreakPolicy.ConvertToParagraph) policy = SectionBreakPolicy.Remove;
using var archive = ZipFile.Open(path, ZipArchiveMode.Update); var entry = archive.GetEntry("word/document.xml") ?? throw new InvalidDataException("Source DOCX document.xml is missing."); string xml; using (var reader = new StreamReader(entry.Open())) xml = reader.ReadToEnd(); var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main"); var document = XDocument.Parse(xml, LoadOptions.PreserveWhitespace); var body = document.Root?.Element(w + "body") ?? throw new InvalidDataException("Source DOCX body is missing."); var sections = body.Descendants(w + "sectPr").ToList(); for (var i = 0; i < sections.Count; i++) { var section = sections[i]; var parent = section.Parent; var paragraph = parent?.Name == w + "pPr" ? parent.Parent : null; section.Remove(); if (i < sections.Count - 1 && policy == SectionBreakPolicy.ConvertToPageBreak && paragraph is not null) paragraph.Add(new XElement(w + "r", new XElement(w + "br", new XAttribute(w + "type", "page")))); } entry.Delete(); var replacement = archive.CreateEntry("word/document.xml", CompressionLevel.Optimal); using var stream = replacement.Open(); using var writer = new StreamWriter(stream, new UTF8Encoding(false)); document.Save(writer, SaveOptions.DisableFormatting);
}
private static void RemoveImportedComments(dynamic range) { try { dynamic comments = range.Comments; for (var i = comments.Count; i >= 1; i--) comments[i].Delete(); } catch { } }
private static int TryCount(dynamic collection) { try { return (int)collection.Count; } catch { return 0; } }
private static T? Own<T>(T? value, List<object?> proxies) where T : class { if (value is not null) proxies.Add(value); return value; }
private static void Release(object? value) { try { if (value is not null && Marshal.IsComObject(value)) Marshal.FinalReleaseComObject(value); } catch { } }
private static void ReleaseAll(IEnumerable<object?> values) { foreach (var value in values.Reverse()) Release(value); }
private static void TryDelete(string path) { try { if (Directory.Exists(path)) Directory.Delete(path, true); } catch { } }
public void Dispose() { if (_ownsQueue) _queue.Dispose(); }
}
@@ -1,14 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
<ProjectReference Include="..\DocxWorkbench.Core\DocxWorkbench.Core.csproj" />
</ItemGroup>
</Project>
@@ -1,3 +0,0 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("DocxWorkbench.Tests")]
@@ -1,60 +0,0 @@
using System.Collections.Concurrent;
namespace DocxWorkbench.WordInterop;
internal sealed class StaWordQueue : IDisposable
{
private readonly BlockingCollection<Action> _jobs = new();
private readonly Thread _thread;
private readonly ManualResetEventSlim _stopped = new(false);
private readonly object _lifetimeGate = new();
private bool _accepting = true;
public StaWordQueue()
{
_thread = new Thread(Run) { IsBackground = true, Name = "DocumentAutomation.Word.STA" };
_thread.SetApartmentState(ApartmentState.STA);
_thread.Start();
}
public Task<T> Enqueue<T>(Func<T> operation, CancellationToken cancellationToken)
{
if (operation is null) throw new ArgumentNullException(nameof(operation));
if (cancellationToken.IsCancellationRequested) return Task.FromCanceled<T>(cancellationToken);
var completion = new TaskCompletionSource<T>(TaskCreationOptions.RunContinuationsAsynchronously);
lock (_lifetimeGate)
{
if (!_accepting) throw new ObjectDisposedException(nameof(StaWordQueue));
try { _jobs.Add(() => Execute(operation, completion, cancellationToken), cancellationToken); }
catch (InvalidOperationException) { throw new ObjectDisposedException(nameof(StaWordQueue)); }
catch (OperationCanceledException) { completion.TrySetCanceled(cancellationToken); }
}
return completion.Task;
}
private static void Execute<T>(Func<T> operation, TaskCompletionSource<T> completion, CancellationToken cancellationToken)
{
try { cancellationToken.ThrowIfCancellationRequested(); completion.TrySetResult(operation()); }
catch (OperationCanceledException ex) { completion.TrySetCanceled(ex.CancellationToken); }
catch (Exception ex) { completion.TrySetException(ex); }
}
private void Run()
{
try { foreach (var job in _jobs.GetConsumingEnumerable()) job(); }
finally { _stopped.Set(); }
}
public void Dispose()
{
lock (_lifetimeGate)
{
if (!_accepting) return;
_accepting = false;
_jobs.CompleteAdding();
}
if (Thread.CurrentThread != _thread) _stopped.Wait(TimeSpan.FromSeconds(30));
// Do not dispose the collection or stop event while the STA worker may
// still be draining it. The worker owns the final enumeration lifetime.
}
}
@@ -1,49 +0,0 @@
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Xml.Linq;
using DocumentAutomation.Shared;
using DocxWorkbench.Core;
namespace DocxWorkbench.WordInterop;
public sealed class TemplateDocumentGenerator : ITemplateDocumentGenerator, IDisposable
{
private readonly ITemplatePackageStore _packages;
private readonly IWordDocumentNormalizer _normalizer;
private readonly WordDocumentService _word = new();
private readonly IDocumentInspector _inspector;
public TemplateDocumentGenerator(ITemplatePackageStore packages, IWordDocumentNormalizer normalizer, IDocumentInspector inspector) { _packages = packages; _normalizer = normalizer; _inspector = inspector; }
public async Task<TemplateGenerationResult> GenerateAsync(TemplateGenerationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
{
var opened = _packages.Open(request.TemplatePackagePath); DocumentNormalizationResult? normalizedBody = null; var outputPdf = Path.ChangeExtension(request.OutputDocxPath, ".pdf");
try
{
var bodyPath = request.ContentSourcePath;
if (Path.GetExtension(bodyPath).Equals(".doc", StringComparison.OrdinalIgnoreCase)) { normalizedBody = await _normalizer.NormalizeAsync(new DocumentNormalizationRequest { SourcePath = bodyPath, WorkingDirectory = Path.Combine(opened.WorkingDirectory, "body") }, progress, cancellationToken); bodyPath = normalizedBody.NormalizedPath; }
var workingTemplate = Path.Combine(opened.WorkingDirectory, "working-template.docx"); File.Copy(opened.TemplateDocxPath, workingTemplate, true); ReplaceScalarTokens(workingTemplate, request.ScalarValues); progress?.Report(new WordOperationProgress { Stage = "Generate", Message = "Building document from learned template" });
var result = await _word.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = workingTemplate, BodyPath = bodyPath, OutputDocxPath = request.OutputDocxPath }, progress is null ? null : new Progress<string>(x => progress.Report(new WordOperationProgress { Stage = "Generate", Message = x })), cancellationToken); await _word.ExportPdfAsync(result.OutputDocxPath, outputPdf, cancellationToken);
var validation = Validate(result.OutputDocxPath, opened.Template.TemplateId); var validationPath = Path.ChangeExtension(request.OutputDocxPath, ".validation.json"); File.WriteAllText(validationPath, JsonSerializer.Serialize(validation, new JsonSerializerOptions { WriteIndented = true })); return new TemplateGenerationResult { OutputDocxPath = result.OutputDocxPath, OutputPdfPath = outputPdf, GenerationLogPath = result.LogPath, ValidationLogPath = validationPath, Validation = validation };
}
finally { TryDeleteDirectory(opened.WorkingDirectory); }
}
private IReadOnlyList<RuleEvaluationResult> Validate(string output, string templateId)
{
var inspection = _inspector.Inspect(output); var result = new List<RuleEvaluationResult> { new() { RuleId = "DOCX_EXISTS", Status = File.Exists(output) ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, Message = "Output DOCX exists.", DocumentLocation = output }, new() { RuleId = "NO_BODY_MARKER", Status = inspection.InsertionPoint.Type == "None" ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.NeedsReview, Message = inspection.InsertionPoint.Type == "None" ? "No unresolved insertion marker remains." : "An insertion marker remains in the output.", DocumentLocation = "word/document.xml" }, new() { RuleId = "NO_TRACKED_CHANGES", Status = inspection.HasTrackedChanges ? RuleEvaluationStatus.Fail : RuleEvaluationStatus.Pass, Message = inspection.HasTrackedChanges ? "Tracked changes remain." : "No tracked changes detected." }, new() { RuleId = "TEMPLATE_ID", Status = RuleEvaluationStatus.Pass, Message = $"Generated from template {templateId}." } }; return result;
}
private static void ReplaceScalarTokens(string path, IReadOnlyDictionary<string, string> values)
{
if (values.Count == 0) return; using var archive = ZipFile.Open(path, ZipArchiveMode.Update); var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main");
foreach (var entry in archive.Entries.Where(x => x.FullName.StartsWith("word/", StringComparison.OrdinalIgnoreCase) && x.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase)).ToArray())
{
XDocument document; using (var reader = new StreamReader(entry.Open())) document = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace); var changed = false; foreach (var text in document.Descendants(w + "t")) { var value = text.Value; foreach (var pair in values) { var token = "{{" + pair.Key + "}}"; if (!value.Contains(token, StringComparison.OrdinalIgnoreCase)) continue; value = value.Replace(token, pair.Value, StringComparison.OrdinalIgnoreCase); changed = true; } text.Value = value; } if (!changed) continue; entry.Delete(); var replacement = archive.CreateEntry(entry.FullName, CompressionLevel.Optimal); using var stream = replacement.Open(); using var writer = new StreamWriter(stream, new UTF8Encoding(false)); document.Save(writer, SaveOptions.DisableFormatting);
}
}
private static void TryDeleteDirectory(string path) { try { if (Directory.Exists(path)) Directory.Delete(path, true); } catch { } }
public void Dispose() { _word.Dispose(); if (_normalizer is IDisposable disposable) disposable.Dispose(); }
}
@@ -1,42 +0,0 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using DocumentAutomation.Shared;
using DocxWorkbench.Core;
namespace DocxWorkbench.WordInterop;
public sealed class WordDocumentNormalizer : IWordDocumentNormalizer, IDisposable
{
private readonly StaWordQueue _queue;
public WordDocumentNormalizer() : this(new StaWordQueue(), true) { }
internal WordDocumentNormalizer(StaWordQueue queue) : this(queue, false) { }
private readonly bool _ownsQueue;
private WordDocumentNormalizer(StaWordQueue queue, bool ownsQueue) { _queue = queue; _ownsQueue = ownsQueue; }
public Task<DocumentNormalizationResult> NormalizeAsync(DocumentNormalizationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken cancellationToken)
=> _queue.Enqueue(() => NormalizeOnSta(request, progress, cancellationToken), cancellationToken);
private static DocumentNormalizationResult NormalizeOnSta(DocumentNormalizationRequest request, IProgress<WordOperationProgress>? progress, CancellationToken token)
{
if (!File.Exists(request.SourcePath)) throw new FileNotFoundException("Document source was not found.", request.SourcePath);
var extension = Path.GetExtension(request.SourcePath);
if (!extension.Equals(".doc", StringComparison.OrdinalIgnoreCase) && !extension.Equals(".docx", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException("Template source must be DOC or DOCX.");
var started = Stopwatch.StartNew(); var sourceHash = Hash(request.SourcePath); var work = Path.GetFullPath(request.WorkingDirectory); Directory.CreateDirectory(work); var normalized = Path.Combine(work, "normalized.docx"); token.ThrowIfCancellationRequested();
if (extension.Equals(".docx", StringComparison.OrdinalIgnoreCase)) { File.Copy(request.SourcePath, normalized, true); return new DocumentNormalizationResult { SourcePath = request.SourcePath, NormalizedPath = normalized, SourceSha256 = sourceHash, NormalizedSha256 = Hash(normalized), WasConverted = false, Duration = started.Elapsed }; }
dynamic? application = null; dynamic? documents = null; dynamic? document = null; var proxies = new List<object?>();
try
{
progress?.Report(new WordOperationProgress { Stage = "NormalizeDoc", Message = "Opening binary DOC read-only" }); var wordType = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Own(Activator.CreateInstance(wordType), proxies) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; if (request.DisableMacros) { try { application.AutomationSecurity = 3; } catch { } } documents = Own(application.Documents, proxies); document = Own(documents.Open(request.SourcePath, false, true, false), proxies) ?? throw new WordAutomationException("Word could not open the DOC source read-only."); token.ThrowIfCancellationRequested(); progress?.Report(new WordOperationProgress { Stage = "NormalizeDoc", Message = "Saving temporary DOCX" }); document.SaveAs2(normalized, 12); int? pageCount = null; try { document.Repaginate(); pageCount = (int)document.ComputeStatistics(2); } catch { } document.Close(0); document = null; return new DocumentNormalizationResult { SourcePath = request.SourcePath, NormalizedPath = normalized, SourceSha256 = sourceHash, NormalizedSha256 = Hash(normalized), WasConverted = true, Duration = started.Elapsed, PageCount = pageCount };
}
catch (WordNotInstalledException) { throw; }
catch (WordAutomationException) { throw; }
catch (Exception ex) { throw new WordAutomationException("DOC normalization failed.", ex); }
finally { try { if (document is not null) document.Close(0); } catch { } try { if (application is not null) application.Quit(0); } catch { } ReleaseAll(proxies); }
}
private static string Hash(string path) => Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(path)));
private static T? Own<T>(T? value, List<object?> proxies) where T : class { if (value is not null) proxies.Add(value); return value; }
private static void ReleaseAll(IEnumerable<object?> proxies) { foreach (var value in proxies.Reverse()) try { if (value is not null && Marshal.IsComObject(value)) Marshal.FinalReleaseComObject(value); } catch { } }
public void Dispose() { if (_ownsQueue) _queue.Dispose(); }
}
@@ -1,132 +0,0 @@
using System.Diagnostics;
using System.IO.Compression;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text.Json;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml.Linq;
using DocumentAutomation.Shared;
using DocxWorkbench.Core;
namespace DocxWorkbench.WordInterop;
public sealed class WordNotInstalledException(string message) : InvalidOperationException(message);
public sealed class WordAutomationException(string message, Exception? inner = null) : InvalidOperationException(message, inner);
public sealed class WordDocumentService : IWordDocumentService, IDisposable
{
private readonly StaWordQueue _queue = new();
private readonly DocxBodyImporter _bodyImporter;
public WordDocumentService() => _bodyImporter = new DocxBodyImporter(_queue);
public Task<WordDocumentResult> BuildDocumentAsync(WordDocumentBuildRequest request, IProgress<string>? progress, CancellationToken cancellationToken)
=> _queue.Enqueue(() => BuildOnSta(request, progress, cancellationToken), cancellationToken);
public Task<WordPreviewResult> ExportPdfAsync(string docxPath, string outputPdfPath, CancellationToken cancellationToken)
=> _queue.Enqueue(() => ExportPdfOnSta(docxPath, outputPdfPath, cancellationToken), cancellationToken);
private WordDocumentResult BuildOnSta(WordDocumentBuildRequest request, IProgress<string>? progress, CancellationToken token)
{
DocumentInputValidation.Validate(request);
if (!request.BodyPath.EndsWith(".docx", StringComparison.OrdinalIgnoreCase) && !request.BodyPath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) throw new UnsupportedDocumentFormatException($"Unsupported body format: {Path.GetExtension(request.BodyPath)}. Use DOCX or TXT.");
var insertion = TemplateInsertionPointReader.Find(request.TemplatePath);
if (insertion.Type == "None") throw new WordAutomationException("No DOC_BODY insertion point was found. Add a DOC_BODY content control, DOC_BODY bookmark, or {{DOC_BODY}} marker.");
var started = Stopwatch.StartNew(); var temp = Path.Combine(Path.GetTempPath(), "DocumentAutomation", Guid.NewGuid().ToString("N")); Directory.CreateDirectory(temp); var workingTemplate = Path.Combine(temp, "template.docx"); var stagedOutput = Path.Combine(temp, "result.docx"); File.Copy(request.TemplatePath, workingTemplate, true);
dynamic? application = null; dynamic? documents = null; dynamic? document = null; dynamic? range = null; var proxies = new List<object?>(); int? wordPid = null; BodyImportResult? bodyImport = null;
try
{
token.ThrowIfCancellationRequested(); progress?.Report("Checking Word.Application COM registration"); var wordType = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Own(Activator.CreateInstance(wordType), proxies) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; TrySetAutomationSecurity(application); wordPid = TryGetPid(application); progress?.Report($"Word COM started (PID {wordPid?.ToString() ?? "unknown"})");
documents = Own(application.Documents, proxies); document = Own(documents.Open(workingTemplate, false, false, false), proxies) ?? throw new WordAutomationException("Word could not open the working template copy.");
range = Own(FindInsertionRange(document, insertion.Type, proxies), proxies) ?? throw new WordAutomationException("The insertion point disappeared while opening the template.");
token.ThrowIfCancellationRequested(); progress?.Report($"Inserting {Path.GetExtension(request.BodyPath).ToUpperInvariant()} body"); if (request.BodyPath.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) range.Text = File.ReadAllText(request.BodyPath).Replace("\r\n", "\r").Replace('\n', '\r'); else bodyImport = _bodyImporter.ImportOnSta(application, document, range, new DocxBodyImportRequest { SourcePath = request.BodyPath, DestinationRangeHandle = range }, progress is null ? null : new Progress<WordOperationProgress>(x => progress.Report(x.Message ?? x.Stage)), token, proxies);
token.ThrowIfCancellationRequested(); progress?.Report("Updating fields and pagination"); document.Repaginate(); document.Fields.Update(); UpdateHeadersFooters(document, proxies); document.SaveAs2(stagedOutput, 12); document.Close(0); document = null; RemoveUnreferencedHeaderFooterParts(stagedOutput); CommitOutput(stagedOutput, request.OutputDocxPath);
var logPath = Path.ChangeExtension(request.OutputDocxPath, ".generation.json"); File.WriteAllText(logPath, JsonSerializer.Serialize(new { operationId = Guid.NewGuid(), operationType = "BuildDocument", startedAtUtc = DateTime.UtcNow.Subtract(started.Elapsed), completedAtUtc = DateTime.UtcNow, template = request.TemplatePath, templateSha256 = Hash(request.TemplatePath), templateVersion = "1.0", body = request.BodyPath, sourceSha256 = Hash(request.BodyPath), output = request.OutputDocxPath, resultSha256 = Hash(request.OutputDocxPath), insertionPoint = insertion.Type, wordPid, staThread = Thread.CurrentThread.ManagedThreadId, staApartment = Thread.CurrentThread.GetApartmentState().ToString(), durationMs = started.ElapsedMilliseconds, status = "Succeeded", errorCode = (string?)null }, new JsonSerializerOptions { WriteIndented = true }));
return new WordDocumentResult { OutputDocxPath = request.OutputDocxPath, LogPath = logPath, Duration = started.Elapsed, InsertionPoint = insertion.Type, BodyImport = bodyImport };
}
catch (WordNotInstalledException) { throw; }
catch (WordAutomationException) { throw; }
catch (Exception ex) when (ex is not OperationCanceledException) { throw new WordAutomationException("Word automation failed. See technical details in the operation log.", ex); }
finally
{
try { if (document is not null) document.Close(0); } catch { }
try { if (application is not null) application.Quit(0); } catch { }
ReleaseAll(proxies); TryDeleteDirectory(temp);
}
}
private static WordPreviewResult ExportPdfOnSta(string docxPath, string outputPdfPath, CancellationToken token)
{
if (!File.Exists(docxPath)) throw new FileNotFoundException("DOCX was not found.", docxPath); Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(outputPdfPath))!); var sw = Stopwatch.StartNew(); dynamic? application = null; dynamic? documents = null; dynamic? document = null; var proxies = new List<object?>();
try { token.ThrowIfCancellationRequested(); var wordType = Type.GetTypeFromProgID("Word.Application", false) ?? throw new WordNotInstalledException("Microsoft Word is not installed or is not registered in COM."); application = Own(Activator.CreateInstance(wordType), proxies) ?? throw new WordAutomationException("Could not create Word.Application."); application.Visible = false; application.DisplayAlerts = 0; TrySetAutomationSecurity(application); documents = Own(application.Documents, proxies); document = Own(documents.Open(docxPath, true, false, false), proxies) ?? throw new WordAutomationException("Word could not open the DOCX."); document.ExportAsFixedFormat(outputPdfPath, 17); return new WordPreviewResult { PdfPath = outputPdfPath, Duration = sw.Elapsed }; }
catch (WordNotInstalledException) { throw; }
catch (WordAutomationException) { throw; }
catch (Exception ex) when (ex is not OperationCanceledException) { throw new WordAutomationException("PDF export through Word failed.", ex); }
finally { try { if (document is not null) document.Close(0); } catch { } try { if (application is not null) application.Quit(0); } catch { } ReleaseAll(proxies); }
}
private static dynamic? FindInsertionRange(dynamic document, string type, List<object?> proxies)
{
if (type == "ContentControl") { dynamic controls = Own(document.ContentControls, proxies); for (var i = 1; i <= controls.Count; i++) { dynamic control = Own(controls[i], proxies); if (string.Equals((string?)control.Tag, "DOC_BODY", StringComparison.OrdinalIgnoreCase) || string.Equals((string?)control.Title, "DOC_BODY", StringComparison.OrdinalIgnoreCase)) return control.Range; } }
if (type == "Bookmark") return document.Bookmarks["DOC_BODY"].Range;
dynamic search = Own(document.Content, proxies); search.Find.ClearFormatting(); search.Find.Text = "{{DOC_BODY}}"; if (search.Find.Execute()) { search.Text = ""; return search; } return null;
}
private static void UpdateHeadersFooters(dynamic document, List<object?> proxies)
{
dynamic sections = Own(document.Sections, proxies); for (var i = 1; i <= sections.Count; i++) { dynamic section = Own(sections[i], proxies); UpdateCollection(section.Headers, proxies); UpdateCollection(section.Footers, proxies); }
void UpdateCollection(dynamic collection, List<object?> proxies) { dynamic owned = WordDocumentService.Own(collection, proxies); for (var i = 1; i <= owned.Count; i++) { dynamic item = WordDocumentService.Own(owned[i], proxies); dynamic range = WordDocumentService.Own(item.Range, proxies); range.Fields.Update(); } }
}
private static void TrySetAutomationSecurity(dynamic application) { try { application.AutomationSecurity = 3; application.ScreenUpdating = false; } catch { } }
private static int? TryGetPid(dynamic application) { try { return Process.GetProcessById((int)application.Hwnd).Id; } catch { return null; } }
private static T? Own<T>(T? value, List<object?> proxies) where T : class { if (value is not null) proxies.Add(value); return value; }
private static void ReleaseAll(IEnumerable<object?> proxies) { foreach (var proxy in proxies.Reverse()) try { if (proxy is not null && Marshal.IsComObject(proxy)) Marshal.FinalReleaseComObject(proxy); } catch { } }
private static string Hash(string path) => Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(path)));
private static void CommitOutput(string staged, string output) { var full = Path.GetFullPath(output); if (File.Exists(full)) File.Copy(full, full + ".bak-" + DateTime.UtcNow.ToString("yyyyMMddHHmmss"), true); File.Copy(staged, full, true); }
private static void RemoveUnreferencedHeaderFooterParts(string path)
{
using var archive = ZipFile.Open(path, ZipArchiveMode.Update);
var documentEntry = archive.GetEntry("word/document.xml");
var relsEntry = archive.GetEntry("word/_rels/document.xml.rels");
if (documentEntry is null || relsEntry is null) return;
XDocument document;
XDocument relationships;
using (var reader = new StreamReader(documentEntry.Open())) document = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace);
using (var reader = new StreamReader(relsEntry.Open())) relationships = XDocument.Parse(reader.ReadToEnd(), LoadOptions.PreserveWhitespace);
var w = XNamespace.Get("http://schemas.openxmlformats.org/wordprocessingml/2006/main");
var rel = XNamespace.Get("http://schemas.openxmlformats.org/package/2006/relationships");
var used = document.Descendants(w + "headerReference").Concat(document.Descendants(w + "footerReference")).Select(x => (string?)x.Attribute(XNamespace.Get("http://schemas.openxmlformats.org/officeDocument/2006/relationships") + "id")).Where(x => x is not null).ToHashSet(StringComparer.Ordinal);
var removedTargets = new List<string>();
foreach (var relationship in relationships.Root?.Elements(rel + "Relationship").ToList() ?? [])
{
var type = (string?)relationship.Attribute("Type") ?? string.Empty;
var id = (string?)relationship.Attribute("Id");
if (id is null || (!type.EndsWith("/header", StringComparison.OrdinalIgnoreCase) && !type.EndsWith("/footer", StringComparison.OrdinalIgnoreCase)) || used.Contains(id)) continue;
var target = (string?)relationship.Attribute("Target");
if (!string.IsNullOrWhiteSpace(target)) removedTargets.Add(ResolveWordPart(target));
relationship.Remove();
}
foreach (var target in removedTargets.Distinct(StringComparer.OrdinalIgnoreCase)) archive.GetEntry(target)?.Delete();
relsEntry.Delete();
var replacement = archive.CreateEntry("word/_rels/document.xml.rels", CompressionLevel.Optimal);
using var stream = replacement.Open();
using var writer = new StreamWriter(stream, new UTF8Encoding(false));
relationships.Save(writer, SaveOptions.DisableFormatting);
}
private static string ResolveWordPart(string target) => target.StartsWith("/", StringComparison.Ordinal) ? target.TrimStart('/') : "word/" + target.Replace("\\", "/").TrimStart("./".ToCharArray());
private static void TryDeleteDirectory(string path) { try { if (Directory.Exists(path)) Directory.Delete(path, true); } catch { } }
public void Dispose() => _queue.Dispose();
}
internal static class TemplateInsertionPointReader
{
public static InsertionPointInfo Find(string docxPath)
{
using var archive = ZipFile.OpenRead(docxPath); var entry = archive.GetEntry("word/document.xml") ?? throw new InvalidDataException("DOCX document.xml is missing."); using var reader = new StreamReader(entry.Open()); var xml = reader.ReadToEnd();
if (Regex.IsMatch(xml, @"w:tag[^>]+w:val=""DOC_BODY""", RegexOptions.IgnoreCase)) return new InsertionPointInfo { Type = "ContentControl", Location = "word/document.xml" };
if (Regex.IsMatch(xml, @"w:bookmarkStart[^>]+w:name=""DOC_BODY""", RegexOptions.IgnoreCase)) return new InsertionPointInfo { Type = "Bookmark", Location = "word/document.xml" };
if (xml.Contains("{{DOC_BODY}}", StringComparison.Ordinal)) return new InsertionPointInfo { Type = "TextMarker", Location = "word/document.xml" };
return new InsertionPointInfo { Type = "None" };
}
}
@@ -1,22 +0,0 @@
using System.Text.Json;
using StandardsWorkbench.Core;
using StandardsWorkbench.Ollama;
using StandardsWorkbench.Pdf;
namespace StandardsWorkbench.App;
public sealed class MainForm : Form
{
private readonly TextBox _pdf = new() { Width = 560 }; private readonly TextBox _code = new() { Width = 240, Text = "ГОСТ Р 21.101-2026" }; private readonly TextBox _title = new() { Width = 560, Text = "Нормативный документ" }; private readonly TextBox _log = new() { Multiline = true, Dock = DockStyle.Fill, ScrollBars = ScrollBars.Vertical }; private readonly ListBox _candidates = new() { Dock = DockStyle.Fill }; private readonly Label _status = new() { AutoSize = true, Text = "Готово" }; private readonly IStandardPdfService _service = new PdfStandardService(); private StandardMetadata? _metadata; private List<CandidateRule> _rules = [];
public MainForm()
{
Text = "Standards Workbench"; Width = 900; Height = 620; var top = new TableLayoutPanel { Dock = DockStyle.Top, Height = 150, ColumnCount = 3, RowCount = 4, Padding = new Padding(8) }; top.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120)); top.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100)); top.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 110)); Add(top, 0, "Стандарт PDF", _pdf, Browse); Add(top, 1, "Код", _code, null); Add(top, 2, "Название", _title, null); var buttons = new FlowLayoutPanel { Dock = DockStyle.Fill }; buttons.Controls.Add(Button("Анализировать PDF", async (_, _) => await ImportAsync())); buttons.Controls.Add(Button("Утвердить выбранное", (_, _) => SetSelectedStatus("Approved"))); buttons.Controls.Add(Button("Отклонить выбранное", (_, _) => SetSelectedStatus("Rejected"))); buttons.Controls.Add(Button("Экспортировать профиль", (_, _) => ExportProfile())); top.Controls.Add(buttons, 1, 3); top.SetColumnSpan(buttons, 2); var tabs = new TabControl { Dock = DockStyle.Fill }; foreach (var t in new[] { "Документ", "Страницы", "Пункты", "Кандидаты правил", "Профили", "Сравнение", "Журнал" }) { var p = new TabPage(t); if (t == "Журнал") p.Controls.Add(_log); if (t == "Кандидаты правил") p.Controls.Add(_candidates); tabs.TabPages.Add(p); } Controls.Add(tabs); Controls.Add(top); Controls.Add(_status); _status.Dock = DockStyle.Bottom;
}
private static void Add(TableLayoutPanel p, int row, string label, TextBox box, EventHandler? browse) { p.Controls.Add(new Label { Text = label, AutoSize = true }, 0, row); p.Controls.Add(box, 1, row); if (browse is not null) { var b = new Button { Text = "Обзор..." }; b.Click += browse; p.Controls.Add(b, 2, row); } }
private static Button Button(string text, EventHandler e) { var b = new Button { Text = text, AutoSize = true }; b.Click += e; return b; }
private void Browse(object? s, EventArgs e) { using var d = new OpenFileDialog { Filter = "PDF|*.pdf" }; if (d.ShowDialog() == DialogResult.OK) _pdf.Text = d.FileName; }
private async Task ImportAsync() { try { _status.Text = "Анализ PDF..."; var result = await _service.ImportAsync(_pdf.Text, _code.Text, _title.Text, CancellationToken.None); _metadata = result.Metadata; _rules = result.Clauses.Select(c => new CandidateRule { CandidateId = Guid.NewGuid().ToString("N"), StandardId = c.StandardId, ClauseId = c.ClauseId, SourcePage = c.StartPage, SourceText = c.Text, Title = c.Heading.Length > 0 ? c.Heading : $"Кандидат по пункту {c.ClauseId}", RequiresHumanApproval = true }).ToList(); RefreshCandidates(); _log.AppendText(JsonSerializer.Serialize(new { result.Metadata, result.Pages, result.Clauses }, new JsonSerializerOptions { WriteIndented = true }) + Environment.NewLine); _status.Text = $"Готово: {result.Pages.Count} страниц, {result.Clauses.Count} пунктов"; } catch (Exception ex) { _log.AppendText(ex + Environment.NewLine); _status.Text = "Ошибка"; MessageBox.Show(ex.Message); } }
private void RefreshCandidates() { _candidates.Items.Clear(); foreach (var rule in _rules) _candidates.Items.Add($"[{rule.Status}] {rule.ClauseId} стр.{rule.SourcePage}: {rule.Title}"); }
private void SetSelectedStatus(string status) { if (_candidates.SelectedIndex < 0 || _candidates.SelectedIndex >= _rules.Count) return; _rules[_candidates.SelectedIndex] = _rules[_candidates.SelectedIndex] with { Status = status }; RefreshCandidates(); }
private void ExportProfile() { if (_metadata is null) { MessageBox.Show("Сначала импортируйте PDF."); return; } using var dialog = new FolderBrowserDialog(); if (dialog.ShowDialog() != DialogResult.OK) return; var profile = new ApprovedRulesProfile { StandardId = _metadata.StandardId, Code = _metadata.Code, Revision = _metadata.Revision, SourceFileSha256 = _metadata.SourceFileSha256, Rules = _rules.Where(r => r.Status == "Approved").ToArray() }; var path = Path.Combine(dialog.SelectedPath, $"{_metadata.StandardId}-docx-profile"); ProfileStore.Export(path, profile); _status.Text = $"Профиль экспортирован: {path}"; }
}
@@ -1,16 +0,0 @@
namespace StandardsWorkbench.App;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new MainForm());
}
}
@@ -1,18 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
<ProjectReference Include="..\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" />
<ProjectReference Include="..\StandardsWorkbench.Pdf\StandardsWorkbench.Pdf.csproj" />
<ProjectReference Include="..\StandardsWorkbench.Ollama\StandardsWorkbench.Ollama.csproj" />
</ItemGroup>
</Project>
@@ -1,77 +0,0 @@
using System.Security.Cryptography;
using System.Text.Json;
using DocumentAutomation.Shared;
namespace StandardsWorkbench.Core;
public sealed record StandardMetadata
{
public required string StandardId { get; init; }
public required string Code { get; init; }
public required string Title { get; init; }
public string Revision { get; init; } = "";
public DateOnly? EffectiveFrom { get; init; }
public required string SourceFileSha256 { get; init; }
public int PageCount { get; init; }
public bool TextLayerDetected { get; init; }
public DateTime ImportedAt { get; init; } = DateTime.UtcNow;
public string Status { get; init; } = "Imported";
}
public sealed record PdfPageText(int PageNumber, string Text, bool TextLayerDetected, string Status, IReadOnlyList<string> Blocks);
public sealed record StandardClause(string StandardId, string ClauseId, string Heading, string Text, int StartPage, int EndPage, double ExtractionConfidence);
public sealed record CandidateRule
{
public required string CandidateId { get; init; }
public required string StandardId { get; init; }
public required string ClauseId { get; init; }
public int SourcePage { get; init; }
public required string SourceText { get; init; }
public required string Title { get; init; }
public string[] Scope { get; init; } = ["DOCX"];
public string RuleKind { get; init; } = "ExpertReview";
public string Target { get; init; } = "Document";
public Dictionary<string, string> Parameters { get; init; } = [];
public string Severity { get; init; } = "Warning";
public string AutomationLevel { get; init; } = "Manual";
public double Confidence { get; init; }
public bool RequiresHumanApproval { get; init; } = true;
public string Status { get; init; } = "New";
}
public sealed record ApprovedRulesProfile
{
public required string StandardId { get; init; }
public required string Code { get; init; }
public required string Revision { get; init; }
public required string SourceFileSha256 { get; init; }
public string ProfileVersion { get; init; } = "1.0";
public string MinimumRulesEngineVersion { get; init; } = "1.0";
public DateTime ExportedAt { get; init; } = DateTime.UtcNow;
public IReadOnlyList<CandidateRule> Rules { get; init; } = [];
}
public interface IPdfOcrService { Task<PdfPageText> RecognizePageAsync(string pdfPath, int pageNumber, CancellationToken cancellationToken); }
public interface IStandardPdfService { Task<(StandardMetadata Metadata, IReadOnlyList<PdfPageText> Pages, IReadOnlyList<StandardClause> Clauses)> ImportAsync(string pdfPath, string code, string title, CancellationToken cancellationToken); }
public interface IOllamaService { Task<IReadOnlyList<string>> GetModelsAsync(CancellationToken cancellationToken); Task<CandidateRule?> SuggestCandidateAsync(StandardClause clause, string model, CancellationToken cancellationToken); }
public static class ProfileStore
{
public static string Sha256(string path) { using var stream = File.OpenRead(path); return Convert.ToHexString(SHA256.HashData(stream)).ToLowerInvariant(); }
public static void Export(string directory, ApprovedRulesProfile profile)
{
Directory.CreateDirectory(directory); var options = new JsonSerializerOptions { WriteIndented = true }; File.WriteAllText(Path.Combine(directory, "manifest.json"), JsonSerializer.Serialize(profile, options)); File.WriteAllText(Path.Combine(directory, "approved-rules.json"), JsonSerializer.Serialize(profile.Rules, options)); File.WriteAllText(Path.Combine(directory, "references.json"), JsonSerializer.Serialize(profile.Rules.Select(r => new { r.ClauseId, r.SourcePage, r.StandardId }), options)); File.WriteAllText(Path.Combine(directory, "signature.sha256"), Sha256(Path.Combine(directory, "approved-rules.json")));
}
}
public sealed class RulesEngine
{
public IReadOnlyList<RuleEvaluationResult> Evaluate(DocumentInspectionResult document, ApprovedRulesProfile profile)
=> profile.Rules.Where(r => r.Status is "Approved" or "Implemented" or "Tested").Select(r => EvaluateOne(document, r)).ToArray();
private static RuleEvaluationResult EvaluateOne(DocumentInspectionResult d, CandidateRule rule)
{
var status = rule.RuleKind switch { "SectionCount" => d.Sections > 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "ContentControlPresence" => d.ContentControls > 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "BookmarkPresence" => d.Bookmarks > 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "CommentsAbsent" => d.Comments == 0 ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, "TrackedChangesAbsent" => !d.HasTrackedChanges ? RuleEvaluationStatus.Pass : RuleEvaluationStatus.Fail, _ => RuleEvaluationStatus.NeedsReview };
return new RuleEvaluationResult { RuleId = rule.CandidateId, Status = status, Message = status == RuleEvaluationStatus.Pass ? "Проверка пройдена." : status == RuleEvaluationStatus.Fail ? "Проверка не пройдена." : "Требуется экспертная проверка.", ClauseId = rule.ClauseId, SourcePage = rule.SourcePage, DocumentLocation = rule.Target, CanAutoFix = false };
}
}
@@ -1,11 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup><ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" /></ItemGroup>
</Project>
@@ -1,17 +0,0 @@
using System.Net.Http.Json;
using System.Text.Json;
using StandardsWorkbench.Core;
namespace StandardsWorkbench.Ollama;
public sealed class OllamaClient : IOllamaService
{
private readonly HttpClient _http;
public OllamaClient(HttpClient? httpClient = null) { _http = httpClient ?? new HttpClient(); _http.BaseAddress = new Uri("http://192.168.200.112:11434"); _http.Timeout = TimeSpan.FromSeconds(120); }
public async Task<IReadOnlyList<string>> GetModelsAsync(CancellationToken cancellationToken)
{ using var response = await _http.GetAsync("/api/tags", cancellationToken); response.EnsureSuccessStatusCode(); using var json = await response.Content.ReadFromJsonAsync<JsonDocument>(cancellationToken: cancellationToken); return json?.RootElement.GetProperty("models").EnumerateArray().Select(x => x.GetProperty("name").GetString() ?? "").Where(x => x.Length > 0).ToArray() ?? []; }
public async Task<CandidateRule?> SuggestCandidateAsync(StandardClause clause, string model, CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(model)) throw new ArgumentException("Модель Ollama не выбрана.", nameof(model)); var prompt = $"Return JSON only. Extract one candidate DOCX rule from clause {clause.ClauseId}. Never invent source references. Text: {clause.Text}"; using var response = await _http.PostAsJsonAsync("/api/generate", new { model, prompt, stream = false, format = "json" }, cancellationToken); response.EnsureSuccessStatusCode(); using var json = await response.Content.ReadFromJsonAsync<JsonDocument>(cancellationToken: cancellationToken); var raw = json?.RootElement.GetProperty("response").GetString(); if (string.IsNullOrWhiteSpace(raw)) return null; try { return JsonSerializer.Deserialize<CandidateRule>(raw); } catch (JsonException) { return null; }
}
}
@@ -1,11 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup><ProjectReference Include="..\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" /></ItemGroup>
</Project>
@@ -1,33 +0,0 @@
using System.Text.RegularExpressions;
using StandardsWorkbench.Core;
using UglyToad.PdfPig;
namespace StandardsWorkbench.Pdf;
public sealed class PdfStandardService : IStandardPdfService
{
public Task<(StandardMetadata Metadata, IReadOnlyList<PdfPageText> Pages, IReadOnlyList<StandardClause> Clauses)> ImportAsync(string pdfPath, string code, string title, CancellationToken cancellationToken)
{
if (!File.Exists(pdfPath)) throw new FileNotFoundException("PDF ГОСТа не найден.", pdfPath);
return Task.Run(() =>
{
using var pdf = PdfDocument.Open(pdfPath); var pages = new List<PdfPageText>();
foreach (var page in pdf.GetPages()) { cancellationToken.ThrowIfCancellationRequested(); var text = page.Text ?? ""; pages.Add(new PdfPageText(page.Number, text, text.Trim().Length > 0, text.Trim().Length > 0 ? "Extracted" : "OCR_REQUIRED", text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries))); }
var standardId = Regex.Replace(code.ToUpperInvariant(), "[^A-ZА-Я0-9]+", "-").Trim('-'); var clauses = ExtractClauses(standardId, pages); var meta = new StandardMetadata { StandardId = standardId, Code = code, Title = title, SourceFileSha256 = ProfileStore.Sha256(pdfPath), PageCount = pages.Count, TextLayerDetected = pages.Any(p => p.TextLayerDetected), ImportedAt = DateTime.UtcNow };
return (meta, (IReadOnlyList<PdfPageText>)pages, (IReadOnlyList<StandardClause>)clauses);
}, cancellationToken);
}
private static List<StandardClause> ExtractClauses(string id, IReadOnlyList<PdfPageText> pages)
{
var result = new List<StandardClause>(); string? currentId = null; var currentText = new List<string>(); var start = 1;
void Flush(int end) { if (currentId is not null) result.Add(new StandardClause(id, currentId, "", string.Join(Environment.NewLine, currentText), start, end, 0.85)); }
foreach (var page in pages) foreach (var line in page.Text.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) { var match = Regex.Match(line, "^(\\d+(?:\\.\\d+){0,5})[.)]?\\s+(.+)$"); if (match.Success) { Flush(page.PageNumber - 1); currentId = match.Groups[1].Value; currentText = [line]; start = page.PageNumber; } else if (currentId is not null) currentText.Add(line); }
Flush(pages.Count); return result;
}
}
public sealed class NoOpOcrService : IPdfOcrService
{
public Task<PdfPageText> RecognizePageAsync(string pdfPath, int pageNumber, CancellationToken cancellationToken) => Task.FromResult(new PdfPageText(pageNumber, "", false, "OCR_REQUIRED", []));
}
@@ -1,15 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\DocumentAutomation.Shared\DocumentAutomation.Shared.csproj" />
<ProjectReference Include="..\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" />
<PackageReference Include="PdfPig" Version="0.1.9" />
</ItemGroup>
</Project>
@@ -1,25 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup><ProjectReference Include="..\..\src\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj" /><ProjectReference Include="..\..\src\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj" /><ProjectReference Include="..\..\src\StandardsWorkbench.Pdf\StandardsWorkbench.Pdf.csproj" /><PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" /></ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
@@ -1,72 +0,0 @@
using System.Diagnostics;
using System.Text.Json;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentAutomation.Shared;
using DocxWorkbench.WordInterop;
using DocxWorkbench.OpenXml;
using Xunit.Sdk;
namespace DocumentAutomation.IntegrationTests;
public sealed class WordComIntegrationTests
{
[Fact]
public void IntegrationAssemblyIsAvailable() => Assert.True(typeof(WordComIntegrationTests).Assembly.GetName().Name is not null);
[Fact]
public void WordAvailability_DoesNotRequireOfficePia()
{
var names = typeof(WordDocumentService).Assembly.GetReferencedAssemblies().Select(x => x.Name).ToArray(); Assert.DoesNotContain(names, name => string.Equals(name, "office", StringComparison.OrdinalIgnoreCase) || string.Equals(name, "Microsoft.Office.Interop.Word", StringComparison.OrdinalIgnoreCase));
}
[Fact]
public async Task Build_WithoutInsertionPoint_DoesNotStartWord()
{
var template = CreateDocx(false); var body = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); File.WriteAllText(body, "text"); var before = ProcessIds(); try { using var service = new WordDocumentService(); await Assert.ThrowsAsync<WordAutomationException>(() => service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx") }, null, CancellationToken.None)); Assert.Empty(ProcessIds().Except(before)); } finally { File.Delete(template); File.Delete(body); }
}
[Fact] public async Task Build_RunsOnStaThread() { await RequireWord(); var result = await BuildTxt(); var log = JsonSerializer.Deserialize<JsonElement>(File.ReadAllText(result.LogPath)); Assert.Equal("STA", log.GetProperty("staApartment").GetString()); }
[Fact] public async Task Build_WithTxtBody_InsertsText() { await RequireWord(); var result = await BuildTxt(); Assert.Contains("TXT integration body", ReadMainText(result.OutputDocxPath)); }
[Fact] public async Task Build_WithDocxBody_InsertsDocument() { await RequireWord(); var template = CreateDocx(true); var body = CreateDocx(false, "DOCX integration body"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); try { using var service = new WordDocumentService(); await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = output }, null, CancellationToken.None); Assert.Contains("DOCX integration body", ReadMainText(output)); } finally { File.Delete(template); File.Delete(body); File.Delete(output); } }
[Fact] public async Task Build_ExportsPdf() { await RequireWord(); var result = await BuildTxt(); using var service = new WordDocumentService(); var pdf = await service.ExportPdfAsync(result.OutputDocxPath, Path.ChangeExtension(result.OutputDocxPath, ".pdf"), CancellationToken.None); Assert.True(File.Exists(pdf.PdfPath)); File.Delete(result.OutputDocxPath); File.Delete(pdf.PdfPath); File.Delete(result.LogPath); }
[Fact] public async Task Build_DoesNotLeaveCreatedWinwordProcess() { await RequireWord(); var before = ProcessIds(); var result = await BuildTxt(); await Task.Delay(500); Assert.Empty(ProcessIds().Except(before)); File.Delete(result.OutputDocxPath); File.Delete(result.LogPath); }
[Fact] public async Task Build_Failure_ReleasesWord() { await RequireWord(); var before = ProcessIds(); var template = CreateDocx(true); var body = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); var outputDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); Directory.CreateDirectory(outputDirectory); File.WriteAllText(body, "failure body"); try { using var service = new WordDocumentService(); await Assert.ThrowsAnyAsync<Exception>(() => service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = outputDirectory }, null, CancellationToken.None)); await Task.Delay(500); Assert.Empty(ProcessIds().Except(before)); } finally { File.Delete(template); File.Delete(body); Directory.Delete(outputDirectory, true); } }
[Fact]
public async Task RuntimeGate_DesktopDocxBodyUsesTemplateCopy()
{
await RequireWord(); var template = @"C:\Users\codex\Desktop\156-титул-ПД.docx"; var body = @"C:\Users\codex\Desktop\НХС-33-УК3-ОЗХ-13011-000-НК-ОД.docx"; if (!File.Exists(template) || !File.Exists(body)) throw SkipException.ForSkip("The supplied Desktop DOCX fixtures are not available."); var copy = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); File.Copy(template, copy); try { using (var document = WordprocessingDocument.Open(copy, true)) { var main = document.MainDocumentPart ?? throw new InvalidDataException("Main part missing."); main.Document.Body!.Append(new Paragraph(new Run(new Text("{{DOC_BODY}}")))); main.Document.Save(); } using var service = new WordDocumentService(); var result = await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = copy, BodyPath = body, OutputDocxPath = output }, null, CancellationToken.None); Assert.True(File.Exists(result.OutputDocxPath)); } finally { File.Delete(copy); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".generation.json")); }
}
[Fact]
public async Task ImportDocxBody_ExcludesSourceHeaders()
{
await RequireWord(); var template = CreateDocx(true); var source = CreateComplexSource(); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); var sourceHash = Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source))); try { using var service = new WordDocumentService(); var result = await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = source, OutputDocxPath = output }, null, CancellationToken.None); using var document = WordprocessingDocument.Open(result.OutputDocxPath, false); var main = document.MainDocumentPart!; Assert.DoesNotContain(main.HeaderParts.SelectMany(x => x.Header?.Descendants<Text>() ?? []), x => x.Text == "SOURCE HEADER"); Assert.DoesNotContain(main.FooterParts.SelectMany(x => x.Footer?.Descendants<Text>() ?? []), x => x.Text == "SOURCE FOOTER"); Assert.Single(main.Document.Descendants<SectionProperties>()); Assert.NotNull(result.BodyImport); Assert.Contains("wdMainTextStory", result.BodyImport!.Plan.IncludedStories); Assert.Equal(sourceHash, Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source)))); } finally { File.Delete(template); File.Delete(source); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".generation.json")); }
}
[Fact]
public async Task ImportDocxBody_DoesNotChangeDestinationPageSetup()
{
await RequireWord(); var template = CreateDocx(true); var source = CreateComplexSource(); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); try { using var service = new WordDocumentService(); var result = await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = source, OutputDocxPath = output }, null, CancellationToken.None); using var document = WordprocessingDocument.Open(result.OutputDocxPath, false); Assert.Single(document.MainDocumentPart!.Document.Descendants<SectionProperties>()); Assert.Contains("DOCX complex body", document.MainDocumentPart.Document.InnerText); } finally { File.Delete(template); File.Delete(source); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".generation.json")); }
}
[Fact]
public async Task TemplateLearning_EndToEnd_RealDocToDtemplateToDocxAndPdf()
{
await RequireWord(); var source = @"C:\Users\codex\Desktop\НХС-33-УК3-ОЗХ-13011-000-НК-ОД.doc"; var content = @"C:\Users\codex\Desktop\НХС-33-УК3-ОЗХ-13011-000-НК-ОД.docx"; if (!File.Exists(source) || !File.Exists(content)) throw SkipException.ForSkip("The supplied real DOC/DOCX fixtures are not available.");
var package = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".dtemplate"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); var sourceHash = Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source))); var before = ProcessIds();
try
{
using var normalizer = new WordDocumentNormalizer(); var learning = new TemplateLearningService(normalizer, new TemplatePackageStore(), new OpenXmlDocumentInspector()); var learned = await learning.LearnAsync(new TemplateLearningRequest { SourcePath = source, TemplateName = "Real sample", OutputPackagePath = package }, null, CancellationToken.None); Assert.NotEmpty(learned.Slots); Assert.True(File.Exists(package)); using var generator = new TemplateDocumentGenerator(new TemplatePackageStore(), new WordDocumentNormalizer(), new OpenXmlDocumentInspector()); var result = await generator.GenerateAsync(new TemplateGenerationRequest { TemplatePackagePath = package, ContentSourcePath = content, OutputDocxPath = output }, null, CancellationToken.None); Assert.True(File.Exists(result.OutputDocxPath)); Assert.True(File.Exists(result.OutputPdfPath)); Assert.Equal(sourceHash, Convert.ToHexString(System.Security.Cryptography.SHA256.HashData(File.ReadAllBytes(source)))); Assert.Empty(ProcessIds().Except(before));
}
finally { File.Delete(package); File.Delete(output); File.Delete(Path.ChangeExtension(output, ".pdf")); File.Delete(Path.ChangeExtension(output, ".generation.json")); File.Delete(Path.ChangeExtension(output, ".validation.json")); }
}
private static async Task RequireWord() { if (!OperatingSystem.IsWindows() || Type.GetTypeFromProgID("Word.Application", false) is null) throw SkipException.ForSkip("Microsoft Word COM is not installed or registered on this workstation."); await Task.CompletedTask; }
private static async Task<WordDocumentResult> BuildTxt() { var template = CreateDocx(true); var body = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); var output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); File.WriteAllText(body, "TXT integration body"); try { using var service = new WordDocumentService(); return await service.BuildDocumentAsync(new WordDocumentBuildRequest { TemplatePath = template, BodyPath = body, OutputDocxPath = output }, null, CancellationToken.None); } finally { File.Delete(template); File.Delete(body); } }
private static HashSet<int> ProcessIds() => Process.GetProcessesByName("WINWORD").Select(x => x.Id).ToHashSet();
private static string ReadMainText(string path) { using var doc = WordprocessingDocument.Open(path, false); return doc.MainDocumentPart?.Document.InnerText ?? ""; }
private static string CreateComplexSource()
{
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var doc = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = doc.AddMainDocumentPart(); var header1 = main.AddNewPart<HeaderPart>(); header1.Header = new Header(new Paragraph(new Run(new Text("SOURCE HEADER")))); var footer1 = main.AddNewPart<FooterPart>(); footer1.Footer = new Footer(new Paragraph(new Run(new Text("SOURCE FOOTER")))); var body = new Body(); var first = new Paragraph(new ParagraphProperties(new SectionProperties(new HeaderReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(header1) }, new FooterReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(footer1) })), new Run(new Text("DOCX complex body"))); body.Append(first); body.Append(new Table(new TableRow(new TableCell(new Paragraph(new Run(new Text("source table"))))))); body.Append(new SectionProperties(new HeaderReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(header1) }, new FooterReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(footer1) })); main.Document = new Document(body); main.Document.Save(); return path;
}
private static string CreateDocx(bool marker, string text = "template body") { var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var doc = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = doc.AddMainDocumentPart(); main.Document = new Document(new Body(new Paragraph(new Run(new Text(marker ? "{{DOC_BODY}}" : text))))); main.Document.Save(); return path; }
}
@@ -1,54 +0,0 @@
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocxWorkbench.Core;
using DocxWorkbench.OpenXml;
namespace DocxWorkbench.Tests;
public sealed class DocumentInspectorTests
{
[Fact]
public void Analyze_DocxTemplateAndTxtBody_Succeeds()
{
var docx = CreateDocx(marker: true); var txt = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".txt"); File.WriteAllText(txt, "line one\nline two"); try { var template = new OpenXmlDocumentInspector().Inspect(docx); var body = new TextDocumentInspector().Inspect(txt); Assert.Equal("TextMarker", template.InsertionPoint.Type); Assert.Equal(2, body.Paragraphs); } finally { File.Delete(docx); File.Delete(txt); }
}
[Fact]
public void Analyze_DocxTemplateAndDocxBody_Succeeds()
{
var template = CreateDocx(marker: true); var body = CreateDocx(marker: false); try { var inspector = new OpenXmlDocumentInspector(); Assert.Equal("TextMarker", inspector.Inspect(template).InsertionPoint.Type); Assert.Equal(1, inspector.Inspect(body).Sections); } finally { File.Delete(template); File.Delete(body); }
}
[Fact]
public void Inspect_DetectsMarkerInsertionPoint()
{
var path = CreateDocx(marker: true); try { Assert.Equal("TextMarker", new OpenXmlDocumentInspector().Inspect(path).InsertionPoint.Type); } finally { File.Delete(path); }
}
[Fact]
public void Inspect_FindsPageFieldsInFooter()
{
var path = CreateDocx(marker: true, fields: true); try { var result = new OpenXmlDocumentInspector().Inspect(path); Assert.Contains(result.Fields, field => field.Type == "PAGE" && field.Part.StartsWith("FooterPart", StringComparison.Ordinal)); Assert.Contains(result.Fields, field => field.Type == "NUMPAGES"); } finally { File.Delete(path); }
}
[Fact]
public void Inspect_CountsHeaderFooterGraphics()
{
var path = CreateDocx(marker: true, graphics: true); try { var result = new OpenXmlDocumentInspector().Inspect(path); Assert.True(result.ImageSummary.RasterImages >= 2); } finally { File.Delete(path); }
}
[Fact]
public void Inspect_UnsupportedFormatIsDomainError()
{
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".bin"); File.WriteAllText(path, "not a document"); try { var exception = Assert.Throws<UnsupportedDocumentFormatException>(() => new OpenXmlDocumentInspector().Inspect(path)); Assert.Contains("Open XML inspector", exception.Message); } finally { File.Delete(path); }
}
private static string CreateDocx(bool marker, bool fields = false, bool graphics = false)
{
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var document = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = document.AddMainDocumentPart(); var body = new Body(new Paragraph(new Run(new Text(marker ? "{{DOC_BODY}}" : "body")))); main.Document = new Document(body);
var header = main.AddNewPart<HeaderPart>(); header.Header = new Header(new Paragraph(new Run(new Text("header")))); var footer = main.AddNewPart<FooterPart>();
if (fields) { var paragraph = new Paragraph(); paragraph.Append(new Run(new FieldChar { FieldCharType = FieldCharValues.Begin })); paragraph.Append(new Run(new FieldCode(" PAGE "))); paragraph.Append(new Run(new FieldChar { FieldCharType = FieldCharValues.End })); paragraph.Append(new SimpleField { Instruction = " NUMPAGES " }); footer.Footer = new Footer(paragraph); } else footer.Footer = new Footer(new Paragraph(new Run(new Text("footer"))));
if (graphics) { var image = header.AddImagePart(ImagePartType.Png); image.FeedData(new MemoryStream([137, 80, 78, 71])); var image2 = footer.AddImagePart(ImagePartType.Png); image2.FeedData(new MemoryStream([137, 80, 78, 71])); }
body.Append(new SectionProperties(new HeaderReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(header) }, new FooterReference { Type = HeaderFooterValues.Default, Id = main.GetIdOfPart(footer) })); main.Document.Save(); return path;
}
}
@@ -1,25 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup><ProjectReference Include="..\..\src\DocxWorkbench.Core\DocxWorkbench.Core.csproj" /><ProjectReference Include="..\..\src\DocxWorkbench.OpenXml\DocxWorkbench.OpenXml.csproj" /><ProjectReference Include="..\..\src\DocxWorkbench.WordInterop\DocxWorkbench.WordInterop.csproj" /><PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" /></ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
@@ -1,22 +0,0 @@
using DocxWorkbench.WordInterop;
namespace DocxWorkbench.Tests;
public sealed class StaWordQueueTests
{
[Fact]
public async Task Dispose_DrainsActiveJobAndIsIdempotent()
{
using var queue = new StaWordQueue(); using var started = new ManualResetEventSlim(false); using var release = new ManualResetEventSlim(false);
var job = queue.Enqueue(() => { started.Set(); Assert.Equal(ApartmentState.STA, Thread.CurrentThread.GetApartmentState()); release.Wait(); return 42; }, CancellationToken.None); Assert.True(started.Wait(TimeSpan.FromSeconds(2)));
var dispose = Task.Run(queue.Dispose); var completed = await Task.WhenAny(dispose, Task.Delay(100)); Assert.NotSame(dispose, completed); release.Set(); await dispose; Assert.Equal(42, await job); queue.Dispose(); Assert.Throws<ObjectDisposedException>(() => EnqueueAfterDispose(queue));
}
[Fact]
public async Task Enqueue_CancellationCompletesCanceledTask()
{
using var queue = new StaWordQueue(); using var cancellation = new CancellationTokenSource(); cancellation.Cancel(); await Assert.ThrowsAnyAsync<OperationCanceledException>(() => queue.Enqueue(() => 1, cancellation.Token));
}
private static void EnqueueAfterDispose(StaWordQueue queue) => queue.Enqueue(() => 1, CancellationToken.None);
}
@@ -1,25 +0,0 @@
using System.IO.Compression;
using System.Security.Cryptography;
using DocumentAutomation.Shared;
using DocxWorkbench.OpenXml;
using DocxWorkbench.WordInterop;
namespace DocxWorkbench.Tests;
public sealed class TemplateLearningTests
{
[Fact]
public async Task NormalizeDocx_UsesSafeWorkingCopy()
{
var source = CreateDocx("template"); var hash = Hash(source); var working = Path.Combine(Path.GetTempPath(), "learning-test-" + Guid.NewGuid().ToString("N")); using var normalizer = new WordDocumentNormalizer(); try { var result = await normalizer.NormalizeAsync(new DocumentNormalizationRequest { SourcePath = source, WorkingDirectory = working }, null, CancellationToken.None); Assert.False(result.WasConverted); Assert.NotEqual(Path.GetFullPath(source), Path.GetFullPath(result.NormalizedPath)); Assert.Equal(hash, Hash(source)); Assert.Equal(hash, result.SourceSha256); Assert.True(File.Exists(result.NormalizedPath)); } finally { File.Delete(source); if (Directory.Exists(working)) Directory.Delete(working, true); }
}
[Fact]
public async Task TemplatePackage_CanBeCreatedAndReopened()
{
var source = CreateDocx("{{DOC_BODY}}"); var package = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".dtemplate"); using var normalizer = new WordDocumentNormalizer(); try { var service = new TemplateLearningService(normalizer, new TemplatePackageStore()); var learned = await service.LearnAsync(new TemplateLearningRequest { SourcePath = source, TemplateName = "Unit template", OutputPackagePath = package }, null, CancellationToken.None); Assert.NotEmpty(learned.Slots); Assert.Contains(learned.PageArchetypes, x => x.IsFirstPage); using var archive = ZipFile.OpenRead(package); Assert.Contains(archive.Entries, x => x.FullName == "manifest.json"); Assert.Contains(archive.Entries, x => x.FullName == "template.docx"); var opened = new TemplatePackageStore().Open(package); Assert.Equal(learned.TemplateId, opened.Template.TemplateId); Assert.True(File.Exists(opened.TemplateDocxPath)); Directory.Delete(opened.WorkingDirectory, true); } finally { File.Delete(source); File.Delete(package); }
}
private static string CreateDocx(string text) { var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".docx"); using var document = DocumentFormat.OpenXml.Packaging.WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document); var main = document.AddMainDocumentPart(); main.Document = new DocumentFormat.OpenXml.Wordprocessing.Document(new DocumentFormat.OpenXml.Wordprocessing.Body(new DocumentFormat.OpenXml.Wordprocessing.Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.Text(text))))); main.Document.Save(); return path; }
private static string Hash(string path) => Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(path)));
}
@@ -1,14 +0,0 @@
using DocxWorkbench.Core;
namespace DocxWorkbench.Tests;
public sealed class WorkbenchStateTests
{
[Fact]
public void VerifyButton_DisabledBeforeBuild() { var state = new WorkbenchStateController(); Assert.False(state.CanValidate); }
[Fact]
public void VerifyButton_DisabledAfterBuildFailure() { var state = Ready(); state.BeginBuild(); state.BuildFailed(); Assert.False(state.CanValidate); Assert.False(state.CanOpenDocx); }
[Fact]
public void VerifyButton_EnabledAfterBuildSuccess() { var state = Ready(); state.BeginBuild(); state.BuildSucceeded(); Assert.True(state.CanValidate); Assert.True(state.CanOpenDocx); Assert.True(state.CanOpenPdf); }
private static WorkbenchStateController Ready() { var state = new WorkbenchStateController(); state.InputsSelected(true); state.AnalysisCompleted(true, true, true); return state; }
}
@@ -1,26 +0,0 @@
using DocumentAutomation.Shared;
using StandardsWorkbench.Core;
namespace StandardsWorkbench.Tests;
public sealed class RulesEngineTests
{
[Fact]
public void OnlyApprovedRulesAreEvaluated()
{
var document = new DocumentInspectionResult { FilePath = "synthetic.docx", ContentControls = 1, Sections = 1, Paragraphs = 2, Tables = 0 };
var profile = new ApprovedRulesProfile { StandardId = "TEST", Code = "TEST", Revision = "1", Rules = [
new CandidateRule { CandidateId = "approved", StandardId = "TEST", ClauseId = "1", SourceText = "x", Title = "x", RuleKind = "ContentControlPresence", Status = "Approved" },
new CandidateRule { CandidateId = "new", StandardId = "TEST", ClauseId = "2", SourceText = "x", Title = "x", RuleKind = "SectionCount", Status = "New" }
], SourceFileSha256 = "test"};
var result = new RulesEngine().Evaluate(document, profile); Assert.Single(result); Assert.Equal(RuleEvaluationStatus.Pass, result[0].Status);
}
[Fact]
public void FailedRuleHasClauseReference()
{
var document = new DocumentInspectionResult { FilePath = "synthetic.docx", ContentControls = 0, Sections = 1, Paragraphs = 1, Tables = 0 };
var rule = new CandidateRule { CandidateId = "cc", StandardId = "TEST", ClauseId = "6.3", SourcePage = 4, SourceText = "required", Title = "cc", RuleKind = "ContentControlPresence", Status = "Tested" };
var result = Assert.Single(new RulesEngine().Evaluate(document, new ApprovedRulesProfile { StandardId = "TEST", Code = "TEST", Revision = "1", SourceFileSha256 = "test", Rules = [rule] })); Assert.Equal(RuleEvaluationStatus.Fail, result.Status); Assert.Equal("6.3", result.ClauseId); Assert.Equal(4, result.SourcePage);
}
}
@@ -1,25 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup><ProjectReference Include="..\..\src\StandardsWorkbench.Core\StandardsWorkbench.Core.csproj" /></ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
+58
View File
@@ -0,0 +1,58 @@
# AGENTS.md — P_Rec_Annot
## Назначение и package
`P_Rec_Annot` — приоритетный Plant 3D 2026 plugin для чтения, планирования и
последующего создания Ortho-аннотаций; это перенос активного legacy поведения
Plant 3D 2019 на .NET 8/Plant 3D 2026.
Единственная assembly для `NETLOAD` — `PRecAnnot.Plant3D2026.dll`.
`PRecAnnot.*.dll` — internal managed dependencies, их нельзя NETLOAD по одной.
Использовать Autodesk 2026 references; Autodesk DLL не включать в bundle.
## Commands и context
Поддерживаемые команды: `PHP_REC_ANNOT`, `PXP-AAV`, `PXP-OA`. Все
регистрируются реальным Autodesk API, работают в Smoke/DryRun, не изменяют DWG
в этих режимах и создают одно usage event на явный вызов.
Project status: `NotFound`, `FoundWithName`, `FoundWithoutDisplayName`,
`Ambiguous`, `Failed`. Никогда не выводить `проект '' найден`; для пустого
display name: `Plant 3D-проект открыт; отображаемое имя не определено.`
Diagnostic code: `PLANT_PROJECT_DISPLAY_NAME_EMPTY`.
Drawing states: `Ortho`, `NotOrtho`, `Ambiguous`, `Failed`. Обычный DWG не
классифицируется как Ortho; для реального Ortho применять Autodesk API и
`OrthoDocUtils.IsValidOrthoDrawing`.
## DryRun и determinism
Pipeline: `Plant context → Ortho detection → sheet/view definitions → viewport
snapshots → DataLinks → Plant properties → independent DTO → deterministic
AnnotationPlan → diagnostics → no write`.
Autodesk objects, transactions и database handles остаются в adapter layer;
Core/Application используют только независимые DTO. На неизменном fixture
повторный DryRun обязан давать тот же PlanId, counts, порядок операций и warning
codes, без side effects. PlanId не включает время, GUID, absolute path,
нестабильный ObjectId или пользовательские данные.
## Write guard, Ribbon, tests
Все writes проходят централизованный write guard; в Smoke/DryRun он всегда
запрещает изменения. Apply не обходится через command handler/adapter.
Ожидаемый Ribbon путь: `Промхимпроект → Аннотации → Аннотировать`. Требуются
stable IDs, отсутствие дублей, binding к `PHP_REC_ANNOT`, устойчивость к
документам/workspace и корректный Terminate.
Unit tests не требуют Autodesk runtime. Runtime evidence отдельно фиксирует
initialization, commands, context, Ortho, DataLinks, plan, Ribbon, DBMOD,
telemetry и shutdown.
Bundle содержит только фактический runtime dependency graph и никогда не
содержит Autodesk DLL, PDB, test assemblies, legacy 2019 assemblies, bin/obj
или production configuration.
Fixture: local Plant 3D 2026 project вне Git с настоящей Pipe, synthetic line
number, Ortho drawing/viewport и SHA baseline до DryRun.
@@ -1,32 +0,0 @@
# P_Rec_BOP — статический технический аудит
Дата аудита: 2026-07-31. Источник использован только для чтения; исходники, шаблон и бинарные файлы в Git не копировались.
## Краткий вывод
`P_Rec_BOP` — самостоятельное WinForms EXE («Ведомость объемов работ»), а не загружаемый AutoCAD .NET-плагин: в исходниках не найдены `CommandMethod`, `IExtensionApplication` или `Initialize` Plant-команды. Пользователь выбирает `Project.xml`, программа читает `Piping.dcf` и `ProcessPower.dcf`, проверяет состояние проекта, выбирает чертежи и номера линий, рассчитывает объемы труб/элементов/опор/креплений и сварных стыков, затем заполняет DOCX-шаблон и открывает результат.
Подтвержденный шаблон: `templates\Шаблон.docx`; по умолчанию путь вычисляется относительно сборки, либо задается `ReportTemplate` в `Settings.xml`. Результат сохраняется в проектную папку `Export to Smeta` (для проектов с диска A используется `\ProResults\P_Rec_BOP`) с именем `Ведомость объемов работ (дата время).docx`.
## Разделение доказательности
* Подтверждено исходниками: приведенные в отчетах пути и строки, вызовы SQLite/SQL, таблицы Plant, адресация Word-таблиц и ячеек, копирование шаблона во временный файл.
* Вывод из исходников: отчёт предназначен для сметчиков и формируется по выбранному фильтру.
* Предположение: запуск выполняется внешним пользователем/ярлыком или из корпоративного набора, так как регистрация команды AutoCAD отсутствует.
* Неизвестно: фактическая версия AutoCAD/Plant 3D runtime, установленная версия Word и успешность запуска на Plant 3D 2026.
## Состав
Подробности находятся в `source-inventory.md`, `architecture.md`, `document-generation-flow.md`, `template-analysis.md`, `field-mapping.md`, `compatibility-2019-2026.md`, `reusable-components.md`, `risks.md` и `migration-plan.md`. Машиночитаемые доказательства — в `evidence/`; это агрегированные списки, хэши и результаты поиска.
## Главные ответы
* Plant-данные: `Piping.dcf` (EngineeringItems и связанные таблицы), `ProcessPower.dcf` (PnPProject и свойства проекта), выбранные чертежи/линии и вспомогательные XML/XLS/PSPC.
* Word API: Microsoft.Office.Interop.Word; альтернативно SautinSoft.Document.
* Заполнение: первая таблица основного документа, строки и ячейки по позициям; отдельные таблицы колонтитулов и жесткие номера ячеек.
* PDF: в найденном коде `ExportAsFixedFormat` не обнаружен.
* Повторное использование: алгоритмы извлечения данных — только через Plant adapter; документный mapping — референс для тестов, но Word слой требуется изолировать и переработать.
## Официальные материалы 2026
Сравнение ограничено официальными материалами Autodesk: [What's New 2026](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-WhatsNew/files/GUID-384C71E7-9012-48B1-95B2-D4C42EBCF423.htm), [Release Notes](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-ReleaseNotes/files/AUTOCAD_PLNT3D_2026_RELEASE_NOTES.html), [команды и системные переменные](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-65DE87DF-BF07-49A0-B026-FF51210E349A.htm). Эти источники не подтверждают эквивалентность корпоративной ВОР; списание плагина требует runtime-сравнения.
@@ -1,21 +0,0 @@
# Архитектура
```mermaid
flowchart TD
U[Пользователь/внешний запуск] --> E[P_Rec_BOP.exe]
E --> S[Settings.xml]
E --> P[Project.xml]
P --> D[Piping.dcf]
P --> PP[ProcessPower.dcf]
E --> F[Формы и фильтр чертежей/линий]
F --> C[Расчеты PipingElements/Welds]
C --> R[ReportWithWorder]
R --> W[Worder: Word PIA или SautinSoft]
W --> T[Шаблон.docx]
W --> O[DOCX в проектной папке]
E --> A[AcCoreConsole + ConsoleGetDrawingInformation.dll]
```
`Program.Main` последовательно читает настройки, запрашивает `Project.xml`, проверяет домен/диск N, определяет папку проекта, проверяет открытые DWG, читает DCF и показывает формы (`Program.cs:53-118`, `125-210`, `265-356`). После проверок запускается `ReportWithWorder.OutputReport()` и результат открывается через `Process.Start` (`Program.cs:726-770`).
Это не DLL, загружаемая Plant 3D. Сопряжение с Plant 3D реализовано через файловые базы проекта и внешний `AcCoreConsole`, а не через обнаруженную AutoCAD command registration.
@@ -1,16 +0,0 @@
# Пользовательский сценарий и точки входа
Точка входа — `P_Rec_BOP/Program.cs:53` (`static void Main(string[] args)`). Аргумент командной строки может быть путем к `Settings.xml` (`Program.cs:70-82`). Далее пользователь выбирает `Project.xml` в OpenFileDialog (`Program.cs:92-101`).
Сценарий:
1. Прочитать настройки и выбрать проект.
2. Проверить корпоративный домен и наличие `N:\` (`Program.cs:104-119`); это инфраструктурный gate.
3. Определить `Glob.sProjectFolder`, расположение отчета A/Q и наличие материалов НКР (`Program.cs:135-160`).
4. Проверить SQLite и отсутствие открытых чертежей (`Program.cs:163-188`).
5. Прочитать `Piping.dcf`, проверить `EngineeringItems` и принадлежность компонентов номерам линий (`Program.cs:191-261`).
6. Прочитать `ProcessPower.dcf` (`Program.cs:265-285`), заполнить форму основной надписи (`Program.cs:289-296`).
7. Проверить Z-координату и построить списки чертежей/линий; пользователь подтверждает выбор (`Program.cs:313-356`).
8. При отсутствии ошибок создать `ReportWithWorder`, построить документ и открыть его (`Program.cs:726-770`).
Команд AutoCAD `CommandMethod` и lifecycle `IExtensionApplication` в исходниках не обнаружено; результат зафиксирован в `evidence/commands-search.txt` как отсутствие совпадений. Это делает EXE внешним инструментом, даже если он использует AutoCAD console для чтения отдельных DWG.
@@ -1,16 +0,0 @@
# Совместимость 2019 → 2026
Подтвержденные привязки: `Settings.xml:7` — `C:\Program Files\Autodesk\AutoCAD 2019\accoreconsole.exe`; `P_Rec_BOP.csproj` — `.NET Framework 4.7`, x86, Office PIA 15 и x32 SQLite; `DrawingsInformation.cs:132` — комментарий AutoCAD 2019. Это потенциальные точки миграции, а не доказательство несовместимости.
Официальные материалы Autodesk 2026 описывают новые/измененные Plant 3D функции, в том числе улучшения проекта, 3D-моделирования и Ortho; отдельная официальная документация не подтверждает, что корпоративная ВОР, специфические DCF-запросы или внешний `ConsoleGetDrawingInformation.dll` заменяются штатной возможностью. Поэтому статус: `OFFICIAL_RESEARCH_REQUIRED`, runtime-снятие плагина не рекомендовано.
План адаптации:
* вынести чтение DCF и модели в `IPlantProjectDataProvider`;
* заменить AutoCAD 2019 console path конфигурацией и adapter 2026;
* отделить document-independent DTO/calculation от Word engine;
* заменить PIA-обязательность поздним COM или отдельным Word worker, проверить Office 64-bit;
* заменить x86 SQLite native dependency на проверенную 2026-совместимую сборку;
* сравнить golden DOCX/PDF и значения на тестовом копировании проекта.
Официальные источники: [Plant 3D 2026 What's New](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-WhatsNew/files/GUID-384C71E7-9012-48B1-95B2-D4C42EBCF423.htm), [Plant 3D 2026 Release Notes](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-ReleaseNotes/files/AUTOCAD_PLNT3D_2026_RELEASE_NOTES.html), [2026 commands/system variables](https://help.autodesk.com/cloudhelp/2026/ENU/Plant3D-UserGuide/files/GUID-65DE87DF-BF07-49A0-B026-FF51210E349A.htm).
@@ -1,12 +0,0 @@
# Зависимости
| Зависимость | Где | Назначение | Риск |
|---|---|---|---|
| Microsoft.Office.Interop.Word 15.0.0.0 | `P_Rec_BOP.csproj`, `Worder.cs` | Word COM, поля, таблицы, сохранение | Office PIA/версия/битность, COM lifecycle |
| SautinSoft.Document | csproj/lib, `Worder.cs` | альтернативный DOCX/RTF engine | лицензия, качество round-trip, бинарная зависимость |
| System.Data.SQLite x32 | csproj/lib, Program/SQLiteDataBase | чтение DCF SQLite | x86 и native DLL |
| `ConsoleGetDrawingInformation.dll` | csproj/DrawingsInformation | чтение сведений DWG через console | AutoCAD 2019 путь/API и временные копии |
| `accoreconsole.exe` | `Settings.xml` | извлечение данных из DWG | жесткий путь AutoCAD 2019 |
| внешние XLS/PSPC/XML | `Settings.xml`, `XMLFile.cs` | материалы, трассировка, НКР | сетевые пути и отсутствие версионирования |
Прямых ссылок на `AcMgd`, `AcDbMgd`, `PnP3dObjectsMgd` в проекте не найдено; Plant coupling — через DCF и console helper. Полный безопасный список ссылок: `evidence/project-references.csv`; поиск API: `evidence/plant-api-search.txt`.
@@ -1,9 +0,0 @@
# Формирование Word-документа
`ReportWithWorder.OutputReport` проверяет `.docx`-шаблон, создает каталог проекта и имя `Ведомость объемов работ (yyyy.MM.dd HH.mm.ss).docx` (`ReportWithWorder.cs:30-54`). Движок по умолчанию — Microsoft Office Interop, но пользователю предлагается переключиться на SautinSoft (`ReportWithWorder.cs:54-85`).
`Worder.Load` копирует шаблон в `%TEMP%` (`Worder.cs:305-322`). Office-ветка создает `Word.Application`, открывает временный документ, берет `Tables[1]`, таблицы footer первой и основной страницы, делает Word видимым и меняет View/Selection (`Worder.cs:326-355`). SautinSoft-ветка загружает DocumentCore и берет первую таблицу и footer-таблицы по индексам (`Worder.cs:357-370`).
Основные строки результата строятся `ReportWithWorder.cs:93-1287`: группы `PipingElement` и сварные стыки превращаются в строки `Cells12345TableRow`; строки добавляются через `Worder.AddNewRowToTable`. `Worder.cs:588-626` показывает, что Office использует `_wordTable.Rows.Add(ref oMissing)`, а SautinSoft клонирует вторую строку.
Поля обновляются в основном тексте и headers/footers (`Worder.cs:742-763`), затем документ сохраняется, закрывается и Word завершается (`Worder.cs:383-420`). Важный риск: COM-объекты не освобождаются через `Marshal.FinalReleaseComObject`, а `Load`/`SaveAndUnload` ловят исключения и продолжают путь копирования (`Worder.cs:372-380`, `508-519`); возможны поврежденный результат и зависший WINWORD.EXE.
@@ -1 +0,0 @@
NO_MATCH
@@ -1,4 +0,0 @@
command_or_entrypoint,file,line,class_or_method,user_purpose,confidence
Main,P_Rec_BOP/Program.cs,53,Program.Main,Standalone WinForms entrypoint,confirmed
AutoCAD command registration,none,none,none,No CommandMethod/IExtensionApplication found,confirmed
Report generation,P_Rec_BOP/Program.cs,745,ReportWithWorder.OutputReport,Create and open VOR DOCX,confirmed
1 command_or_entrypoint file line class_or_method user_purpose confidence
2 Main P_Rec_BOP/Program.cs 53 Program.Main Standalone WinForms entrypoint confirmed
3 AutoCAD command registration none none none No CommandMethod/IExtensionApplication found confirmed
4 Report generation P_Rec_BOP/Program.cs 745 ReportWithWorder.OutputReport Create and open VOR DOCX confirmed
@@ -1,7 +0,0 @@
field,source,transform,destination,evidence
ProjectName,ProcessPower.dcf/PnPProject or SetMainTitle UI,string pass-through,footer cell 7,SetMainTitle.cs:21-24; Worder.cs:812-820
DocumentName,ReportWithWorder constant,string pass-through,first-page footer cell 24,ReportWithWorder.cs:1308-1310; Worder.cs:821-826
DesignerRows,SetMainTitle UI,string pass-through,footer title cells,Worder.cs:827 onward
PipingElements,Piping.dcf tables,group/round/format,main table rows,ReportWithWorder.cs:93-190
Welds,Piping.dcf and selected line data,group by line/control,main table rows,Welds.cs; ReportWithWorder.cs
OutputFileName,current date/time,yyyy.MM.dd HH.mm.ss,project report folder,ReportWithWorder.cs:49-52
1 field source transform destination evidence
2 ProjectName ProcessPower.dcf/PnPProject or SetMainTitle UI string pass-through footer cell 7 SetMainTitle.cs:21-24; Worder.cs:812-820
3 DocumentName ReportWithWorder constant string pass-through first-page footer cell 24 ReportWithWorder.cs:1308-1310; Worder.cs:821-826
4 DesignerRows SetMainTitle UI string pass-through footer title cells Worder.cs:827 onward
5 PipingElements Piping.dcf tables group/round/format main table rows ReportWithWorder.cs:93-190
6 Welds Piping.dcf and selected line data group by line/control main table rows Welds.cs; ReportWithWorder.cs
7 OutputFileName current date/time yyyy.MM.dd HH.mm.ss project report folder ReportWithWorder.cs:49-52
@@ -1,150 +0,0 @@
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:166: - добавление проверки библиотеки SQLite при старте программы
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:89:добавлена проверка библиотеки SQLite на работоспособность при старте
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:2://using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:3:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:10: // Класс для работы с CSV-файлами
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:11: class CSVFile
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:13: public DataTable dtRows; // таблица с записями CSV-файла
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:14: public const string csCSVDelimeter = ";"; // разделитель CSV-файла
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:15: const bool cbIncludeHeader = true; // включить заголовки полей CSV-файла
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:31: // Прочитать CSV-файл
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:41: string[] asColumnNames = srStreamReader.ReadLine().Split(csCSVDelimeter.ToCharArray());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:81: //This will work for Excel, Access, etc. default exports.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:90: string[] asFieldValues = sRecord.Split(csCSVDelimeter.ToCharArray());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:101: // Сохранить CSV-файл
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:104: // StringBuilder для содержимого CSV-файла
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:114: sbResult.Append(csCSVDelimeter);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:125: string sFieldValue = string.Format("{0}", oFieldValue).Replace(csCSVDelimeter, "\"" + csCSVDelimeter + "\"");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:126: sbResult.Append(sFieldValue + csCSVDelimeter);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:144: // Сохранить CSV-файл
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:145: using (StreamWriter swStreamWriter = new StreamWriter(sFullFileName, false, Encoding.GetEncoding(1251)))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:147: swStreamWriter.Write(sbResult.ToString());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:6:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:7:using System.Data.SqlClient;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:8:using System.Data.SQLite;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:9:using System.Xml.Linq;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:159: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:211: //System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:256: System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:257: System.Data.DataTable tablePnPDataLinks = _projectPipingDcf.Tables["PnPDataLinks"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:258: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:259: System.Data.DataTable tableP3dLineGroupPartRelationship = _projectPipingDcf.Tables["P3dLineGroupPartRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:260: System.Data.DataTable tableP3dLineGroup = _projectPipingDcf.Tables["P3dLineGroup"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:262: // System.Data.DataTable tableP3dDrawingLineGroupRelationship = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:472: System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:473: System.Data.DataTable tablePnPDataLinks = _projectPipingDcf.Tables["PnPDataLinks"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:474: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:475: System.Data.DataTable tableP3dLineGroupPartRelationship = _projectPipingDcf.Tables["P3dLineGroupPartRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:476: System.Data.DataTable tableP3dLineGroup = _projectPipingDcf.Tables["P3dLineGroup"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:478: // System.Data.DataTable tableP3dDrawingLineGroupRelationship = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:480: System.Data.DataTable tablePipe = _projectPipingDcf.Tables["Pipe"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:483: System.Data.DataTable tablePipeBend = null;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:7:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:22: System.Data.DataTable dtDrawingsInformation;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:64: using (StreamWriter swScriptFile = new StreamWriter(Path.GetTempPath() + "\\" + sScriptFileName, false, Encoding.GetEncoding(1251)))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:66: swScriptFile.Write(sbScriptFile.ToString());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:95: dtDrawingsInformation = CSVFile.ReadFile(Path.GetTempPath() + "\\" + sReportFileName);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:128: private System.Data.DataTable ApplyConsoleGetDrawingInformationLibToDwgs(List<Drawing> dwgItemList, string sCSVDelimeter)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:130: System.Data.DataTable resTable = new System.Data.DataTable();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:211: scr += "\"" + sCSVDelimeter + "\"";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:248: using (StreamWriter swScriptFile = new StreamWriter(
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:251: swScriptFile.Write(sbScriptFile.ToString());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:291: resTable = CSVFile.ReadFile(sOutputFilePath);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Glob.cs:35: // читается в [CSVFile.cs], [Program.cs], [SetMainTitle.cs]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:5:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:21: public static bool AllMaterialsInXml(string[] asSpecPaths, string sTracingSpecPath)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:143: DataSet dsSpec = SQLiteDataBase.ReadDB(sSpecFile);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:300: Program.IsErrorCodeNotOK(ErrorCode.ecCatchInAllMaterialsInXml);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:3:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:158: DataSet dsTracingSpec = SQLiteDataBase.ReadDB(Glob.sTracingSpecPath);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:4:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:14:using System.Data.SQLite;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:82: if (XMLFile.ReadXMLFile() != 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:163: // проверяем работоспособность модуля SQLite
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:168: using (SQLiteConnection sqlcConnection = new SQLiteConnection())
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:177: Glob.TracedMessageBoxShow("Проблема с подключением к библиотекам SQLite");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:200: isSqlite = sr.ReadLine().StartsWith("SQLite");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:208: dsPipingDCF = SQLiteDataBase.ReadDB(Glob.sProjectFolder + "\\Piping.dcf");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:273: isSqlite = sr.ReadLine().StartsWith("SQLite");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:281: dsProcessPowerDCF = SQLiteDataBase.ReadDB(Glob.sProjectFolder + "\\ProcessPower.dcf");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:556: if (!Materials.AllMaterialsInXml(Glob.workingSpecPathList.ToArray(), Glob.sTracingSpecPath))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:579: //if (!Specs.AllSpecsInXml()) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:639: CSVFile csvfErrorNKRs = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:640: csvfErrorNKRs.dtRows = new System.Data.DataTable();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:752: using (StreamWriter sZCorrectionFile = new StreamWriter(
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:757: sZCorrectionFile.WriteLine(dZCorrection.ToString());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:959: ecCatchInAllMaterialsInXml = 40, // catch в методе AllMaterialsInXml
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:962: ecNoMetricNominalDiameterFoundInMaterial = 43, // невозможно определить метрический номинальный диаметр для британского в AllMaterialsInXml
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:974: ecNoImperialNominalDiameterFoundInMaterial = 55, // невозможно определить британский номинальный диаметр для метрического в AllMaterialsInXml
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\lib\Readme.txt:2:System.Data.SQLite.dll
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\lib\Readme.txt:3:SQLite.Interop.dll
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:56: <Compile Include="CSVFile.cs" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:89: <Compile Include="SQLiteDataBase.cs" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:96: <Compile Include="XLSFile.cs" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:109: <Reference Include="System.Data" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:110: <Reference Include="System.Data.DataSetExtensions" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:111: <Reference Include="System.Data.SQLite">
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:112: <HintPath>lib\x32\System.Data.SQLite.dll</HintPath>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:117: <Reference Include="System.Xml.Linq" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:165: <Content Include="SQLite.Interop.dll">
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:7:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:120: dsMaterials = XLSFile.ReadFile(sMaterialsFile);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:133: string sLines = srScriptFile.ReadToEnd();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:178: foreach (DataTable dtXLSheet in dsMaterials.Tables)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:180: DataRow[] adrMaterial = dtXLSheet.Select("[Guid]='" + gTag.ToString() + "'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:4:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:4:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:72: bool bFromCSV = false;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:100: DataTable dtSource = CSVFile.ReadFile(sProjectPropertiesFile);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:117: bFromCSV = true;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:123: if (!bFromCSV)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:184: if (bFromCSV || bFromProject)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:255: CSVFile csvfProjectProperties = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:4:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:5:using System.Data.SqlClient;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:8:using System.Xml.Linq;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:32: XElement dcfAsXml = XElement.Load(sFileName);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:33: IEnumerable<string> names = from item in dcfAsXml.Descendants("Parameter")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:37: names = from item in dcfAsXml.Descendants("Parameter")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:55: using (sqldaAdapter = new SqlDataAdapter("SELECT * FROM [" + sTableName + "]", sqlcConnection))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Specs.cs:18: //public static bool AllSpecsInXml() {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:2:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:3:using System.Data.SQLite;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:11: // Класс для чтения базы данных SQLite
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:12: class SQLiteDataBase
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:14: // Прочитать базу данных SQLite
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:20: SQLiteDataAdapter sqldaAdapter = null; // SQLiteDataAdapter для чтения таблицы БД
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:25: using (SQLiteConnection sqlcConnection = new SQLiteConnection())
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:37: using (sqldaAdapter = new SQLiteDataAdapter("SELECT * FROM [" + sTableName + "]", sqlcConnection))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:3:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:3:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:2:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:18: // Создать объект CSVFile для вывода информации по PipingElements.lpePipingElements
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:19: CSVFile csvfPipingElements = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:72: // Создать объект CSVFile для вывода информации по ValveGroups.lvgValveGroups
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:73: CSVFile csvfValves = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:112: // Создать объект CSVFile для вывода информации по SupportGroups.lsgSupportGroups
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:113: CSVFile csvfSupports = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:148: // Создать объект CSVFile для вывода информации по SupportGroups.lnkrNKRGroups
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:149: CSVFile csvfNKRs = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:186: // Создать объект CSVFile для вывода информации по Welds.lwlnLineNumbers
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:187: CSVFile csvfWeldControlForLineNumbers = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:230: // Создать объект CSVFile для вывода информации по Welds.lpWelds
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:231: CSVFile csvfWeldControlTotal = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:256: // Создать объект CSVFile для вывода информации по Welds.lhtWelds
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:257: CSVFile csvfWeldHeatTreatment = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:310: // Создать объект CSVFile для вывода информации по TestLineNumbers.lpPiping
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:311: CSVFile csvfPipingTest = new CSVFile();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:2:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:3:using System.Data.OleDb;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:9: // Класс для чтения XLS-файла
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:10: class XLSFile
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:15: DataSet dsXLSFile = new DataSet();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:23: "Data Source=" + sFileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:28: DataTable dtDbSchemaTable = odbcConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); // DataTable для хранения схемы файла Excel
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:29: //string[] asExcelSheets = new String[dtDbSchemaTable.Rows.Count]; // массив с именами листов файла Excel
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:50: dsXLSFile.Tables.Add(dtTempDataTable);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:63: return dsXLSFile;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:4:using System.Data;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XMLFile.cs:2:using System.Xml.Linq;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:3:using System.Data;
@@ -1,9 +0,0 @@
file,line,api,purpose,risk,reuse
P_Rec_BOP/Worder.cs,331,Word.Application,Create Word COM server,PIA/COM lifecycle,DO_NOT_REUSE
P_Rec_BOP/Worder.cs,332,Documents.Open,Open temporary template copy,Office/version,REUSE_AFTER_ISOLATION
P_Rec_BOP/Worder.cs,333,Tables[1],Select main output table,Template schema fragility,REIMPLEMENT_WITH_SAME_BEHAVIOR
P_Rec_BOP/Worder.cs,335,Sections[1].Footers[...].Range.Tables[1],Select title block footer tables,Template schema fragility,REIMPLEMENT_WITH_SAME_BEHAVIOR
P_Rec_BOP/Worder.cs,609,Rows.Add,Append report rows,Fixed row assumptions,REIMPLEMENT_WITH_SAME_BEHAVIOR
P_Rec_BOP/Worder.cs,748,Fields.Update,Update document fields,Word automation,REUSE_AFTER_ISOLATION
P_Rec_BOP/Worder.cs,755,HeaderFooter.Range.Fields.Update,Update header/footer fields,Word automation,REUSE_AFTER_ISOLATION
P_Rec_BOP/Worder.cs,416,Document.Save,Save result,COM cleanup,REUSE_AFTER_ISOLATION
1 file line api purpose risk reuse
2 P_Rec_BOP/Worder.cs 331 Word.Application Create Word COM server PIA/COM lifecycle DO_NOT_REUSE
3 P_Rec_BOP/Worder.cs 332 Documents.Open Open temporary template copy Office/version REUSE_AFTER_ISOLATION
4 P_Rec_BOP/Worder.cs 333 Tables[1] Select main output table Template schema fragility REIMPLEMENT_WITH_SAME_BEHAVIOR
5 P_Rec_BOP/Worder.cs 335 Sections[1].Footers[...].Range.Tables[1] Select title block footer tables Template schema fragility REIMPLEMENT_WITH_SAME_BEHAVIOR
6 P_Rec_BOP/Worder.cs 609 Rows.Add Append report rows Fixed row assumptions REIMPLEMENT_WITH_SAME_BEHAVIOR
7 P_Rec_BOP/Worder.cs 748 Fields.Update Update document fields Word automation REUSE_AFTER_ISOLATION
8 P_Rec_BOP/Worder.cs 755 HeaderFooter.Range.Fields.Update Update header/footer fields Word automation REUSE_AFTER_ISOLATION
9 P_Rec_BOP/Worder.cs 416 Document.Save Save result COM cleanup REUSE_AFTER_ISOLATION
@@ -1,58 +0,0 @@
"RelativePath","Extension","Category","Length","LastWriteTimeUtc"
".editorconfig",".editorconfig","other","1158","2024-09-17T10:28:36.0000000Z"
".gitattributes",".gitattributes","other","1663","2024-09-17T10:28:36.0000000Z"
".gitignore",".gitignore","other","6578","2024-09-17T10:28:36.0000000Z"
"CHANGELOG.md",".md","other","6550","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP.sln",".sln","project","1077","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\App.config",".config","configuration","217","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Components.cs",".cs","source","14041","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\ConsoleGetDrawingInformation.dll",".dll","binary","17920","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\CSVFile.cs",".cs","source","7037","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\DrawingsAndLinenumbers.cs",".cs","source","52738","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\DrawingsInformation.cs",".cs","source","34474","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Glob.cs",".cs","source","6410","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\InputBox.cs",".cs","source","2033","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\ConsoleGetDrawingInformation.dll",".dll","binary","17920","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\Precompiled Binaries for 64-bit Windows (.NET Framework 4.6).txt",".txt","other","0","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\Readme.txt",".txt","other","369","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\SautinSoft.Document.dll",".dll","binary","5899264","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\SQLite.Interop.dll",".dll","binary","1626624","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\System.Data.SQLite.dll",".dll","binary","381952","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.dll",".dll","binary","940672","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.xml",".xml","other","2898934","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\x32\SQLite.Interop.dll",".dll","binary","1248768","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\lib\x32\System.Data.SQLite.dll",".dll","binary","381952","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Materials.cs",".cs","source","20141","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\P_Rec_BOP.csproj",".csproj","project","7590","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\PipingElements.cs",".cs","source","100089","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Program.cs",".cs","source","61679","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Properties\AssemblyInfo.cs",".cs","source","1825","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Properties\Resources.Designer.cs",".cs","source","3607","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Properties\Resources.resx",".resx","resource","6327","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\PYFile.cs",".cs","source","14445","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\ReportWithWorder.cs",".cs","source","71204","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Resources\TitleBox1.png",".png","resource","37188","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Resources\TitleBox2.png",".png","resource","35579","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\ReversePolishNotation.cs",".cs","source","27685","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SelectDrawingsAndLinenumbers.cs",".cs","source","25971","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SelectDrawingsAndLinenumbers.designer.cs",".cs","source","8468","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SelectDrawingsAndLinenumbers.resx",".resx","resource","5698","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SetMainTitle.cs",".cs","source","15478","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SetMainTitle.designer.cs",".cs","source","9881","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SetMainTitle.resx",".resx","resource","62444","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Settings.xml",".xml","other","49258","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Specs.cs",".cs","source","7094","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SQLDataBase.cs",".cs","source","4038","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SQLite.Interop.dll",".dll","binary","1248768","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\SQLiteDataBase.cs",".cs","source","3075","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Supports.cs",".cs","source","66253","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\TestLineNumbers.cs",".cs","source","14600","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Valves.cs",".cs","source","40930","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Versions.cs",".cs","source","19162","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Welds.cs",".cs","source","144425","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\Worder.cs",".cs","source","41818","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\XLSFile.cs",".cs","source","3358","2024-09-17T10:28:36.0000000Z"
"P_Rec_BOP\XMLFile.cs",".cs","source","20822","2024-09-17T10:28:36.0000000Z"
"README.md",".md","other","8712","2024-09-17T10:28:36.0000000Z"
"templates\Шаблон.docx",".docx","template/document","88534","2024-09-17T10:28:36.0000000Z"
"Комментарии.txt",".txt","other","1853","2024-09-17T10:28:36.0000000Z"
1 RelativePath Extension Category Length LastWriteTimeUtc
2 .editorconfig .editorconfig other 1158 2024-09-17T10:28:36.0000000Z
3 .gitattributes .gitattributes other 1663 2024-09-17T10:28:36.0000000Z
4 .gitignore .gitignore other 6578 2024-09-17T10:28:36.0000000Z
5 CHANGELOG.md .md other 6550 2024-09-17T10:28:36.0000000Z
6 P_Rec_BOP.sln .sln project 1077 2024-09-17T10:28:36.0000000Z
7 P_Rec_BOP\App.config .config configuration 217 2024-09-17T10:28:36.0000000Z
8 P_Rec_BOP\Components.cs .cs source 14041 2024-09-17T10:28:36.0000000Z
9 P_Rec_BOP\ConsoleGetDrawingInformation.dll .dll binary 17920 2024-09-17T10:28:36.0000000Z
10 P_Rec_BOP\CSVFile.cs .cs source 7037 2024-09-17T10:28:36.0000000Z
11 P_Rec_BOP\DrawingsAndLinenumbers.cs .cs source 52738 2024-09-17T10:28:36.0000000Z
12 P_Rec_BOP\DrawingsInformation.cs .cs source 34474 2024-09-17T10:28:36.0000000Z
13 P_Rec_BOP\Glob.cs .cs source 6410 2024-09-17T10:28:36.0000000Z
14 P_Rec_BOP\InputBox.cs .cs source 2033 2024-09-17T10:28:36.0000000Z
15 P_Rec_BOP\lib\ConsoleGetDrawingInformation.dll .dll binary 17920 2024-09-17T10:28:36.0000000Z
16 P_Rec_BOP\lib\Precompiled Binaries for 64-bit Windows (.NET Framework 4.6).txt .txt other 0 2024-09-17T10:28:36.0000000Z
17 P_Rec_BOP\lib\Readme.txt .txt other 369 2024-09-17T10:28:36.0000000Z
18 P_Rec_BOP\lib\SautinSoft.Document.dll .dll binary 5899264 2024-09-17T10:28:36.0000000Z
19 P_Rec_BOP\lib\SQLite.Interop.dll .dll binary 1626624 2024-09-17T10:28:36.0000000Z
20 P_Rec_BOP\lib\System.Data.SQLite.dll .dll binary 381952 2024-09-17T10:28:36.0000000Z
21 P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.dll .dll binary 940672 2024-09-17T10:28:36.0000000Z
22 P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.xml .xml other 2898934 2024-09-17T10:28:36.0000000Z
23 P_Rec_BOP\lib\x32\SQLite.Interop.dll .dll binary 1248768 2024-09-17T10:28:36.0000000Z
24 P_Rec_BOP\lib\x32\System.Data.SQLite.dll .dll binary 381952 2024-09-17T10:28:36.0000000Z
25 P_Rec_BOP\Materials.cs .cs source 20141 2024-09-17T10:28:36.0000000Z
26 P_Rec_BOP\P_Rec_BOP.csproj .csproj project 7590 2024-09-17T10:28:36.0000000Z
27 P_Rec_BOP\PipingElements.cs .cs source 100089 2024-09-17T10:28:36.0000000Z
28 P_Rec_BOP\Program.cs .cs source 61679 2024-09-17T10:28:36.0000000Z
29 P_Rec_BOP\Properties\AssemblyInfo.cs .cs source 1825 2024-09-17T10:28:36.0000000Z
30 P_Rec_BOP\Properties\Resources.Designer.cs .cs source 3607 2024-09-17T10:28:36.0000000Z
31 P_Rec_BOP\Properties\Resources.resx .resx resource 6327 2024-09-17T10:28:36.0000000Z
32 P_Rec_BOP\PYFile.cs .cs source 14445 2024-09-17T10:28:36.0000000Z
33 P_Rec_BOP\ReportWithWorder.cs .cs source 71204 2024-09-17T10:28:36.0000000Z
34 P_Rec_BOP\Resources\TitleBox1.png .png resource 37188 2024-09-17T10:28:36.0000000Z
35 P_Rec_BOP\Resources\TitleBox2.png .png resource 35579 2024-09-17T10:28:36.0000000Z
36 P_Rec_BOP\ReversePolishNotation.cs .cs source 27685 2024-09-17T10:28:36.0000000Z
37 P_Rec_BOP\SelectDrawingsAndLinenumbers.cs .cs source 25971 2024-09-17T10:28:36.0000000Z
38 P_Rec_BOP\SelectDrawingsAndLinenumbers.designer.cs .cs source 8468 2024-09-17T10:28:36.0000000Z
39 P_Rec_BOP\SelectDrawingsAndLinenumbers.resx .resx resource 5698 2024-09-17T10:28:36.0000000Z
40 P_Rec_BOP\SetMainTitle.cs .cs source 15478 2024-09-17T10:28:36.0000000Z
41 P_Rec_BOP\SetMainTitle.designer.cs .cs source 9881 2024-09-17T10:28:36.0000000Z
42 P_Rec_BOP\SetMainTitle.resx .resx resource 62444 2024-09-17T10:28:36.0000000Z
43 P_Rec_BOP\Settings.xml .xml other 49258 2024-09-17T10:28:36.0000000Z
44 P_Rec_BOP\Specs.cs .cs source 7094 2024-09-17T10:28:36.0000000Z
45 P_Rec_BOP\SQLDataBase.cs .cs source 4038 2024-09-17T10:28:36.0000000Z
46 P_Rec_BOP\SQLite.Interop.dll .dll binary 1248768 2024-09-17T10:28:36.0000000Z
47 P_Rec_BOP\SQLiteDataBase.cs .cs source 3075 2024-09-17T10:28:36.0000000Z
48 P_Rec_BOP\Supports.cs .cs source 66253 2024-09-17T10:28:36.0000000Z
49 P_Rec_BOP\TestLineNumbers.cs .cs source 14600 2024-09-17T10:28:36.0000000Z
50 P_Rec_BOP\Valves.cs .cs source 40930 2024-09-17T10:28:36.0000000Z
51 P_Rec_BOP\Versions.cs .cs source 19162 2024-09-17T10:28:36.0000000Z
52 P_Rec_BOP\Welds.cs .cs source 144425 2024-09-17T10:28:36.0000000Z
53 P_Rec_BOP\Worder.cs .cs source 41818 2024-09-17T10:28:36.0000000Z
54 P_Rec_BOP\XLSFile.cs .cs source 3358 2024-09-17T10:28:36.0000000Z
55 P_Rec_BOP\XMLFile.cs .cs source 20822 2024-09-17T10:28:36.0000000Z
56 README.md .md other 8712 2024-09-17T10:28:36.0000000Z
57 templates\Шаблон.docx .docx template/document 88534 2024-09-17T10:28:36.0000000Z
58 Комментарии.txt .txt other 1853 2024-09-17T10:28:36.0000000Z
@@ -1,58 +0,0 @@
"RelativePath","Length","SHA256"
".editorconfig","1158","0D35A75B9504BE5DB63CB11D44DB059825746DCF2FB6AAAB29A8798F0758252B"
".gitattributes","1663","AD78EDB5DFD7802DC618E3586DA0DCEFD2A4F311A64A359CC16398DCD06025C9"
".gitignore","6578","E9B79DE00820EBEB34759EBDEEF03EC5A3DA8CC79E337B0A8AFABA72A86BD7C4"
"CHANGELOG.md","6550","E9141F4781860034B2BA0617B4B84EB8E465B631E9F9835F320B542ECBEDC6EE"
"P_Rec_BOP.sln","1077","BE2D871B2399E0210837EB47F4B66D52CB79D3581F1099F3C95ED66D45261B02"
"P_Rec_BOP\App.config","217","3ACCE006549322AA227A742F945A57CCC951950DFADDD069654B9A9A54178A29"
"P_Rec_BOP\Components.cs","14041","93E4F2620CDD2C57B021F7351FFFE70184ED56D1E0BBD02A22C1DF8EC0F08021"
"P_Rec_BOP\ConsoleGetDrawingInformation.dll","17920","9EC139C1973B58EF2072086C16CD5824BF45B8B7D835018B37B1A516A4EE5D1C"
"P_Rec_BOP\CSVFile.cs","7037","B84B579A69477A8BE41D100C3478493536A1D55462AFAB8C55C88DA64DB0BF95"
"P_Rec_BOP\DrawingsAndLinenumbers.cs","52738","A9907AB6B46EB8C0339D2F77BDB0F659A502E051828D2D16E3E6932A258C7D1A"
"P_Rec_BOP\DrawingsInformation.cs","34474","068B63AC2B63E5AC936D258C450946650CE09F989A612C109341BEACAB9BA0E2"
"P_Rec_BOP\Glob.cs","6410","EC0E26CB215CEEB99BF4CCD5D82D36B402E607D7FEC99830E4C2E2F2377960FC"
"P_Rec_BOP\InputBox.cs","2033","A4EE6B38E58FDCFDD86B1E8ACF90BEBFBEAFCCA7AF70AE818FD8454AC2F613A3"
"P_Rec_BOP\lib\ConsoleGetDrawingInformation.dll","17920","9EC139C1973B58EF2072086C16CD5824BF45B8B7D835018B37B1A516A4EE5D1C"
"P_Rec_BOP\lib\Precompiled Binaries for 64-bit Windows (.NET Framework 4.6).txt","0","E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
"P_Rec_BOP\lib\Readme.txt","369","A7CE8A8E1A272B1A9DD6D5DE24CBA9C1341A50E59F1CE103EF5A289D90BC74FE"
"P_Rec_BOP\lib\SautinSoft.Document.dll","5899264","960DE19C66F486B1954B1E6E55DF13683F169D8955EF05BE7073B4B11BEE4DF7"
"P_Rec_BOP\lib\SQLite.Interop.dll","1626624","B7DFA963A09C21AE3EE7642416A168EEDBE690416C30C274E1666873117DF06D"
"P_Rec_BOP\lib\System.Data.SQLite.dll","381952","AC20FF6022AB6E5DAA9D1CA620941399AE4094CC72FE988EC92024A465E99EE3"
"P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.dll","940672","23B1A58D7745524EFD87D3740E8363FE34D766E159C28BDF9FF2AABC79ED72D0"
"P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.xml","2898934","76D668B99C41EBD7577111EAE2874FAF44995FD8EB20BF9F6175C4E22E09D5FD"
"P_Rec_BOP\lib\x32\SQLite.Interop.dll","1248768","E86066B2C0B9D00D75BFA5C4F7CDAC63BC520A70B72D6A58283804F4365A705B"
"P_Rec_BOP\lib\x32\System.Data.SQLite.dll","381952","AC20FF6022AB6E5DAA9D1CA620941399AE4094CC72FE988EC92024A465E99EE3"
"P_Rec_BOP\Materials.cs","20141","E9D759B563AB67C1577B49E5F70031A9B33E6F9425D089C4E908501402A42F66"
"P_Rec_BOP\P_Rec_BOP.csproj","7590","21C0D403A5F9EA8998CC718D63212446FDC1FD17709EC80BA8E909154422EDE4"
"P_Rec_BOP\PipingElements.cs","100089","89CC9C85FFFBA71395A293B112D270A33D4C339B118515341665905EDF5B9F71"
"P_Rec_BOP\Program.cs","61679","4EC712986EB584D75258F2714CF3035C06B5BF528ADC6458AD2D15190525CA7D"
"P_Rec_BOP\Properties\AssemblyInfo.cs","1825","453418BB1A77E5EE2E2ABA2DED4FFC6C7F748850B987DDEC60C85A73F2241BF6"
"P_Rec_BOP\Properties\Resources.Designer.cs","3607","B23A2C4AA1B1F2487292C8937B686B216B282158A82A098974B64CF45A48E458"
"P_Rec_BOP\Properties\Resources.resx","6327","98F984C20982C6EB8825A8E8701D56C8B80F2E7FCD874FD929A1F4611721E4E8"
"P_Rec_BOP\PYFile.cs","14445","A2FF325E1AA7CF67261951FD6EF2719CBB4BE4424E6AB6F7DA4309E7DD9B4771"
"P_Rec_BOP\ReportWithWorder.cs","71204","4EB13368BA7EC3F166612EB0093C9FACAFD1F4C34DA1EC20922E64E512D3B265"
"P_Rec_BOP\Resources\TitleBox1.png","37188","358E4618CA2AFA6DAB2BFC29FDB2316B1B8DDD472932A73AE991CB4110E93674"
"P_Rec_BOP\Resources\TitleBox2.png","35579","7C6837B130802983CA3D407EA56F46B148CDBFCB5B6B503EBE746F8945D98F41"
"P_Rec_BOP\ReversePolishNotation.cs","27685","764D375518BC1CB813DCC07BD60FFAA5D9908F4F5FDEFA109F690411340366BD"
"P_Rec_BOP\SelectDrawingsAndLinenumbers.cs","25971","6DE460137AD18ACCB80568F5C88C72BA7627CA7A657BFA87FF82C78DD571C596"
"P_Rec_BOP\SelectDrawingsAndLinenumbers.designer.cs","8468","792FDBC7D3D7C0638FFED1602106201D9300C9087749F290B9B8D984F2D6B7AD"
"P_Rec_BOP\SelectDrawingsAndLinenumbers.resx","5698","4D3EE9059F5B98AB1806F6916EBEA2A8C56023F8C63DDFD80B7378D27D1AA0F6"
"P_Rec_BOP\SetMainTitle.cs","15478","DD18254BE4653D0D419A92849B12665BA48C8E59B65C305E88EE4C65636617D9"
"P_Rec_BOP\SetMainTitle.designer.cs","9881","99409F220F85DFBAE0BC98D734B959001076BC9B1A9D620D6A354CF9C547EF37"
"P_Rec_BOP\SetMainTitle.resx","62444","CEB607A1CEB9B4AA262F4C779F2ED5AF730B8661A0031C63C02E8B425CA84EAF"
"P_Rec_BOP\Settings.xml","49258","AAEF4762FC246F8ABC5965FA5E6283DFB1716CCB9F1462EBDAE37CAD4847C136"
"P_Rec_BOP\Specs.cs","7094","E92FB765BEB5F1924F27D84FC61BD2DE5770C6D68525A2A755FBD30360A3EDA8"
"P_Rec_BOP\SQLDataBase.cs","4038","D1087DF5C777BF2B2F8A6700D0EE3AA6003B45C1BC01F52C6895F00BFB1043CD"
"P_Rec_BOP\SQLite.Interop.dll","1248768","E86066B2C0B9D00D75BFA5C4F7CDAC63BC520A70B72D6A58283804F4365A705B"
"P_Rec_BOP\SQLiteDataBase.cs","3075","424B09DB18D63284932AE8591C950D726DB57759A28F85B280BD8A0B1B719A11"
"P_Rec_BOP\Supports.cs","66253","625F261E8690A26F82F94FB193DEB4388699DCC6469E922ED38EF1CD4038B79F"
"P_Rec_BOP\TestLineNumbers.cs","14600","9E90DA99AF0DC84E8B334CE58CB8B5434BCA668EBDC83DDFEF1A33242051432F"
"P_Rec_BOP\Valves.cs","40930","D61C6ED91864535542795EF63B6858F79DBD7EFCD1DD1319B2DD3E9641EF42A7"
"P_Rec_BOP\Versions.cs","19162","BC0E748C956C00280E043A451BDDE831352A54AF79B087699002C63FD7AC0144"
"P_Rec_BOP\Welds.cs","144425","0F477FAD844FFFF59872C0C8C1E229846ADB1E2E9DA3C53B092A335EC5A04507"
"P_Rec_BOP\Worder.cs","41818","51FC57C057146B75AB9EF9F62DEDE4DB92BEA673B033F7184F67C33A0D1EF4ED"
"P_Rec_BOP\XLSFile.cs","3358","FD0C4B0A899EE98648786C8327A0AEF5EC9DBE1A0C8239CA1235B718D827C6B9"
"P_Rec_BOP\XMLFile.cs","20822","4075FDC3B58AECED0A6FF3DF62834B682B71F9BF601750FE67D7B06A9811393D"
"README.md","8712","CAA5BF352FAA414354909E49B29183125F91D1890892C27345E00B53685435CB"
"templates\Шаблон.docx","88534","C669900F2D7D8A3B80BF6898FE80B0F0A6CF4F38694694A66367E487EB3EA79B"
"Комментарии.txt","1853","80FB6E56EF3797EECDF59E6530927E5CACD8B1B82B73636B648749F0DF05DCA8"
1 RelativePath Length SHA256
2 .editorconfig 1158 0D35A75B9504BE5DB63CB11D44DB059825746DCF2FB6AAAB29A8798F0758252B
3 .gitattributes 1663 AD78EDB5DFD7802DC618E3586DA0DCEFD2A4F311A64A359CC16398DCD06025C9
4 .gitignore 6578 E9B79DE00820EBEB34759EBDEEF03EC5A3DA8CC79E337B0A8AFABA72A86BD7C4
5 CHANGELOG.md 6550 E9141F4781860034B2BA0617B4B84EB8E465B631E9F9835F320B542ECBEDC6EE
6 P_Rec_BOP.sln 1077 BE2D871B2399E0210837EB47F4B66D52CB79D3581F1099F3C95ED66D45261B02
7 P_Rec_BOP\App.config 217 3ACCE006549322AA227A742F945A57CCC951950DFADDD069654B9A9A54178A29
8 P_Rec_BOP\Components.cs 14041 93E4F2620CDD2C57B021F7351FFFE70184ED56D1E0BBD02A22C1DF8EC0F08021
9 P_Rec_BOP\ConsoleGetDrawingInformation.dll 17920 9EC139C1973B58EF2072086C16CD5824BF45B8B7D835018B37B1A516A4EE5D1C
10 P_Rec_BOP\CSVFile.cs 7037 B84B579A69477A8BE41D100C3478493536A1D55462AFAB8C55C88DA64DB0BF95
11 P_Rec_BOP\DrawingsAndLinenumbers.cs 52738 A9907AB6B46EB8C0339D2F77BDB0F659A502E051828D2D16E3E6932A258C7D1A
12 P_Rec_BOP\DrawingsInformation.cs 34474 068B63AC2B63E5AC936D258C450946650CE09F989A612C109341BEACAB9BA0E2
13 P_Rec_BOP\Glob.cs 6410 EC0E26CB215CEEB99BF4CCD5D82D36B402E607D7FEC99830E4C2E2F2377960FC
14 P_Rec_BOP\InputBox.cs 2033 A4EE6B38E58FDCFDD86B1E8ACF90BEBFBEAFCCA7AF70AE818FD8454AC2F613A3
15 P_Rec_BOP\lib\ConsoleGetDrawingInformation.dll 17920 9EC139C1973B58EF2072086C16CD5824BF45B8B7D835018B37B1A516A4EE5D1C
16 P_Rec_BOP\lib\Precompiled Binaries for 64-bit Windows (.NET Framework 4.6).txt 0 E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
17 P_Rec_BOP\lib\Readme.txt 369 A7CE8A8E1A272B1A9DD6D5DE24CBA9C1341A50E59F1CE103EF5A289D90BC74FE
18 P_Rec_BOP\lib\SautinSoft.Document.dll 5899264 960DE19C66F486B1954B1E6E55DF13683F169D8955EF05BE7073B4B11BEE4DF7
19 P_Rec_BOP\lib\SQLite.Interop.dll 1626624 B7DFA963A09C21AE3EE7642416A168EEDBE690416C30C274E1666873117DF06D
20 P_Rec_BOP\lib\System.Data.SQLite.dll 381952 AC20FF6022AB6E5DAA9D1CA620941399AE4094CC72FE988EC92024A465E99EE3
21 P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.dll 940672 23B1A58D7745524EFD87D3740E8363FE34D766E159C28BDF9FF2AABC79ED72D0
22 P_Rec_BOP\lib\x32\Microsoft.Office.Interop.Word.xml 2898934 76D668B99C41EBD7577111EAE2874FAF44995FD8EB20BF9F6175C4E22E09D5FD
23 P_Rec_BOP\lib\x32\SQLite.Interop.dll 1248768 E86066B2C0B9D00D75BFA5C4F7CDAC63BC520A70B72D6A58283804F4365A705B
24 P_Rec_BOP\lib\x32\System.Data.SQLite.dll 381952 AC20FF6022AB6E5DAA9D1CA620941399AE4094CC72FE988EC92024A465E99EE3
25 P_Rec_BOP\Materials.cs 20141 E9D759B563AB67C1577B49E5F70031A9B33E6F9425D089C4E908501402A42F66
26 P_Rec_BOP\P_Rec_BOP.csproj 7590 21C0D403A5F9EA8998CC718D63212446FDC1FD17709EC80BA8E909154422EDE4
27 P_Rec_BOP\PipingElements.cs 100089 89CC9C85FFFBA71395A293B112D270A33D4C339B118515341665905EDF5B9F71
28 P_Rec_BOP\Program.cs 61679 4EC712986EB584D75258F2714CF3035C06B5BF528ADC6458AD2D15190525CA7D
29 P_Rec_BOP\Properties\AssemblyInfo.cs 1825 453418BB1A77E5EE2E2ABA2DED4FFC6C7F748850B987DDEC60C85A73F2241BF6
30 P_Rec_BOP\Properties\Resources.Designer.cs 3607 B23A2C4AA1B1F2487292C8937B686B216B282158A82A098974B64CF45A48E458
31 P_Rec_BOP\Properties\Resources.resx 6327 98F984C20982C6EB8825A8E8701D56C8B80F2E7FCD874FD929A1F4611721E4E8
32 P_Rec_BOP\PYFile.cs 14445 A2FF325E1AA7CF67261951FD6EF2719CBB4BE4424E6AB6F7DA4309E7DD9B4771
33 P_Rec_BOP\ReportWithWorder.cs 71204 4EB13368BA7EC3F166612EB0093C9FACAFD1F4C34DA1EC20922E64E512D3B265
34 P_Rec_BOP\Resources\TitleBox1.png 37188 358E4618CA2AFA6DAB2BFC29FDB2316B1B8DDD472932A73AE991CB4110E93674
35 P_Rec_BOP\Resources\TitleBox2.png 35579 7C6837B130802983CA3D407EA56F46B148CDBFCB5B6B503EBE746F8945D98F41
36 P_Rec_BOP\ReversePolishNotation.cs 27685 764D375518BC1CB813DCC07BD60FFAA5D9908F4F5FDEFA109F690411340366BD
37 P_Rec_BOP\SelectDrawingsAndLinenumbers.cs 25971 6DE460137AD18ACCB80568F5C88C72BA7627CA7A657BFA87FF82C78DD571C596
38 P_Rec_BOP\SelectDrawingsAndLinenumbers.designer.cs 8468 792FDBC7D3D7C0638FFED1602106201D9300C9087749F290B9B8D984F2D6B7AD
39 P_Rec_BOP\SelectDrawingsAndLinenumbers.resx 5698 4D3EE9059F5B98AB1806F6916EBEA2A8C56023F8C63DDFD80B7378D27D1AA0F6
40 P_Rec_BOP\SetMainTitle.cs 15478 DD18254BE4653D0D419A92849B12665BA48C8E59B65C305E88EE4C65636617D9
41 P_Rec_BOP\SetMainTitle.designer.cs 9881 99409F220F85DFBAE0BC98D734B959001076BC9B1A9D620D6A354CF9C547EF37
42 P_Rec_BOP\SetMainTitle.resx 62444 CEB607A1CEB9B4AA262F4C779F2ED5AF730B8661A0031C63C02E8B425CA84EAF
43 P_Rec_BOP\Settings.xml 49258 AAEF4762FC246F8ABC5965FA5E6283DFB1716CCB9F1462EBDAE37CAD4847C136
44 P_Rec_BOP\Specs.cs 7094 E92FB765BEB5F1924F27D84FC61BD2DE5770C6D68525A2A755FBD30360A3EDA8
45 P_Rec_BOP\SQLDataBase.cs 4038 D1087DF5C777BF2B2F8A6700D0EE3AA6003B45C1BC01F52C6895F00BFB1043CD
46 P_Rec_BOP\SQLite.Interop.dll 1248768 E86066B2C0B9D00D75BFA5C4F7CDAC63BC520A70B72D6A58283804F4365A705B
47 P_Rec_BOP\SQLiteDataBase.cs 3075 424B09DB18D63284932AE8591C950D726DB57759A28F85B280BD8A0B1B719A11
48 P_Rec_BOP\Supports.cs 66253 625F261E8690A26F82F94FB193DEB4388699DCC6469E922ED38EF1CD4038B79F
49 P_Rec_BOP\TestLineNumbers.cs 14600 9E90DA99AF0DC84E8B334CE58CB8B5434BCA668EBDC83DDFEF1A33242051432F
50 P_Rec_BOP\Valves.cs 40930 D61C6ED91864535542795EF63B6858F79DBD7EFCD1DD1319B2DD3E9641EF42A7
51 P_Rec_BOP\Versions.cs 19162 BC0E748C956C00280E043A451BDDE831352A54AF79B087699002C63FD7AC0144
52 P_Rec_BOP\Welds.cs 144425 0F477FAD844FFFF59872C0C8C1E229846ADB1E2E9DA3C53B092A335EC5A04507
53 P_Rec_BOP\Worder.cs 41818 51FC57C057146B75AB9EF9F62DEDE4DB92BEA673B033F7184F67C33A0D1EF4ED
54 P_Rec_BOP\XLSFile.cs 3358 FD0C4B0A899EE98648786C8327A0AEF5EC9DBE1A0C8239CA1235B718D827C6B9
55 P_Rec_BOP\XMLFile.cs 20822 4075FDC3B58AECED0A6FF3DF62834B682B71F9BF601750FE67D7B06A9811393D
56 README.md 8712 CAA5BF352FAA414354909E49B29183125F91D1890892C27345E00B53685435CB
57 templates\Шаблон.docx 88534 C669900F2D7D8A3B80BF6898FE80B0F0A6CF4F38694694A66367E487EB3EA79B
58 Комментарии.txt 1853 80FB6E56EF3797EECDF59E6530927E5CACD8B1B82B73636B648749F0DF05DCA8
@@ -1,7 +0,0 @@
binary 9
configuration 1
other 10
project 2
resource 5
source 29
template/document 1
@@ -1,836 +0,0 @@
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:14:// // Выбрать все записи из таблицы EngineeringItems
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:15:// DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:18:// foreach (DataRow drEngineeringItem in adrEngineeringItems) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:25:// // Извлечь PnPID компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:26:// int iComponentPnPId = Convert.ToInt32(drEngineeringItem["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:28:// // Узнать PnPID чертежа для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:29:// DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:30:// if (adrDataLinks.Length != 1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:34:// int iDwgId = Convert.ToInt32(adrDataLinks[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:40:// if (dDrawing.iPnPId == iDwgId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:49:// // Узнать PnPID номера линии для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:50:// DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:51:// if (adrLineGroupPartRelationships.Length != 1) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:54:// int iLineNumberId = Convert.ToInt32(adrLineGroupPartRelationships[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:60:// if (lnLineNumber.iPnPId == iLineNumberId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:71:// switch (string.Format("{0}", adrDataLinks[0]["RowClassName"])) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:82:// lcComponents.Add(new Component(iComponentPnPId));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:96:// int iPnPId; // PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:107:// public Component(int iPnPId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:108:// this.iPnPId = iPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:109:// DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + this.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:110:// string sClassName = string.Format("{0}", adrDataLinks[0]["RowClassName"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:143:// DataRow[] drPipeBend = Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + this.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:155:// if (!GetDrawingFileNameAndComponentHandle(this.iPnPId, ref sDrawingFileName, ref lHandle)) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:169:// Components.lcComponents.Add(new Component(this.iPnPId, iNextZ - 500, Program.diDrawingsInformation.GetPipeLength(sDrawingFileName, lHandle, iNextZ, iNextZ - 1000)));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:172:// Components.lcComponents.Add(new Component(this.iPnPId, (((dS1Z > dS2Z) ? dS2Z : dS1Z) + iNextZ) / 2, Program.diDrawingsInformation.GetPipeLength(sDrawingFileName, lHandle, iNextZ, (dS1Z > dS2Z) ? dS2Z : dS1Z)));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:179:// Console.WriteLine(iPnPId + ":" + ctComponentType.ToString() + ":" + dPositionZ + ":" + dPipeLength);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:183:// public Component(int iPnPId, double dPositionZ, double dPipeLength) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:184:// this.iPnPId = iPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:188:// Console.WriteLine(iPnPId + ":" + ctComponentType.ToString() + ":" + dPositionZ + ":" + dPipeLength);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:191:// // Получить запись "PnPDataLinks" номера чертежа по БД 'Piping.dcf' с компонентом
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:193:// static bool GetDrawingFileNameAndComponentHandle(int iPnPId, ref string sDrawingFileName, ref long lHandle) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:195:// DataRow[] drRows3 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:199:// Program.IsErrorCodeNotOK(ErrorCode.ecPnPDataLinksNotSingleRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:209:// Program.IsErrorCodeNotOK(ErrorCode.ecPnPDataLinksCannotConvertToLongDwgHandleLow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:213:// // Получить PnPId чертежа с этим компонентом или выйти,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:220:// Program.IsErrorCodeNotOK(ErrorCode.ecPnPDataLinksCannotConvertToInt32DwgId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:224:// // Получить наименование файла чертежа по его PnPId из Program.ldSelectedDrawings
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:226:// if (dDrawing.iPnPId == iDwgId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:149: // миникаталоги, которые зарегистрированы [PnPDrawings]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:150: // имя в поле [Title] таблицы [PnPDrawings] может содержать
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:152: // для сравнения, поле [Spec] таблицы [EngineeringItems] не содержит
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:159: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:161: res = tablePnPDrawings.Select()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:162: .Where(x => x.Field<string>("PnPType") == "SPEC")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:167: // from t1 in tablePnPDrawings.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:168: // where t1.Field<string>("PnPType") == "SPEC"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:201: // миникаталоги, к которым обращаются компоненты [EngineeringItems]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:207: public List<(string sName, string sPath, List<long> ComponentPnPIDList)>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:211: //System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:212: //res = tableEngineeringItems.Select().Select(x => x.Field<string>("Spec")).Distinct().ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:214: List<(string sName, string sPath, List<long> ComponentPnPIDList)> res
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:215: = new List<(string sName, string sPath, List<long> ComponentPnPIDList)>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:221: if (_projectPipingDcf.Tables.Contains("EngineeringItems")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:222: && (_projectPipingDcf.Tables.Contains("PnPDataLinks"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:223: && (_projectPipingDcf.Tables.Contains("PnPDrawings"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:224: && (_projectPipingDcf.Tables.Contains("P3dLineGroupPartRelationship"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:225: && (_projectPipingDcf.Tables.Contains("P3dLineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:227: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:228: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("Status"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:229: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("Spec"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:231: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("RowId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:232: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("DwgId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:234: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:235: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPType"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:236: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Dwg Name"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:237: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Title"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:238: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPRelativePath"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:239: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Path"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:240: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPUnc"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:241: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Area"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:243: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("Part"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:244: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("LineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:246: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:247: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Tag"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:248: // && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Number"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:251: //DataSet dataSetEngineeringItemsAndLinks = new DataSet();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:252: //dataSetEngineeringItemsAndLinks.Load(_projectPipingDcf.CreateDataReader(), LoadOption.Upsert,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:253: // "EngineeringItems", "PnPDataLinks", "P3dLineGroupPartRelationship");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:256: System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:257: System.Data.DataTable tablePnPDataLinks = _projectPipingDcf.Tables["PnPDataLinks"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:258: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:259: System.Data.DataTable tableP3dLineGroupPartRelationship = _projectPipingDcf.Tables["P3dLineGroupPartRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:260: System.Data.DataTable tableP3dLineGroup = _projectPipingDcf.Tables["P3dLineGroup"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:262: // System.Data.DataTable tableP3dDrawingLineGroupRelationship = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:267: // имена миникаталогов в таблице [PnPDrawings] могут иметь расширение, и могут не иметь его
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:269: var querySpecPnPDrawings =
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:270: from t1 in tablePnPDrawings.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:271: where t1.Field<string>("PnPType") == "SPEC"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:280: foreach (var itm in querySpecPnPDrawings)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:287: //var queryEngineeringItems =
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:288: // from t1 in tableEngineeringItems.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:294: // ComponentPnPID = t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:295: // ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:309: // по связи с компонентами в [EngineeringItems]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:313: var queryEngineeringItems =
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:314: from t1 in tableEngineeringItems.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:316: join t2 in tablePnPDataLinks.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:317: on Convert.ToInt32(t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:318: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:322: join t3 in tablePnPDrawings.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:325: equals Convert.ToInt32(t3["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:326: ? t3.Field<long>("PnPID") : t3.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:328: join t4 in tableP3dLineGroupPartRelationship.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:329: on Convert.ToInt32(t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:330: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:334: join t5 in tableP3dLineGroup.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:335: on Convert.ToInt32(t4["LineGroup"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:336: ? t4.Field<long>("LineGroup") : t4.Field<int>("LineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:337: equals Convert.ToInt32(t5["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:338: ? t5.Field<long>("PnPID") : t5.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:349: Convert.ToInt32(t5["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:350: ? t5.Field<long>("PnPID") : t5.Field<int>("PnPID")))))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:352: // where t3.Field<string>("PnPType") == "SPEC"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:353: // where t3.Field<string>("PnPType") == "DWG"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:357: ComponentPnPID = t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:358: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:365: //DwgPnPID = t3["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:366: // ? t3.Field<long>("PnPID") : t3.Field<int>("PnPID"),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:370: // t3.Field<string>("PnPUnc"),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:374: //LineNamePnPID = t5["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:375: // ? t5.Field<long>("PnPID") : t5.Field<int>("PnPID"),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:380: //res = queryEngineeringItems.Select(x => x.SpecName).Distinct().ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:381: foreach (var itm in queryEngineeringItems)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:385: specComponentsDict[itm.SpecName].Add(itm.ComponentPnPID);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:401: res.Add((sName: key, sPath: sPath, ComponentPnPIDList: specComponentsDict[key].ToList()));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:414: // получаем список труб, по таблицам [EngineeringItems], [Pipe], [PipeBend]:
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:415: // iPnPId, длина трубы, вес погонного метра, количество сварных швов пролета трубы (без краев)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:420: public List<(int iPnPId, double CutLength, double? LinearWeight, int WeldsInsidePipe)>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:423: List<(int iPnPId, double CutLength, double? LinearWeight, int WeldsInsidePipe)> res
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:424: = new List<(int iPnPId, double CutLength, double? LinearWeight, int WeldsInsidePipe)>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:426: int iPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:432: if (_projectPipingDcf.Tables.Contains("EngineeringItems")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:433: && (_projectPipingDcf.Tables.Contains("PnPDataLinks"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:434: && (_projectPipingDcf.Tables.Contains("PnPDrawings"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:435: && (_projectPipingDcf.Tables.Contains("P3dLineGroupPartRelationship"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:436: && (_projectPipingDcf.Tables.Contains("P3dLineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:440: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:441: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("Status"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:443: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("RowId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:444: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("DwgId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:446: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:447: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPType"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:448: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Dwg Name"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:449: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Title"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:450: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPRelativePath"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:451: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Path"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:452: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPUnc"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:453: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Area"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:455: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("Part"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:456: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("LineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:458: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:459: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Tag"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:460: // && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Number"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:462: && (_projectPipingDcf.Tables["Pipe"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:467: //DataSet dataSetEngineeringItemsAndLinks = new DataSet();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:468: //dataSetEngineeringItemsAndLinks.Load(_projectPipingDcf.CreateDataReader(), LoadOption.Upsert,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:469: // "EngineeringItems", "PnPDataLinks", "P3dLineGroupPartRelationship");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:472: System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:473: System.Data.DataTable tablePnPDataLinks = _projectPipingDcf.Tables["PnPDataLinks"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:474: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:475: System.Data.DataTable tableP3dLineGroupPartRelationship = _projectPipingDcf.Tables["P3dLineGroupPartRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:476: System.Data.DataTable tableP3dLineGroup = _projectPipingDcf.Tables["P3dLineGroup"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:478: // System.Data.DataTable tableP3dDrawingLineGroupRelationship = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:486: && (_projectPipingDcf.Tables["PipeBend"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:500: // получаем список iPnPId труб / гнутых отводов по связи с компонентами
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:505: from t1 in tableEngineeringItems.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:507: join t2 in tablePnPDataLinks.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:508: on Convert.ToInt32(t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:509: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:513: join t3 in tablePnPDrawings.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:516: equals Convert.ToInt32(t3["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:517: ? t3.Field<long>("PnPID") : t3.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:519: join t4 in tableP3dLineGroupPartRelationship.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:520: on Convert.ToInt32(t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:521: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:525: join t5 in tableP3dLineGroup.AsEnumerable()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:526: on Convert.ToInt32(t4["LineGroup"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:527: ? t4.Field<long>("LineGroup") : t4.Field<int>("LineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:528: equals Convert.ToInt32(t5["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:529: ? t5.Field<long>("PnPID") : t5.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:535: on Convert.ToInt32(t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:536: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:537: equals Convert.ToInt32(t6["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:538: ? t6.Field<long>("PnPID") : t6.Field<int>("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:547: Convert.ToInt32(t5["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:548: ? t5.Field<long>("PnPID") : t5.Field<int>("PnPID")))))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:552: ComponentPnPID = t1["PnPID"].GetType() == typeof(long)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:553: ? t1.Field<long>("PnPID") : t1.Field<int>("PnPID"),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:562: iPnPId = Convert.ToInt32(itm.ComponentPnPID);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:571: res.Add((iPnPId, CutLength, LinearWeight, WeldsInsidePipe));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:593: // если линия не именованная, то обращаемся к ней по ее PnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:596: private string GetUnnamedLineName(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:598: return "(PnPId:" + iPnPId + ")";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:610: foreach (DataRow drRow in _projectPipingDcf.Tables["PnPDrawings"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:612: if (string.Format("{0}", drRow["PnPType"]) != "FOLDER")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:617: dNewDrawing.iPnPId = Convert.ToInt32(drRow["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:619: // dNewDrawing.sPath = Glob.sProjectFolder + "\\" + drRow["PnPRelativePath"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:625: DataRow[] adrRows = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:626: .Select("[Drawing]=" + dNewDrawing.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:632: if (lnLineNumber.iPnPId == Convert.ToInt32(drRow1["LineGroup"]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:635: .Tables["P3dLineGroupPartRelationship"]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:636: .Select("[LineGroup]=" + lnLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:662: foreach (DataRow drRow in _projectPipingDcf.Tables["P3dLineGroup"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:667: lnNewLineNumber.iPnPId = Convert.ToInt32(drRow["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:673: // lnNewLineNumber.sName = "(PnPId:" + lnNewLineNumber.iPnPId + ")";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:674: lnNewLineNumber.sName = GetUnnamedLineName(lnNewLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:681: lineNameItmCalculated = CalculateTested(lnNewLineNumber.iPnPId, Glob.lkvpsdReplacePressure);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:713: int iPnPIdLineName, List<KeyValuePair<string, double>> lkvpsdReplacePressure)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:721: drSourceRow = _projectPipingDcf.Tables["P3dLineGroup"]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:722: .Select("[PnPID]=" + iPnPIdLineName).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:864: public int iPnPId; // PnPId чертежа по БД 'Piping.dcf'
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:877: iPnPId = Convert.ToInt32(drSourceRow["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:878: sPath = Program.sProjectFolder + "\\" + drSourceRow["PnPRelativePath"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:881: DataRow[] adrRows = Program.dsPipingDCF.Tables["P3dDrawingLineGroupRelationship"].Select("[Drawing]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:887: if (lnLineNumber.iPnPId == Convert.ToInt32(drRow["LineGroup"]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:889: DataRow[] adrRows2 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[LineGroup]=" + lnLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:908: public int iPnPId; // PnPId номера линии по БД 'Piping.dcf'
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:929: iPnPId = Convert.ToInt32(drSourceRow["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:933: sName = "(PnPId:" + iPnPId + ")";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:42: sbScriptFile.AppendLine("(arxload \"PnP3dObjects.dbx\" \"Ошибка загрузки ARX (PnP3dObjects.dbx)!\")");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:137: if (!File.Exists(Path.Combine(Path.GetDirectoryName(sAcCoreConsolePathInternal), "PnP3dObjects.dbx")))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:139: Glob.TracedMessageBoxShow("Не найдено окружение приложения Plant 3D [PnP3dObjects.dbx]");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:192:_arx _l ""PnP3dObjects.dbx""
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:77: List<(string sSpecFile, string sMaterial, int iPnPIdOfTheFirstFound)> lsMissedMaterialsAndItsSpec
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:78: = new List<(string sSpecFile, string sMaterial, int iPnPIdOfTheFirstFound)>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:103: + "Обращение к материалу \n (миникаталог - EngineeringItems - PnPID): "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:105: + "[" + string.Join("]\n[", lsMissedMaterialsAndItsSpec.Select(x => x.iPnPIdOfTheFirstFound).Distinct().ToList()) + "]"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:140: ref List<(string sSpecFile, string sMaterial, int iPnPIdOfTheFirstFound)> lsMissedMaterialsAndItsComponent)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:158: DataRow[] adrPipes = dsSpec.Tables["EngineeringItems"].Select("[PartCategory]='Pipe'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:281: iPnPIdOfTheFirstFound: Convert.ToInt32(drPipe["PnPID"])));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:217: if (!dsPipingDCF.Tables.Contains("EngineeringItems"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:219: Glob.TracedMessageBoxShow("Не найдена таблица [EngineeringItems]");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:225: DataRow[] adrEngineeringItems = dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:226: foreach (DataRow drEngineeringItem in adrEngineeringItems)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:228: int iPnPId = Convert.ToInt32(drEngineeringItem["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:229: DataRow[] adrLineGroupPartRelationships = dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:230: if (adrLineGroupPartRelationships.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:237: // iNozzle = dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:242: // iEquipment = dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:247: iNozzle = dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:249: iEquipment = dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:389: + "\n\nPnPID" + msgFoundMoreThan + ": \n"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:400: // миникаталоги, к которым обращаются компоненты [EngineeringItems]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:401: List< (string sName, string sPath, List<long> ComponentPnPIDList)>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:402: specList = new List<(string sName, string sPath, List<long> ComponentPnPIDList)>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:411: foreach ((string sName, string sPath, List<long> ComponentPnPIDList) spec
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:414: testSpec.AddRange(spec.ComponentPnPIDList.Select(x => x.ToString()).ToList());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:427: + "\n\nPnPID" + msgFoundMoreThan + ": \n"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:434: // имена миникаталогов из [EngineeringItems]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:435: //List<string> testSpecEngineeringItems = specList
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:437: List<string> testSpecEngineeringItems = specList.Select(x => x.sName).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:439: // миникаталоги, которые зарегистрированы [PnPDrawings]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:440: // List<string> testSpecPnPDrawings = drawingsAndLinenumbers.GetProjectSpecNameList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:446: testSpec = testSpecEngineeringItems.Except(testSpecFolder).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:466: // test = testSpecEngineeringItems.Except(testSpecPnPDrawings).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:531: .Select(x => x.iPnPId).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:543: + "\n\nPnPID" + msgFoundMoreThan + ": \n"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:641: csvfErrorNKRs.AddColumnToTable("PnPId");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:653: + "Сейчас будет выведен список 'PnPId' НКР и наименований параметров у них, "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:656: + "Используйте команду 'PXP-SI' для поиска НКР в проекте Plant 3D по номеру 'PnPId'",
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:921: ecPnPDataLinksNotSingleRow = 1, // в БД "Piping.dcf" в таблице "PnPDataLinks" нет ни одной, либо более одной записи с данным PnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:922: ecPnPDataLinksCannotConvertToLongDwgHandleLow = 2, // невозможно получить значение типа long из поля "DwgHandleLow" записи таблицы "PnPDataLinks"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:923: ecPnPDataLinksCannotConvertToInt32DwgId = 3, // невозможно получить значение типа int из поля "DwgId" записи таблицы "PnPDataLinks"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:930: //ecP3dConnectorMoreThan1Row = 10, // более 1 записи с с данным PnPId в таблице "P3dConnector"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:931: //ecP3dConnectorMoreThan1RowStage2 = 11, // более 1 записи с с данным PnPId в таблице "P3dConnector" далее в методе
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:932: //ecP3dLineGroupNoFieldTracingTemperature = 12, // нет поля "TracingTemperature" в таблице "P3dLineGroup"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:27: // Выбрать все записи из таблицы EngineeringItems
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:28: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:31: foreach (DataRow drEngineeringItem in adrEngineeringItems)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:33: // Получить PnPID компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:34: int iComponentPnPId = Convert.ToInt32(drEngineeringItem["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:36: // Получить PnPID чертежа для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:37: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:38: if (adrDataLinks.Length != 1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:42: int iDwgId = Convert.ToInt32(adrDataLinks[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:46: if (Glob.ldSelectedDrawings.Where(o => o.iPnPId == iDwgId).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:53: // if (dDrawing.iPnPId == iDwgId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:62: // Получить PnPID номера линии для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:63: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:64: if (adrLineGroupPartRelationships.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:71: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:76: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:81: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:84: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:89: Program.liComponentsWOLineNumber.Add(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:93: int iLineNumberId = Convert.ToInt32(adrLineGroupPartRelationships[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:97: if (Glob.ldSelectedLineNumbers.Where(o => o.iPnPId == iLineNumberId).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:104: // if (lnLineNumber.iPnPId == iLineNumberId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:115: DataRow[] adrPartPorts = Program.dsPipingDCF.Tables["PartPort"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:119: int iPortPnPId = Convert.ToInt32(drPartPort["Port"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:120: DataRow[] adrPorts = Program.dsPipingDCF.Tables["Port"].Select("[PnPID]=" + iPortPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:134: switch (string.Format("{0}", adrDataLinks[0]["RowClassName"]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:143: UpdateOrCreatePipingElement(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:165: foreach (DataRow drEngineeringItem in adrEngineeringItems)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:174: // Получить PnPID компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:175: int iComponentPnPId = Convert.ToInt32(drEngineeringItem["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:177: // Узнать PnPID чертежа для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:178: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:179: if (adrDataLinks.Length != 1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:183: int iDwgId = Convert.ToInt32(adrDataLinks[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:187: if (Glob.ldSelectedDrawings.Where(o => o.iPnPId == iDwgId).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:193: // if (dDrawing.iPnPId == iDwgId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:202: // Получить PnPID номера линии для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:203: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:205: if (adrLineGroupPartRelationships.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:212: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:217: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:222: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:224: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:229: Program.liComponentsWOLineNumber.Add(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:233: int iLineNumberId = Convert.ToInt32(adrLineGroupPartRelationships[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:237: if (Glob.ldSelectedLineNumbers.Where(o => o.iPnPId == iLineNumberId).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:243: // if (lnCurrentLineNumber.iPnPId == iLineNumberId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:253: DataRow[] adrLineGroup = Program.dsPipingDCF.Tables["P3dLineGroup"].Select("[PnPID]=" + iLineNumberId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:254: string sTracingNumber = string.Format("{0}", adrLineGroup[0]["TracingNumber"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:267: string sTracingOuterDiameter = string.Format("{0}", adrLineGroup[0]["TracingDiameter"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:324: DataRow[] adrTracingPipes = dsTracingSpec.Tables["EngineeringItems"].Select("[MatchingPipeOd]=" + dTracingOuterDiameter);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:403: UpdateOrCreateTracingPipingElement(iComponentPnPId, mMaterial, ptfFormat, iNominalDiameter, dWallThickness, dOuterDiameter, dNominalPressure, iTracingCount, dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:415: public static double GetElbowLength(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:418: DataRow drElbow = Program.dsPipingDCF.Tables["Elbow"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:425: // компонента с iComponentPnPId (добавить трубу теплоспутника)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:426: void UpdateOrCreateTracingPipingElement(int iComponentPnPId, Material mMaterial, PipingTitleFormat ptfFormat, int iNominalDiameter, double dWallThickness, double dOuterDiameter, double dNominalPressure, int iTracingCount, double dWeight)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:428: // Получить запись таблицы "EngineeringItems" для дальнейшей работы
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:429: DataRow[] adrComponent = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:437: if (!GetDrawingFileNameAndComponentHandle(iComponentPnPId, ref sDrawingFileName, ref lHandle))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:443: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:444: string sComponentType = string.Format("{0}", adrDataLinks[0]["RowClassName"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:537: DataRow drPipe = Program.dsPipingDCF.Tables["Pipe"].Select("[PnPId]=" + iComponentPnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:735: DataRow[] drPipeBend = Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:743: dLength = GetElbowLength(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:802: // компонента с iComponentPnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:803: void UpdateOrCreatePipingElement(int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:805: // Получить запись таблицы "EngineeringItems" для дальнейшей работы
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:806: DataRow[] adrComponent = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:864: // Получить PnPID номера линии для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:865: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:866: if (adrLineGroupPartRelationships.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:873: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:878: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:883: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:885: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:890: Program.liComponentsWOLineNumber.Add(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:894: int iLineNumberId = Convert.ToInt32(adrLineGroupPartRelationships[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:897: LineNumber lnLineNumber = Glob.ldSelectedLineNumbers.Where(o => o.iPnPId == iLineNumberId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:904: // if (lnCurrentLineNumber.iPnPId == iLineNumberId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:943: + "\nКомпоненту с PnPId в проекте [" + iComponentPnPId + "], "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:969: Glob.TracedMessageBoxShow(iComponentPnPId.ToString());
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1015: if (!GetDrawingFileNameAndComponentHandle(iComponentPnPId, ref sDrawingFileName, ref lHandle))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1021: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1022: string sComponentType = string.Format("{0}", adrDataLinks[0]["RowClassName"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1129: DataRow[] aPipes = Program.dsPipingDCF.Tables["Pipe"].Select("PnPID=" + iComponentPnPId);//2018
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1154: vpePipingElement.First().Add(mMaterial, ldPipeLengths[i], dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1160: pePipingElement.Add(mMaterial, ldPipeLengths[i], dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1172: // pePipingElement.Add(mMaterial, ldPipeLengths[i], dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1184: // pePipingElement.Add(mMaterial, ldPipeLengths[i], dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1226: + " PnPId[" + iComponentPnPId + "]"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1254: vpePipingElement.First().Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1260: pePipingElement.Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1273: // pePipingElement.Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1285: // pePipingElement.Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1319: DataRow[] aPipeBends = Program.dsPipingDCF.Tables["PipeBend"].Select("PnPID=" + iComponentPnPId);//2018
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1331: + " PnPId[" + iComponentPnPId + "]"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1344: DataRow[] drPipeBend = Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1355: dLength = GetElbowLength(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1381: vpePipingElement.First().Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1387: pePipingElement.Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1399: // pePipingElement.Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1411: // pePipingElement.Add(mMaterial, dLength, dWeight, iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1419: // Получить запись "PnPDataLinks" номера чертежа по БД 'Piping.dcf' с компонентом
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1422: public static bool GetDrawingFileNameAndComponentHandle(int iPnPId, ref string sDrawingFileName, ref long lHandle, bool bSkipError = false)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1426: // Получить запись "PnPDataLinks"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1427: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1430: if (adrDataLinks.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1432: Program.IsErrorCodeNotOK(ErrorCode.ecPnPDataLinksNotSingleRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1440: lHandle = Convert.ToInt64(adrDataLinks[0]["DwgHandleLow"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1444: Program.IsErrorCodeNotOK(ErrorCode.ecPnPDataLinksCannotConvertToLongDwgHandleLow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1448: // Получить PnPId чертежа с этим компонентом или выйти,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1453: iDwgId = Convert.ToInt32(adrDataLinks[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1457: Program.IsErrorCodeNotOK(ErrorCode.ecPnPDataLinksCannotConvertToInt32DwgId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1461: // Получить наименование файла чертежа по его PnPId из Program.ldAllDrawings // support 492
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1462: var vDrawing = Glob.ldAllDrawings.Where(o => o.iPnPId == iDwgId); // support 492
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1466: if (Glob.ldSelectedDrawings.Where(o => o.iPnPId == iDwgId).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1481: //// Получить наименование файла чертежа по его PnPId из Program.ldSelectedDrawings // support 492
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1482: //var vDrawing = Program.ldSelectedDrawings.Where(o => o.iPnPId == iDwgId); // support 492
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1496: // if (dDrawing.iPnPId == iDwgId) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1545: List<int> liPnPIds = new List<int>(); // список PnPId компонентов, которые образуют PipingElement
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1630: public void Add(Material mMaterial, double dLength, double dWeight, int iPnPId = -1, double tracingLength = 0.0, int tracingCount = 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1634: if (iPnPId != -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1636: liPnPIds.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1653: // Вернуть список PnPId компонентов, которые образуют PipingElement
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1654: public List<int> PnPIds
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1658: return liPnPIds;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:126: if (!Program.dsProcessPowerDCF.Tables.Contains("PnPProject"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:128: Glob.TracedMessageBoxShow("В базе данных 'ProcessPower.dcf' не найдена таблица 'PnPProject' "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:138: // Прочитать таблицу 'PnPProject' из базы данных 'ProcessPower.dcf'
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:139: DataRow[] adrRows = Program.dsProcessPowerDCF.Tables["PnPProject"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:165: Glob.TracedMessageBoxShow("В базе данных 'ProcessPower.dcf' в таблице 'PnPProject' более одной записи! "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Settings.xml:393: query: запрос к таблице EngineeringItems-->
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:39: foreach (DataRow drRow in Program.dsPipingDCF.Tables["P3dLineGroup"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:47: foreach (DataRow drRow in Program.dsPipingDCF.Tables["PnPDrawings"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:49: if (string.Format("{0}", drRow["PnPType"]) != "FOLDER")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:330: public int iPnPId; // PnPId чертежа по БД 'Piping.dcf'
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:339: iPnPId = Convert.ToInt32(drSourceRow["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:340: sPath = Program.sProjectFolder + "\\" + drSourceRow["PnPRelativePath"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:343: DataRow[] adrRows = Program.dsPipingDCF.Tables["P3dDrawingLineGroupRelationship"].Select("[Drawing]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:349: if (lnLineNumber.iPnPId == Convert.ToInt32(drRow["LineGroup"]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:351: DataRow[] adrRows2 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[LineGroup]=" + lnLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:370: public int iPnPId; // PnPId номера линии по БД 'Piping.dcf'
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:380: iPnPId = Convert.ToInt32(drSourceRow["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:384: sName = "(PnPId:" + iPnPId + ")";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:26: // Выбрать все записи из таблицы PnPDataLinks с арматурой и инструментами
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:27: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowClassName]='Valve' OR [RowClassName]='InlineInstrument'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:29: // Создать списки PnPId элементов арматуры и инструментов,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:30: // если PnPId повторяются от группы к группе,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:32: List<int> liAllPnPIdValvesOrInstruments = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:33: List<int> liAddedPnPIdValvesOrInstruments = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:35: // Заполнить список PnPId всех элементов арматуры и инструментов
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:36: foreach (DataRow drValveOrInstrument in adrDataLinks)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:38: liAllPnPIdValvesOrInstruments.Add(Convert.ToInt32(drValveOrInstrument["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:63: // Получить PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:64: int iPnPId = Convert.ToInt32(drValve["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:68: if (liAllPnPIdValvesOrInstruments.IndexOf(iPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:76: if (!CheckExistingAndDrawingsAndLineNumbers(iPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:83: if (liAddedPnPIdValvesOrInstruments.IndexOf(iPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:85: liAddedPnPIdValvesOrInstruments.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:93: double dNominalPressure = GetNominalPressure(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:96: int iNominalDiameter = GetNominalDiameter(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:98: // Получить запись таблицы EngineeringItems
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:99: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:108: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:113: AddOrCreateValveGroup(vfValveFilter, dNominalPressure, iNominalDiameter, sDescription, (vfValveFilter.OutputTag) ? sTag : "", iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:116: // Eсли задан запрос по таблице EngineeringItems...
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:117: if (vfValveFilter.EngineeringItemsQuery != "")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:120: DataRow[] adrValves = Program.dsPipingDCF.Tables["EngineeringItems"].Select(vfValveFilter.EngineeringItemsQuery);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:125: // Получить PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:126: int iPnPId = Convert.ToInt32(drValve["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:130: if (liAllPnPIdValvesOrInstruments.IndexOf(iPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:138: if (!CheckExistingAndDrawingsAndLineNumbers(iPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:145: if (liAddedPnPIdValvesOrInstruments.IndexOf(iPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:147: liAddedPnPIdValvesOrInstruments.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:155: double dNominalPressure = GetNominalPressure(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:158: int iNominalDiameter = GetNominalDiameter(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:175: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:180: AddOrCreateValveGroup(vfValveFilter, dNominalPressure, iNominalDiameter, sDescription, (vfValveFilter.OutputTag) ? sTag : "", iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:186: // Обработать каждый элемент liAllPnPIdValvesOrInstruments
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:187: foreach (int iMissedPnPId in liAllPnPIdValvesOrInstruments)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:190: if (liAddedPnPIdValvesOrInstruments.IndexOf(iMissedPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:195: if (!CheckExistingAndDrawingsAndLineNumbers(iMissedPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:205: DataRow drValve = Program.dsPipingDCF.Tables["Valve"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:208: double dNominalPressure = GetNominalPressure(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:211: int iNominalDiameter = GetNominalDiameter(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:214: string sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["ComponentDescription"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:217: sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["PartSizeLongDesc"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:228: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:233: sTag = "PnPId: " + iMissedPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:238: AddOrCreateValveGroup(vfValveFilter, dNominalPressure, iNominalDiameter, sDescription, sTag, iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:245: DataRow drInlineInstrument = Program.dsPipingDCF.Tables["InlineInstrument"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:248: double dNominalPressure = GetNominalPressure(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:251: int iNominalDiameter = GetNominalDiameter(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:254: string sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["ComponentDescription"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:257: sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["PartSizeLongDesc"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:268: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:273: sTag = "PnPId: " + +iMissedPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:278: AddOrCreateValveGroup(vfValveFilter, dNominalPressure, iNominalDiameter, sDescription, sTag, iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:294: dataRowsComonents = Program.dsPipingDCF.Tables["Valve"].Select("[PnPID]=" + iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:302: dataRowsComonents = Program.dsPipingDCF.Tables["InlineInstrument"].Select("[PnPID]=" + iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:311: double dNominalPressure = GetNominalPressure(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:314: int iNominalDiameter = GetNominalDiameter(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:317: string sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select(
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:318: "[PnPID]=" + iMissedPnPId)[0]["ComponentDescription"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:321: sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select(
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:322: "[PnPID]=" + iMissedPnPId)[0]["PartSizeLongDesc"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:333: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:338: sTag = "PnPId: " + +iMissedPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:343: AddOrCreateValveGroup(vfValveFilter, dNominalPressure, iNominalDiameter, sDescription, sTag, iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:368: void AddOrCreateValveGroup(ValveFilter vfValveFilter, double dNominalPressure, int iNominalDiameter, string sDescription, string sTag, int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:376: if (!PipingElements.GetDrawingFileNameAndComponentHandle(iComponentPnPId, ref sDrawingFileName, ref lHandle))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:390: dWeight = Convert.ToDouble(Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId)[0]["Weight"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:433: double GetNominalPressure(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:436: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:498: public static int GetNominalDiameter(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:501: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:523: public static bool CheckExistingAndDrawingsAndLineNumbers(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:528: // Получить запись таблицы EngineeringItems по iPnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:529: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:533: if (string.Format("{0}", adrEngineeringItems[0]["Status"]) != "New")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:538: // Узнать PnPID чертежа для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:539: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:540: int iDwgId = Convert.ToInt32(adrDataLinks[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:548: if (dDrawing.iPnPId == iDwgId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:559: // Узнать PnPID номера линии для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:560: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:561: if (adrLineGroupPartRelationships.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:563: Program.liComponentsWOLineNumber.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:566: int iLineNumberId = Convert.ToInt32(adrLineGroupPartRelationships[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:574: if (lnLineNumber.iPnPId == iLineNumberId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:778: string sEngineeringItemsQuery; // запрос к таблице EngeneerinItems (если не задано, то поиск в этой таблице игнорируется)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:799: // Член для чтения sEngineeringItemsQuery
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:800: public string EngineeringItemsQuery
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:804: return sEngineeringItemsQuery;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:818: public ValveFilter(string sName, string sValveBodyType, string sEngineeringItemsQuery, bool bOutputTag)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:822: this.sEngineeringItemsQuery = sEngineeringItemsQuery;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:21: // Выбрать все записи из таблицы EngineeringItems
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:22: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:25: foreach (DataRow drEngineeringItem in adrEngineeringItems)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:27: // Извлечь PnPID компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:28: int iComponentPnPId = Convert.ToInt32(drEngineeringItem["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:34: if (!CheckExistingAndDrawingsAndLineNumbers(iComponentPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:40: UpdateOrCreatePiping(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:53: // компонента с iComponentPnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:54: void UpdateOrCreatePiping(int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:56: // Получить запись таблицы "EngineeringItems" для дальнейшей работы
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:57: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:72: if (!PipingElements.GetDrawingFileNameAndComponentHandle(iComponentPnPId, ref sDrawingFileName, ref lHandle))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:78: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:79: string sComponentType = string.Format("{0}", adrDataLinks[0]["RowClassName"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:109: // DataRow[] aPipes = Program.dsPipingDCF.Tables["Pipe"].Select("PnPID=" + iComponentPnPId);//2018
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:123: aPipes = Program.dsPipingDCF.Tables["Pipe"].Select("PnPID=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:128: aPipes = Program.dsPipingDCF.Tables["PipeBend"].Select("PnPID=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:154: //dLength = Convert.ToDouble(Program.dsPipingDCF.Tables["Pipe"].Select("[PnPID]=" + iComponentPnPId)[0]["Length"]) / 1000; // support
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:155: dLength = Convert.ToDouble(Program.dsPipingDCF.Tables["Pipe"].Select("[PnPID]=" + iComponentPnPId)[0]["CutLength"]) / 1000; // support
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:164: dLength = PipingElements.GetElbowLength(iComponentPnPId) / 1000;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:170: dLength = Convert.ToDouble(Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + iComponentPnPId)[0]["CutLength"]) / 1000;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:208: public static bool CheckExistingAndDrawingsAndLineNumbers(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:213: // Получить запись таблицы EngineeringItems по iPnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:214: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:218: if (string.Format("{0}", adrEngineeringItems[0]["Status"]) != "New")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:223: // Узнать PnPID чертежа для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:224: DataRow drDataLink = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:230: if (Glob.ldSelectedDrawings.Where(o => o.iPnPId == iDwgId).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:235: // Узнать PnPID номера линии для компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:236: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:237: if (adrLineGroupPartRelationships.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:239: Program.liComponentsWOLineNumber.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:242: int iLineNumberId = Convert.ToInt32(adrLineGroupPartRelationships[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:248: if (Glob.ldSelectedLineNumbers.Where(o => (o.iPnPId == iLineNumberId) && (o.bTested)).Count() == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:21: public static string sNKRTitle; // значение поля Title таблицы EngineeringItems, по которому определяется, что опора является НКР
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:31: // Выбрать все записи из таблицы PnPDataLinks с опорами
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:32: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowClassName]='Support'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:34: // Создать списки PnPId элементов опор,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:35: // если PnPId повторяются от группы к группе,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:37: List<int> liAllPnPIdSupports = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:38: List<int> liAddedPnPIdSupports = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:40: // Заполнить список PnPId всех элементов опор
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:41: foreach (DataRow drSupport in adrDataLinks)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:43: liAllPnPIdSupports.Add(Convert.ToInt32(drSupport["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:51: // Если в sfSupportFilter задан запрос к таблице EngineeringItems...
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:52: if (sfSupportFilter.EngineeringItemsQuery != "")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:54: // ...получить все записи таблицы EngineeringItems по этому фильтру
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:55: DataRow[] adrSupports = Program.dsPipingDCF.Tables["EngineeringItems"].Select(sfSupportFilter.EngineeringItemsQuery);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:60: // Получить PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:61: int iPnPId = Convert.ToInt32(drSupport["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:63: // Объявить или иницировать переменную PnPId трубы или отвода,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:65: int iParentPipeOrElbowPnPId = -1;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:67: // Определить PnPId трубы или отвода,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:69: List<int> liCheckedPnPIds = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:70: iParentPipeOrElbowPnPId = GetParentPnPId(iPnPId, ref liCheckedPnPIds);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:75: if (!ValveGroups.CheckExistingAndDrawingsAndLineNumbers(iPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:82: if (liAddedPnPIdSupports.IndexOf(iPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:84: liAddedPnPIdSupports.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:92: int iNominalDiameter = ValveGroups.GetNominalDiameter(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:102: AddOrCreateSupportGroup(sfSupportFilter, iNominalDiameter, sDescription, iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:108: // Обработать каждый элемент liAllPnPIdSupports
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:109: foreach (int iMissedPnPId in liAllPnPIdSupports)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:112: if (liAddedPnPIdSupports.IndexOf(iMissedPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:114: // Объявить или иницировать переменную PnPId трубы или отвода,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:116: int iParentPipeOrElbowPnPId = -1;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:118: // Определить PnPId трубы или отвода,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:120: List<int> liCheckedPnPIds = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:121: iParentPipeOrElbowPnPId = GetParentPnPId(iMissedPnPId, ref liCheckedPnPIds);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:126: //if (iParentPipeOrElbowPnPId != -1) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:127: // if (!ValveGroups.CheckExistingAndDrawingsAndLineNumbers(iParentPipeOrElbowPnPId)) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:132: if (!ValveGroups.CheckExistingAndDrawingsAndLineNumbers(iMissedPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:139: int iNominalDiameter = ValveGroups.GetNominalDiameter(iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:141: // Получить запись таблицы EngineeringItems
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:142: DataRow drSupport = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:155: AddOrCreateSupportGroup(sfSupportFilter, iNominalDiameter, sDescription, iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:162: AddOrCreareNKRGroup(iNominalDiameter, sDescription, iMissedPnPId, sGroup);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:262: void AddOrCreareNKRGroup(int iNominalDiameter, string sDescription, int iComponentPnPId, string sGroup)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:266: int iParentSupportPnPId = 0;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:270: // iParentSupportPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iComponentPnPId)[0]["Part2"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:276: // iParentSupportPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iComponentPnPId)[0]["Part1"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:280: // iParentSupportPnPId = iComponentPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:295: dataRowsConnectionsPart = dataTablePartConnection.Select("[Part1]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:300: iParentSupportPnPId = Convert.ToInt32(dataRowsConnectionsPart[0]["Part2"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:304: if (iParentSupportPnPId != 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:309: dataRowsConnectionsPart = dataTablePartConnection.Select("[Part2]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:314: iParentSupportPnPId = Convert.ToInt32(dataRowsConnectionsPart[0]["Part1"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:318: if (iParentSupportPnPId != 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:325: iParentSupportPnPId = iComponentPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:328: DataRow drParentSupport = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iParentSupportPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:358: if (!PipingElements.GetDrawingFileNameAndComponentHandle(iComponentPnPId, ref sDrawingFileName, ref lHandle))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:388: nkrNKRSubGroup.AddNKR(iComponentPnPId, nkrNKR, ref lkvpsdGeometryParameters, out dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:389: //AddSupportToPipingElement(iComponentPnPId, iMinZ, iMaxZ, dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:393: nkrNKRSubGroup.AddNKR(iComponentPnPId, new NKR(sDescription), ref lkvpsdGeometryParameters, out dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:394: //AddSupportToPipingElement(iComponentPnPId, iMinZ, iMaxZ, dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:399: nkrNKRNewSubGroup.AddNKR(iComponentPnPId, new NKR(sDescription), ref lkvpsdGeometryParameters, out dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:400: //AddSupportToPipingElement(iComponentPnPId, iMinZ, iMaxZ, dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:407: nkrNKRNewSubGroup2.AddNKR(iComponentPnPId, new NKR(sDescription), ref lkvpsdGeometryParameters, out dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:408: //AddSupportToPipingElement(iComponentPnPId, iMinZ, iMaxZ, dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:413: // Рекурсивно обработать опору или НКР с PnPId iCurrentPnPId.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:414: // вернуть PnPId трубы или отвода, к которому присоединен компонент
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:415: int GetParentPnPId(int iCurrentPnPId, ref List<int> liCheckedPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:417: DataRow[] adrParentPnPIds1 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:418: if (adrParentPnPIds1.Length != 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:420: foreach (DataRow drParentPnPId in adrParentPnPIds1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:422: int iPipeOrElbow1 = Convert.ToInt32(drParentPnPId["Part2"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:423: if (liCheckedPnPId.IndexOf(iPipeOrElbow1) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:425: liCheckedPnPId.Add(iPipeOrElbow1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:426: DataRow drParentClassName1 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPipeOrElbow1).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:433: int iRecursion1 = GetParentPnPId(iPipeOrElbow1, ref liCheckedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:441: DataRow[] adrParentPnPIds2 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:442: if (adrParentPnPIds2.Length != 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:444: foreach (DataRow drParentPnPId in adrParentPnPIds2)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:446: int iPipeOrElbow2 = Convert.ToInt32(drParentPnPId["Part1"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:447: if (liCheckedPnPId.IndexOf(iPipeOrElbow2) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:449: liCheckedPnPId.Add(iPipeOrElbow2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:450: DataRow drParentClassName2 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPipeOrElbow2).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:457: int iRecursion2 = GetParentPnPId(iPipeOrElbow2, ref liCheckedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:469: void AddSupportToPipingElement(int iSupportPnPId, int iMinZ, int iMaxZ, double dWeight)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:471: // Объявить или иницировать переменную PnPId трубы или отвода,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:473: int iParentPipeOrElbowPnPId = -1;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:475: // Определить PnPId трубы или отвода,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:477: List<int> liCheckedPnPIds = new List<int>();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:478: iParentPipeOrElbowPnPId = GetParentPnPId(iSupportPnPId, ref liCheckedPnPIds);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:480: // Если iParentPipeOrElbowPnPId определить не удалось, выйти
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:481: if (iParentPipeOrElbowPnPId == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:486: // Получить спискок PipingElement, в состав которого входит iParentPipeOrElbowPnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:487: List<PipingElement> lpeParentPipingElements = PipingElements.lpePipingElements.Where(o => o.PnPIds.IndexOf(iParentPipeOrElbowPnPId) != -1).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:502: // Определить PipingElement, в состав которого входит iParentPipeOrElbowPnPId,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:514: void AddOrCreateSupportGroup(SupportFilter sfSupportFilter, int iNominalDiameter, string sDescription, int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:522: if (!PipingElements.GetDrawingFileNameAndComponentHandle(iComponentPnPId, ref sDrawingFileName, ref lHandle))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:538: dWeight = Convert.ToDouble(Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId)[0]["Weight"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:559: AddSupportToPipingElement(iComponentPnPId, iMinZ, iMaxZ, dWeight);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:729: string sEngineeringItemsQuery; // запрос к таблице EngeneerinItems
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:740: // Член для чтения sEngineeringItemsQuery
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:741: public string EngineeringItemsQuery
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:745: return sEngineeringItemsQuery;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:750: public SupportFilter(string sName, string sEngineeringItemsQuery)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:753: this.sEngineeringItemsQuery = sEngineeringItemsQuery;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:942: public void AddNKR(int iComponentPnPId, NKR nkrNKR, ref List<KeyValuePair<string, double>> lkvpsdGeometryParameters, out double dWeight)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:953: int iPnPId = iComponentPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:954: if (Program.liErrorNKRs.IndexOf(iPnPId) == -1)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:956: Program.liErrorNKRs.Add(iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:961: Program.lsErrorNKRs[Program.liErrorNKRs.IndexOf(iPnPId)] += "," + sParameter.Replace("{", "").Replace("}", "");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1196: lWeldedSupports.Add(new WeldedSupport(Convert.ToInt32(dSupport["PnPID"])));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1200: lWeldedSupports = lWeldedSupports.Where(o => Glob.ldSelectedDrawings.Select(o1 => o1.iPnPId).ToList().IndexOf(o.DrawingId) != -1).
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1203: Where(o => Glob.ldSelectedLineNumbers.Select(o1 => o1.iPnPId).ToList().IndexOf(o.LineGroupId) != -1).
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1204: Where(o => Welds.lwlnLineNumbers.First(o1 => o1.PnPId == o.LineGroupId).IsHeatTreated).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1226: public int LineGroupId { get; private set; } // PnPID номера линии компонента, к которому присоединена опора
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1227: public int DrawingId { get; private set; } // PnPID чертежа компонента, к которому присоединена опора
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1233: public WeldedSupport(int PnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1236: DataRow dEItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("PnPId=" + PnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1255: DataRow[] aConnectionsAsPart1 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("Part1=" + PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1256: DataRow[] aConnectionsAsPart2 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("Part2=" + PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1268: DataRow dItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("PnPId=" + iConnectedPartId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1275: DataRow dLineGroup1 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("Part=" + iConnectedPartId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1276: LineGroupId = Convert.ToInt32(dLineGroup1["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1278: DataRow dDataLink1 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + iConnectedPartId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1287: // LineGroupId = -1;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1289: DataRow dLineGroup1 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("Part=" + PnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1290: LineGroupId = Convert.ToInt32(dLineGroup1["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1292: DataRow dDataLink1 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + PnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1294: NominalDiameter = ValveGroups.GetNominalDiameter(PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:25: static int iCurrentWeldPnPId; // PnPId текущего анализируемого шва
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:26: static int iCurrentConnectorPnPId; // PnPId текущего анализируемого соединения
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:44: iCurrentWeldPnPId = Convert.ToInt32(string.Format("{0}", drWeld["PnPID"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:46: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:47: if (adrEngineeringItems.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:51: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:52: int iDwgId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:53: long lHandle = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgHandleLow"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:54: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:55: iCurrentConnectorPnPId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:58: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:64: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:80: if ((Program.dsPipingDCF.Tables.Contains("Nozzle") && Program.dsPipingDCF.Tables["Nozzle"].Select("PnPId=" + liConnectedParts[0]).Length > 0) || (Program.dsPipingDCF.Tables.Contains("Equipment") && Program.dsPipingDCF.Tables["Equipment"].Select("PnPId=" + liConnectedParts[0]).Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:113: iCurrentWeldPnPId = Convert.ToInt32(string.Format("{0}", drWeld["PnPID"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:114: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:115: if (adrEngineeringItems.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:119: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:120: int iDwgId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:121: long lHandle = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgHandleLow"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:122: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:123: iCurrentConnectorPnPId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:126: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:132: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:148: if ((Program.dsPipingDCF.Tables.Contains("Nozzle") && Program.dsPipingDCF.Tables["Nozzle"].Select("PnPId=" + liConnectedParts[0]).Length > 0) || (Program.dsPipingDCF.Tables.Contains("Equipment") && Program.dsPipingDCF.Tables["Equipment"].Select("PnPId=" + liConnectedParts[0]).Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:179: iCurrentWeldPnPId = Convert.ToInt32(string.Format("{0}", drWeld["PnPID"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:180: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:181: if (adrEngineeringItems.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:185: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:186: int iDwgId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:187: long lHandle = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgHandleLow"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:188: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:189: iCurrentConnectorPnPId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:192: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:198: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:214: if ((Program.dsPipingDCF.Tables.Contains("Nozzle") && Program.dsPipingDCF.Tables["Nozzle"].Select("PnPId=" + liConnectedParts[0]).Length > 0) || (Program.dsPipingDCF.Tables.Contains("Equipment") && Program.dsPipingDCF.Tables["Equipment"].Select("PnPId=" + liConnectedParts[0]).Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:244: int iPipePnPId = Convert.ToInt32(drPipe["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:247: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPipePnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:248: if (adrEngineeringItems.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:252: string sSpec = Connection.GetSpecForComponent(iPipePnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:254: double dNominalDiameter = Connection.GetNominalDiameter(iPipePnPId, out bImperial);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:255: WeldLineNumber wlnLineNumber = Connection.GetLineNumberForComponent(iPipePnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:264: if (!PipingElements.GetDrawingFileNameAndComponentHandle(iPipePnPId, ref sDrawingFileName, ref lHandle, true))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:277: lwWelds.Add(new Weld(wpWeldPipe, wlnLineNumber, new List<string> { string.Format("{0}", adrEngineeringItems[0]["Material"]), string.Format("{0}", adrEngineeringItems[0]["Material"]) }, z));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:291: iCurrentWeldPnPId = Convert.ToInt32(string.Format("{0}", drWeld["PnPID"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:293: if (!Connection.OnLineNumbersAndDrawings(iCurrentWeldPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:298: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:299: if (adrEngineeringItems.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:303: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:304: int iDwgId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:305: long lHandle = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgHandleLow"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:306: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:307: iCurrentConnectorPnPId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:308: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:315: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:324: DataRow[] adrOlets1 = Program.dsPipingDCF.Tables["Olet"].Select("[PnPID]=" + iConnectedPart1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:325: DataRow[] adrOlets2 = Program.dsPipingDCF.Tables["Olet"].Select("[PnPID]=" + iConnectedPart2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:354: if (iConnectedPart1 != iCurrentConnectorPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:366: if (iConnectedPart2 != iCurrentConnectorPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:428: iCurrentWeldPnPId = Convert.ToInt32(string.Format("{0}", drWeld["PnPID"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:430: if (!Connection.OnLineNumbersAndDrawings(iCurrentWeldPnPId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:435: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:436: if (adrEngineeringItems.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:440: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:441: int iDwgId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:442: long lHandle = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["DwgHandleLow"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:443: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:444: iCurrentConnectorPnPId = Convert.ToInt32(string.Format("{0}", adrPnPDataLinks[0]["RowId"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:445: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:452: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:461: DataRow[] adrCouplings1 = Program.dsPipingDCF.Tables["Coupling"].Select("[PnPID]=" + iConnectedPart1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:462: DataRow[] adrCouplings2 = Program.dsPipingDCF.Tables["Coupling"].Select("[PnPID]=" + iConnectedPart2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:491: if (iConnectedPart1 != iCurrentConnectorPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:503: if (iConnectedPart2 != iCurrentConnectorPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:917: List<int> liConnectedParts; // список PnPId 2-х соединенных элементов
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:944: DataRow[] adrEngineeringItems;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:948: adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:950: if (adrEngineeringItems.Length > 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:954: // if (string.Format("{0}", adrEngineeringItems[0]["ComponentDesignation"]) == "Custom")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:959: //if (string.Format("{0}", adrEngineeringItems[0]["Spec"]) == "")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:964: if ((string.Format("{0}", adrEngineeringItems[0]["Spec"]) == "")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:965: && (string.Format("{0}", adrEngineeringItems[0]["ComponentDesignation"]) != "Custom"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:972: adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i] + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:973: lbExistingParts.Add(adrEngineeringItems.Length == 0);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:974: adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:975: if (adrEngineeringItems.Length > 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:977: lsNominalDiameters.Add(Convert.ToDouble(adrEngineeringItems[0]["NominalDiameter"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:988: //DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:989: //if (adrEngineeringItems.Length == 1) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:990: // lsMaterials.Add(string.Format("{0}", adrEngineeringItems[0]["Material"]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1154: string GetPipeSpecMaterial(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1156: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1159: DataRow drDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1160: //switch (string.Format("{0}", drDataLinks["RowClassName"])) {
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1171: double dNominalDiameter = GetNominalDiameter(iPnPId, out bImperial, true);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1190: public static bool OnLineNumbersAndDrawings(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1194: int iLineNumberPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId)[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1195: bool bOnLineNumbers = (lwlnLineNumbers.Where(o => o.PnPId == iLineNumberPnPId).Count() > 0);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1196: int iDrawingPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId)[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1197: bool bOnDrawings = (Glob.ldSelectedDrawings.Where(o => o.iPnPId == iDrawingPnPId).Count() > 0);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1206: // Получить WeldLineNumber по PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1209: public static WeldLineNumber GetLineNumberForComponent(int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1211: DataRow[] adrP3dLineGroupPartRelationship = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1212: if (adrP3dLineGroupPartRelationship.Length == 0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1219: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1224: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1229: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1231: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1236: Program.liComponentsWOLineNumber.Add(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1242: int iLineNumberPnPId = 0;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1245: iLineNumberPnPId = Convert.ToInt32(adrP3dLineGroupPartRelationship[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1250: if (wlnLineNumber.PnPId == iLineNumberPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1262: public static double GetNominalDiameter(int iComponentPnPId, out bool bImperial, bool bAllwaysGetMetric = false)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1265: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1268: bImperial = (adrEngineeringItems[0]["NominalUnit"].ToString().ToUpper() == "IN");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1269: double dNominalDiameter = Convert.ToDouble(adrEngineeringItems[0]["NominalDiameter"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1281: // Получить наименование миникаталога по PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1283: public static string GetSpecForComponent(int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1285: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1288: string sSpec = adrEngineeringItems[0]["Spec"].ToString();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1316: // Вернуть WeldPipe по PnPId компонента
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1318: WeldPipe GetWeldPipeForComponent(int iComponentPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1320: string sSpec = GetSpecForComponent(iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1326: double dNominalDiameter = GetNominalDiameter(iComponentPnPId, out bImperial);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1334: // Вернуть список PnPId на номере линии wlnLineNumber, которые относятся к ctComponetType,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1337: List<int> GetListOfNotExistingComponetsPnPIdForWeldLineNumberAndComponentType(WeldLineNumber wlnLineNumber, ComponentType ctComponetType, double dNominalDiameter = -1.0)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1340: DataRow[] adrP3dLineGroupPartRelationship = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[LineGroup]=" + wlnLineNumber.PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1341: foreach (DataRow drComponent in adrP3dLineGroupPartRelationship)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1343: int iCurrentPnPId = Convert.ToInt32(drComponent["Part"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1344: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1349: if ((GetComponentType(iCurrentPnPId) == ctComponetType) &&
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1351: (adrEngineeringItems.Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1353: liCurrentReturnValue.Add(iCurrentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1355: else if ((GetComponentType(iCurrentPnPId) == ctComponetType) &&
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1357: (adrEngineeringItems.Length > 0) &&
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1358: (dNominalDiameter == Convert.ToDouble(adrEngineeringItems[0]["NominalDiameter"])))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1360: liCurrentReturnValue.Add(iCurrentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1448: WeldLineNumber wlnLineNumber = GetLineNumberForComponent(iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1492: // Получить список PnPId труб или грутых отводов с указанных номера линии
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1494: List<int> liPipeOrPipeBendWithSameDiameter = GetListOfNotExistingComponetsPnPIdForWeldLineNumberAndComponentType(wlnLineNumber, ComponentType.ctPipeOrPipeBend, dNominalDiameter);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1513: // Получить список PnPId труб или грутых отводов с указанного номера линии
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1514: List<int> liPipesOrPipeBendsWithAnyDiameter = GetListOfNotExistingComponetsPnPIdForWeldLineNumberAndComponentType(wlnLineNumber, ComponentType.ctPipeOrPipeBend);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1534: // Получить список PnPId "не фланцев, инструментов, арматуры, труб или гнутых отводов" с указанного номера линии
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1535: List<int> liNotFlangeOrInstrumentOrValveOrPipeOrPipeBend = GetListOfNotExistingComponetsPnPIdForWeldLineNumberAndComponentType(wlnLineNumber, ComponentType.ctNotFlangeOrInstrumentOrValveOrPipeOrPipeBend);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1561: // Получить список PnPId "не фланцев, инструментов, арматуры, труб или гнутых отводов" с указанного номера линии
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1562: List<int> liNotFlangeOrInstrumentOrValveOrPipeOrPipeBendOrSupportOrConnection = GetListOfNotExistingComponetsPnPIdForWeldLineNumberAndComponentType(wlnLineNumber, ComponentType.ctNotFlangeOrInstrumentOrValveOrPipeOrPipeBendOrSupportOrConnection);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1588: // Получить список PnPId "фланцев, инструментов или арматуры" с указанного номера линии
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1589: List<int> liFlangeOrInstrumentOrValve = GetListOfNotExistingComponetsPnPIdForWeldLineNumberAndComponentType(wlnLineNumber, ComponentType.ctFlangeOrInstrumentOrValve);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1623: WeldLineNumber wlnLineNumber = GetLineNumberForComponent(iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1625: double dNominalDiameter = GetNominalDiameter(iCurrentWeldPnPId, out bImperial);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1671: double dNominalDiameter = GetNominalDiameter(iCurrentWeldPnPId, out bImperial);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1707: double dNominalDiameter = GetNominalDiameter(iCurrentWeldPnPId, out bImperial);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1712: ComponentType GetComponentType(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1714: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1715: switch (string.Format("{0}", adrPnPDataLinks[0]["RowClassName"]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1873: WeldLineNumber wlnNewLineNumber = new WeldLineNumber(lnLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2025: int iPnPId; // PnPId номера линии
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2049: public WeldLineNumber(int iPnPId)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2051: this.iPnPId = iPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2052: DataRow[] adrLineNumber = Program.dsPipingDCF.Tables["P3dLineGroup"].Select("[PnPID]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2115: int iThread = Convert.ToInt32(drThread["PnPID"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2116: DataRow[] adrDatalinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + iThread);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2122: adrDatalinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("DwgId=" + iDwgId + " AND DwgHandleLow=" + lDwgHandleLow + " AND RowClassName='P3dConnector'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2136: adrDatalinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + iConnectedPart);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2143: if (!Glob.ldSelectedDrawings.Any(o => o.iPnPId == iDwgId))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2148: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("PnPID=" + iConnectedPart);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2149: if ((adrEngineeringItems.Length == 0) || (string.Format("{0}", adrEngineeringItems[0]["Status"]).ToUpper() != "NEW"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2154: DataRow[] adrRelations = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("Part=" + iConnectedPart + " AND LineGroup=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2186: // Вернуть iPnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2187: public int PnPId
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2191: return iPnPId;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XMLFile.cs:230: // Прочитать значение поля Title таблицы EngineeringItems,
@@ -1,3 +0,0 @@
P_Rec_BOP.sln
P_Rec_BOP\App.config
P_Rec_BOP\P_Rec_BOP.csproj
@@ -1,11 +0,0 @@
"Project","Kind","Name","HintPath","CopyLocal"
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL","C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Word.dll",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","SautinSoft.Document","lib\SautinSoft.Document.dll",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System","",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.Data","",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.Data.DataSetExtensions","",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.Data.SQLite","lib\x32\System.Data.SQLite.dll",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.Drawing","",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.Windows.Forms","",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.XML","",""
"P_Rec_BOP\P_Rec_BOP.csproj","Reference","System.Xml.Linq","",""
1 Project Kind Name HintPath CopyLocal
2 P_Rec_BOP\P_Rec_BOP.csproj Reference Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Word.dll
3 P_Rec_BOP\P_Rec_BOP.csproj Reference SautinSoft.Document lib\SautinSoft.Document.dll
4 P_Rec_BOP\P_Rec_BOP.csproj Reference System
5 P_Rec_BOP\P_Rec_BOP.csproj Reference System.Data
6 P_Rec_BOP\P_Rec_BOP.csproj Reference System.Data.DataSetExtensions
7 P_Rec_BOP\P_Rec_BOP.csproj Reference System.Data.SQLite lib\x32\System.Data.SQLite.dll
8 P_Rec_BOP\P_Rec_BOP.csproj Reference System.Drawing
9 P_Rec_BOP\P_Rec_BOP.csproj Reference System.Windows.Forms
10 P_Rec_BOP\P_Rec_BOP.csproj Reference System.XML
11 P_Rec_BOP\P_Rec_BOP.csproj Reference System.Xml.Linq
@@ -1 +0,0 @@
NO_GIT_DIRECTORY
@@ -1,2 +0,0 @@
"RelativePath","Format","Length","SHA256","SourceModified"
"templates\Шаблон.docx",".docx","88534","C669900F2D7D8A3B80BF6898FE80B0F0A6CF4F38694694A66367E487EB3EA79B","False"
1 RelativePath Format Length SHA256 SourceModified
2 templates\Шаблон.docx .docx 88534 C669900F2D7D8A3B80BF6898FE80B0F0A6CF4F38694694A66367E487EB3EA79B False
@@ -1,152 +0,0 @@
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:33: - быстрый вывод в Word дополнен явным присвоением режима просмотра
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:132:Новый вывод в Word, фильтр миникаталогов
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:139: - применен промежуточный класс для вывода отчета в Word
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:150: - переход на классический вывод в Word
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:168: - размещение файла вывода в Word во временной папке
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:22:настройка на шаблон .docx отключена в [Settings.xml]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:23: и в таком режиме файл [Шаблон.docx] берется по-умолчанию
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:26: - Q:\Projects\_TemplateProject\2019\2019 - Инструменты заполнения Ведомости объемов работ\Шаблон.docx
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:56:переработан шаблон выводимого документа [Шаблон.docx]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:59:добавлен промежуточный класс [Worder] для обращения к нему
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:62: для непосредственной работы с Word библиотекой.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:64: [ReportWithWorder], который является, по сути, копией прежнего
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:68:работоспособность класса [Worder] полная, как для классического
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:69: COM-вывода (Microsoft.Office.Interop.Word), так и для библиотеки
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:92:файл вывода в Word для формирования перемещен в локальную временную
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:1:1. Программа теперь использует библиотеку SautinSoft.Document.dll для получения документа Word "на лету", а не построчно выводит в создаваемый документ.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:6:6. Формат отчета - ".docx". Соответственно пересохранил шаблон в этом формате.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:7:7. Откомпилированная программа уже находится тут: "Q:\Projects\_TemplateProject\2019\2019 - Инструменты заполнения Ведомости объемов работ (новый шаблон ПТХ)\GetSmeta (с быстрым выводом в Word).exe"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:8:8. Если в готовом документе "поедет" таблица, то в Word нужно включить режим совместимости.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:9:Для этого нужно сохранить документ как ".doc".
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:10:Потом снова сохранить как ".docx".
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:12:Эта настройка сохраняется для всех новых сеансов Word.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:14:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:9:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:69: // http://www.dotnetperls.com/process
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Glob.cs:1:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Glob.cs:31: // Report / ReportWithWorder:
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Glob.cs:47: // путь шаблона документа отчета в формате MS Word
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Glob.cs:51: "Шаблон.docx");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:9:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:15:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:745: ReportWithWorder reportWithWorder = new ReportWithWorder();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:746: reportWithWorder.OutputReport();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:748: if (!string.IsNullOrEmpty(reportWithWorder.WordFileName))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:753: Path.Combine(Path.GetDirectoryName(reportWithWorder.WordFileName),
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:754: Path.GetFileNameWithoutExtension(reportWithWorder.WordFileName) + " z-base.txt"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:761: // reportWithWorder.WordFileName) { UseShellExecute = true });
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:762: Process.Start(reportWithWorder.WordFileName);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:71: <Compile Include="ReportWithWorder.cs" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:95: <Compile Include="Worder.cs" />
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:100: <Reference Include="Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:103: <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Word.dll</HintPath>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:50: Regex rRegexWordSpaceNumber = new Regex(@"[a-zA-Zа-яА-Я]+\s\d+");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:51: MatchCollection mcRegexWordSpaceNumber = rRegexWordSpaceNumber.Matches(sResult);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:54: string sResultWithoutWordSpaceNumber = Regex.Replace(sResult, @"[a-zA-Zа-яА-Я]+\s\d+", "*").Trim();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:57: string sResultWithoutWordSpaceNumberPiEAndFunctions = Regex.Replace(sResult, "(?<alpha>(pi|e|sin|cos|tan))", "*").Trim();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:60: Regex rRegexWord = new Regex(@"[a-zA-Zа-яА-Я]+");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:61: MatchCollection mcRegexWord = rRegexWord.Matches(sResultWithoutWordSpaceNumberPiEAndFunctions);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:67: foreach (Match mMatch in mcRegexWordSpaceNumber)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:73: foreach (Match mMatch in mcRegexWord)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:15: internal class ReportWithWorder
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:18: // Glob.sReportTemplatePath - путь шаблона документа отчета в формате MS Word
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:21: private Worder worder;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:24: private string _sWordFileName;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:26: public string WordFileName
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:27: { get { return _sWordFileName; } }
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:34: || Path.GetExtension(Glob.sReportTemplatePath) != ".docx")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:39: _sWordFileName = string.Empty;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:50: _sWordFileName = Glob.sProjectFolder + "\\" + Glob.sMainFolder + "\\"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:52: System.DateTime.Now)) + ".docx";
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:54: worder = new Worder(Glob.sReportTemplatePath, _sWordFileName);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:55: // worder.Engine = WordEngineName.EngineNone;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:56: worder.Engine = WordEngineName.EngineMicrosoftOfficeInterop;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:60: "Вывод в Word быстро?",
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:64: worder.Engine = WordEngineName.EngineSautinSoftDocument;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:68: if (worder.Engine == WordEngineName.EngineNone)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:70: _sWordFileName = string.Empty;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:76: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word"
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:81: _sWordFileName = string.Empty;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1321: _sWordFileName = worder.ResultFilePath;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:49: // (титулы меняем в визуальном представлении формы и в шаблоне .docx)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Settings.xml:10: <!-- Путь шаблона документа отчета в формате MS Word -->
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Settings.xml:13: <ReportTemplate path="Q:\Projects\_TemplateProject\2019\2019 - Инструменты заполнения Ведомости объемов работ\Шаблон.docx"/>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Settings.xml:14: <ReportTemplate path="Q:\Projects\_TemplateProject\2019\2019 - Инструменты заполнения Ведомости объемов работ (новый шаблон ПТХ)\Шаблон.docx"/>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:2:#if (true) // MicrosoftOfficeInterop - \PIA\Office15\Microsoft.Office.Interop.Word.dll
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:22:using Word = Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:23:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:34: enum WordEngineName
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:115: internal class Worder
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:122: // private WordEngineName _engineName = WordEngineName.EngineMicrosoftOfficeInterop;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:123: // private WordEngineName _engineName = WordEngineName.EngineSautinSoftDocument;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:124: private WordEngineName _engineName = WordEngineName.EngineNone;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:128: // WordEngineName.EngineMicrosoftOfficeInterop
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:130: private Word.Application _wordApp;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:131: private Word.Document _wordDoc;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:132: private Word.Table _wordTable;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:133: private Word.Table _wordFooterTableFirstPage;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:134: private Word.Table _wordFooterTableSecondPage;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:142: // WordEngineName.EngineSautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:166: public Worder() { }
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:168: public Worder(string sEmptyTemplateFilePath)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:174: public Worder(string sEmptyTemplateFilePath, string sResultFilePath)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:204: public WordEngineName Engine
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:219: private bool CheckEngine(WordEngineName engineName)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:221: return engineName != WordEngineName.EngineNone;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:232: && Path.GetExtension(sEmptyTemplateFilePath) == ".docx")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:309: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:311: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:327: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:331: _wordApp = new Word.Application();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:335: .Footers[Word.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range.Tables[1];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:337: .Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Tables[1];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:344: _wordApp.Selection.LanguageID = Word.WdLanguageID.wdRussian;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:347: _wordDoc.ActiveWindow.View.Type = Word.WdViewType.wdNormalView;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:348: // _wordApp.ActiveWindow.ActivePane.View.Zoom.PageFit = Word.WdPageFit.wdPageFitBestFit;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:358: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:375: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:387: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:389: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:400: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:412: _wordDoc.ActiveWindow.View.Type = Word.WdViewType.wdPrintView;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:413: // _wordApp.ActiveWindow.ActivePane.View.Zoom.PageFit = Word.WdPageFit.wdPageFitBestFit;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:423: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:446: // сохраняется rtf-содержимое в файл с .docx-расширением
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:461: // при открытии rtf-файла даже в [Microsoft.Office.Interop.Word] обязательно,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:463: // иметь расширение .docx не обязательно
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:465: // если библиотека [Microsoft.Office.Interop.Word] не подключена,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:468: // то выводим файл результата с исходным расширением .docx
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:476: _wordApp = new Word.Application();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:490: _wordDoc.ActiveWindow.View.Type = Word.WdViewType.wdPrintView;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:491: // _wordApp.ActiveWindow.ActivePane.View.Zoom.PageFit = Word.WdPageFit.wdPageFitBestFit;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:510: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:527: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:529: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:538: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:544: //else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:558: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:560: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:571: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:577: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:592: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:594: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:605: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:615: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:634: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:636: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:647: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:657: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:673: private void ApplyCell(Word.Cell cellToApply,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:689: = Word.WdParagraphAlignment.wdAlignParagraphLeft;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:692: = Word.WdParagraphAlignment.wdAlignParagraphCenter;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:695: = Word.WdParagraphAlignment.wdAlignParagraphRight;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:744: private void UpdateAllFields(Word.Document doc)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:750: foreach (Word.Section section in doc.Sections)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:753: foreach (Word.HeaderFooter hf in section.Headers)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:758: foreach (Word.HeaderFooter hf in section.Footers)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:799: // throw new Exception("The output to Word process is not ready");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:801: Glob.TracedMessageBoxShow("Ошибка: не удается обратиться к приложению Microsoft Word "
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:810: else if (_engineName == WordEngineName.EngineMicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:860: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XMLFile.cs:29: string sGeometryName = xeUpdateSupport.Attribute("contentgeometrytemplate").Value;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XMLFile.cs:128: // Прочитать путь шаблона документа отчета в формате MS Word
@@ -1,13 +0,0 @@
Template metadata (aggregated; source not copied)
Format=DOCX
Parts=document.xml, _rels/document.xml.rels, footnotes.xml, endnotes.xml, header1.xml, footer1.xml, header2.xml, footer2.xml, _rels/footer2.xml.rels, media/image1.jpeg, theme/theme1.xml, settings.xml, numbering.xml, styles.xml, webSettings.xml, fontTable.xml
ParagraphsInBody=1
TablesInBody=1
SectionProperties=1
BookmarksInBody=0
ContentControlsInBody=0
SimpleFields=0
FieldChars=0
InstructionTexts=0
HeaderParts=2
FooterParts=2
@@ -1,2 +0,0 @@
P_Rec_BOP
templates
@@ -1,539 +0,0 @@
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:42: - вывод документа с помощью [Document .Net] SautinSoft.Document.dll
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:53: - включен вариант с Document .Net (SautinSoft.Document)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:143: - вариант с Document .Net (SautinSoft.Document) полностью реализован
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\CHANGELOG.md:154: - вариант с Document .Net (SautinSoft.Document)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\Комментарии.txt:1:1. Программа теперь использует библиотеку SautinSoft.Document.dll для получения документа Word "на лету", а не построчно выводит в создаваемый документ.
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:69: COM-вывода (Microsoft.Office.Interop.Word), так и для библиотеки
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\README.md:70: Document .Net (SautinSoft.Document). оба варианта имели реализацию
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\CSVFile.cs:93: dtCurrentResultValue.Rows.Add(asFieldValues);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:15:// DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:29:// DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:50:// DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:109:// DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + this.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:143:// DataRow[] drPipeBend = Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + this.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Components.cs:195:// DataRow[] drRows3 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:14:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:159: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:211: //System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:221: if (_projectPipingDcf.Tables.Contains("EngineeringItems")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:222: && (_projectPipingDcf.Tables.Contains("PnPDataLinks"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:223: && (_projectPipingDcf.Tables.Contains("PnPDrawings"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:224: && (_projectPipingDcf.Tables.Contains("P3dLineGroupPartRelationship"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:225: && (_projectPipingDcf.Tables.Contains("P3dLineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:227: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:228: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("Status"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:229: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("Spec"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:231: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("RowId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:232: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("DwgId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:234: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:235: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPType"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:236: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Dwg Name"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:237: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Title"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:238: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPRelativePath"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:239: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Path"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:240: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPUnc"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:241: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Area"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:243: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("Part"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:244: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("LineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:246: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:247: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Tag"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:248: // && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Number"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:256: System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:257: System.Data.DataTable tablePnPDataLinks = _projectPipingDcf.Tables["PnPDataLinks"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:258: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:259: System.Data.DataTable tableP3dLineGroupPartRelationship = _projectPipingDcf.Tables["P3dLineGroupPartRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:260: System.Data.DataTable tableP3dLineGroup = _projectPipingDcf.Tables["P3dLineGroup"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:262: // System.Data.DataTable tableP3dDrawingLineGroupRelationship = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:432: if (_projectPipingDcf.Tables.Contains("EngineeringItems")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:433: && (_projectPipingDcf.Tables.Contains("PnPDataLinks"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:434: && (_projectPipingDcf.Tables.Contains("PnPDrawings"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:435: && (_projectPipingDcf.Tables.Contains("P3dLineGroupPartRelationship"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:436: && (_projectPipingDcf.Tables.Contains("P3dLineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:438: && (_projectPipingDcf.Tables.Contains("Pipe"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:440: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:441: && (_projectPipingDcf.Tables["EngineeringItems"].Columns.Contains("Status"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:443: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("RowId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:444: && (_projectPipingDcf.Tables["PnPDataLinks"].Columns.Contains("DwgId"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:446: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:447: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPType"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:448: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Dwg Name"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:449: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Title"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:450: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPRelativePath"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:451: && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Path"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:452: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("PnPUnc"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:453: // && (_projectPipingDcf.Tables["PnPDrawings"].Columns.Contains("Area"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:455: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("Part"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:456: && (_projectPipingDcf.Tables["P3dLineGroupPartRelationship"].Columns.Contains("LineGroup"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:458: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:459: && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Tag"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:460: // && (_projectPipingDcf.Tables["P3dLineGroup"].Columns.Contains("Number"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:462: && (_projectPipingDcf.Tables["Pipe"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:463: && (_projectPipingDcf.Tables["Pipe"].Columns.Contains("CutLength"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:464: && (_projectPipingDcf.Tables["Pipe"].Columns.Contains("LinearWeight"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:472: System.Data.DataTable tableEngineeringItems = _projectPipingDcf.Tables["EngineeringItems"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:473: System.Data.DataTable tablePnPDataLinks = _projectPipingDcf.Tables["PnPDataLinks"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:474: System.Data.DataTable tablePnPDrawings = _projectPipingDcf.Tables["PnPDrawings"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:475: System.Data.DataTable tableP3dLineGroupPartRelationship = _projectPipingDcf.Tables["P3dLineGroupPartRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:476: System.Data.DataTable tableP3dLineGroup = _projectPipingDcf.Tables["P3dLineGroup"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:478: // System.Data.DataTable tableP3dDrawingLineGroupRelationship = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:480: System.Data.DataTable tablePipe = _projectPipingDcf.Tables["Pipe"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:484: if (_projectPipingDcf.Tables.Contains("PipeBend")
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:486: && (_projectPipingDcf.Tables["PipeBend"].Columns.Contains("PnPID"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:487: && (_projectPipingDcf.Tables["PipeBend"].Columns.Contains("CutLength"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:488: && (_projectPipingDcf.Tables["PipeBend"].Columns.Contains("LinearWeight"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:491: tablePipeBend = _projectPipingDcf.Tables["PipeBend"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:610: foreach (DataRow drRow in _projectPipingDcf.Tables["PnPDrawings"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:625: DataRow[] adrRows = _projectPipingDcf.Tables["P3dDrawingLineGroupRelationship"]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:635: .Tables["P3dLineGroupPartRelationship"]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:662: foreach (DataRow drRow in _projectPipingDcf.Tables["P3dLineGroup"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:721: drSourceRow = _projectPipingDcf.Tables["P3dLineGroup"]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:881: DataRow[] adrRows = Program.dsPipingDCF.Tables["P3dDrawingLineGroupRelationship"].Select("[Drawing]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsAndLinenumbers.cs:889: DataRow[] adrRows2 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[LineGroup]=" + lnLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\DrawingsInformation.cs:9:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Glob.cs:1:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Materials.cs:158: DataRow[] adrPipes = dsSpec.Tables["EngineeringItems"].Select("[PartCategory]='Pipe'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:9:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:28: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:37: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:63: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:71: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:76: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:80: if (Program.dsPipingDCF.Tables.Contains("Nozzle"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:81: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:83: if (Program.dsPipingDCF.Tables.Contains("Equipment"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:84: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:115: DataRow[] adrPartPorts = Program.dsPipingDCF.Tables["PartPort"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:120: DataRow[] adrPorts = Program.dsPipingDCF.Tables["Port"].Select("[PnPID]=" + iPortPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:178: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:203: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:212: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:217: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:221: if (Program.dsPipingDCF.Tables.Contains("Nozzle"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:222: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:223: if (Program.dsPipingDCF.Tables.Contains("Equipment"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:224: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:253: DataRow[] adrLineGroup = Program.dsPipingDCF.Tables["P3dLineGroup"].Select("[PnPID]=" + iLineNumberId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:324: DataRow[] adrTracingPipes = dsTracingSpec.Tables["EngineeringItems"].Select("[MatchingPipeOd]=" + dTracingOuterDiameter);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:418: DataRow drElbow = Program.dsPipingDCF.Tables["Elbow"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:429: DataRow[] adrComponent = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:443: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:537: DataRow drPipe = Program.dsPipingDCF.Tables["Pipe"].Select("[PnPId]=" + iComponentPnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:735: DataRow[] drPipeBend = Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:806: DataRow[] adrComponent = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:865: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:873: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:878: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:882: if (Program.dsPipingDCF.Tables.Contains("Nozzle"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:883: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:884: if (Program.dsPipingDCF.Tables.Contains("Equipment"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:885: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1021: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1129: DataRow[] aPipes = Program.dsPipingDCF.Tables["Pipe"].Select("PnPID=" + iComponentPnPId);//2018
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1319: DataRow[] aPipeBends = Program.dsPipingDCF.Tables["PipeBend"].Select("PnPID=" + iComponentPnPId);//2018
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1344: DataRow[] drPipeBend = Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PipingElements.cs:1427: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:15:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:217: if (!dsPipingDCF.Tables.Contains("EngineeringItems"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:225: DataRow[] adrEngineeringItems = dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:229: DataRow[] adrLineGroupPartRelationships = dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:237: // iNozzle = dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:242: // iEquipment = dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:246: if (Program.dsPipingDCF.Tables.Contains("Nozzle"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:247: iNozzle = dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:248: if (Program.dsPipingDCF.Tables.Contains("Equipment"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:249: iEquipment = dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Program.cs:645: csvfErrorNKRs.dtRows.Rows.Add(new string[2] { liErrorNKRs[i].ToString(), lsErrorNKRs[i] });
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\PYFile.cs:178: foreach (DataTable dtXLSheet in dsMaterials.Tables)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:100: <Reference Include="Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:103: <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Word.dll</HintPath>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:105: <Reference Include="SautinSoft.Document">
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\P_Rec_BOP.csproj:106: <HintPath>lib\SautinSoft.Document.dll</HintPath>
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:22: private Cells12345TableRow cells12345TableRow;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:58:#if (true) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:64: worder.Engine = WordEngineName.EngineSautinSoftDocument;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:139: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:148: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:160: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:179: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:229: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:238: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:250: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:269: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:326: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:335: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:347: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:366: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:420: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:429: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:437: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:449: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:457: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:469: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:484: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:522: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:559: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:570: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:605: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:632: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:644: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:656: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:684: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:695: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:716: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:730: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:743: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:757: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:785: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:796: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:817: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:835: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:847: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:859: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:889: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:900: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:910: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:925: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:951: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:962: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:970: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:995: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1006: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1014: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1040: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1064: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1095: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1124: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1135: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1164: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1175: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1204: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1215: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1243: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\ReportWithWorder.cs:1271: cells12345TableRow = new Cells12345TableRow();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:39: foreach (DataRow drRow in Program.dsPipingDCF.Tables["P3dLineGroup"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:47: foreach (DataRow drRow in Program.dsPipingDCF.Tables["PnPDrawings"].Rows)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:343: DataRow[] adrRows = Program.dsPipingDCF.Tables["P3dDrawingLineGroupRelationship"].Select("[Drawing]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.cs:351: DataRow[] adrRows2 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[LineGroup]=" + lnLineNumber.iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.designer.cs:92: this.lbSelectLineNumber.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SelectDrawingsAndLinenumbers.designer.cs:106: this.lbSelectDrawing.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:126: if (!Program.dsProcessPowerDCF.Tables.Contains("PnPProject"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:139: DataRow[] adrRows = Program.dsProcessPowerDCF.Tables["PnPProject"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:263: //csvfProjectProperties.dtRows.Rows.Add(asRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SetMainTitle.cs:271: csvfProjectProperties.dtRows.Rows.Add(asRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:46: DataTable dtSchema = sqlcConnection.GetSchema("Tables");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:59: DataTable dtTempTable = dsTempDataSet.Tables[0].Copy();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLDataBase.cs:61: dsCurrentReturnValue.Tables.Add(dtTempTable);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:31: DataTable dtSchema = sqlcConnection.GetSchema("Tables");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:41: DataTable dtTempTable = dsTempDataSet.Tables[0].Copy();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\SQLiteDataBase.cs:43: dsCurrentReturnValue.Tables.Add(dtTempTable);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:32: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowClassName]='Support'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:55: DataRow[] adrSupports = Program.dsPipingDCF.Tables["EngineeringItems"].Select(sfSupportFilter.EngineeringItemsQuery);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:142: DataRow drSupport = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:270: // iParentSupportPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iComponentPnPId)[0]["Part2"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:276: // iParentSupportPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iComponentPnPId)[0]["Part1"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:287: if (Program.dsPipingDCF.Tables.Contains("P3dPartConnection"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:289: dataTablePartConnection = Program.dsPipingDCF.Tables["P3dPartConnection"];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:328: DataRow drParentSupport = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iParentSupportPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:417: DataRow[] adrParentPnPIds1 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:426: DataRow drParentClassName1 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPipeOrElbow1).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:441: DataRow[] adrParentPnPIds2 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:450: DataRow drParentClassName2 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPipeOrElbow2).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:538: dWeight = Convert.ToDouble(Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId)[0]["Weight"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1189: if (Program.dsPipingDCF.Tables.Contains("Support"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1191: aSupports = Program.dsPipingDCF.Tables["Support"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1236: DataRow dEItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("PnPId=" + PnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1255: DataRow[] aConnectionsAsPart1 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("Part1=" + PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1256: DataRow[] aConnectionsAsPart2 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("Part2=" + PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1268: DataRow dItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("PnPId=" + iConnectedPartId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1275: DataRow dLineGroup1 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("Part=" + iConnectedPartId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1278: DataRow dDataLink1 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + iConnectedPartId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1289: DataRow dLineGroup1 = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("Part=" + PnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Supports.cs:1292: DataRow dDataLink1 = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + PnPId).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:22: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:57: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:78: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:109: // DataRow[] aPipes = Program.dsPipingDCF.Tables["Pipe"].Select("PnPID=" + iComponentPnPId);//2018
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:123: aPipes = Program.dsPipingDCF.Tables["Pipe"].Select("PnPID=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:128: aPipes = Program.dsPipingDCF.Tables["PipeBend"].Select("PnPID=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:154: //dLength = Convert.ToDouble(Program.dsPipingDCF.Tables["Pipe"].Select("[PnPID]=" + iComponentPnPId)[0]["Length"]) / 1000; // support
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:155: dLength = Convert.ToDouble(Program.dsPipingDCF.Tables["Pipe"].Select("[PnPID]=" + iComponentPnPId)[0]["CutLength"]) / 1000; // support
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:170: dLength = Convert.ToDouble(Program.dsPipingDCF.Tables["PipeBend"].Select("[PnPID]=" + iComponentPnPId)[0]["CutLength"]) / 1000;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:214: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:224: DataRow drDataLink = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\TestLineNumbers.cs:236: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:27: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowClassName]='Valve' OR [RowClassName]='InlineInstrument'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:51: if (Program.dsPipingDCF.Tables.Contains("Valve"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:55: adrValves = Program.dsPipingDCF.Tables["Valve"].Select("[ValveBodyType]='" + vfValveFilter.ValveBodyType + "'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:99: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:108: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:120: DataRow[] adrValves = Program.dsPipingDCF.Tables["EngineeringItems"].Select(vfValveFilter.EngineeringItemsQuery);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:175: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:205: DataRow drValve = Program.dsPipingDCF.Tables["Valve"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:214: string sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["ComponentDescription"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:217: sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["PartSizeLongDesc"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:228: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:245: DataRow drInlineInstrument = Program.dsPipingDCF.Tables["InlineInstrument"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:254: string sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["ComponentDescription"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:257: sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iMissedPnPId)[0]["PartSizeLongDesc"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:268: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:292: if (!bComponentFound && Program.dsPipingDCF.Tables.Contains("Valve"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:294: dataRowsComonents = Program.dsPipingDCF.Tables["Valve"].Select("[PnPID]=" + iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:300: if (!bComponentFound && Program.dsPipingDCF.Tables.Contains("InlineInstrument"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:302: dataRowsComonents = Program.dsPipingDCF.Tables["InlineInstrument"].Select("[PnPID]=" + iMissedPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:317: string sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select(
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:321: sDescription = string.Format("{0}", Program.dsPipingDCF.Tables["EngineeringItems"].Select(
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:333: DataRow drPipeRunComponent = Program.dsPipingDCF.Tables["PipeRunComponent"].Select("[PnPID]=" + iMissedPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:390: dWeight = Convert.ToDouble(Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId)[0]["Weight"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:436: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:501: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:529: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:539: DataRow[] adrDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Valves.cs:560: DataRow[] adrLineGroupPartRelationships = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:64: csvfPipingElements.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:103: csvfValves.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:139: csvfSupports.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:176: csvfNKRs.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:221: csvfWeldControlForLineNumbers.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:248: csvfWeldControlTotal.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:278: csvfWeldHeatTreatment.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:290: csvfWeldHeatTreatment.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:302: csvfWeldHeatTreatment.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Versions.cs:330: csvfPipingTest.dtRows.Rows.Add(asNewRow);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:2:#if (true) // MicrosoftOfficeInterop - \PIA\Office15\Microsoft.Office.Interop.Word.dll
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:5:#if (true) // SautinSoftDocument - SautinSoft.Document.dll
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:6:#define SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:22:using Word = Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:23:using Microsoft.Office.Interop.Word;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:25:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:26:using SautinSoft.Document;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:27:using SautinSoft.Document.Tables;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:40:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:41: EngineSautinSoftDocument,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:76: internal class Cells12345TableRow
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:78: public Cells12345TableRow()
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:123: // private WordEngineName _engineName = WordEngineName.EngineSautinSoftDocument;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:130: private Word.Application _wordApp;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:131: private Word.Document _wordDoc;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:141:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:142: // WordEngineName.EngineSautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:143: // https://github.com/SautinSoft/SautinSoft.Document.Examples
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:145: private SautinSoft.Document.DocumentCore _dc; // текущий документ
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:146: private SautinSoft.Document.Tables.Table _dcTable;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:147: private SautinSoft.Document.Tables.Table _dcTableFooterFirstPage;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:148: private SautinSoft.Document.Tables.Table _dcTableFooterSecondPage;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:150: private readonly SautinSoft.Document.CharacterFormat arialBold10
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:151: = new SautinSoft.Document.CharacterFormat() { Bold = true, FontName = "Arial", Size = 10.0 };
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:152: private readonly SautinSoft.Document.CharacterFormat arialBold11
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:153: = new SautinSoft.Document.CharacterFormat() { Bold = true, FontName = "Arial", Size = 11.0 };
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:154: private readonly SautinSoft.Document.CharacterFormat arialNotBold10
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:155: = new SautinSoft.Document.CharacterFormat() { Bold = false, FontName = "Arial", Size = 10.0 };
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:156: private readonly SautinSoft.Document.CharacterFormat arialNotBold11
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:157: = new SautinSoft.Document.CharacterFormat() { Bold = false, FontName = "Arial", Size = 11.0 };
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:158: private readonly SautinSoft.Document.CharacterFormat arialNotBold14
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:159: = new SautinSoft.Document.CharacterFormat() { Bold = false, FontName = "Arial", Size = 14.0 };
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:160: private readonly SautinSoft.Document.CharacterFormat arialNotBold16
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:161: = new SautinSoft.Document.CharacterFormat() { Bold = false, FontName = "Arial", Size = 16.0 };
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:331: _wordApp = new Word.Application();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:332: _wordDoc = _wordApp.Documents.Open(_tmpFilePath);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:333: _wordTable = _wordDoc.Tables[1];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:334: _wordFooterTableFirstPage = _wordDoc.Sections[1]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:335: .Footers[Word.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range.Tables[1];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:336: _wordFooterTableSecondPage = _wordDoc.Sections[1]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:337: .Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Tables[1];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:343: _wordDoc.Tables[1].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:344: _wordApp.Selection.LanguageID = Word.WdLanguageID.wdRussian;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:345: _wordDoc.Tables[1].Cell(1, 1).Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:357:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:358: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:360: _dc = SautinSoft.Document.DocumentCore.Load(_tmpFilePath);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:361: _dcTable = (SautinSoft.Document.Tables.Table)_dc.GetChildElements(true, ElementType.Table).First();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:363: List<SautinSoft.Document.HeaderFooter> headers = _dc
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:365: .Select(x => x as SautinSoft.Document.HeaderFooter).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:366: _dcTableFooterFirstPage = (SautinSoft.Document.Tables.Table)headers[3]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:368: _dcTableFooterSecondPage = (SautinSoft.Document.Tables.Table)headers[1]
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:410: _wordDoc.Tables[1].Cell(1, 1).Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:417: // _wordDoc.SaveAs(_tmpFilePath);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:422:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:423: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:425: //foreach (SautinSoft.Document.Tables.TableCell t
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:447: // это помогает сделать документ после библиотеки SautinSoft
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:458: // сохраняя все преимущества документа rtf с библиотекой SautinSoft
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:460: // с помощью одной только библиотеки SautinSoft
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:461: // при открытии rtf-файла даже в [Microsoft.Office.Interop.Word] обязательно,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:465: // если библиотека [Microsoft.Office.Interop.Word] не подключена,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:474:#if (SautinSoftDocument && MicrosoftOfficeInterop)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:476: _wordApp = new Word.Application();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:477: _wordDoc = _wordApp.Documents.Open(FileName: _tmpFilePath,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:488: _wordDoc.Tables[1].Cell(1, 1).Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:495: _wordDoc.SaveAs(FileName: _tmpFilePath,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:540: _wordDoc.Tables[1].Cell(rowIndex, 1).Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:543:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:544: //else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:576:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:577: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:579: SautinSoft.Document.Tables.TableRow row = _dcTable.Rows[rowIndex - 1];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:609: _wordTable.Rows.Add(ref oMissing);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:614:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:615: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:617: SautinSoft.Document.Tables.TableRow rowfirst = _dcTable.Rows[1]; // second row
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:618: SautinSoft.Document.Tables.TableRow row = rowfirst.Clone(true);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:619: _dcTable.Rows.Add(row);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:621: rowIndex = _dcTable.Rows.Count; // index + 1 according SautinSoftDocument style
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:630: public int AddNewRowToTable(Cells12345TableRow row)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:649: ApplyCell(_wordTable.Rows[rowIndex].Cells[1], row.Cell1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:650: ApplyCell(_wordTable.Rows[rowIndex].Cells[2], row.Cell2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:651: ApplyCell(_wordTable.Rows[rowIndex].Cells[3], row.Cell3);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:652: ApplyCell(_wordTable.Rows[rowIndex].Cells[4], row.Cell4);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:653: ApplyCell(_wordTable.Rows[rowIndex].Cells[5], row.Cell5);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:656:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:657: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:659: ApplyCell(_dcTable.Rows[rowIndex - 1].Cells[0], row.Cell1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:660: ApplyCell(_dcTable.Rows[rowIndex - 1].Cells[1], row.Cell2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:661: ApplyCell(_dcTable.Rows[rowIndex - 1].Cells[2], row.Cell3);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:662: ApplyCell(_dcTable.Rows[rowIndex - 1].Cells[3], row.Cell4);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:663: ApplyCell(_dcTable.Rows[rowIndex - 1].Cells[4], row.Cell5);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:701:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:702: // SautinSoftDocument overload
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:703: private void ApplyCell(SautinSoft.Document.Tables.TableCell cellToApply,
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:706: SautinSoft.Document.CharacterFormat characterFormat;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:729: ((SautinSoft.Document.Paragraph)cellToApply.Blocks.Last()).ParagraphFormat.Alignment
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:730: = SautinSoft.Document.HorizontalAlignment.Left;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:732: ((SautinSoft.Document.Paragraph)cellToApply.Blocks.Last()).ParagraphFormat.Alignment
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:733: = SautinSoft.Document.HorizontalAlignment.Center;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:735: ((SautinSoft.Document.Paragraph)cellToApply.Blocks.Last()).ParagraphFormat.Alignment
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:736: = SautinSoft.Document.HorizontalAlignment.Right;
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:744: private void UpdateAllFields(Word.Document doc)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:748: doc.Fields.Update();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:750: foreach (Word.Section section in doc.Sections)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:753: foreach (Word.HeaderFooter hf in section.Headers)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:755: hf.Range.Fields.Update();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:758: foreach (Word.HeaderFooter hf in section.Footers)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:760: hf.Range.Fields.Update();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:767:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:768: // SautinSoftDocument overload
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:769: private void UpdateAllFields(SautinSoft.Document.DocumentCore doc)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:776: List<SautinSoft.Document.Field> fields = doc.GetChildElements(true, ElementType.Field)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:777: .Select(x => x as SautinSoft.Document.Field).ToList();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:778: foreach (SautinSoft.Document.Field field in fields)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:814: _wordFooterTableFirstPage.Range.Cells[7].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:815: _wordFooterTableFirstPage.Range.Cells[7].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:817: _wordFooterTableSecondPage.Range.Cells[7].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:818: _wordFooterTableSecondPage.Range.Cells[7].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:823: _wordFooterTableFirstPage.Range.Cells[24].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:824: _wordFooterTableFirstPage.Range.Cells[24].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:829: _wordFooterTableFirstPage.Range.Cells[21].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:830: _wordFooterTableFirstPage.Range.Cells[21].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:835: _wordFooterTableFirstPage.Range.Cells[29].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:836: _wordFooterTableFirstPage.Range.Cells[29].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:841: _wordFooterTableFirstPage.Range.Cells[36].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:842: _wordFooterTableFirstPage.Range.Cells[36].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:847: _wordFooterTableFirstPage.Range.Cells[41].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:848: _wordFooterTableFirstPage.Range.Cells[41].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:853: _wordFooterTableFirstPage.Range.Cells[45].Range.Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:854: _wordFooterTableFirstPage.Range.Cells[45].Range.Text
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:859:#if (SautinSoftDocument) // SautinSoftDocument
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:860: else if (_engineName == WordEngineName.EngineSautinSoftDocument)
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:864: _dcTableFooterFirstPage.Rows[0].Cells[6].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:866: _dcTableFooterSecondPage.Rows[0].Cells[6].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:871: _dcTableFooterFirstPage.Rows[3].Cells[4].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:876: _dcTableFooterFirstPage.Rows[3].Cells[1].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:881: _dcTableFooterFirstPage.Rows[4].Cells[1].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:886: _dcTableFooterFirstPage.Rows[5].Cells[1].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:891: _dcTableFooterFirstPage.Rows[6].Cells[1].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Worder.cs:896: _dcTableFooterFirstPage.Rows[7].Cells[1].Content.End
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:41: DataRow[] adrButtweld = Program.dsPipingDCF.Tables["Buttweld"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:46: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:51: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:54: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:58: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:64: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:80: if ((Program.dsPipingDCF.Tables.Contains("Nozzle") && Program.dsPipingDCF.Tables["Nozzle"].Select("PnPId=" + liConnectedParts[0]).Length > 0) || (Program.dsPipingDCF.Tables.Contains("Equipment") && Program.dsPipingDCF.Tables["Equipment"].Select("PnPId=" + liConnectedParts[0]).Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:103: // adrSocketWeld = Program.dsPipingDCF.Tables["SocketWeld"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:106: if (Program.dsPipingDCF.Tables.Contains("SocketWeld"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:108: adrSocketWeld = Program.dsPipingDCF.Tables["SocketWeld"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:114: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:119: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:122: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:126: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:132: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:148: if ((Program.dsPipingDCF.Tables.Contains("Nozzle") && Program.dsPipingDCF.Tables["Nozzle"].Select("PnPId=" + liConnectedParts[0]).Length > 0) || (Program.dsPipingDCF.Tables.Contains("Equipment") && Program.dsPipingDCF.Tables["Equipment"].Select("PnPId=" + liConnectedParts[0]).Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:171: // adrSlipOn = Program.dsPipingDCF.Tables["SlipOn"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:174: if (Program.dsPipingDCF.Tables.Contains("SlipOn"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:175: adrSlipOn = Program.dsPipingDCF.Tables["SlipOn"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:180: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:185: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:188: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:192: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:198: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:214: if ((Program.dsPipingDCF.Tables.Contains("Nozzle") && Program.dsPipingDCF.Tables["Nozzle"].Select("PnPId=" + liConnectedParts[0]).Length > 0) || (Program.dsPipingDCF.Tables.Contains("Equipment") && Program.dsPipingDCF.Tables["Equipment"].Select("PnPId=" + liConnectedParts[0]).Length > 0))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:239: DataRow[] adrPipes = Program.dsPipingDCF.Tables["Pipe"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:247: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPipePnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:285: if ((Program.dsPipingDCF.Tables.Contains("Tapweld")) && (Program.dsPipingDCF.Tables.Contains("Olet")))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:288: DataRow[] adrTapweld = Program.dsPipingDCF.Tables["Tapweld"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:298: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:303: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:306: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:308: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:315: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:324: DataRow[] adrOlets1 = Program.dsPipingDCF.Tables["Olet"].Select("[PnPID]=" + iConnectedPart1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:325: DataRow[] adrOlets2 = Program.dsPipingDCF.Tables["Olet"].Select("[PnPID]=" + iConnectedPart2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:350: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iOlet);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:362: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iOlet);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:378: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iSecondConnector);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:387: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iSecondConnector);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:422: if ((Program.dsPipingDCF.Tables.Contains("Tapweld")) && (Program.dsPipingDCF.Tables.Contains("Coupling")))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:425: DataRow[] adrTapweld = Program.dsPipingDCF.Tables["Tapweld"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:435: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentWeldPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:440: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iCurrentWeldPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:443: adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[DwgId]=" + iDwgId + " AND [DwgHandleLow]=" + lHandle + " AND [DwgSubIndex]=0");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:445: DataRow[] adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:452: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCurrentConnectorPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:461: DataRow[] adrCouplings1 = Program.dsPipingDCF.Tables["Coupling"].Select("[PnPID]=" + iConnectedPart1);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:462: DataRow[] adrCouplings2 = Program.dsPipingDCF.Tables["Coupling"].Select("[PnPID]=" + iConnectedPart2);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:487: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iCoupling);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:499: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iCoupling);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:515: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part1]=" + iSecondConnector);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:524: adrP3dPartConnections = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("[Part2]=" + iSecondConnector);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:920: List<bool> lbInSelectionParts = new List<bool>(); // список "='Existing'" 2-х соединенных элементов
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:935: lbInSelectionParts.Add(OnLineNumbersAndDrawings(liConnectedParts[i]));
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:938: if ((!lbInSelectionParts[0]) &&
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:939: (!lbInSelectionParts[1]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:948: adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:972: adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i] + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:974: adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:988: //DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + liConnectedParts[i]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1041: if (((!lbInSelectionParts[0]) && (lbInSelectionParts[1]) && (!lbExistingParts[1])) ||
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1042: ((!lbInSelectionParts[1]) && (lbInSelectionParts[0]) && (!lbExistingParts[0])))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1046: else if (((!lbInSelectionParts[0]) && (lbExistingParts[1])) ||
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1047: ((!lbInSelectionParts[1]) && (lbExistingParts[0])))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1156: DataRow drEngineeringItem = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1159: DataRow drDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId)[0];
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1194: int iLineNumberPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iPnPId)[0]["LineGroup"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1196: int iDrawingPnPId = Convert.ToInt32(Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId)[0]["DwgId"]);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1211: DataRow[] adrP3dLineGroupPartRelationship = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[Part]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1219: // iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1224: // iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1228: if (Program.dsPipingDCF.Tables.Contains("Nozzle"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1229: iNozzle = Program.dsPipingDCF.Tables["Nozzle"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1230: if (Program.dsPipingDCF.Tables.Contains("Equipment"))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1231: iEquipment = Program.dsPipingDCF.Tables["Equipment"].Select("PnPID=" + iComponentPnPId).Count();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1265: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1285: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iComponentPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1340: DataRow[] adrP3dLineGroupPartRelationship = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("[LineGroup]=" + wlnLineNumber.PnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1344: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("[PnPID]=" + iCurrentPnPId + " AND [Status]='New'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1639: if ((!lbInSelectionParts[0]) && (lbInSelectionParts[1]) && (!lbExistingParts[1]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1653: else if ((!lbInSelectionParts[1]) && (lbInSelectionParts[0]) && (!lbExistingParts[0]))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:1714: DataRow[] adrPnPDataLinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("[RowId]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2052: DataRow[] adrLineNumber = Program.dsPipingDCF.Tables["P3dLineGroup"].Select("[PnPID]=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2110: if ((dThreadControlRatio > 0.0) && (Program.dsPipingDCF.Tables.Contains("Thread")))
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2112: DataRow[] adrThreads = Program.dsPipingDCF.Tables["Thread"].Select();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2116: DataRow[] adrDatalinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + iThread);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2122: adrDatalinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("DwgId=" + iDwgId + " AND DwgHandleLow=" + lDwgHandleLow + " AND RowClassName='P3dConnector'");
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2127: DataRow[] adrConnectedPart1 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("Part1=" + iConnector);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2128: DataRow[] adrConnectedPart2 = Program.dsPipingDCF.Tables["P3dPartConnection"].Select("Part2=" + iConnector);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2136: adrDatalinks = Program.dsPipingDCF.Tables["PnPDataLinks"].Select("RowId=" + iConnectedPart);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2148: DataRow[] adrEngineeringItems = Program.dsPipingDCF.Tables["EngineeringItems"].Select("PnPID=" + iConnectedPart);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\Welds.cs:2154: DataRow[] adrRelations = Program.dsPipingDCF.Tables["P3dLineGroupPartRelationship"].Select("Part=" + iConnectedPart + " AND LineGroup=" + iPnPId);
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:28: DataTable dtDbSchemaTable = odbcConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); // DataTable для хранения схемы файла Excel
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:48: DataTable dtTempDataTable = dsTempDataSet.Tables[0].Copy();
\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo\P_Rec_BOP\XLSFile.cs:50: dsXLSFile.Tables.Add(dtTempDataTable);
@@ -1,12 +0,0 @@
# Карта полей и таблиц
| Поле/слот | Источник | Преобразование | Word-место | Доказательство |
|---|---|---|---|---|
| Номер проекта | `ProcessPower.dcf` / `PnPProject`, либо форма | передается как string | footer cell 7 first/default | `SetMainTitle.cs:21-24,125-174`; `Worder.cs:812-820` |
| Имя документа | константа `Ведомость объемов работ` | без преобразования | first-page footer cell 24 | `ReportWithWorder.cs:1308-1317`; `Worder.cs:821-826` |
| Подписи | `SetMainTitle` UI | введенные строки | footer cells 21, 29 и далее | `ReportWithWorder.cs:1311-1315`; `Worder.cs:827-...` |
| Позиции ВОР | `PipingElements`/`Materials` | группы, длина в метрах, масса | основная таблица, строки/ячейки 1–5 | `ReportWithWorder.cs:93-190`; `Worder.cs:630-699` |
| Сварные стыки | `Welds` и выбранные линии | группировка по линии/контролю | основная таблица | `ReportWithWorder.cs` и `Welds.cs` |
| Номер файла | дата-время | `yyyy.MM.dd HH.mm.ss` | имя output | `ReportWithWorder.cs:49-52` |
Пустые значения обрабатываются не единым валидатором: часть полей пропускается по `IsNullOrEmpty`, а ошибки данных прерывают `Program.Main` до генерации. Жесткая привязка к индексам таблиц/ячеек делает изменение шаблона потенциально разрушительным.
@@ -1,11 +0,0 @@
{
"auditId": "p-rec-bop-plant3d-2019-document-generation",
"sourceRoot": "\\\\phpsrv03\\NBIM\\code\\CS\\P_Rec_BOP\\repo",
"sourceHead": null,
"findings": [
{"id":"DOC-001","category":"DocumentGeneration","severity":"HIGH","title":"Office PIA and hard-coded Word structure","description":"The project embeds Office Word PIA 15 and addresses tables, sections and cells by numeric indexes.","evidence":[{"file":"P_Rec_BOP/P_Rec_BOP.csproj","startLine":90,"endLine":99},{"file":"P_Rec_BOP/Worder.cs","startLine":326,"endLine":345},{"file":"P_Rec_BOP/Worder.cs","startLine":812,"endLine":850}],"impact":"Version, bitness and template changes can prevent startup or corrupt mapping.","recommendation":"Isolate Word worker and replace numeric slots with validated schema identifiers.","reuseClassification":"REIMPLEMENT_WITH_SAME_BEHAVIOR"},
{"id":"PLANT-001","category":"PlantData","severity":"HIGH","title":"Plant data is read through project DCF files","description":"Piping.dcf and ProcessPower.dcf are opened directly and queried into DataSets.","evidence":[{"file":"P_Rec_BOP/Program.cs","startLine":191,"endLine":283}],"impact":"DCF schema and file access must be verified for 2026.","recommendation":"Create versioned Plant data adapters and golden data fixtures.","reuseClassification":"USE_AS_REFERENCE_ONLY"},
{"id":"INFRA-001","category":"Infrastructure","severity":"HIGH","title":"AutoCAD 2019 and network paths are configured explicitly","description":"Settings contains AutoCAD 2019 accoreconsole and external network resources.","evidence":[{"file":"P_Rec_BOP/Settings.xml","startLine":7,"endLine":24}],"impact":"Missing or changed resources stop or alter generation.","recommendation":"Use validated configuration and a 2026 adapter; do not hard-code production paths.","reuseClassification":"REIMPLEMENT_WITH_SAME_BEHAVIOR"},
{"id":"COM-001","category":"WordInterop","severity":"HIGH","title":"COM cleanup is incomplete","description":"The code closes and quits Word but does not explicitly release all COM proxies and catches errors before copying output.","evidence":[{"file":"P_Rec_BOP/Worder.cs","startLine":372,"endLine":380},{"file":"P_Rec_BOP/Worder.cs","startLine":383,"endLine":420},{"file":"P_Rec_BOP/Worder.cs","startLine":508,"endLine":519}],"impact":"WINWORD.EXE leaks and partial output are possible.","recommendation":"Implement one STA job per operation with finally-based cleanup and output validation.","reuseClassification":"DO_NOT_REUSE"}
]
}
@@ -1,29 +0,0 @@
# План миграции
## Этап 1 — повторить поведение (L)
Зафиксировать входной проект-копию, выбранные чертежи/линии, title block, таблицы и DOCX golden sample. Сравнить значения и структуру, не подключая production.
## Этап 2 — изолировать Plant 3D (XL)
Ввести `IPlantProjectDataProvider`; оставить legacy provider для DCF 2019 и сделать отдельный provider для 2026. DTO не должны зависеть от `DataRow` и AutoCAD COM.
## Этап 3 — перенести документный mapping (L)
Перенести только подтвержденный контракт: группы материалов, строки ВОР, title block и правила округления. Реализовать именованные slots/таблицы вместо индексов.
## Этап 4 — Word lifecycle (M)
Вынести Word в отдельный STA worker, cleanup каждого COM proxy, temporary copy, validation и диагностические ошибки. Сохранить шаблон неизменным.
## Этап 5 — эквивалентность (L)
Сравнить DOCX package, значения таблиц, headers/footers, PAGE/NUMPAGES, повторное открытие и отсутствие созданного Word process. PDF считать отдельным тестом: старый исходник экспорт PDF не подтверждает.
## Этап 6 — Plant 3D 2026 (XL)
Проверить console helper и DCF schema на копии проекта, затем обновить adapter/SDK. Не смешивать миграцию Plant и переписывание document engine.
### Runtime tests
Минимум: отсутствующие/открытые DWG; SQLite и SQL DCF; пустой проект; компоненты без line group; несколько материалов; пользовательская деталь; измененный шаблон; отсутствующий сетевой файл; Office отсутствует; Word COM cleanup; повторное открытие DOCX; сохранение исходного шаблона.
@@ -1,9 +0,0 @@
# Plant 3D → расчеты → отчет
Основной источник — проектные DCF. `Program.cs:197-210` определяет SQLite/старый SQL формат и читает `Piping.dcf`; `Program.cs:270-283` аналогично читает `ProcessPower.dcf`. Минимальная проверка требует `EngineeringItems` (`Program.cs:216-221`) и связи `P3dLineGroupPartRelationship` (`Program.cs:225-261`).
По исходникам `PipingElements.cs`, `Welds.cs` и `DrawingsAndLinenumbers.cs` используются таблицы/области `EngineeringItems`, `P3dLineGroupPartRelationship`, `P3dLineGroup`, `Pipe`, `PipeBend`, `Nozzle`, `Equipment`, `PartPort`, `Port`, `PnPDataLinks`, `PnPDrawings`, `P3dDrawingLineGroupRelationship` и связанные поля. Это извлечение через DataSet/DataRow, а не через Plant 3D managed API.
Свойства проекта берутся из `ProcessPower.dcf`, таблица `PnPProject`; `SetMainTitle.cs:21-24`, `125-174` связывает их с номером проекта, предприятием, установкой и названием проекта. Пользовательские подписи вводятся в `SetMainTitle` и передаются в title block (`ReportWithWorder.cs:1306-1317`).
`DrawingsInformation.cs:37-158` создает временные CSV/скрипт, копирует `ConsoleGetDrawingInformation.dll`, обращается к `accoreconsole.exe`, читает результаты и удаляет временные файлы. В `DrawingsInformation.cs:132` есть комментарий о пути AutoCAD 2019. Эта ветка требует отдельного adapter и теста в 2026.
@@ -1,24 +0,0 @@
# Повторное использование в DocumentAutomation
| Компонент | Классификация | Решение |
|---|---|---|
| DTO title block и строки таблицы | REUSE_AFTER_ISOLATION | сделать чистые record-модели |
| группировка материалов/элементов | REIMPLEMENT_WITH_SAME_BEHAVIOR | покрыть golden tests, не переносить DataRow-зависимости |
| DCF/Plant чтение | USE_AS_REFERENCE_ONLY | отдельный Plant 2019/2026 adapter |
| жесткое заполнение `Tables[1]`/`Cells[n]` | REIMPLEMENT_WITH_SAME_BEHAVIOR | schema/slot IDs, диагностика отсутствующих слотов |
| копирование шаблона и временный output | REUSE_AFTER_ISOLATION | безопасный atomic output и cleanup |
| Word COM cleanup | DO_NOT_REUSE | переписать с STA worker, try/finally и release proxy |
| SautinSoft fallback | USE_AS_REFERENCE_ONLY | отдельно подтвердить лицензию и round-trip |
| обновление полей | REUSE_AFTER_ISOLATION | адаптер Word/Open XML и тест headers/footers |
DocumentAutomation уже имеет смысл использовать как единый document engine, но контракт P_Rec_BOP сначала нужно зафиксировать на golden sample. Существующий P_Rec_BOP-код не переносить автоматически.
## Required DocumentAutomation Skills
1. Legacy DOCX template inventory и безопасная копия шаблона — источник `Worder.Load`, приоритет P0.
2. Table-slot mapping/clone-row — `Worder.AddNewRowToTable`, P0.
3. Header/footer field update — `Worder.UpdateAllFields` и `WriteOutTitleBlock`, P1.
4. Plant DTO → document slots — `ReportWithWorder`, `SetMainTitle`, P0.
5. Word COM STA lifecycle/cleanup — `Worder.Load/SaveAndUnload`, P0.
6. PDF export и deterministic filename — в старом коде PDF не найден, требуется отдельный контракт, P2.
7. Plant project data adapter — `Program`, `PipingElements`, `Welds`, P0.
@@ -1,11 +0,0 @@
# Риски
* **CRITICAL** — Office PIA 15 с абсолютным HintPath и COM proxy без гарантированного release; результат зависит от Office installation и может оставлять WINWORD.EXE (`P_Rec_BOP.csproj`, `Worder.cs:326-355,383-420`).
* **HIGH** — жёсткие индексы `Tables[1]`, `Sections[1]`, footer tables и ячеек; любое изменение шаблона ломает mapping (`Worder.cs:331-337,812-...`).
* **HIGH** — x86/.NET Framework 4.7 и x32 SQLite; переход на .NET 8 требует отдельного процесса/Windows compatibility и native dependency review.
* **HIGH** — жесткий путь `accoreconsole.exe` AutoCAD 2019 и внешний console DLL (`Settings.xml:7`, `DrawingsInformation.cs:132`).
* **HIGH** — сетевые и производственные зависимости в Settings: XLS, PSPC, НКР Settings.xml; отсутствие ресурса меняет результат.
* **MEDIUM** — исключения часто показываются пользователю, но не превращаются в структурированный результат; после ошибки возможен неполный output (`Worder.cs:372-380,508-519`).
* **MEDIUM** — `Process.Start` открывает результат без отдельной верификации DOCX; PDF export в коде не найден.
Секреты в опубликованных отчетах не копировались; значения конфигурации с потенциально внутренними путями не повторяются сверх необходимого.
@@ -1,17 +0,0 @@
# Инвентаризация исходника
Источник: `\\phpsrv03\NBIM\code\CS\P_Rec_BOP\repo` (только чтение). Git-метаданные в каталоге отсутствуют (`evidence/source-git.txt`: `NO_GIT_DIRECTORY`), поэтому source HEAD/branch/commit не определены.
Инвентаризация содержит 29 C# файлов, один solution, один project, один DOCX-шаблон, 9 DLL, 3 RESX, 2 PNG и конфигурационные/текстовые файлы. Полный относительный список, размеры, даты и SHA-256: `evidence/file-inventory.csv`, `evidence/hashes.csv`.
Основные исходники:
| Область | Файлы | Роль |
|---|---|---|
| Вход и UI | `P_Rec_BOP/Program.cs`, `SetMainTitle.cs`, `SelectDrawingsAndLinenumbers.cs` | проект, проверки, формы ввода и выбора |
| Plant/data | `PipingElements.cs`, `Welds.cs`, `DrawingsAndLinenumbers.cs`, `DrawingsInformation.cs`, `SQLDataBase.cs`, `SQLiteDataBase.cs` | чтение DCF, расчеты, извлечение сведений о DWG |
| Документ | `ReportWithWorder.cs`, `Worder.cs`, `Versions.cs` | заполнение таблицы, колонтитулов, сохранение |
| Настройки | `XMLFile.cs`, `Settings.xml`, `Glob.cs` | пути, фильтры, материалы, имя результата |
| Внешние зависимости | `lib/SautinSoft.Document.dll`, `lib/x32/System.Data.SQLite.dll`, Office PIA, `ConsoleGetDrawingInformation.dll` | Word/RTF, SQLite, AutoCAD console helper |
Проект — legacy MSBuild, `.NET Framework 4.7`, `OutputType=Exe`, `x86`, AssemblyName `P_Rec_BOP`; ссылка на Word PIA с `EmbedInteropTypes=True` и абсолютным HintPath. Фактический проектный файл: `P_Rec_BOP/P_Rec_BOP.csproj:1-177`.
@@ -1,9 +0,0 @@
# Анализ шаблона
Найден один DOCX: `templates\Шаблон.docx`; его размер и SHA-256 — `evidence/template-files.csv`. Содержимое шаблона в Git не добавлялось. Агрегированные сведения Open XML — `evidence/template-structure.txt`.
По коду шаблон должен содержать основную таблицу `Tables[1]` и таблицы в first-page/default footer. Адресация не использует bookmarks или Content Controls: `Worder.cs:331-337`, `ReportWithWorder.cs:1306-1317`, `Worder.cs:812-...` обращаются к таблицам и ячейкам по номерам. Для title block используются ячейки 7, 24, 21, 29 и последующие фиксированные ячейки (`Worder.cs:812-...`).
Шаблон не изменяется напрямую: перед работой копируется во временный файл (`Worder.cs:318-322`), однако подготовка результата заранее удаляет/перемещает существующий output (`Worder.cs:273-301`). Точная карта визуальных полей требует отдельного безопасного просмотра копии на машине с Word; статический аудит не запускает Word и не извлекает проектные данные.
Риск структуры: жесткие `Tables[1]`, `Sections[1]`, `Headers/Footers`, `Cells[n]` и зависимость от наличия конкретной строки-образца. Это не переносимый контракт `.dtemplate`; перед повторным использованием нужен golden template и schema-based mapping.
@@ -1,21 +0,0 @@
# Матрица использования плагинов
Аудит выполнен статически по текстовым логам из указанного источника. Исходные файлы не изменялись. В результаты попали только три атрибута:
1. `plugin_name` — имя плагина;
2. `launch_timestamp` — нормализованные дата и время запуска в формате `yyyy-MM-ddTHH:mm:ss`;
3. `computer_name` — имя компьютера.
Номера проектов, названия проектов, пути к проектам и имена исходных log-файлов намеренно исключены из результатов.
## Результат
Основной файл [plugin-usage-matrix.csv](plugin-usage-matrix.csv) содержит уникальные комбинации трех атрибутов, отсортированные детерминированно по имени плагина, timestamp и имени компьютера. Повторные одинаковые записи не дублируются.
[plugin-usage-summary.csv](plugin-usage-summary.csv) содержит производные агрегаты по плагинам: число уникальных запусков, число компьютеров, первый и последний timestamp.
Обнаружены два плагина: `P_Rec_Update` и `P3DDeleteNewLineInValues`. Детали количества входных строк и результата находятся в [evidence/parse-diagnostics.txt](evidence/parse-diagnostics.txt); там также зафиксировано отсутствие нераспознанных непустых записей.
## Методика
Парсер читает все файлы рекурсивно в стабильном порядке, распознаёт timestamp и имя компьютера регулярным выражением, нормализует двухзначный год как 20xx и удаляет дубликаты только по трём публикуемым полям. Внутренний код плагина и исходный путь используются только для распознавания и в Git не сохраняются.
@@ -1,11 +0,0 @@
Input format: one record per non-empty line; only plugin, timestamp and computer fields are retained.
Input files: 74
Non-empty input records: 667
Blank input lines ignored: 0
Unmatched non-empty records: 0
Parsed records: 667
Unique three-attribute records: 667
Unique plugins: 2
Date normalization: dd.MM.yy and dd.MM.yyyy to yyyy-MM-ddTHH:mm:ss
Sort order: plugin_name, launch_timestamp, computer_name.
Project numbers, project names, project paths and source log filenames are intentionally excluded.
@@ -1,668 +0,0 @@
"plugin_name","launch_timestamp","computer_name"
"P_Rec_Update","2024-01-30T15:46:23","PCP0243"
"P_Rec_Update","2024-01-30T15:52:04","PCP0243"
"P_Rec_Update","2024-01-30T15:52:25","PCP0243"
"P_Rec_Update","2024-02-12T15:43:47","PCP0243"
"P_Rec_Update","2024-02-12T15:45:39","PCP0243"
"P_Rec_Update","2024-02-12T15:48:16","PCP0243"
"P_Rec_Update","2024-02-12T15:50:15","PCP0243"
"P_Rec_Update","2024-02-12T15:57:19","PCP0243"
"P_Rec_Update","2024-02-12T15:59:01","PCP0243"
"P_Rec_Update","2024-02-15T09:53:49","PCP0243"
"P_Rec_Update","2024-02-15T09:57:04","PCP0243"
"P_Rec_Update","2024-02-15T10:09:20","PCP0243"
"P_Rec_Update","2024-02-15T10:11:13","PCP0243"
"P_Rec_Update","2024-02-15T11:07:41","PCP0243"
"P_Rec_Update","2024-02-15T11:35:32","PCP0243"
"P_Rec_Update","2024-02-15T11:36:56","PCP0243"
"P_Rec_Update","2024-02-15T11:39:18","PCP0243"
"P_Rec_Update","2024-02-15T11:40:43","PCP0243"
"P_Rec_Update","2024-02-15T11:42:55","PCP0243"
"P_Rec_Update","2024-02-15T11:48:11","PCP0243"
"P_Rec_Update","2024-02-15T12:47:16","PCP0243"
"P_Rec_Update","2024-02-15T12:48:25","PCP0243"
"P_Rec_Update","2024-02-15T12:50:28","PCP0243"
"P_Rec_Update","2024-02-15T14:07:15","PCP0243"
"P_Rec_Update","2024-02-16T09:20:52","PCP0243"
"P_Rec_Update","2024-02-19T09:37:00","PCP0243"
"P_Rec_Update","2024-02-20T08:23:05","PCP0243"
"P_Rec_Update","2024-02-20T10:34:56","PCP0243"
"P_Rec_Update","2024-02-20T10:45:33","PCP0243"
"P_Rec_Update","2024-02-20T14:16:20","PCP0243"
"P_Rec_Update","2024-02-20T15:40:35","PCP0243"
"P_Rec_Update","2024-02-20T16:26:07","PCP0243"
"P_Rec_Update","2024-02-20T16:29:59","PCP0243"
"P_Rec_Update","2024-02-20T16:37:27","PCP0243"
"P_Rec_Update","2024-02-20T16:47:00","PCP0243"
"P_Rec_Update","2024-02-21T08:27:53","PCP0243"
"P_Rec_Update","2024-02-21T08:36:38","PCP0243"
"P_Rec_Update","2024-02-21T08:56:20","PCP0243"
"P_Rec_Update","2024-02-21T10:02:10","PCP0243"
"P_Rec_Update","2024-02-21T10:03:58","PCP0243"
"P_Rec_Update","2024-02-21T10:06:05","PCP0243"
"P_Rec_Update","2024-02-21T10:08:00","PCP0243"
"P_Rec_Update","2024-02-21T10:09:36","PCP0243"
"P_Rec_Update","2024-02-21T10:40:30","PCP0243"
"P_Rec_Update","2024-02-22T08:09:01","PCP0331"
"P_Rec_Update","2024-02-22T08:30:09","PCP0243"
"P_Rec_Update","2024-02-22T08:30:18","PCP0243"
"P_Rec_Update","2024-02-22T08:57:06","PCP0243"
"P_Rec_Update","2024-02-22T09:31:08","PCP0331"
"P_Rec_Update","2024-02-22T14:11:32","PCP0243"
"P_Rec_Update","2024-02-22T14:19:04","PCP0243"
"P_Rec_Update","2024-02-22T14:25:01","PCP0243"
"P_Rec_Update","2024-02-22T14:25:43","PCP0243"
"P_Rec_Update","2024-02-22T14:25:58","PCP0243"
"P_Rec_Update","2024-02-22T14:35:25","PCP0243"
"P_Rec_Update","2024-02-26T09:05:15","PCP0243"
"P_Rec_Update","2024-02-26T10:01:20","PCP0243"
"P_Rec_Update","2024-02-26T11:47:36","PCP0243"
"P_Rec_Update","2024-02-26T11:49:13","PCP0243"
"P_Rec_Update","2024-02-26T13:26:16","PCP0243"
"P_Rec_Update","2024-02-26T13:48:41","PCP0243"
"P_Rec_Update","2024-02-26T16:54:47","PCP0243"
"P_Rec_Update","2024-02-26T16:59:52","PCP0243"
"P_Rec_Update","2024-02-26T17:01:09","PCP0243"
"P_Rec_Update","2024-02-26T17:04:01","PCP0243"
"P_Rec_Update","2024-02-27T08:14:29","PCP0243"
"P_Rec_Update","2024-02-27T08:17:37","PCP0243"
"P_Rec_Update","2024-02-27T08:23:28","PCP0243"
"P_Rec_Update","2024-02-27T08:32:40","PCP0243"
"P_Rec_Update","2024-02-27T08:34:02","PCP0243"
"P_Rec_Update","2024-02-27T08:36:14","PCP0243"
"P_Rec_Update","2024-02-27T08:38:45","PCP0243"
"P_Rec_Update","2024-02-27T08:39:25","PCP0243"
"P_Rec_Update","2024-02-27T08:40:50","PCP0243"
"P_Rec_Update","2024-02-27T08:41:35","PCP0243"
"P_Rec_Update","2024-02-27T08:42:16","PCP0243"
"P_Rec_Update","2024-02-27T08:45:33","PCP0243"
"P_Rec_Update","2024-02-27T08:46:28","PCP0243"
"P_Rec_Update","2024-02-27T08:47:30","PCP0243"
"P_Rec_Update","2024-02-27T08:55:04","PCP0243"
"P_Rec_Update","2024-02-27T08:55:14","PCP0243"
"P_Rec_Update","2024-02-27T09:03:14","PCP0243"
"P_Rec_Update","2024-02-27T09:06:22","PCP0243"
"P_Rec_Update","2024-02-27T09:12:21","PCP0243"
"P_Rec_Update","2024-02-27T09:12:39","PCP0243"
"P_Rec_Update","2024-02-27T09:13:15","PCP0243"
"P_Rec_Update","2024-02-27T09:20:02","PCP0243"
"P_Rec_Update","2024-02-27T09:30:51","PCP0243"
"P_Rec_Update","2024-02-27T11:32:11","PCP0243"
"P_Rec_Update","2024-02-27T11:35:35","PCP0243"
"P_Rec_Update","2024-02-27T11:40:23","PCP0243"
"P_Rec_Update","2024-02-27T11:41:01","PCP0243"
"P_Rec_Update","2024-02-27T12:48:47","PCP0243"
"P_Rec_Update","2024-02-27T12:51:22","PCP0243"
"P_Rec_Update","2024-02-27T12:54:06","PCP0243"
"P_Rec_Update","2024-02-27T12:58:38","PCP0243"
"P_Rec_Update","2024-02-27T13:00:34","PCP0243"
"P_Rec_Update","2024-02-27T13:11:15","PCP0243"
"P_Rec_Update","2024-02-27T13:15:35","PCP0243"
"P_Rec_Update","2024-02-27T13:19:41","PCP0243"
"P_Rec_Update","2024-02-27T13:20:36","PCP0243"
"P_Rec_Update","2024-02-27T13:39:26","PCP0243"
"P_Rec_Update","2024-02-27T13:42:22","PCP0243"
"P_Rec_Update","2024-02-27T13:48:31","PCP0243"
"P_Rec_Update","2024-02-27T13:51:50","PCP0243"
"P_Rec_Update","2024-02-27T13:55:42","PCP0243"
"P_Rec_Update","2024-02-27T13:57:09","PCP0243"
"P_Rec_Update","2024-02-27T13:59:02","PCP0243"
"P_Rec_Update","2024-02-27T14:05:23","PCP0243"
"P_Rec_Update","2024-02-27T14:06:06","PCP0243"
"P_Rec_Update","2024-02-27T14:13:53","PCP0243"
"P_Rec_Update","2024-02-27T14:15:42","PCP0243"
"P_Rec_Update","2024-02-27T14:17:07","PCP0243"
"P_Rec_Update","2024-02-27T14:19:18","PCP0243"
"P_Rec_Update","2024-02-27T14:21:57","PCP0243"
"P_Rec_Update","2024-02-27T14:25:58","PCP0243"
"P_Rec_Update","2024-02-27T14:29:16","PCP0243"
"P_Rec_Update","2024-02-27T14:52:00","PCP0243"
"P_Rec_Update","2024-02-27T15:02:03","PCP0243"
"P_Rec_Update","2024-02-27T15:15:00","PCP0243"
"P_Rec_Update","2024-02-27T15:18:26","PCP0243"
"P_Rec_Update","2024-02-27T15:20:13","PCP0243"
"P_Rec_Update","2024-02-27T15:50:56","PCP0243"
"P_Rec_Update","2024-02-27T15:51:42","PCP0243"
"P_Rec_Update","2024-02-27T16:04:29","PCP0243"
"P_Rec_Update","2024-02-27T16:04:34","PCP0243"
"P_Rec_Update","2024-02-27T16:09:08","PCP0243"
"P_Rec_Update","2024-02-27T16:30:14","PCP0243"
"P_Rec_Update","2024-02-27T16:30:17","PCP0243"
"P_Rec_Update","2024-02-27T16:41:04","PCP0243"
"P_Rec_Update","2024-02-27T16:48:28","PCP0243"
"P_Rec_Update","2024-02-27T16:48:38","PCP0243"
"P_Rec_Update","2024-02-28T12:53:44","PCP0214"
"P_Rec_Update","2024-02-28T15:13:56","PCP0214"
"P_Rec_Update","2024-02-28T16:28:57","PHPVM05"
"P_Rec_Update","2024-02-28T17:12:36","PHPVM05"
"P_Rec_Update","2024-02-28T17:22:41","PHPVM05"
"P_Rec_Update","2024-02-28T17:26:16","PHPVM05"
"P_Rec_Update","2024-02-28T17:28:00","PHPVM05"
"P_Rec_Update","2024-02-28T17:29:44","PHPVM05"
"P_Rec_Update","2024-02-28T17:38:41","PHPVM05"
"P_Rec_Update","2024-02-28T17:54:40","PHPVM05"
"P_Rec_Update","2024-02-29T06:13:55","PCP0214"
"P_Rec_Update","2024-02-29T06:21:20","PCP0214"
"P_Rec_Update","2024-02-29T09:20:43","PHPVM05"
"P_Rec_Update","2024-02-29T09:27:01","PHPVM05"
"P_Rec_Update","2024-02-29T09:28:37","PHPVM05"
"P_Rec_Update","2024-02-29T09:36:20","PCP0243"
"P_Rec_Update","2024-02-29T09:36:44","PCP0243"
"P_Rec_Update","2024-02-29T15:43:19","PHPVM05"
"P_Rec_Update","2024-02-29T16:13:56","PHPVM05"
"P_Rec_Update","2024-02-29T16:15:27","PHPVM05"
"P_Rec_Update","2024-02-29T16:18:21","PHPVM05"
"P_Rec_Update","2024-02-29T16:33:09","PHPVM05"
"P_Rec_Update","2024-02-29T17:06:16","PHPVM05"
"P_Rec_Update","2024-03-01T07:43:18","PCP0331"
"P_Rec_Update","2024-03-01T07:48:53","PCP0331"
"P_Rec_Update","2024-03-01T08:18:53","PCP0331"
"P_Rec_Update","2024-03-01T08:48:38","PCP0331"
"P_Rec_Update","2024-03-01T11:22:33","PCP0243"
"P_Rec_Update","2024-03-01T11:23:15","PCP0243"
"P_Rec_Update","2024-03-01T11:23:53","PCP0243"
"P_Rec_Update","2024-03-01T11:25:55","PCP0243"
"P_Rec_Update","2024-03-01T11:27:41","PCP0243"
"P_Rec_Update","2024-03-01T13:17:05","PCP0316"
"P_Rec_Update","2024-03-04T13:08:22","PCP0316"
"P_Rec_Update","2024-03-05T14:58:47","PCP0316"
"P_Rec_Update","2024-03-05T15:28:50","PCP0316"
"P_Rec_Update","2024-03-05T16:15:54","PCP0243"
"P_Rec_Update","2024-03-06T09:36:40","PCP0331"
"P_Rec_Update","2024-03-06T09:46:35","PCP0331"
"P_Rec_Update","2024-03-06T10:25:39","PCP0331"
"P_Rec_Update","2024-03-06T10:50:57","PCP0323"
"P_Rec_Update","2024-03-06T11:06:15","PCP0243"
"P_Rec_Update","2024-03-06T13:07:18","PCP0323"
"P_Rec_Update","2024-03-06T14:07:52","PCP0316"
"P_Rec_Update","2024-03-06T15:32:21","PCP0323"
"P_Rec_Update","2024-03-06T15:38:01","PCP0323"
"P_Rec_Update","2024-03-06T15:40:28","PCP0331"
"P_Rec_Update","2024-03-06T15:46:00","PCP0323"
"P_Rec_Update","2024-03-09T12:38:03","PCP0334"
"P_Rec_Update","2024-03-09T13:43:29","PCP0334"
"P_Rec_Update","2024-03-09T14:09:13","PCP0334"
"P_Rec_Update","2024-03-10T13:25:30","PCP0334"
"P_Rec_Update","2024-03-11T10:54:20","PCP0214"
"P_Rec_Update","2024-03-12T11:27:01","PCP0323"
"P_Rec_Update","2024-03-15T08:29:40","PCP0245"
"P_Rec_Update","2024-03-15T15:23:55","PCP0323"
"P_Rec_Update","2024-03-18T13:08:59","PCP0334"
"P_Rec_Update","2024-03-20T08:57:12","PCP0214"
"P_Rec_Update","2024-03-22T14:34:51","PCP0245"
"P_Rec_Update","2024-03-25T14:56:11","PCP0234"
"P_Rec_Update","2024-03-25T14:58:18","PCP0234"
"P_Rec_Update","2024-03-25T15:04:42","PCP0234"
"P_Rec_Update","2024-03-25T16:15:12","PCP0234"
"P_Rec_Update","2024-03-26T16:51:48","PCP0245"
"P_Rec_Update","2024-03-26T18:25:56","PCP0208"
"P_Rec_Update","2024-03-26T19:38:16","PCP0208"
"P_Rec_Update","2024-03-26T19:41:38","PCP0208"
"P_Rec_Update","2024-03-27T10:14:31","PCP0245"
"P_Rec_Update","2024-03-28T13:10:18","PCP0241"
"P_Rec_Update","2024-03-28T13:10:43","PCP0241"
"P_Rec_Update","2024-03-28T13:11:07","PCP0241"
"P_Rec_Update","2024-03-28T17:04:03","PCP0243"
"P_Rec_Update","2024-03-28T17:04:25","PCP0243"
"P_Rec_Update","2024-03-29T07:51:17","PCP0331"
"P_Rec_Update","2024-03-29T07:56:21","PCP0243"
"P_Rec_Update","2024-03-29T08:02:36","PCP0243"
"P_Rec_Update","2024-03-29T08:03:33","PCP0331"
"P_Rec_Update","2024-03-29T11:35:34","PCP0241"
"P_Rec_Update","2024-03-29T13:20:03","PCP0234"
"P_Rec_Update","2024-03-29T13:53:10","PCP0241"
"P_Rec_Update","2024-03-29T13:58:09","PCP0241"
"P_Rec_Update","2024-04-02T15:45:54","PCP0245"
"P_Rec_Update","2024-04-02T15:49:21","PCP0245"
"P_Rec_Update","2024-04-04T10:00:30","PCP0245"
"P_Rec_Update","2024-04-05T08:56:47","PCP0245"
"P_Rec_Update","2024-04-05T09:23:31","PCP0245"
"P_Rec_Update","2024-04-05T13:50:33","PCP0243"
"P_Rec_Update","2024-04-05T13:52:57","PCP0243"
"P_Rec_Update","2024-04-05T14:53:14","PCP0331"
"P_Rec_Update","2024-04-05T14:56:39","PCP0331"
"P_Rec_Update","2024-04-06T13:25:49","PCP0334"
"P_Rec_Update","2024-04-08T12:07:17","PCP0245"
"P_Rec_Update","2024-04-08T16:13:03","PCP0243"
"P_Rec_Update","2024-04-08T16:14:47","PCP0243"
"P_Rec_Update","2024-04-11T11:47:02","PCP0243"
"P_Rec_Update","2024-04-15T20:20:35","PCP0334"
"P_Rec_Update","2024-04-15T20:33:50","PCP0334"
"P_Rec_Update","2024-04-16T18:13:03","PCP0334"
"P_Rec_Update","2024-04-18T14:18:44","PCP0245"
"P_Rec_Update","2024-04-22T11:39:16","PCP0316"
"P_Rec_Update","2024-04-22T15:13:32","PCP0243"
"P_Rec_Update","2024-04-23T09:07:50","PCP0234"
"P_Rec_Update","2024-04-23T13:05:57","PCP0234"
"P_Rec_Update","2024-04-23T14:29:51","PCP0234"
"P_Rec_Update","2024-04-23T16:39:26","PCP0234"
"P_Rec_Update","2024-04-25T08:31:32","PCP0312"
"P_Rec_Update","2024-04-25T14:15:47","PCP0346"
"P_Rec_Update","2024-04-25T16:24:25","PCP0346"
"P_Rec_Update","2024-04-25T17:23:33","PCP0346"
"P_Rec_Update","2024-04-26T12:32:52","PCP0346"
"P_Rec_Update","2024-04-26T15:15:49","PCP0346"
"P_Rec_Update","2024-04-27T09:21:22","PCP0245"
"P_Rec_Update","2024-04-27T10:01:16","PCP0245"
"P_Rec_Update","2024-05-02T16:57:12","PCP0346"
"P_Rec_Update","2024-05-03T09:15:42","PCP0346"
"P_Rec_Update","2024-05-03T10:22:16","PCP0234"
"P_Rec_Update","2024-05-03T10:22:52","PCP0234"
"P_Rec_Update","2024-05-03T10:46:19","PCP0346"
"P_Rec_Update","2024-05-03T12:54:33","PCP0346"
"P_Rec_Update","2024-05-03T14:11:00","PCP0234"
"P_Rec_Update","2024-05-03T14:33:29","PCP0332"
"P_Rec_Update","2024-05-03T14:34:06","PCP0332"
"P_Rec_Update","2024-05-03T14:46:35","PCP0332"
"P_Rec_Update","2024-05-06T09:05:14","PCP0234"
"P_Rec_Update","2024-05-06T13:41:17","PCP0234"
"P_Rec_Update","2024-05-06T13:50:14","PCP0234"
"P_Rec_Update","2024-05-06T13:59:52","PCP0316"
"P_Rec_Update","2024-05-06T14:46:47","PCP0234"
"P_Rec_Update","2024-05-07T08:29:17","PCP0245"
"P_Rec_Update","2024-05-07T10:03:13","PCP0234"
"P_Rec_Update","2024-05-07T11:15:49","PCP0245"
"P_Rec_Update","2024-05-07T13:26:59","PCP0234"
"P_Rec_Update","2024-05-07T13:35:02","PCP0234"
"P_Rec_Update","2024-05-07T14:13:23","PCP0234"
"P_Rec_Update","2024-05-07T14:25:38","PCP0234"
"P_Rec_Update","2024-05-07T14:33:27","PCP0234"
"P_Rec_Update","2024-05-08T14:40:30","PCP0245"
"P_Rec_Update","2024-05-08T14:50:03","PCP0245"
"P_Rec_Update","2024-05-08T14:56:21","PCP0234"
"P_Rec_Update","2024-05-08T14:57:29","PCP0245"
"P_Rec_Update","2024-05-08T15:09:26","PCP0234"
"P_Rec_Update","2024-05-08T15:28:37","PCP0234"
"P_Rec_Update","2024-05-09T11:10:46","PCP0334"
"P_Rec_Update","2024-05-10T13:11:24","PCP0334"
"P_Rec_Update","2024-05-13T07:52:54","PCP0234"
"P_Rec_Update","2024-05-13T08:10:26","PCP0234"
"P_Rec_Update","2024-05-14T07:48:08","PCP0316"
"P_Rec_Update","2024-05-14T10:03:12","PCP0346"
"P_Rec_Update","2024-05-14T13:27:45","PCP0312"
"P_Rec_Update","2024-05-14T13:45:36","PCP0245"
"P_Rec_Update","2024-05-14T14:28:05","PCP0332"
"P_Rec_Update","2024-05-14T15:26:11","PCP0245"
"P_Rec_Update","2024-05-14T15:34:06","PCP0312"
"P_Rec_Update","2024-05-14T16:18:44","PCP0215"
"P_Rec_Update","2024-05-14T17:04:04","PCP0245"
"P_Rec_Update","2024-05-15T09:45:47","PCP0245"
"P_Rec_Update","2024-05-15T10:29:08","PCP0234"
"P_Rec_Update","2024-05-15T11:39:16","PCP0234"
"P_Rec_Update","2024-05-15T14:01:20","PCP0346"
"P_Rec_Update","2024-05-15T14:44:17","PCP0215"
"P_Rec_Update","2024-05-15T15:02:52","PCP0245"
"P_Rec_Update","2024-05-15T18:21:48","PCP0316"
"P_Rec_Update","2024-05-16T08:49:42","PCP0346"
"P_Rec_Update","2024-05-16T11:54:08","PHPVM05"
"P_Rec_Update","2024-05-16T12:01:40","PHPVM05"
"P_Rec_Update","2024-05-16T13:44:52","PHPVM05"
"P_Rec_Update","2024-05-16T15:47:38","PCP0316"
"P_Rec_Update","2024-05-16T15:55:09","PCP0234"
"P_Rec_Update","2024-05-17T09:20:39","PCP0316"
"P_Rec_Update","2024-05-17T09:46:31","PCP0346"
"P_Rec_Update","2024-05-17T09:58:09","PCP0234"
"P_Rec_Update","2024-05-17T10:00:37","PCP0234"
"P_Rec_Update","2024-05-17T10:06:14","PHPVM05"
"P_Rec_Update","2024-05-17T10:56:50","PCP0316"
"P_Rec_Update","2024-05-17T12:46:41","PCP0312"
"P_Rec_Update","2024-05-17T15:15:18","PCP0312"
"P_Rec_Update","2024-05-19T11:23:30","PCP0334"
"P_Rec_Update","2024-05-20T09:15:30","PCP0316"
"P_Rec_Update","2024-05-20T10:20:16","PCP0316"
"P_Rec_Update","2024-05-20T11:08:50","PCP0312"
"P_Rec_Update","2024-05-20T13:24:36","PCP0234"
"P_Rec_Update","2024-05-21T08:37:29","PCP0245"
"P_Rec_Update","2024-05-21T09:21:55","PCP0234"
"P_Rec_Update","2024-05-21T09:46:01","PCP0234"
"P_Rec_Update","2024-05-21T10:31:09","PHPVM05"
"P_Rec_Update","2024-05-21T11:22:00","PHPVM05"
"P_Rec_Update","2024-05-21T18:33:36","PCP0316"
"P_Rec_Update","2024-05-22T15:18:11","PCP0245"
"P_Rec_Update","2024-05-23T09:50:28","PCP0232"
"P_Rec_Update","2024-05-24T08:32:03","PCP0312"
"P_Rec_Update","2024-05-27T09:06:31","PCP0316"
"P_Rec_Update","2024-05-27T09:15:48","PCP0316"
"P_Rec_Update","2024-05-27T09:50:50","PCP0234"
"P_Rec_Update","2024-05-27T10:18:48","PCP0214"
"P_Rec_Update","2024-05-27T10:25:03","PCP0243"
"P_Rec_Update","2024-05-27T10:26:20","PCP0243"
"P_Rec_Update","2024-05-27T10:27:12","PCP0243"
"P_Rec_Update","2024-05-27T10:32:55","PCP0243"
"P_Rec_Update","2024-05-27T10:34:25","PCP0243"
"P_Rec_Update","2024-05-27T11:00:05","PCP0243"
"P_Rec_Update","2024-05-27T11:41:50","PCP0243"
"P_Rec_Update","2024-05-27T11:43:11","PCP0234"
"P_Rec_Update","2024-05-27T11:48:13","PCP0243"
"P_Rec_Update","2024-05-27T11:48:42","PCP0243"
"P_Rec_Update","2024-05-27T11:53:12","PCP0243"
"P_Rec_Update","2024-05-27T13:20:11","PCP0332"
"P_Rec_Update","2024-05-27T13:25:29","PCP0243"
"P_Rec_Update","2024-05-27T13:27:16","PCP0243"
"P_Rec_Update","2024-05-27T13:29:25","PCP0234"
"P_Rec_Update","2024-05-27T13:47:17","PCP0243"
"P_Rec_Update","2024-05-28T06:51:16","PCP0214"
"P_Rec_Update","2024-05-28T06:52:10","PCP0214"
"P_Rec_Update","2024-05-28T08:26:37","PCP0243"
"P_Rec_Update","2024-05-28T08:57:20","PCP0332"
"P_Rec_Update","2024-05-28T11:11:08","PCP0346"
"P_Rec_Update","2024-05-28T13:16:48","PCP0332"
"P_Rec_Update","2024-05-28T14:29:16","PCP0316"
"P_Rec_Update","2024-05-28T15:28:49","PCP0346"
"P_Rec_Update","2024-05-29T08:36:49","PCP0346"
"P_Rec_Update","2024-05-29T14:48:46","PCP0214"
"P_Rec_Update","2024-05-29T15:19:40","PCP0332"
"P_Rec_Update","2024-05-29T15:52:35","PCP0316"
"P_Rec_Update","2024-05-29T15:53:32","PCP0316"
"P_Rec_Update","2024-05-30T09:49:07","PCP0332"
"P_Rec_Update","2024-05-30T15:15:01","PCP0316"
"P_Rec_Update","2024-05-30T17:23:25","PCP0316"
"P_Rec_Update","2024-05-31T03:42:04","PCP0214"
"P_Rec_Update","2024-05-31T08:05:44","PCP0334"
"P_Rec_Update","2024-05-31T14:26:43","PCP0332"
"P_Rec_Update","2024-05-31T14:30:31","PCP0245"
"P_Rec_Update","2024-05-31T15:13:13","PCP0332"
"P_Rec_Update","2024-05-31T16:08:41","PCP0316"
"P_Rec_Update","2024-06-01T18:57:09","PCP0214"
"P_Rec_Update","2024-06-01T18:58:56","PCP0214"
"P_Rec_Update","2024-06-02T07:55:19","PCP0214"
"P_Rec_Update","2024-06-02T07:56:21","PCP0214"
"P_Rec_Update","2024-06-02T08:04:11","PCP0214"
"P_Rec_Update","2024-06-02T08:14:45","PCP0214"
"P_Rec_Update","2024-06-02T08:23:39","PCP0214"
"P_Rec_Update","2024-06-02T08:26:18","PCP0214"
"P_Rec_Update","2024-06-02T08:30:43","PCP0214"
"P_Rec_Update","2024-06-02T08:34:37","PCP0214"
"P_Rec_Update","2024-06-02T16:22:03","PCP0214"
"P_Rec_Update","2024-06-02T16:22:37","PCP0214"
"P_Rec_Update","2024-06-02T16:43:03","PCP0214"
"P_Rec_Update","2024-06-05T03:53:09","PCP0214"
"P_Rec_Update","2024-06-05T11:31:08","PCP0234"
"P_Rec_Update","2024-06-05T11:54:13","PCP0234"
"P_Rec_Update","2024-06-05T11:57:13","PCP0234"
"P_Rec_Update","2024-06-05T12:55:02","PCP0234"
"P_Rec_Update","2024-06-05T13:02:52","PCP0234"
"P_Rec_Update","2024-06-05T13:09:50","PCP0234"
"P_Rec_Update","2024-06-05T13:15:38","PCP0234"
"P_Rec_Update","2024-06-05T13:29:41","PCP0234"
"P_Rec_Update","2024-06-05T13:45:38","PCP0234"
"P_Rec_Update","2024-06-05T14:34:49","PCP0234"
"P_Rec_Update","2024-06-05T15:07:59","PCP0234"
"P_Rec_Update","2024-06-05T15:15:06","PCP0234"
"P_Rec_Update","2024-06-05T15:41:55","PCP0234"
"P_Rec_Update","2024-06-06T08:32:48","PCP0234"
"P_Rec_Update","2024-06-06T08:41:49","PCP0234"
"P_Rec_Update","2024-06-06T10:21:40","PCP0312"
"P_Rec_Update","2024-06-06T11:45:58","PCP0234"
"P_Rec_Update","2024-06-06T11:52:39","PCP0312"
"P_Rec_Update","2024-06-06T12:39:33","PCP0214"
"P_Rec_Update","2024-06-06T13:13:47","PCP0234"
"P_Rec_Update","2024-06-06T16:08:26","PCP0234"
"P_Rec_Update","2024-06-06T16:44:44","PCP0234"
"P_Rec_Update","2024-06-07T10:58:00","PCP0156"
"P_Rec_Update","2024-06-07T11:18:42","PCP0241"
"P_Rec_Update","2024-06-07T11:20:12","PCP0241"
"P_Rec_Update","2024-06-07T11:21:02","PCP0241"
"P_Rec_Update","2024-06-07T14:48:41","PCP0241"
"P_Rec_Update","2024-06-08T09:06:08","PCP0334"
"P_Rec_Update","2024-06-08T09:25:25","PCP0334"
"P_Rec_Update","2024-06-11T03:46:55","PCP0214"
"P_Rec_Update","2024-06-11T08:08:48","PCP0214"
"P_Rec_Update","2024-06-11T08:39:02","PCP0312"
"P_Rec_Update","2024-06-11T08:39:24","PCP0312"
"P_Rec_Update","2024-06-11T08:52:12","PCP0312"
"P_Rec_Update","2024-06-11T08:58:35","PCP0312"
"P_Rec_Update","2024-06-11T10:19:30","PCP0312"
"P_Rec_Update","2024-06-11T11:49:48","PCP0214"
"P_Rec_Update","2024-06-11T15:29:04","PCP0312"
"P_Rec_Update","2024-06-12T11:32:55","PCP0214"
"P_Rec_Update","2024-06-12T16:05:30","PCP0245"
"P_Rec_Update","2024-06-13T03:52:21","PCP0214"
"P_Rec_Update","2024-06-13T04:14:59","PCP0214"
"P_Rec_Update","2024-06-13T09:20:25","PCP0245"
"P_Rec_Update","2024-06-13T09:42:23","PCP0312"
"P_Rec_Update","2024-06-13T11:31:37","PCP0346"
"P_Rec_Update","2024-06-13T11:35:18","PCP0346"
"P_Rec_Update","2024-06-13T11:37:46","PCP0346"
"P_Rec_Update","2024-06-13T13:57:33","PCP0245"
"P_Rec_Update","2024-06-13T15:22:51","PCP0312"
"P_Rec_Update","2024-06-14T08:24:35","PCP0331"
"P_Rec_Update","2024-06-14T10:16:04","PCP0243"
"P_Rec_Update","2024-06-14T10:17:39","PCP0245"
"P_Rec_Update","2024-06-14T13:21:59","PCP0245"
"P_Rec_Update","2024-06-14T13:22:18","PCP0243"
"P_Rec_Update","2024-06-14T13:22:57","PCP0243"
"P_Rec_Update","2024-06-14T13:23:16","PCP0243"
"P_Rec_Update","2024-06-14T13:24:02","PCP0245"
"P_Rec_Update","2024-06-14T13:24:09","PCP0245"
"P_Rec_Update","2024-06-14T13:27:26","PCP0245"
"P_Rec_Update","2024-06-14T13:27:44","PCP0243"
"P_Rec_Update","2024-06-14T13:35:05","PCP0243"
"P_Rec_Update","2024-06-14T13:39:00","PCP0243"
"P_Rec_Update","2024-06-14T13:42:11","PCP0243"
"P_Rec_Update","2024-06-14T13:44:29","PCP0243"
"P_Rec_Update","2024-06-14T13:45:59","PCP0243"
"P_Rec_Update","2024-06-14T15:19:56","PCP0346"
"P_Rec_Update","2024-06-14T15:23:10","PCP0243"
"P_Rec_Update","2024-06-17T08:19:54","PCP0346"
"P_Rec_Update","2024-06-17T08:21:10","PCP0346"
"P_Rec_Update","2024-06-17T08:47:40","PCP0214"
"P_Rec_Update","2024-06-17T14:21:00","PCP0245"
"P_Rec_Update","2024-06-18T09:29:00","PCP0245"
"P_Rec_Update","2024-06-18T09:29:29","PCP0245"
"P_Rec_Update","2024-06-18T10:32:04","PCP0332"
"P_Rec_Update","2024-06-18T11:14:49","PCP0234"
"P_Rec_Update","2024-06-18T12:50:03","PCP0245"
"P_Rec_Update","2024-06-18T14:32:25","PCP0234"
"P_Rec_Update","2024-06-18T16:10:30","PCP0346"
"P_Rec_Update","2024-06-19T08:54:07","PCP0234"
"P_Rec_Update","2024-06-19T08:57:21","PCP0234"
"P_Rec_Update","2024-06-19T09:08:28","PCP0346"
"P_Rec_Update","2024-06-19T11:25:56","PCP0346"
"P_Rec_Update","2024-06-19T14:01:19","PCP0208"
"P_Rec_Update","2024-06-19T15:17:01","PCP0316"
"P_Rec_Update","2024-06-19T19:00:08","PCP0208"
"P_Rec_Update","2024-06-20T10:52:58","PCP0346"
"P_Rec_Update","2024-06-20T13:15:03","PCP0214"
"P_Rec_Update","2024-06-20T13:49:00","PCP0214"
"P_Rec_Update","2024-06-20T23:16:40","PCP0208"
"P_Rec_Update","2024-06-21T11:35:15","PCP0316"
"P_Rec_Update","2024-06-21T13:11:14","PCP0208"
"P_Rec_Update","2024-06-21T15:08:55","PCP0208"
"P_Rec_Update","2024-06-26T13:05:10","PCP0346"
"P_Rec_Update","2024-06-26T14:08:25","PCP0346"
"P_Rec_Update","2024-06-26T14:11:10","PCP0232"
"P_Rec_Update","2024-06-26T14:37:01","PCP0232"
"P_Rec_Update","2024-06-26T15:35:51","PCP0232"
"P_Rec_Update","2024-06-27T09:38:21","PCP0345"
"P_Rec_Update","2024-06-28T09:10:41","PCP0346"
"P_Rec_Update","2024-07-01T14:21:40","PCP0312"
"P_Rec_Update","2024-07-02T14:59:11","PCP0245"
"P_Rec_Update","2024-07-03T15:41:54","PCP0332"
"P_Rec_Update","2024-07-03T16:34:54","PCP0332"
"P_Rec_Update","2024-07-03T16:35:03","PCP0332"
"P_Rec_Update","2024-07-03T17:11:38","PCP0312"
"P_Rec_Update","2024-07-04T09:21:29","PCP0245"
"P_Rec_Update","2024-07-04T11:22:59","PCP0245"
"P_Rec_Update","2024-07-04T15:25:03","PCP0245"
"P_Rec_Update","2024-07-08T16:20:34","PCP0245"
"P_Rec_Update","2024-07-08T16:51:24","PCP0245"
"P_Rec_Update","2024-07-09T09:12:53","PCP0245"
"P_Rec_Update","2024-07-09T11:08:04","PCP0245"
"P_Rec_Update","2024-07-09T12:51:22","PCP0245"
"P_Rec_Update","2024-07-09T13:10:35","PCP0245"
"P_Rec_Update","2024-07-11T05:06:53","PCP0214"
"P_Rec_Update","2024-07-11T10:32:28","PCP0214"
"P_Rec_Update","2024-07-11T10:40:04","PCP0245"
"P_Rec_Update","2024-07-11T10:54:44","PCP0346"
"P_Rec_Update","2024-07-11T11:24:28","PCP0214"
"P_Rec_Update","2024-07-11T13:55:35","PCP0214"
"P_Rec_Update","2024-07-12T10:03:12","PCP0214"
"P_Rec_Update","2024-07-12T10:23:44","PCP0214"
"P_Rec_Update","2024-07-12T10:26:25","PCP0346"
"P_Rec_Update","2024-07-12T10:32:08","PCP0214"
"P_Rec_Update","2024-07-12T10:32:41","PCP0346"
"P_Rec_Update","2024-07-12T10:51:56","PCP0346"
"P_Rec_Update","2024-07-12T13:01:21","PCP0346"
"P_Rec_Update","2024-07-12T13:09:03","PCP0234"
"P_Rec_Update","2024-07-12T13:50:04","PCP0346"
"P_Rec_Update","2024-07-15T14:05:42","PCP0312"
"P_Rec_Update","2024-07-15T14:17:24","PCP0316"
"P_Rec_Update","2024-07-15T14:39:46","PCP0346"
"P_Rec_Update","2024-07-15T14:40:27","PCP0346"
"P_Rec_Update","2024-07-15T16:08:07","PCP0316"
"P_Rec_Update","2024-07-15T16:10:18","PCP0316"
"P_Rec_Update","2024-07-15T16:11:14","PCP0316"
"P_Rec_Update","2024-07-16T10:03:24","PCP0346"
"P_Rec_Update","2024-07-16T10:33:39","PCP0346"
"P_Rec_Update","2024-07-16T12:56:26","PCP0346"
"P_Rec_Update","2024-07-16T14:48:11","PCP0234"
"P_Rec_Update","2024-07-17T12:06:56","PCP0245"
"P_Rec_Update","2024-07-17T12:58:41","PCP0312"
"P_Rec_Update","2024-07-17T13:00:34","PCP0312"
"P_Rec_Update","2024-07-17T13:26:53","PCP0208"
"P_Rec_Update","2024-07-17T13:47:54","PCP0234"
"P_Rec_Update","2024-07-17T17:27:06","PCP0234"
"P_Rec_Update","2024-07-18T08:02:45","PCP0234"
"P_Rec_Update","2024-07-18T08:08:48","PCP0346"
"P_Rec_Update","2024-07-18T09:47:34","PCP0245"
"P_Rec_Update","2024-07-18T15:26:17","PCP0245"
"P_Rec_Update","2024-07-18T16:19:49","PCP0312"
"P_Rec_Update","2024-07-19T09:24:28","PCP0241"
"P_Rec_Update","2024-07-19T11:29:49","PCP0331"
"P_Rec_Update","2024-07-22T08:52:12","PCP0245"
"P_Rec_Update","2024-07-22T08:56:46","PCP0245"
"P_Rec_Update","2024-07-22T08:57:06","PCP0245"
"P_Rec_Update","2024-07-22T09:38:36","PCP0241"
"P_Rec_Update","2024-07-22T12:14:15","PCP0245"
"P_Rec_Update","2024-07-22T13:48:18","PCP0346"
"P_Rec_Update","2024-07-22T16:09:39","PCP0245"
"P_Rec_Update","2024-07-23T08:52:57","PCP0346"
"P_Rec_Update","2024-07-25T08:45:27","PCP0214"
"P_Rec_Update","2024-07-25T14:04:56","PCP0245"
"P_Rec_Update","2024-07-25T15:58:37","PCP0334"
"P_Rec_Update","2024-07-25T16:02:40","PCP0343"
"P_Rec_Update","2024-07-26T08:46:01","PCP0332"
"P_Rec_Update","2024-07-26T12:31:10","PCP0258"
"P_Rec_Update","2024-07-26T12:37:14","PCP0258"
"P_Rec_Update","2024-07-26T13:02:26","PCP0258"
"P_Rec_Update","2024-07-26T13:16:26","PCP0258"
"P_Rec_Update","2024-07-26T13:20:02","PCP0258"
"P_Rec_Update","2024-07-26T13:56:18","PCP0208"
"P_Rec_Update","2024-07-26T14:56:09","PCP0208"
"P_Rec_Update","2024-07-26T15:58:51","PCP0334"
"P_Rec_Update","2024-07-26T16:00:50","PCP0334"
"P_Rec_Update","2024-07-29T10:57:14","PCP0346"
"P_Rec_Update","2024-07-29T11:09:32","PCP0214"
"P_Rec_Update","2024-07-29T11:39:04","PCP0258"
"P_Rec_Update","2024-07-29T12:21:56","PCP0208"
"P_Rec_Update","2024-07-30T07:44:53","PCP0346"
"P_Rec_Update","2024-07-30T13:07:00","PCP0258"
"P_Rec_Update","2024-07-30T13:16:17","PCP0258"
"P_Rec_Update","2024-07-31T11:25:22","PCP0258"
"P_Rec_Update","2024-07-31T16:19:56","PCP0346"
"P_Rec_Update","2024-07-31T18:20:08","PCP0334"
"P_Rec_Update","2024-07-31T18:23:48","PCP0334"
"P_Rec_Update","2024-08-01T10:20:56","PCP0343"
"P_Rec_Update","2024-08-01T10:22:18","PCP0343"
"P_Rec_Update","2024-08-01T10:38:11","PCP0343"
"P_Rec_Update","2024-08-01T13:10:05","PCP0343"
"P_Rec_Update","2024-08-02T10:45:35","PCP0245"
"P_Rec_Update","2024-08-02T10:53:31","PCP0346"
"P_Rec_Update","2024-08-05T06:15:25","PCP0214"
"P_Rec_Update","2024-08-05T06:58:00","PCP0214"
"P_Rec_Update","2024-08-05T08:34:12","PCP0346"
"P_Rec_Update","2024-08-05T09:51:00","PCP0214"
"P_Rec_Update","2024-08-05T12:54:28","PCP0334"
"P_Rec_Update","2024-08-05T12:57:33","PCP0334"
"P_Rec_Update","2024-08-05T17:12:39","PCP0232"
"P_Rec_Update","2024-08-05T19:25:39","PCP0232"
"P_Rec_Update","2024-08-05T19:25:58","PCP0232"
"P_Rec_Update","2024-08-05T19:29:38","PCP0205"
"P_Rec_Update","2024-08-05T19:57:34","PCP0232"
"P_Rec_Update","2024-08-06T10:35:24","PCP0343"
"P_Rec_Update","2024-08-06T12:40:23","PCP0214"
"P_Rec_Update","2024-08-06T13:20:17","PCP0208"
"P_Rec_Update","2024-08-06T14:01:17","PCP0208"
"P_Rec_Update","2024-08-06T17:37:26","PCP0334"
"P_Rec_Update","2024-08-08T13:21:18","PCP0258"
"P_Rec_Update","2024-08-08T21:18:39","PCP0208"
"P_Rec_Update","2024-08-08T21:55:36","PCP0208"
"P_Rec_Update","2024-08-08T21:55:54","PCP0208"
"P_Rec_Update","2024-08-09T09:20:34","PCP0258"
"P_Rec_Update","2024-08-12T11:52:07","PCP0343"
"P_Rec_Update","2024-08-12T11:53:31","PCP0234"
"P_Rec_Update","2024-08-12T12:54:46","PCP0343"
"P_Rec_Update","2024-08-13T09:21:00","PCP0218"
"P_Rec_Update","2024-08-13T09:36:39","PCP0218"
"P_Rec_Update","2024-08-13T11:01:28","PCP0218"
"P_Rec_Update","2024-08-13T11:45:25","PCP0245"
"P_Rec_Update","2024-08-30T10:56:47","PCP0234"
"P_Rec_Update","2024-09-06T10:52:05","PCP0332"
"P_Rec_Update","2024-09-06T13:04:59","PCP0332"
"P_Rec_Update","2024-09-06T14:32:24","PHPVM05"
"P_Rec_Update","2024-09-12T13:41:10","PCP0332"
"P_Rec_Update","2024-09-14T14:40:26","PCP0218"
"P_Rec_Update","2024-09-14T15:25:20","PCP0218"
"P_Rec_Update","2024-09-14T15:36:12","PCP0218"
"P_Rec_Update","2024-09-16T14:36:41","PHPVM05"
"P_Rec_Update","2024-09-17T09:45:05","PCP0218"
"P_Rec_Update","2024-09-17T10:14:03","PCP0218"
"P_Rec_Update","2024-09-18T12:55:16","PCP0218"
"P_Rec_Update","2024-09-18T13:50:41","PCP0218"
"P_Rec_Update","2024-09-18T16:27:19","PCP0218"
"P_Rec_Update","2024-09-18T20:31:11","PCP0241"
"P_Rec_Update","2024-09-19T07:39:51","PCP0218"
"P_Rec_Update","2024-09-19T07:57:19","PCP0241"
"P_Rec_Update","2024-09-19T13:16:16","PCP0218"
"P_Rec_Update","2024-09-19T13:27:29","PCP0218"
"P_Rec_Update","2024-09-19T14:05:56","PCP0218"
"P_Rec_Update","2024-09-19T14:20:37","PCP0218"
"P_Rec_Update","2024-09-19T15:29:58","PCP0218"
"P_Rec_Update","2024-09-19T15:45:30","PCP0218"
"P_Rec_Update","2024-09-19T15:49:35","PCP0218"
"P_Rec_Update","2024-09-20T14:28:20","PCP0331"
"P_Rec_Update","2024-09-20T14:34:14","PCP0331"
"P_Rec_Update","2024-09-23T07:38:58","PCP0218"
"P_Rec_Update","2024-09-23T07:43:01","PCP0218"
"P_Rec_Update","2024-09-23T07:45:29","PCP0218"
"P_Rec_Update","2024-09-23T08:05:05","PCP0218"
"P_Rec_Update","2024-09-23T08:43:47","PCP0218"
"P_Rec_Update","2024-09-23T16:20:38","PCP0316"
"P_Rec_Update","2024-09-25T15:55:27","PCP0316"
"P_Rec_Update","2024-09-26T08:19:46","PCP0316"
"P_Rec_Update","2024-09-26T10:53:22","PCP0316"
"P_Rec_Update","2024-09-26T15:03:37","PCP0316"
"P_Rec_Update","2024-09-26T15:34:02","PCP0316"
"P_Rec_Update","2024-09-26T15:37:04","PCP0316"
"P_Rec_Update","2024-09-30T14:55:13","PCP0218"
"P_Rec_Update","2024-10-07T08:19:28","PCP0331"
"P_Rec_Update","2024-10-07T08:21:10","PCP0331"
"P_Rec_Update","2024-10-15T08:04:44","PCP0356"
"P_Rec_Update","2024-10-15T08:31:31","PCP0356"
"P_Rec_Update","2024-10-15T08:40:26","PCP0356"
"P_Rec_Update","2024-10-15T09:06:23","PCP0356"
"P_Rec_Update","2024-10-15T09:50:03","PCP0356"
"P_Rec_Update","2024-10-15T10:00:17","PCP0356"
"P_Rec_Update","2024-10-15T10:06:55","PCP0356"
"P_Rec_Update","2024-10-15T10:47:09","PCP0356"
"P_Rec_Update","2024-10-15T10:59:57","PCP0356"
"P_Rec_Update","2024-10-15T11:06:06","PCP0356"
"P_Rec_Update","2024-10-15T11:08:03","PCP0356"
"P_Rec_Update","2024-10-15T11:14:54","PCP0356"
"P_Rec_Update","2024-10-15T11:17:40","PCP0356"
"P_Rec_Update","2024-10-15T11:21:01","PCP0356"
"P_Rec_Update","2024-10-15T11:25:48","PCP0356"
"P_Rec_Update","2024-10-29T10:05:12","PCP0345"
"P_Rec_Update","2024-10-30T11:23:48","PCP0356"
"P_Rec_Update","2024-10-31T14:13:24","PCP0238"
"P_Rec_Update","2024-10-31T16:39:04","PCP0238"
"P_Rec_Update","2024-11-02T14:00:02","PCP0356"
"P_Rec_Update","2024-11-05T15:53:36","PCP0356"
"P3DDeleteNewLineInValues","2024-01-30T15:48:15","PCP0243"
"P3DDeleteNewLineInValues","2024-01-30T15:48:22","PCP0243"
"P3DDeleteNewLineInValues","2024-01-30T15:52:12","PCP0243"
"P3DDeleteNewLineInValues","2024-01-30T15:52:18","PCP0243"
"P3DDeleteNewLineInValues","2024-01-30T15:52:34","PCP0243"
"P3DDeleteNewLineInValues","2024-01-30T15:52:40","PCP0243"
"P3DDeleteNewLineInValues","2024-01-30T15:52:46","PCP0243"
1 plugin_name launch_timestamp computer_name
2 P_Rec_Update 2024-01-30T15:46:23 PCP0243
3 P_Rec_Update 2024-01-30T15:52:04 PCP0243
4 P_Rec_Update 2024-01-30T15:52:25 PCP0243
5 P_Rec_Update 2024-02-12T15:43:47 PCP0243
6 P_Rec_Update 2024-02-12T15:45:39 PCP0243
7 P_Rec_Update 2024-02-12T15:48:16 PCP0243
8 P_Rec_Update 2024-02-12T15:50:15 PCP0243
9 P_Rec_Update 2024-02-12T15:57:19 PCP0243
10 P_Rec_Update 2024-02-12T15:59:01 PCP0243
11 P_Rec_Update 2024-02-15T09:53:49 PCP0243
12 P_Rec_Update 2024-02-15T09:57:04 PCP0243
13 P_Rec_Update 2024-02-15T10:09:20 PCP0243
14 P_Rec_Update 2024-02-15T10:11:13 PCP0243
15 P_Rec_Update 2024-02-15T11:07:41 PCP0243
16 P_Rec_Update 2024-02-15T11:35:32 PCP0243
17 P_Rec_Update 2024-02-15T11:36:56 PCP0243
18 P_Rec_Update 2024-02-15T11:39:18 PCP0243
19 P_Rec_Update 2024-02-15T11:40:43 PCP0243
20 P_Rec_Update 2024-02-15T11:42:55 PCP0243
21 P_Rec_Update 2024-02-15T11:48:11 PCP0243
22 P_Rec_Update 2024-02-15T12:47:16 PCP0243
23 P_Rec_Update 2024-02-15T12:48:25 PCP0243
24 P_Rec_Update 2024-02-15T12:50:28 PCP0243
25 P_Rec_Update 2024-02-15T14:07:15 PCP0243
26 P_Rec_Update 2024-02-16T09:20:52 PCP0243
27 P_Rec_Update 2024-02-19T09:37:00 PCP0243
28 P_Rec_Update 2024-02-20T08:23:05 PCP0243
29 P_Rec_Update 2024-02-20T10:34:56 PCP0243
30 P_Rec_Update 2024-02-20T10:45:33 PCP0243
31 P_Rec_Update 2024-02-20T14:16:20 PCP0243
32 P_Rec_Update 2024-02-20T15:40:35 PCP0243
33 P_Rec_Update 2024-02-20T16:26:07 PCP0243
34 P_Rec_Update 2024-02-20T16:29:59 PCP0243
35 P_Rec_Update 2024-02-20T16:37:27 PCP0243
36 P_Rec_Update 2024-02-20T16:47:00 PCP0243
37 P_Rec_Update 2024-02-21T08:27:53 PCP0243
38 P_Rec_Update 2024-02-21T08:36:38 PCP0243
39 P_Rec_Update 2024-02-21T08:56:20 PCP0243
40 P_Rec_Update 2024-02-21T10:02:10 PCP0243
41 P_Rec_Update 2024-02-21T10:03:58 PCP0243
42 P_Rec_Update 2024-02-21T10:06:05 PCP0243
43 P_Rec_Update 2024-02-21T10:08:00 PCP0243
44 P_Rec_Update 2024-02-21T10:09:36 PCP0243
45 P_Rec_Update 2024-02-21T10:40:30 PCP0243
46 P_Rec_Update 2024-02-22T08:09:01 PCP0331
47 P_Rec_Update 2024-02-22T08:30:09 PCP0243
48 P_Rec_Update 2024-02-22T08:30:18 PCP0243
49 P_Rec_Update 2024-02-22T08:57:06 PCP0243
50 P_Rec_Update 2024-02-22T09:31:08 PCP0331
51 P_Rec_Update 2024-02-22T14:11:32 PCP0243
52 P_Rec_Update 2024-02-22T14:19:04 PCP0243
53 P_Rec_Update 2024-02-22T14:25:01 PCP0243
54 P_Rec_Update 2024-02-22T14:25:43 PCP0243
55 P_Rec_Update 2024-02-22T14:25:58 PCP0243
56 P_Rec_Update 2024-02-22T14:35:25 PCP0243
57 P_Rec_Update 2024-02-26T09:05:15 PCP0243
58 P_Rec_Update 2024-02-26T10:01:20 PCP0243
59 P_Rec_Update 2024-02-26T11:47:36 PCP0243
60 P_Rec_Update 2024-02-26T11:49:13 PCP0243
61 P_Rec_Update 2024-02-26T13:26:16 PCP0243
62 P_Rec_Update 2024-02-26T13:48:41 PCP0243
63 P_Rec_Update 2024-02-26T16:54:47 PCP0243
64 P_Rec_Update 2024-02-26T16:59:52 PCP0243
65 P_Rec_Update 2024-02-26T17:01:09 PCP0243
66 P_Rec_Update 2024-02-26T17:04:01 PCP0243
67 P_Rec_Update 2024-02-27T08:14:29 PCP0243
68 P_Rec_Update 2024-02-27T08:17:37 PCP0243
69 P_Rec_Update 2024-02-27T08:23:28 PCP0243
70 P_Rec_Update 2024-02-27T08:32:40 PCP0243
71 P_Rec_Update 2024-02-27T08:34:02 PCP0243
72 P_Rec_Update 2024-02-27T08:36:14 PCP0243
73 P_Rec_Update 2024-02-27T08:38:45 PCP0243
74 P_Rec_Update 2024-02-27T08:39:25 PCP0243
75 P_Rec_Update 2024-02-27T08:40:50 PCP0243
76 P_Rec_Update 2024-02-27T08:41:35 PCP0243
77 P_Rec_Update 2024-02-27T08:42:16 PCP0243
78 P_Rec_Update 2024-02-27T08:45:33 PCP0243
79 P_Rec_Update 2024-02-27T08:46:28 PCP0243
80 P_Rec_Update 2024-02-27T08:47:30 PCP0243
81 P_Rec_Update 2024-02-27T08:55:04 PCP0243
82 P_Rec_Update 2024-02-27T08:55:14 PCP0243
83 P_Rec_Update 2024-02-27T09:03:14 PCP0243
84 P_Rec_Update 2024-02-27T09:06:22 PCP0243
85 P_Rec_Update 2024-02-27T09:12:21 PCP0243
86 P_Rec_Update 2024-02-27T09:12:39 PCP0243
87 P_Rec_Update 2024-02-27T09:13:15 PCP0243
88 P_Rec_Update 2024-02-27T09:20:02 PCP0243
89 P_Rec_Update 2024-02-27T09:30:51 PCP0243
90 P_Rec_Update 2024-02-27T11:32:11 PCP0243
91 P_Rec_Update 2024-02-27T11:35:35 PCP0243
92 P_Rec_Update 2024-02-27T11:40:23 PCP0243
93 P_Rec_Update 2024-02-27T11:41:01 PCP0243
94 P_Rec_Update 2024-02-27T12:48:47 PCP0243
95 P_Rec_Update 2024-02-27T12:51:22 PCP0243
96 P_Rec_Update 2024-02-27T12:54:06 PCP0243
97 P_Rec_Update 2024-02-27T12:58:38 PCP0243
98 P_Rec_Update 2024-02-27T13:00:34 PCP0243
99 P_Rec_Update 2024-02-27T13:11:15 PCP0243
100 P_Rec_Update 2024-02-27T13:15:35 PCP0243
101 P_Rec_Update 2024-02-27T13:19:41 PCP0243
102 P_Rec_Update 2024-02-27T13:20:36 PCP0243
103 P_Rec_Update 2024-02-27T13:39:26 PCP0243
104 P_Rec_Update 2024-02-27T13:42:22 PCP0243
105 P_Rec_Update 2024-02-27T13:48:31 PCP0243
106 P_Rec_Update 2024-02-27T13:51:50 PCP0243
107 P_Rec_Update 2024-02-27T13:55:42 PCP0243
108 P_Rec_Update 2024-02-27T13:57:09 PCP0243
109 P_Rec_Update 2024-02-27T13:59:02 PCP0243
110 P_Rec_Update 2024-02-27T14:05:23 PCP0243
111 P_Rec_Update 2024-02-27T14:06:06 PCP0243
112 P_Rec_Update 2024-02-27T14:13:53 PCP0243
113 P_Rec_Update 2024-02-27T14:15:42 PCP0243
114 P_Rec_Update 2024-02-27T14:17:07 PCP0243
115 P_Rec_Update 2024-02-27T14:19:18 PCP0243
116 P_Rec_Update 2024-02-27T14:21:57 PCP0243
117 P_Rec_Update 2024-02-27T14:25:58 PCP0243
118 P_Rec_Update 2024-02-27T14:29:16 PCP0243
119 P_Rec_Update 2024-02-27T14:52:00 PCP0243
120 P_Rec_Update 2024-02-27T15:02:03 PCP0243
121 P_Rec_Update 2024-02-27T15:15:00 PCP0243
122 P_Rec_Update 2024-02-27T15:18:26 PCP0243
123 P_Rec_Update 2024-02-27T15:20:13 PCP0243
124 P_Rec_Update 2024-02-27T15:50:56 PCP0243
125 P_Rec_Update 2024-02-27T15:51:42 PCP0243
126 P_Rec_Update 2024-02-27T16:04:29 PCP0243
127 P_Rec_Update 2024-02-27T16:04:34 PCP0243
128 P_Rec_Update 2024-02-27T16:09:08 PCP0243
129 P_Rec_Update 2024-02-27T16:30:14 PCP0243
130 P_Rec_Update 2024-02-27T16:30:17 PCP0243
131 P_Rec_Update 2024-02-27T16:41:04 PCP0243
132 P_Rec_Update 2024-02-27T16:48:28 PCP0243
133 P_Rec_Update 2024-02-27T16:48:38 PCP0243
134 P_Rec_Update 2024-02-28T12:53:44 PCP0214
135 P_Rec_Update 2024-02-28T15:13:56 PCP0214
136 P_Rec_Update 2024-02-28T16:28:57 PHPVM05
137 P_Rec_Update 2024-02-28T17:12:36 PHPVM05
138 P_Rec_Update 2024-02-28T17:22:41 PHPVM05
139 P_Rec_Update 2024-02-28T17:26:16 PHPVM05
140 P_Rec_Update 2024-02-28T17:28:00 PHPVM05
141 P_Rec_Update 2024-02-28T17:29:44 PHPVM05
142 P_Rec_Update 2024-02-28T17:38:41 PHPVM05
143 P_Rec_Update 2024-02-28T17:54:40 PHPVM05
144 P_Rec_Update 2024-02-29T06:13:55 PCP0214
145 P_Rec_Update 2024-02-29T06:21:20 PCP0214
146 P_Rec_Update 2024-02-29T09:20:43 PHPVM05
147 P_Rec_Update 2024-02-29T09:27:01 PHPVM05
148 P_Rec_Update 2024-02-29T09:28:37 PHPVM05
149 P_Rec_Update 2024-02-29T09:36:20 PCP0243
150 P_Rec_Update 2024-02-29T09:36:44 PCP0243
151 P_Rec_Update 2024-02-29T15:43:19 PHPVM05
152 P_Rec_Update 2024-02-29T16:13:56 PHPVM05
153 P_Rec_Update 2024-02-29T16:15:27 PHPVM05
154 P_Rec_Update 2024-02-29T16:18:21 PHPVM05
155 P_Rec_Update 2024-02-29T16:33:09 PHPVM05
156 P_Rec_Update 2024-02-29T17:06:16 PHPVM05
157 P_Rec_Update 2024-03-01T07:43:18 PCP0331
158 P_Rec_Update 2024-03-01T07:48:53 PCP0331
159 P_Rec_Update 2024-03-01T08:18:53 PCP0331
160 P_Rec_Update 2024-03-01T08:48:38 PCP0331
161 P_Rec_Update 2024-03-01T11:22:33 PCP0243
162 P_Rec_Update 2024-03-01T11:23:15 PCP0243
163 P_Rec_Update 2024-03-01T11:23:53 PCP0243
164 P_Rec_Update 2024-03-01T11:25:55 PCP0243
165 P_Rec_Update 2024-03-01T11:27:41 PCP0243
166 P_Rec_Update 2024-03-01T13:17:05 PCP0316
167 P_Rec_Update 2024-03-04T13:08:22 PCP0316
168 P_Rec_Update 2024-03-05T14:58:47 PCP0316
169 P_Rec_Update 2024-03-05T15:28:50 PCP0316
170 P_Rec_Update 2024-03-05T16:15:54 PCP0243
171 P_Rec_Update 2024-03-06T09:36:40 PCP0331
172 P_Rec_Update 2024-03-06T09:46:35 PCP0331
173 P_Rec_Update 2024-03-06T10:25:39 PCP0331
174 P_Rec_Update 2024-03-06T10:50:57 PCP0323
175 P_Rec_Update 2024-03-06T11:06:15 PCP0243
176 P_Rec_Update 2024-03-06T13:07:18 PCP0323
177 P_Rec_Update 2024-03-06T14:07:52 PCP0316
178 P_Rec_Update 2024-03-06T15:32:21 PCP0323
179 P_Rec_Update 2024-03-06T15:38:01 PCP0323
180 P_Rec_Update 2024-03-06T15:40:28 PCP0331
181 P_Rec_Update 2024-03-06T15:46:00 PCP0323
182 P_Rec_Update 2024-03-09T12:38:03 PCP0334
183 P_Rec_Update 2024-03-09T13:43:29 PCP0334
184 P_Rec_Update 2024-03-09T14:09:13 PCP0334
185 P_Rec_Update 2024-03-10T13:25:30 PCP0334
186 P_Rec_Update 2024-03-11T10:54:20 PCP0214
187 P_Rec_Update 2024-03-12T11:27:01 PCP0323
188 P_Rec_Update 2024-03-15T08:29:40 PCP0245
189 P_Rec_Update 2024-03-15T15:23:55 PCP0323
190 P_Rec_Update 2024-03-18T13:08:59 PCP0334
191 P_Rec_Update 2024-03-20T08:57:12 PCP0214
192 P_Rec_Update 2024-03-22T14:34:51 PCP0245
193 P_Rec_Update 2024-03-25T14:56:11 PCP0234
194 P_Rec_Update 2024-03-25T14:58:18 PCP0234
195 P_Rec_Update 2024-03-25T15:04:42 PCP0234
196 P_Rec_Update 2024-03-25T16:15:12 PCP0234
197 P_Rec_Update 2024-03-26T16:51:48 PCP0245
198 P_Rec_Update 2024-03-26T18:25:56 PCP0208
199 P_Rec_Update 2024-03-26T19:38:16 PCP0208
200 P_Rec_Update 2024-03-26T19:41:38 PCP0208
201 P_Rec_Update 2024-03-27T10:14:31 PCP0245
202 P_Rec_Update 2024-03-28T13:10:18 PCP0241
203 P_Rec_Update 2024-03-28T13:10:43 PCP0241
204 P_Rec_Update 2024-03-28T13:11:07 PCP0241
205 P_Rec_Update 2024-03-28T17:04:03 PCP0243
206 P_Rec_Update 2024-03-28T17:04:25 PCP0243
207 P_Rec_Update 2024-03-29T07:51:17 PCP0331
208 P_Rec_Update 2024-03-29T07:56:21 PCP0243
209 P_Rec_Update 2024-03-29T08:02:36 PCP0243
210 P_Rec_Update 2024-03-29T08:03:33 PCP0331
211 P_Rec_Update 2024-03-29T11:35:34 PCP0241
212 P_Rec_Update 2024-03-29T13:20:03 PCP0234
213 P_Rec_Update 2024-03-29T13:53:10 PCP0241
214 P_Rec_Update 2024-03-29T13:58:09 PCP0241
215 P_Rec_Update 2024-04-02T15:45:54 PCP0245
216 P_Rec_Update 2024-04-02T15:49:21 PCP0245
217 P_Rec_Update 2024-04-04T10:00:30 PCP0245
218 P_Rec_Update 2024-04-05T08:56:47 PCP0245
219 P_Rec_Update 2024-04-05T09:23:31 PCP0245
220 P_Rec_Update 2024-04-05T13:50:33 PCP0243
221 P_Rec_Update 2024-04-05T13:52:57 PCP0243
222 P_Rec_Update 2024-04-05T14:53:14 PCP0331
223 P_Rec_Update 2024-04-05T14:56:39 PCP0331
224 P_Rec_Update 2024-04-06T13:25:49 PCP0334
225 P_Rec_Update 2024-04-08T12:07:17 PCP0245
226 P_Rec_Update 2024-04-08T16:13:03 PCP0243
227 P_Rec_Update 2024-04-08T16:14:47 PCP0243
228 P_Rec_Update 2024-04-11T11:47:02 PCP0243
229 P_Rec_Update 2024-04-15T20:20:35 PCP0334
230 P_Rec_Update 2024-04-15T20:33:50 PCP0334
231 P_Rec_Update 2024-04-16T18:13:03 PCP0334
232 P_Rec_Update 2024-04-18T14:18:44 PCP0245
233 P_Rec_Update 2024-04-22T11:39:16 PCP0316
234 P_Rec_Update 2024-04-22T15:13:32 PCP0243
235 P_Rec_Update 2024-04-23T09:07:50 PCP0234
236 P_Rec_Update 2024-04-23T13:05:57 PCP0234
237 P_Rec_Update 2024-04-23T14:29:51 PCP0234
238 P_Rec_Update 2024-04-23T16:39:26 PCP0234
239 P_Rec_Update 2024-04-25T08:31:32 PCP0312
240 P_Rec_Update 2024-04-25T14:15:47 PCP0346
241 P_Rec_Update 2024-04-25T16:24:25 PCP0346
242 P_Rec_Update 2024-04-25T17:23:33 PCP0346
243 P_Rec_Update 2024-04-26T12:32:52 PCP0346
244 P_Rec_Update 2024-04-26T15:15:49 PCP0346
245 P_Rec_Update 2024-04-27T09:21:22 PCP0245
246 P_Rec_Update 2024-04-27T10:01:16 PCP0245
247 P_Rec_Update 2024-05-02T16:57:12 PCP0346
248 P_Rec_Update 2024-05-03T09:15:42 PCP0346
249 P_Rec_Update 2024-05-03T10:22:16 PCP0234
250 P_Rec_Update 2024-05-03T10:22:52 PCP0234
251 P_Rec_Update 2024-05-03T10:46:19 PCP0346
252 P_Rec_Update 2024-05-03T12:54:33 PCP0346
253 P_Rec_Update 2024-05-03T14:11:00 PCP0234
254 P_Rec_Update 2024-05-03T14:33:29 PCP0332
255 P_Rec_Update 2024-05-03T14:34:06 PCP0332
256 P_Rec_Update 2024-05-03T14:46:35 PCP0332
257 P_Rec_Update 2024-05-06T09:05:14 PCP0234
258 P_Rec_Update 2024-05-06T13:41:17 PCP0234
259 P_Rec_Update 2024-05-06T13:50:14 PCP0234
260 P_Rec_Update 2024-05-06T13:59:52 PCP0316
261 P_Rec_Update 2024-05-06T14:46:47 PCP0234
262 P_Rec_Update 2024-05-07T08:29:17 PCP0245
263 P_Rec_Update 2024-05-07T10:03:13 PCP0234
264 P_Rec_Update 2024-05-07T11:15:49 PCP0245
265 P_Rec_Update 2024-05-07T13:26:59 PCP0234
266 P_Rec_Update 2024-05-07T13:35:02 PCP0234
267 P_Rec_Update 2024-05-07T14:13:23 PCP0234
268 P_Rec_Update 2024-05-07T14:25:38 PCP0234
269 P_Rec_Update 2024-05-07T14:33:27 PCP0234
270 P_Rec_Update 2024-05-08T14:40:30 PCP0245
271 P_Rec_Update 2024-05-08T14:50:03 PCP0245
272 P_Rec_Update 2024-05-08T14:56:21 PCP0234
273 P_Rec_Update 2024-05-08T14:57:29 PCP0245
274 P_Rec_Update 2024-05-08T15:09:26 PCP0234
275 P_Rec_Update 2024-05-08T15:28:37 PCP0234
276 P_Rec_Update 2024-05-09T11:10:46 PCP0334
277 P_Rec_Update 2024-05-10T13:11:24 PCP0334
278 P_Rec_Update 2024-05-13T07:52:54 PCP0234
279 P_Rec_Update 2024-05-13T08:10:26 PCP0234
280 P_Rec_Update 2024-05-14T07:48:08 PCP0316
281 P_Rec_Update 2024-05-14T10:03:12 PCP0346
282 P_Rec_Update 2024-05-14T13:27:45 PCP0312
283 P_Rec_Update 2024-05-14T13:45:36 PCP0245
284 P_Rec_Update 2024-05-14T14:28:05 PCP0332
285 P_Rec_Update 2024-05-14T15:26:11 PCP0245
286 P_Rec_Update 2024-05-14T15:34:06 PCP0312
287 P_Rec_Update 2024-05-14T16:18:44 PCP0215
288 P_Rec_Update 2024-05-14T17:04:04 PCP0245
289 P_Rec_Update 2024-05-15T09:45:47 PCP0245
290 P_Rec_Update 2024-05-15T10:29:08 PCP0234
291 P_Rec_Update 2024-05-15T11:39:16 PCP0234
292 P_Rec_Update 2024-05-15T14:01:20 PCP0346
293 P_Rec_Update 2024-05-15T14:44:17 PCP0215
294 P_Rec_Update 2024-05-15T15:02:52 PCP0245
295 P_Rec_Update 2024-05-15T18:21:48 PCP0316
296 P_Rec_Update 2024-05-16T08:49:42 PCP0346
297 P_Rec_Update 2024-05-16T11:54:08 PHPVM05
298 P_Rec_Update 2024-05-16T12:01:40 PHPVM05
299 P_Rec_Update 2024-05-16T13:44:52 PHPVM05
300 P_Rec_Update 2024-05-16T15:47:38 PCP0316
301 P_Rec_Update 2024-05-16T15:55:09 PCP0234
302 P_Rec_Update 2024-05-17T09:20:39 PCP0316
303 P_Rec_Update 2024-05-17T09:46:31 PCP0346
304 P_Rec_Update 2024-05-17T09:58:09 PCP0234
305 P_Rec_Update 2024-05-17T10:00:37 PCP0234
306 P_Rec_Update 2024-05-17T10:06:14 PHPVM05
307 P_Rec_Update 2024-05-17T10:56:50 PCP0316
308 P_Rec_Update 2024-05-17T12:46:41 PCP0312
309 P_Rec_Update 2024-05-17T15:15:18 PCP0312
310 P_Rec_Update 2024-05-19T11:23:30 PCP0334
311 P_Rec_Update 2024-05-20T09:15:30 PCP0316
312 P_Rec_Update 2024-05-20T10:20:16 PCP0316
313 P_Rec_Update 2024-05-20T11:08:50 PCP0312
314 P_Rec_Update 2024-05-20T13:24:36 PCP0234
315 P_Rec_Update 2024-05-21T08:37:29 PCP0245
316 P_Rec_Update 2024-05-21T09:21:55 PCP0234
317 P_Rec_Update 2024-05-21T09:46:01 PCP0234
318 P_Rec_Update 2024-05-21T10:31:09 PHPVM05
319 P_Rec_Update 2024-05-21T11:22:00 PHPVM05
320 P_Rec_Update 2024-05-21T18:33:36 PCP0316
321 P_Rec_Update 2024-05-22T15:18:11 PCP0245
322 P_Rec_Update 2024-05-23T09:50:28 PCP0232
323 P_Rec_Update 2024-05-24T08:32:03 PCP0312
324 P_Rec_Update 2024-05-27T09:06:31 PCP0316
325 P_Rec_Update 2024-05-27T09:15:48 PCP0316
326 P_Rec_Update 2024-05-27T09:50:50 PCP0234
327 P_Rec_Update 2024-05-27T10:18:48 PCP0214
328 P_Rec_Update 2024-05-27T10:25:03 PCP0243
329 P_Rec_Update 2024-05-27T10:26:20 PCP0243
330 P_Rec_Update 2024-05-27T10:27:12 PCP0243
331 P_Rec_Update 2024-05-27T10:32:55 PCP0243
332 P_Rec_Update 2024-05-27T10:34:25 PCP0243
333 P_Rec_Update 2024-05-27T11:00:05 PCP0243
334 P_Rec_Update 2024-05-27T11:41:50 PCP0243
335 P_Rec_Update 2024-05-27T11:43:11 PCP0234
336 P_Rec_Update 2024-05-27T11:48:13 PCP0243
337 P_Rec_Update 2024-05-27T11:48:42 PCP0243
338 P_Rec_Update 2024-05-27T11:53:12 PCP0243
339 P_Rec_Update 2024-05-27T13:20:11 PCP0332
340 P_Rec_Update 2024-05-27T13:25:29 PCP0243
341 P_Rec_Update 2024-05-27T13:27:16 PCP0243
342 P_Rec_Update 2024-05-27T13:29:25 PCP0234
343 P_Rec_Update 2024-05-27T13:47:17 PCP0243
344 P_Rec_Update 2024-05-28T06:51:16 PCP0214
345 P_Rec_Update 2024-05-28T06:52:10 PCP0214
346 P_Rec_Update 2024-05-28T08:26:37 PCP0243
347 P_Rec_Update 2024-05-28T08:57:20 PCP0332
348 P_Rec_Update 2024-05-28T11:11:08 PCP0346
349 P_Rec_Update 2024-05-28T13:16:48 PCP0332
350 P_Rec_Update 2024-05-28T14:29:16 PCP0316
351 P_Rec_Update 2024-05-28T15:28:49 PCP0346
352 P_Rec_Update 2024-05-29T08:36:49 PCP0346
353 P_Rec_Update 2024-05-29T14:48:46 PCP0214
354 P_Rec_Update 2024-05-29T15:19:40 PCP0332
355 P_Rec_Update 2024-05-29T15:52:35 PCP0316
356 P_Rec_Update 2024-05-29T15:53:32 PCP0316
357 P_Rec_Update 2024-05-30T09:49:07 PCP0332
358 P_Rec_Update 2024-05-30T15:15:01 PCP0316
359 P_Rec_Update 2024-05-30T17:23:25 PCP0316
360 P_Rec_Update 2024-05-31T03:42:04 PCP0214
361 P_Rec_Update 2024-05-31T08:05:44 PCP0334
362 P_Rec_Update 2024-05-31T14:26:43 PCP0332
363 P_Rec_Update 2024-05-31T14:30:31 PCP0245
364 P_Rec_Update 2024-05-31T15:13:13 PCP0332
365 P_Rec_Update 2024-05-31T16:08:41 PCP0316
366 P_Rec_Update 2024-06-01T18:57:09 PCP0214
367 P_Rec_Update 2024-06-01T18:58:56 PCP0214
368 P_Rec_Update 2024-06-02T07:55:19 PCP0214
369 P_Rec_Update 2024-06-02T07:56:21 PCP0214
370 P_Rec_Update 2024-06-02T08:04:11 PCP0214
371 P_Rec_Update 2024-06-02T08:14:45 PCP0214
372 P_Rec_Update 2024-06-02T08:23:39 PCP0214
373 P_Rec_Update 2024-06-02T08:26:18 PCP0214
374 P_Rec_Update 2024-06-02T08:30:43 PCP0214
375 P_Rec_Update 2024-06-02T08:34:37 PCP0214
376 P_Rec_Update 2024-06-02T16:22:03 PCP0214
377 P_Rec_Update 2024-06-02T16:22:37 PCP0214
378 P_Rec_Update 2024-06-02T16:43:03 PCP0214
379 P_Rec_Update 2024-06-05T03:53:09 PCP0214
380 P_Rec_Update 2024-06-05T11:31:08 PCP0234
381 P_Rec_Update 2024-06-05T11:54:13 PCP0234
382 P_Rec_Update 2024-06-05T11:57:13 PCP0234
383 P_Rec_Update 2024-06-05T12:55:02 PCP0234
384 P_Rec_Update 2024-06-05T13:02:52 PCP0234
385 P_Rec_Update 2024-06-05T13:09:50 PCP0234
386 P_Rec_Update 2024-06-05T13:15:38 PCP0234
387 P_Rec_Update 2024-06-05T13:29:41 PCP0234
388 P_Rec_Update 2024-06-05T13:45:38 PCP0234
389 P_Rec_Update 2024-06-05T14:34:49 PCP0234
390 P_Rec_Update 2024-06-05T15:07:59 PCP0234
391 P_Rec_Update 2024-06-05T15:15:06 PCP0234
392 P_Rec_Update 2024-06-05T15:41:55 PCP0234
393 P_Rec_Update 2024-06-06T08:32:48 PCP0234
394 P_Rec_Update 2024-06-06T08:41:49 PCP0234
395 P_Rec_Update 2024-06-06T10:21:40 PCP0312
396 P_Rec_Update 2024-06-06T11:45:58 PCP0234
397 P_Rec_Update 2024-06-06T11:52:39 PCP0312
398 P_Rec_Update 2024-06-06T12:39:33 PCP0214
399 P_Rec_Update 2024-06-06T13:13:47 PCP0234
400 P_Rec_Update 2024-06-06T16:08:26 PCP0234
401 P_Rec_Update 2024-06-06T16:44:44 PCP0234
402 P_Rec_Update 2024-06-07T10:58:00 PCP0156
403 P_Rec_Update 2024-06-07T11:18:42 PCP0241
404 P_Rec_Update 2024-06-07T11:20:12 PCP0241
405 P_Rec_Update 2024-06-07T11:21:02 PCP0241
406 P_Rec_Update 2024-06-07T14:48:41 PCP0241
407 P_Rec_Update 2024-06-08T09:06:08 PCP0334
408 P_Rec_Update 2024-06-08T09:25:25 PCP0334
409 P_Rec_Update 2024-06-11T03:46:55 PCP0214
410 P_Rec_Update 2024-06-11T08:08:48 PCP0214
411 P_Rec_Update 2024-06-11T08:39:02 PCP0312
412 P_Rec_Update 2024-06-11T08:39:24 PCP0312
413 P_Rec_Update 2024-06-11T08:52:12 PCP0312
414 P_Rec_Update 2024-06-11T08:58:35 PCP0312
415 P_Rec_Update 2024-06-11T10:19:30 PCP0312
416 P_Rec_Update 2024-06-11T11:49:48 PCP0214
417 P_Rec_Update 2024-06-11T15:29:04 PCP0312
418 P_Rec_Update 2024-06-12T11:32:55 PCP0214
419 P_Rec_Update 2024-06-12T16:05:30 PCP0245
420 P_Rec_Update 2024-06-13T03:52:21 PCP0214
421 P_Rec_Update 2024-06-13T04:14:59 PCP0214
422 P_Rec_Update 2024-06-13T09:20:25 PCP0245
423 P_Rec_Update 2024-06-13T09:42:23 PCP0312
424 P_Rec_Update 2024-06-13T11:31:37 PCP0346
425 P_Rec_Update 2024-06-13T11:35:18 PCP0346
426 P_Rec_Update 2024-06-13T11:37:46 PCP0346
427 P_Rec_Update 2024-06-13T13:57:33 PCP0245
428 P_Rec_Update 2024-06-13T15:22:51 PCP0312
429 P_Rec_Update 2024-06-14T08:24:35 PCP0331
430 P_Rec_Update 2024-06-14T10:16:04 PCP0243
431 P_Rec_Update 2024-06-14T10:17:39 PCP0245
432 P_Rec_Update 2024-06-14T13:21:59 PCP0245
433 P_Rec_Update 2024-06-14T13:22:18 PCP0243
434 P_Rec_Update 2024-06-14T13:22:57 PCP0243
435 P_Rec_Update 2024-06-14T13:23:16 PCP0243
436 P_Rec_Update 2024-06-14T13:24:02 PCP0245
437 P_Rec_Update 2024-06-14T13:24:09 PCP0245
438 P_Rec_Update 2024-06-14T13:27:26 PCP0245
439 P_Rec_Update 2024-06-14T13:27:44 PCP0243
440 P_Rec_Update 2024-06-14T13:35:05 PCP0243
441 P_Rec_Update 2024-06-14T13:39:00 PCP0243
442 P_Rec_Update 2024-06-14T13:42:11 PCP0243
443 P_Rec_Update 2024-06-14T13:44:29 PCP0243
444 P_Rec_Update 2024-06-14T13:45:59 PCP0243
445 P_Rec_Update 2024-06-14T15:19:56 PCP0346
446 P_Rec_Update 2024-06-14T15:23:10 PCP0243
447 P_Rec_Update 2024-06-17T08:19:54 PCP0346
448 P_Rec_Update 2024-06-17T08:21:10 PCP0346
449 P_Rec_Update 2024-06-17T08:47:40 PCP0214
450 P_Rec_Update 2024-06-17T14:21:00 PCP0245
451 P_Rec_Update 2024-06-18T09:29:00 PCP0245
452 P_Rec_Update 2024-06-18T09:29:29 PCP0245
453 P_Rec_Update 2024-06-18T10:32:04 PCP0332
454 P_Rec_Update 2024-06-18T11:14:49 PCP0234
455 P_Rec_Update 2024-06-18T12:50:03 PCP0245
456 P_Rec_Update 2024-06-18T14:32:25 PCP0234
457 P_Rec_Update 2024-06-18T16:10:30 PCP0346
458 P_Rec_Update 2024-06-19T08:54:07 PCP0234
459 P_Rec_Update 2024-06-19T08:57:21 PCP0234
460 P_Rec_Update 2024-06-19T09:08:28 PCP0346
461 P_Rec_Update 2024-06-19T11:25:56 PCP0346
462 P_Rec_Update 2024-06-19T14:01:19 PCP0208
463 P_Rec_Update 2024-06-19T15:17:01 PCP0316
464 P_Rec_Update 2024-06-19T19:00:08 PCP0208
465 P_Rec_Update 2024-06-20T10:52:58 PCP0346
466 P_Rec_Update 2024-06-20T13:15:03 PCP0214
467 P_Rec_Update 2024-06-20T13:49:00 PCP0214
468 P_Rec_Update 2024-06-20T23:16:40 PCP0208
469 P_Rec_Update 2024-06-21T11:35:15 PCP0316
470 P_Rec_Update 2024-06-21T13:11:14 PCP0208
471 P_Rec_Update 2024-06-21T15:08:55 PCP0208
472 P_Rec_Update 2024-06-26T13:05:10 PCP0346
473 P_Rec_Update 2024-06-26T14:08:25 PCP0346
474 P_Rec_Update 2024-06-26T14:11:10 PCP0232
475 P_Rec_Update 2024-06-26T14:37:01 PCP0232
476 P_Rec_Update 2024-06-26T15:35:51 PCP0232
477 P_Rec_Update 2024-06-27T09:38:21 PCP0345
478 P_Rec_Update 2024-06-28T09:10:41 PCP0346
479 P_Rec_Update 2024-07-01T14:21:40 PCP0312
480 P_Rec_Update 2024-07-02T14:59:11 PCP0245
481 P_Rec_Update 2024-07-03T15:41:54 PCP0332
482 P_Rec_Update 2024-07-03T16:34:54 PCP0332
483 P_Rec_Update 2024-07-03T16:35:03 PCP0332
484 P_Rec_Update 2024-07-03T17:11:38 PCP0312
485 P_Rec_Update 2024-07-04T09:21:29 PCP0245
486 P_Rec_Update 2024-07-04T11:22:59 PCP0245
487 P_Rec_Update 2024-07-04T15:25:03 PCP0245
488 P_Rec_Update 2024-07-08T16:20:34 PCP0245
489 P_Rec_Update 2024-07-08T16:51:24 PCP0245
490 P_Rec_Update 2024-07-09T09:12:53 PCP0245
491 P_Rec_Update 2024-07-09T11:08:04 PCP0245
492 P_Rec_Update 2024-07-09T12:51:22 PCP0245
493 P_Rec_Update 2024-07-09T13:10:35 PCP0245
494 P_Rec_Update 2024-07-11T05:06:53 PCP0214
495 P_Rec_Update 2024-07-11T10:32:28 PCP0214
496 P_Rec_Update 2024-07-11T10:40:04 PCP0245
497 P_Rec_Update 2024-07-11T10:54:44 PCP0346
498 P_Rec_Update 2024-07-11T11:24:28 PCP0214
499 P_Rec_Update 2024-07-11T13:55:35 PCP0214
500 P_Rec_Update 2024-07-12T10:03:12 PCP0214
501 P_Rec_Update 2024-07-12T10:23:44 PCP0214
502 P_Rec_Update 2024-07-12T10:26:25 PCP0346
503 P_Rec_Update 2024-07-12T10:32:08 PCP0214
504 P_Rec_Update 2024-07-12T10:32:41 PCP0346
505 P_Rec_Update 2024-07-12T10:51:56 PCP0346
506 P_Rec_Update 2024-07-12T13:01:21 PCP0346
507 P_Rec_Update 2024-07-12T13:09:03 PCP0234
508 P_Rec_Update 2024-07-12T13:50:04 PCP0346
509 P_Rec_Update 2024-07-15T14:05:42 PCP0312
510 P_Rec_Update 2024-07-15T14:17:24 PCP0316
511 P_Rec_Update 2024-07-15T14:39:46 PCP0346
512 P_Rec_Update 2024-07-15T14:40:27 PCP0346
513 P_Rec_Update 2024-07-15T16:08:07 PCP0316
514 P_Rec_Update 2024-07-15T16:10:18 PCP0316
515 P_Rec_Update 2024-07-15T16:11:14 PCP0316
516 P_Rec_Update 2024-07-16T10:03:24 PCP0346
517 P_Rec_Update 2024-07-16T10:33:39 PCP0346
518 P_Rec_Update 2024-07-16T12:56:26 PCP0346
519 P_Rec_Update 2024-07-16T14:48:11 PCP0234
520 P_Rec_Update 2024-07-17T12:06:56 PCP0245
521 P_Rec_Update 2024-07-17T12:58:41 PCP0312
522 P_Rec_Update 2024-07-17T13:00:34 PCP0312
523 P_Rec_Update 2024-07-17T13:26:53 PCP0208
524 P_Rec_Update 2024-07-17T13:47:54 PCP0234
525 P_Rec_Update 2024-07-17T17:27:06 PCP0234
526 P_Rec_Update 2024-07-18T08:02:45 PCP0234
527 P_Rec_Update 2024-07-18T08:08:48 PCP0346
528 P_Rec_Update 2024-07-18T09:47:34 PCP0245
529 P_Rec_Update 2024-07-18T15:26:17 PCP0245
530 P_Rec_Update 2024-07-18T16:19:49 PCP0312
531 P_Rec_Update 2024-07-19T09:24:28 PCP0241
532 P_Rec_Update 2024-07-19T11:29:49 PCP0331
533 P_Rec_Update 2024-07-22T08:52:12 PCP0245
534 P_Rec_Update 2024-07-22T08:56:46 PCP0245
535 P_Rec_Update 2024-07-22T08:57:06 PCP0245
536 P_Rec_Update 2024-07-22T09:38:36 PCP0241
537 P_Rec_Update 2024-07-22T12:14:15 PCP0245
538 P_Rec_Update 2024-07-22T13:48:18 PCP0346
539 P_Rec_Update 2024-07-22T16:09:39 PCP0245
540 P_Rec_Update 2024-07-23T08:52:57 PCP0346
541 P_Rec_Update 2024-07-25T08:45:27 PCP0214
542 P_Rec_Update 2024-07-25T14:04:56 PCP0245
543 P_Rec_Update 2024-07-25T15:58:37 PCP0334
544 P_Rec_Update 2024-07-25T16:02:40 PCP0343
545 P_Rec_Update 2024-07-26T08:46:01 PCP0332
546 P_Rec_Update 2024-07-26T12:31:10 PCP0258
547 P_Rec_Update 2024-07-26T12:37:14 PCP0258
548 P_Rec_Update 2024-07-26T13:02:26 PCP0258
549 P_Rec_Update 2024-07-26T13:16:26 PCP0258
550 P_Rec_Update 2024-07-26T13:20:02 PCP0258
551 P_Rec_Update 2024-07-26T13:56:18 PCP0208
552 P_Rec_Update 2024-07-26T14:56:09 PCP0208
553 P_Rec_Update 2024-07-26T15:58:51 PCP0334
554 P_Rec_Update 2024-07-26T16:00:50 PCP0334
555 P_Rec_Update 2024-07-29T10:57:14 PCP0346
556 P_Rec_Update 2024-07-29T11:09:32 PCP0214
557 P_Rec_Update 2024-07-29T11:39:04 PCP0258
558 P_Rec_Update 2024-07-29T12:21:56 PCP0208
559 P_Rec_Update 2024-07-30T07:44:53 PCP0346
560 P_Rec_Update 2024-07-30T13:07:00 PCP0258
561 P_Rec_Update 2024-07-30T13:16:17 PCP0258
562 P_Rec_Update 2024-07-31T11:25:22 PCP0258
563 P_Rec_Update 2024-07-31T16:19:56 PCP0346
564 P_Rec_Update 2024-07-31T18:20:08 PCP0334
565 P_Rec_Update 2024-07-31T18:23:48 PCP0334
566 P_Rec_Update 2024-08-01T10:20:56 PCP0343
567 P_Rec_Update 2024-08-01T10:22:18 PCP0343
568 P_Rec_Update 2024-08-01T10:38:11 PCP0343
569 P_Rec_Update 2024-08-01T13:10:05 PCP0343
570 P_Rec_Update 2024-08-02T10:45:35 PCP0245
571 P_Rec_Update 2024-08-02T10:53:31 PCP0346
572 P_Rec_Update 2024-08-05T06:15:25 PCP0214
573 P_Rec_Update 2024-08-05T06:58:00 PCP0214
574 P_Rec_Update 2024-08-05T08:34:12 PCP0346
575 P_Rec_Update 2024-08-05T09:51:00 PCP0214
576 P_Rec_Update 2024-08-05T12:54:28 PCP0334
577 P_Rec_Update 2024-08-05T12:57:33 PCP0334
578 P_Rec_Update 2024-08-05T17:12:39 PCP0232
579 P_Rec_Update 2024-08-05T19:25:39 PCP0232
580 P_Rec_Update 2024-08-05T19:25:58 PCP0232
581 P_Rec_Update 2024-08-05T19:29:38 PCP0205
582 P_Rec_Update 2024-08-05T19:57:34 PCP0232
583 P_Rec_Update 2024-08-06T10:35:24 PCP0343
584 P_Rec_Update 2024-08-06T12:40:23 PCP0214
585 P_Rec_Update 2024-08-06T13:20:17 PCP0208
586 P_Rec_Update 2024-08-06T14:01:17 PCP0208
587 P_Rec_Update 2024-08-06T17:37:26 PCP0334
588 P_Rec_Update 2024-08-08T13:21:18 PCP0258
589 P_Rec_Update 2024-08-08T21:18:39 PCP0208
590 P_Rec_Update 2024-08-08T21:55:36 PCP0208
591 P_Rec_Update 2024-08-08T21:55:54 PCP0208
592 P_Rec_Update 2024-08-09T09:20:34 PCP0258
593 P_Rec_Update 2024-08-12T11:52:07 PCP0343
594 P_Rec_Update 2024-08-12T11:53:31 PCP0234
595 P_Rec_Update 2024-08-12T12:54:46 PCP0343
596 P_Rec_Update 2024-08-13T09:21:00 PCP0218
597 P_Rec_Update 2024-08-13T09:36:39 PCP0218
598 P_Rec_Update 2024-08-13T11:01:28 PCP0218
599 P_Rec_Update 2024-08-13T11:45:25 PCP0245
600 P_Rec_Update 2024-08-30T10:56:47 PCP0234
601 P_Rec_Update 2024-09-06T10:52:05 PCP0332
602 P_Rec_Update 2024-09-06T13:04:59 PCP0332
603 P_Rec_Update 2024-09-06T14:32:24 PHPVM05
604 P_Rec_Update 2024-09-12T13:41:10 PCP0332
605 P_Rec_Update 2024-09-14T14:40:26 PCP0218
606 P_Rec_Update 2024-09-14T15:25:20 PCP0218
607 P_Rec_Update 2024-09-14T15:36:12 PCP0218
608 P_Rec_Update 2024-09-16T14:36:41 PHPVM05
609 P_Rec_Update 2024-09-17T09:45:05 PCP0218
610 P_Rec_Update 2024-09-17T10:14:03 PCP0218
611 P_Rec_Update 2024-09-18T12:55:16 PCP0218
612 P_Rec_Update 2024-09-18T13:50:41 PCP0218
613 P_Rec_Update 2024-09-18T16:27:19 PCP0218
614 P_Rec_Update 2024-09-18T20:31:11 PCP0241
615 P_Rec_Update 2024-09-19T07:39:51 PCP0218
616 P_Rec_Update 2024-09-19T07:57:19 PCP0241
617 P_Rec_Update 2024-09-19T13:16:16 PCP0218
618 P_Rec_Update 2024-09-19T13:27:29 PCP0218
619 P_Rec_Update 2024-09-19T14:05:56 PCP0218
620 P_Rec_Update 2024-09-19T14:20:37 PCP0218
621 P_Rec_Update 2024-09-19T15:29:58 PCP0218
622 P_Rec_Update 2024-09-19T15:45:30 PCP0218
623 P_Rec_Update 2024-09-19T15:49:35 PCP0218
624 P_Rec_Update 2024-09-20T14:28:20 PCP0331
625 P_Rec_Update 2024-09-20T14:34:14 PCP0331
626 P_Rec_Update 2024-09-23T07:38:58 PCP0218
627 P_Rec_Update 2024-09-23T07:43:01 PCP0218
628 P_Rec_Update 2024-09-23T07:45:29 PCP0218
629 P_Rec_Update 2024-09-23T08:05:05 PCP0218
630 P_Rec_Update 2024-09-23T08:43:47 PCP0218
631 P_Rec_Update 2024-09-23T16:20:38 PCP0316
632 P_Rec_Update 2024-09-25T15:55:27 PCP0316
633 P_Rec_Update 2024-09-26T08:19:46 PCP0316
634 P_Rec_Update 2024-09-26T10:53:22 PCP0316
635 P_Rec_Update 2024-09-26T15:03:37 PCP0316
636 P_Rec_Update 2024-09-26T15:34:02 PCP0316
637 P_Rec_Update 2024-09-26T15:37:04 PCP0316
638 P_Rec_Update 2024-09-30T14:55:13 PCP0218
639 P_Rec_Update 2024-10-07T08:19:28 PCP0331
640 P_Rec_Update 2024-10-07T08:21:10 PCP0331
641 P_Rec_Update 2024-10-15T08:04:44 PCP0356
642 P_Rec_Update 2024-10-15T08:31:31 PCP0356
643 P_Rec_Update 2024-10-15T08:40:26 PCP0356
644 P_Rec_Update 2024-10-15T09:06:23 PCP0356
645 P_Rec_Update 2024-10-15T09:50:03 PCP0356
646 P_Rec_Update 2024-10-15T10:00:17 PCP0356
647 P_Rec_Update 2024-10-15T10:06:55 PCP0356
648 P_Rec_Update 2024-10-15T10:47:09 PCP0356
649 P_Rec_Update 2024-10-15T10:59:57 PCP0356
650 P_Rec_Update 2024-10-15T11:06:06 PCP0356
651 P_Rec_Update 2024-10-15T11:08:03 PCP0356
652 P_Rec_Update 2024-10-15T11:14:54 PCP0356
653 P_Rec_Update 2024-10-15T11:17:40 PCP0356
654 P_Rec_Update 2024-10-15T11:21:01 PCP0356
655 P_Rec_Update 2024-10-15T11:25:48 PCP0356
656 P_Rec_Update 2024-10-29T10:05:12 PCP0345
657 P_Rec_Update 2024-10-30T11:23:48 PCP0356
658 P_Rec_Update 2024-10-31T14:13:24 PCP0238
659 P_Rec_Update 2024-10-31T16:39:04 PCP0238
660 P_Rec_Update 2024-11-02T14:00:02 PCP0356
661 P_Rec_Update 2024-11-05T15:53:36 PCP0356
662 P3DDeleteNewLineInValues 2024-01-30T15:48:15 PCP0243
663 P3DDeleteNewLineInValues 2024-01-30T15:48:22 PCP0243
664 P3DDeleteNewLineInValues 2024-01-30T15:52:12 PCP0243
665 P3DDeleteNewLineInValues 2024-01-30T15:52:18 PCP0243
666 P3DDeleteNewLineInValues 2024-01-30T15:52:34 PCP0243
667 P3DDeleteNewLineInValues 2024-01-30T15:52:40 PCP0243
668 P3DDeleteNewLineInValues 2024-01-30T15:52:46 PCP0243
@@ -1,3 +0,0 @@
"plugin_name","unique_launches","unique_computers","first_launch_timestamp","last_launch_timestamp"
"P_Rec_Update","660","24","2024-01-30T15:46:23","2024-11-05T15:53:36"
"P3DDeleteNewLineInValues","7","1","2024-01-30T15:48:15","2024-01-30T15:52:46"
1 plugin_name unique_launches unique_computers first_launch_timestamp last_launch_timestamp
2 P_Rec_Update 660 24 2024-01-30T15:46:23 2024-11-05T15:53:36
3 P3DDeleteNewLineInValues 7 1 2024-01-30T15:48:15 2024-01-30T15:52:46
@@ -1,33 +0,0 @@
# Plant3D usage from XLSX
Source is read-only. Only Plant3D sheets are analyzed; other sheets are ignored.
XLSX files: 151
Temporary XLSX ignored: 0
Files with Plant3D: 148
Files without Plant3D: 3
Files parsed: 148
Files failed: 0
Candidate rows examined: 16713
Unique events: 0
Duplicates: 0
Rejected rows: 16716
Date range:
Unique plugins: 0
Unique computers: 0
Most used plugin:
Most active computer:
Source modified: NO
The Plant3D tables contain plugin and date fields but no computer-name column. The user field was not substituted for computer and was not published. Rows without a computer are rejected with COMPUTER_NOT_FOUND.
Top plugins:
- нет валидных событий
Top computers:
- нет валидных событий
Repeat:
./tools/plugin-usage/Build-Plant3DExcelUsageMatrix.ps1 -SourceRoot C:/dev/TEMP/CheckPlugin -SheetName Plant3D -OutputDirectory ./migration/audits/plugin-usage-plant3d-xlsx-20260731
SourceFile values are anonymized as source-0001.xlsx. Project numbers, names, users and paths are not stored.
@@ -1 +0,0 @@
ComputerName,ComputerNameNormalized,TotalLaunches,UniquePlugins,FirstLaunch,LastLaunch,ActiveDays,MostUsedPlugin,MostUsedPluginLaunches
1 ComputerName ComputerNameNormalized TotalLaunches UniquePlugins FirstLaunch LastLaunch ActiveDays MostUsedPlugin MostUsedPluginLaunches
@@ -1 +0,0 @@
Plugin
1 Plugin
@@ -1 +0,0 @@
Plugin,TotalLaunches,Computers,FirstLaunch,LastLaunch
1 Plugin TotalLaunches Computers FirstLaunch LastLaunch
@@ -1 +0,0 @@
PluginName,PluginNameNormalized,TotalLaunches,ComputerCount,FirstLaunch,LastLaunch,ActiveDays,ActiveMonths,MostActiveComputer,MostActiveComputerLaunches,ShareOfAllLaunches
1 PluginName PluginNameNormalized TotalLaunches ComputerCount FirstLaunch LastLaunch ActiveDays ActiveMonths MostActiveComputer MostActiveComputerLaunches ShareOfAllLaunches
@@ -1 +0,0 @@
EventId,PluginName,PluginNameNormalized,LaunchDateTime,LaunchDate,LaunchMonth,ComputerName,ComputerNameNormalized,SourceFile,SourceSheet,SourceRow,ParseRule,DuplicateCount
1 EventId PluginName PluginNameNormalized LaunchDateTime LaunchDate LaunchMonth ComputerName ComputerNameNormalized SourceFile SourceSheet SourceRow ParseRule DuplicateCount
File diff suppressed because it is too large Load Diff
@@ -1,152 +0,0 @@
"SourceFile","HasPlant3DSheet","ActualSheetName","RowCount","ColumnCount","Headers","SHA256","ParseResult","RejectedRows"
"source-0001.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A15A619FCBD036043644B235D1B5116C019838A42091CA6A451CD82DFCC41749","PARSED","1"
"source-0002.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A5B3F1451F88798417B3621F6BC6690BC0B1BA94E8F69B75BB4C6CB961B29BFB","PARSED","1"
"source-0003.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1DAA47089E28D62C9DF05541266ECEF512AACF87248BDA4576F42346EA6BE543","PARSED","1"
"source-0004.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","B5AA0708B2C97B8F6AA13E4DA09C9FC4B205BB2A44D6A6993E7DB0ED26F9CEA5","PARSED","1"
"source-0005.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","310124BF67ED7185513C834FBF3BC96A0AB243CF5114A41E2F78CE383D04F15F","PARSED","1"
"source-0006.xlsx","False","","0","0","","484B6D563FFC782565DE9FE7AFBA18406017627D192CA2C3789EF8CEA63E20CE","SHEET_NOT_FOUND","1"
"source-0007.xlsx","False","","0","0","","E5C9642AEA336BB0040B2FA290AAFD723AB6CE6F04519C5A003AAB927270F6C3","SHEET_NOT_FOUND","1"
"source-0008.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","0323A416C468D838726E5792D887A7F9A381B2A1C13C65A340C57D472CCD8441","PARSED","1"
"source-0009.xlsx","True","Plant3D","6","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","3CE17A1F2C385F2D3E8FC288D4342026FA329894C2FFD292521A94F8ECEC5FE8","PARSED","5"
"source-0010.xlsx","True","Plant3D","414","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A28C34A53E3D3342A20E013F1C8ECB0535369386C8A384F72DC2FB8A8EE22028","PARSED","413"
"source-0011.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F1B81195DA589C392940461EFFB4241A1531B1DA70BFC547896366AB94626473","PARSED","1"
"source-0012.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","2C3506BA50204A3E8A1E42E0B466587103F80C8F8BEE692F27ED1FD2A7977E43","PARSED","1"
"source-0013.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BF74975CF82BB0CEB2CE6BF005A679BE2514D33A9E7F145DFCF91ED261A875B6","PARSED","1"
"source-0014.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7D2AE6636424016E60AF73B6826F4D9992A0A20356593C7D5D1034E3EBA47173","PARSED","1"
"source-0015.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","D60671EADF93813991C84959F6C3E9CFEEB60F8F44522A6DB27FE64C0CCD8B7A","PARSED","1"
"source-0016.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A2B3F6E746DF732AA7FF721BCEE5A4C44442FC74851AE8ECA112B19D87671774","PARSED","1"
"source-0017.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","B9430EC9C2BD7E6231F1A27390F63241111844956B6A32C01FADA6E8C0CB33AA","PARSED","1"
"source-0018.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1945DBF7EDD39F7F66605465E72C61FD405A1196D66DEA146E49D04DB8C2BF39","PARSED","1"
"source-0019.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1432526CC6D04A23B0AFFD7F0D7758D95CBC801ECC80CC868100A9849B8DFA05","PARSED","1"
"source-0020.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","EF46F7969E767613029508068B0389A70F78B7781DEB1B1D5B57A55368CE14BF","PARSED","1"
"source-0021.xlsx","True","Plant3D","1","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","2661112A136177954233F1D2AAD0ADA66DFBF0F8BC4FDF7845DF8B4C4604F431","PARSED","0"
"source-0022.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","32637F9E79E4DD99E894B0920945135A3CB17A140A82596E1D02C9309F73FC39","PARSED","1"
"source-0023.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","9E4660630442D118F09FCB11DBE975E25433197A8A5DFB12CC612C153E0F725E","PARSED","1"
"source-0024.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","2BBF8C9E52E7B98ACE642BB19D16F3E3CC2F376E39A05E53BF992FF9050B8A1E","PARSED","1"
"source-0025.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A1325DC1797468286A02EDE3733DF8219B254E916154D31F34F4B461B6D2BC80","PARSED","1"
"source-0026.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","FB1E886E31C2FB3D52CA0DBBD9E74CD091938B57E7C6F6FCF4966A7FE704392C","PARSED","1"
"source-0027.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","C4FEC6A05FB2720D6C4341B8735C85900A8AA15805C5CE245E551C5FFA4EEBF8","PARSED","1"
"source-0028.xlsx","True","Plant3D","56","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","66B28C7AB727BE7F77491313B75FB62F498C39500DE1CFB41C54A78EB184DFA1","PARSED","55"
"source-0029.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","5F8D42AD0580CFD7F4CB407B45A1B7E4D4F26D9A04A2ADF7DDA7028499BD2146","PARSED","1"
"source-0030.xlsx","True","Plant3D","90","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F512D38F97E6848FFA80D30D226E8E79B6422AE96096D3B137A8D18D9C7283DD","PARSED","89"
"source-0031.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","670D5DA7859B4FAE24EB4F5929939786865CD2B32C7FE829B8C553A74AAF82F8","PARSED","1"
"source-0032.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F08A03A625EBE9807A89BDD9357C92A1475AE7F19A5A3B488B3E8D7356A0D981","PARSED","1"
"source-0033.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","0532B42C2AB5F10B2900A137D8C72745DACDE4EDF8C9612628E07CD388C9FC92","PARSED","1"
"source-0034.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","205F5F22C7E7DD5C9F04B9CA730BC3E79A23A561E280838C62AC4B79741462D5","PARSED","1"
"source-0035.xlsx","True","Plant3D","252","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7A93BB9B4F04A534D1ABE7B36118288A5B6BA799E829B75B73C8DECAAD78D22C","PARSED","251"
"source-0036.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","AB6211135C2391355AEB089B4893A2485869B94D9D4AFFE73936ED59C458676D","PARSED","1"
"source-0037.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","08EFD4B8B47E13F5F7F1621B884EE7D75CA060C28F7D6521C0D5BC4EABC79A32","PARSED","1"
"source-0038.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","514E2773029F9D5F827A3CDE7EC28F1F466C98ACBAABD65729FE69CE586DE0A8","PARSED","1"
"source-0039.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","C199078B83D9FE0D78DF631A1534B6308CE801E4CE1AB61404BE33F039C728F6","PARSED","1"
"source-0040.xlsx","True","Plant3D","3","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","C7BF9E922FF6813037E20C4AFF1B37FA6CEFB275F628BC15E5CFAC8DF374F89E","PARSED","2"
"source-0041.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BE31C9D8AC380F283989D5BA048ECB803111AB9599B8E2698834B5B4891E623C","PARSED","1"
"source-0042.xlsx","True","Plant3D","586","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","2865FF71486B4BD98B0B6B30D92E05F21E483DC71C52C7D77C00760D889CDDB4","PARSED","585"
"source-0043.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","3F73CDB5FB6F42172E1D23AC7B63EAB3764E8A97A6000B7D3678F896CBDD58BF","PARSED","1"
"source-0044.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","FDD351196C3D124CCA31AFDBEF582DCBFE76C88E4119CF3601BB7D1D0B9EAAFE","PARSED","1"
"source-0045.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7DA92F660D6F73EC0333B4E637819DB88ADC6E40A7D2E2E9D780D1E7851D4025","PARSED","1"
"source-0046.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","EF3485449D9F5CEF104B14FE4D16BFDC3A27199C6117732D15CFC994F361F32F","PARSED","1"
"source-0047.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","170D835A968A0590ACEA2909AE9DD204A8A7B2B01FD4254FBFD30F7216B2D4C4","PARSED","1"
"source-0048.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","AAC46741C97CA9D5DBBADA8815D0D894F99F37F1CF6CD0FF6E2D1F090D3AD920","PARSED","1"
"source-0049.xlsx","True","Plant3D","734","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F49CD86C04D7CFDA8F1FE0FB6131F9F28A86916A6C9012D54B116E9F272C8ABE","PARSED","733"
"source-0050.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A024F33FD3CD408C7FC62C59D6511F2FB8CA257DF5872A3C793875AD700F0623","PARSED","1"
"source-0051.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","63FC0734C4B58165B3C53E06320ACC86A8D9B11F1B71EE4796071E462C291794","PARSED","1"
"source-0052.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","170D835A968A0590ACEA2909AE9DD204A8A7B2B01FD4254FBFD30F7216B2D4C4","PARSED","1"
"source-0053.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","86AF67FAC7778F3EAEBF51BCF0C643387CCBFADA9020D48B0C0B7403E52E45C4","PARSED","1"
"source-0054.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","76EDCFF3616F370F7EBAF4917EB430B9C606DCAC88B2782A11511B725ED30E84","PARSED","1"
"source-0055.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1C1116CDE1D4D33F5B5C03710999EB74D546E9FD21780DF4F8BFA51F7683FFD1","PARSED","1"
"source-0056.xlsx","True","Plant3D","25","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","CBAA90125E90F981FC9C9E7C1866C4D7A4AC80020D02B939E3010BA76D5889A5","PARSED","24"
"source-0057.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F50FF129D9F408BD431DC7D9997F675037E3822ED0A2F3EEDDDC37D2E783A2C2","PARSED","1"
"source-0058.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","6B378A5C23A90C23762B9257C36E5DFC6357A7A924E8A435BFA97CD438E94B66","PARSED","1"
"source-0059.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","E4736511A4CE16692ADCF5DF17C006A0CA6BD10E135DFFC4770EA1CCA1FB9EF0","PARSED","1"
"source-0060.xlsx","True","Plant3D","895","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","DCE700252D4065DF7A03B22FED55E36D75B468DA6207439E968DAEFDB05270F8","PARSED","894"
"source-0061.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F1221EBEAA1FAEFFCCC41A921F55378B1E301806DE862A71A30EC101B37A74E9","PARSED","1"
"source-0062.xlsx","True","Plant3D","460","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7727E99AC47171CDA1F590B2E6380BC96F7DED676AA335637CE1436612B52D56","PARSED","459"
"source-0063.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","CA8F71B9B2ECF4B27B7B581E3E4BA770873B1E73EEEFEB538ED441C5C8757A0B","PARSED","1"
"source-0064.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","C7A1E4C8CB9CB27D05C62D89133A40665F791484431B192A73F59B8F9A6DB29E","PARSED","1"
"source-0065.xlsx","True","Plant3D","237","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","89A2AD33216311E5982DE7D311A4B7BBA5F9120B74B3F45EE480512BDACA650B","PARSED","236"
"source-0066.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","AAEA49E5B294B77A9C1ABD2530E84BCE3B5814CEAA8D43638D921D03ADB0B3D7","PARSED","1"
"source-0067.xlsx","True","Plant3D","117","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","23AD7BE9E3CD38A6141171BC7848CA024AD9DDEA1613719781F8E4F0A695A4EB","PARSED","116"
"source-0068.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","ADE70DE40D2ECBBDF6C92CAFAC598A4E79FB1EF4B42B7FD29B86358EDFB882FB","PARSED","1"
"source-0069.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","9F995F5F40ABAD9FA72913BD8CD66D4D94252A247ABA1B6AAF1F618C02CC8807","PARSED","1"
"source-0070.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","954F040E98D6D0AB8DA5E3D9226C2F2DDC1320CFA25FA84355346406E89A5562","PARSED","1"
"source-0071.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","861D3B078EE1520FAC14F8BAB765C804DA233545B46C548EACC0894FED45CECF","PARSED","1"
"source-0072.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7CC2D143DCDA82A368F478D246086934AE20BC21B8EBCD19B17488D6A1B5C9DA","PARSED","1"
"source-0073.xlsx","True","Plant3D","1","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","658B087B7CDB15130678A5F58E4FA1B1FA5688457FA2FA03DFA7A218D3EA0CCC","PARSED","0"
"source-0074.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","D8039752750039DD7A8DA647C21087A12944F4ACDCD636D27BD8624D86375125","PARSED","1"
"source-0075.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","CC9C45987C6DA9646FC4FD771F8D8B6C2F3F466C609203C2AAE31C1AD79C595B","PARSED","1"
"source-0076.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","9FE880A33CA691260B76A025145339D1757B8295942323DC1A24020B9D2E1BE1","PARSED","1"
"source-0077.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","69233E373BA94FF1D0F5BEBAE67880BD34BA873992875344E1458254B64B9E8A","PARSED","1"
"source-0078.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","D7C5B3583FA52CF6D4DDB4B8D673BE12ECFA7C18C40CED86679D691E3D6E32B6","PARSED","1"
"source-0079.xlsx","True","Plant3D","697","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","EFD4FC75BDED4E45A774945511D527F71433C58EC86C4F20275AC2D97CE7AAA1","PARSED","696"
"source-0080.xlsx","True","Plant3D","287","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","222E65CCAB8CA101B3DA836BB2D87FBC77A46B309066270A5A13D48C5FDC8E00","PARSED","286"
"source-0081.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","35044B7D3E03E7C67E7C04AA532E307522226A4CE7D50A51107B4CC2B7AE3117","PARSED","1"
"source-0082.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BF54E9EC75A0716BC4AD71E310AC8558E3EA7FF4FF1AE7616FB6C546F3D05D75","PARSED","1"
"source-0083.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","C2D6E13731016E523F582D065480F385E3D8EFC9379C6CB20A8FEC288330BD33","PARSED","1"
"source-0084.xlsx","True","Plant3D","1860","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","ED0BC02534ECB9636BE0C2268926942C8DEB9ADDC75823CF6A1E241E188E96DF","PARSED","1859"
"source-0085.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","30B54423173405FB2179C2F0C1532DEF28A292A7E3249C5483CED353F692691A","PARSED","1"
"source-0086.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BE7148B01F6BF466650D93ED1A1CFF736AFC5DF43567FA4D62C319ED0739863B","PARSED","1"
"source-0087.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","27EA9A83CEDB02328F8E99D914CAB7EC9325313458D36678FC14994F028A7C66","PARSED","1"
"source-0088.xlsx","True","Plant3D","152","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","35C2F37E1453CC52B85BFAA335695931D469844C660CDBE8356FF60FA5EDC094","PARSED","151"
"source-0089.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","FF6B2808D71FD697AC2AD83400152E258EE428FF50CF00D22915AE70CA4F2D19","PARSED","1"
"source-0090.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","4C5AB590CDC6F764326B8DCE845E0DBFB51C9A8710DCA65671173A06B1F4C8BE","PARSED","1"
"source-0091.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","9A68D1C2B05E2A1AE7DC08F56A203F12094064DC90CF4A753E6B024944058953","PARSED","1"
"source-0092.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","AA4CF707135416550D390D59275F4EF96597CA413553ED998BAD249266C1BB0C","PARSED","1"
"source-0093.xlsx","True","Plant3D","60","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","6E9634C35B174D2CA2BF67E7E5D5A5D322E8E33366231D419927335D67118158","PARSED","59"
"source-0094.xlsx","True","Plant3D","810","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7826F33C15EA6164E46A9BB762DDA073ED113B918F81E3BFF9BACBD4F9E9862A","PARSED","809"
"source-0095.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","4FE1B8234D58BB533E118659489AD5497E17EC58C935FB467B78FE00AE868782","PARSED","1"
"source-0096.xlsx","True","Plant3D","3","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","AC2B780B38BBF7B0BDFC6F3134633536A4A64DB3A2C71F010079A99ABC698EBF","PARSED","2"
"source-0097.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","FF6A99D2F4042CDEDC0D8AB2863FCA5B74128D9CD39A6FF42E4DCA3CFC8CF62B","PARSED","1"
"source-0098.xlsx","True","Plant3D","91","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","CFDF4380ABFF2899C15963155D1AC991CFDC2E0F6F5615191DC983F7CE8E3708","PARSED","90"
"source-0099.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","ACF37ECD1F508F39F352C3112113F6214741032F642012233F7C0EB71D57FAE3","PARSED","1"
"source-0100.xlsx","True","Plant3D","1039","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BE19C25F151B4525E0058F7C974B250AFEC651585F71A2B0BC9A28C6D2639521","PARSED","1038"
"source-0101.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","5F8D42AD0580CFD7F4CB407B45A1B7E4D4F26D9A04A2ADF7DDA7028499BD2146","PARSED","1"
"source-0102.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","219ACB4310303A5EE9E5A825998AF9012AD80F597F693B730583ACEC5856B935","PARSED","1"
"source-0103.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","96074CB9DECE06172FD88185CF379830582046A83C7405AD7B41D7F6196BD0C0","PARSED","1"
"source-0104.xlsx","True","Plant3D","74","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","16D424D7B51535AFF74B02F1FAA113E35A501E7A5C6E991382853FAB0F14AB02","PARSED","73"
"source-0105.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","2BD63E06782C45CAF3A77C301F980ABE6421C098E549DDD639918894987CFD4B","PARSED","1"
"source-0106.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","23F20D79B82DA3BE0E979AB55939B308F5CE35264C687A13FAF0B0EFA31912C9","PARSED","1"
"source-0107.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1843EDAF7DBFB71036D62B9C80DBC256199969EF64B1881E9E5A051B1EADEDD5","PARSED","1"
"source-0108.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BE04A1D538CB18E1F909E0F0F911AC7D8DE0C614FD107E5F9209E843F2AE1311","PARSED","1"
"source-0109.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","205F5F22C7E7DD5C9F04B9CA730BC3E79A23A561E280838C62AC4B79741462D5","PARSED","1"
"source-0110.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1A04C1D1FEC0D6DE24AE5B59A303FAC8617D6DCB7C79BA61F493797E249F6BE7","PARSED","1"
"source-0111.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","69D6ECE741A1CE49B9188F9191F04DD49B8FB1D36AE79492D302DAF8BC55DE0D","PARSED","1"
"source-0112.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","67E4B2F304BD98BC953742C319AD9FDC60E1DDF809317D264AB92B5DD496D153","PARSED","1"
"source-0113.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","5207B2F0DC0DB9C5399A32A1505310665180EC74D6A26015475986DCBF379563","PARSED","1"
"source-0114.xlsx","True","Plant3D","107","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","BB0EA311890606D735E090E3CC009275EE1EA0430A861A36E1B5B887619FB9BB","PARSED","106"
"source-0115.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","90AF2345A620F5735BA47A7B0A6355CF1FC6ACD508DD566123B20F7FD3E40BCF","PARSED","1"
"source-0116.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","B5B54A5399281FE2F6439D499496EF27B110BBB1DE8008428F80BD5E3FE9B6E7","PARSED","1"
"source-0117.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","777C7A38D2F97998426FB4E6A39AA7C4ADA7343D48C00427DEA58FBA915B3D67","PARSED","1"
"source-0118.xlsx","True","Plant3D","3","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","AC66A34DA4BA02E8452B1CA0CDCFF381AA7F56C2ECF206C6D3E39DC49DFD8B86","PARSED","2"
"source-0119.xlsx","True","Plant3D","703","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","630481E3722EF0E4F271C812FCB686BFEC679EC2A90B1CE60929FA178276B746","PARSED","702"
"source-0120.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","217E8F2CE5C0E50FFECDFDC69C99629EFF86F8F1C5820B804472CCBB96C83693","PARSED","1"
"source-0121.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","606068897D6B8B66ABABDF0F123679A46864CCD8D3D8F7A64C5DB8242B910AA7","PARSED","1"
"source-0122.xlsx","False","","0","0","","775B72ABA7A5F3277F857C4431A9795192451621DDDA9E568952EE5FC4B818E2","SHEET_NOT_FOUND","1"
"source-0123.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","77C0DBDA49BCF2A61E1E8661FE56069B13F5CD76372B60CCBCB4FED4D9FCC300","PARSED","1"
"source-0124.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","11E3CB994067C2944C72783818094A3B0070E9B20F16E65E4DF5EEC4BC7D4BEF","PARSED","1"
"source-0125.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A8D15E45344B4F9914F28EB471C74B90F4C8AB09F588C5932ADEC6A69EF3A1F1","PARSED","1"
"source-0126.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","973258780339702C9EAF6E67B69C8835B5585E00D21764598B619A8490EF6334","PARSED","1"
"source-0127.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","B276743CAB8202E42B5E6578DCFD33FAC968CC809EF258D3D083D1858D42FF9A","PARSED","1"
"source-0128.xlsx","True","Plant3D","3128","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","88200AC6044F16B2B18F5448F6B4BC5BAF6E1F9EE5446E1FD30EB321AC2B8BDC","PARSED","3127"
"source-0129.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","78A70F71CF77C11855ADA80A805FAD5F04FF8B5D55516FC6565C1FB86E46D4D5","PARSED","1"
"source-0130.xlsx","True","Plant3D","65","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","D934BC7DB6C68A6458FFFE801C61B622BDCB10979CCB3B22431867A346DF3559","PARSED","64"
"source-0131.xlsx","True","Plant3D","1027","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","E0192943F2454E18F72092D794D3E73A55536B7757269638BAD922BBF7E58DCF","PARSED","1026"
"source-0132.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","10EB6F3BB853E29C25D5C7781F7DBE32AB66DEFCF74F33A0E041326DB3E058C1","PARSED","1"
"source-0133.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","013EBC9D96D0A2330A708C04C715A97830337DF0E85A13A46B9CEB46B641A662","PARSED","1"
"source-0134.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","480B287CB70F44135B538D406934BC84D48A9907EAC15BCDBE566606F9459814","PARSED","1"
"source-0135.xlsx","True","Plant3D","1970","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","6213EE80A8303E74E0C5D8D0706F4BF18BA8C66CF7D521269D83342DC129456C","PARSED","1969"
"source-0136.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F2351A9EE055766BA23389341EDE4F646EF93A6F4EC5D643FABDC938D6856741","PARSED","1"
"source-0137.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","7BF721DA2ACE12EEBEAE8B810BB36E1609A716312D57123AB8DE5E3AB88A2C67","PARSED","1"
"source-0138.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","B5EFA1E2A03AD1E58DE3A8BD8E654DAE2D6D3BEE25ABD83A1F2DAAA7D1ACBBA0","PARSED","1"
"source-0139.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","D01E5620808DC870F30C7A2F8FBB142989BC64B47ACA75C33EB8891261210D61","PARSED","1"
"source-0140.xlsx","True","Plant3D","499","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","1E4BA218B03A56523525B6B62FCFA2381CC6C142018426EFB8BC12FD8B5B248E","PARSED","498"
"source-0141.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","B39C734C901C75D4E297A7F1044068B28FA2459A2ECD3518BB9FE4B325052344","PARSED","1"
"source-0142.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","A69931EA29521E1AB9CE9EEFAD29E07687B57A6B35CBC0023FD8CEAB706BF2AA","PARSED","1"
"source-0143.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","6BF892D6DB59C80850AD3FD316CBC6B6BAAB93AD54D1B7273C525C26141405EE","PARSED","1"
"source-0144.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","4940E6C9CBB4C3B8D327F463A3EADA1FEBD622E8065D038D97364CA99D1D2D7F","PARSED","1"
"source-0145.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","106F64274F9146D16FC5915A19FE112C287CB91FBE1F466C25D535746A3398AE","PARSED","1"
"source-0146.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","EFF26E58F20FCEE544B341129C608788C6A3D96C1BDCD22AF34B6D10BE220492","PARSED","1"
"source-0147.xlsx","True","Plant3D","181","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","55846ECDE3A730B781564A2059D3DAC56536EC3AAEF69B09BB07178AC8720212","PARSED","180"
"source-0148.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","94278E1422D937D2C6D365036C35732C5D9C24BF70AB51ED78606668D848AB9D","PARSED","1"
"source-0149.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","85B5D8D2537326FA82CFCBA6158AE0F852E0FB7DA4D342C1507CEC4F233D9681","PARSED","1"
"source-0150.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","CF4DB120F80B11598077A842CD458703C2938D010C773D5A5C6E41AE707950C3","PARSED","1"
"source-0151.xlsx","True","Plant3D","2","6","Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта","F6DE7BCCBCC3B6B4CEC6FA81F0C5F17DE7E0725E8AE7BF6384798429C431A38D","PARSED","1"
1 SourceFile HasPlant3DSheet ActualSheetName RowCount ColumnCount Headers SHA256 ParseResult RejectedRows
2 source-0001.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A15A619FCBD036043644B235D1B5116C019838A42091CA6A451CD82DFCC41749 PARSED 1
3 source-0002.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A5B3F1451F88798417B3621F6BC6690BC0B1BA94E8F69B75BB4C6CB961B29BFB PARSED 1
4 source-0003.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1DAA47089E28D62C9DF05541266ECEF512AACF87248BDA4576F42346EA6BE543 PARSED 1
5 source-0004.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта B5AA0708B2C97B8F6AA13E4DA09C9FC4B205BB2A44D6A6993E7DB0ED26F9CEA5 PARSED 1
6 source-0005.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 310124BF67ED7185513C834FBF3BC96A0AB243CF5114A41E2F78CE383D04F15F PARSED 1
7 source-0006.xlsx False 0 0 484B6D563FFC782565DE9FE7AFBA18406017627D192CA2C3789EF8CEA63E20CE SHEET_NOT_FOUND 1
8 source-0007.xlsx False 0 0 E5C9642AEA336BB0040B2FA290AAFD723AB6CE6F04519C5A003AAB927270F6C3 SHEET_NOT_FOUND 1
9 source-0008.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 0323A416C468D838726E5792D887A7F9A381B2A1C13C65A340C57D472CCD8441 PARSED 1
10 source-0009.xlsx True Plant3D 6 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 3CE17A1F2C385F2D3E8FC288D4342026FA329894C2FFD292521A94F8ECEC5FE8 PARSED 5
11 source-0010.xlsx True Plant3D 414 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A28C34A53E3D3342A20E013F1C8ECB0535369386C8A384F72DC2FB8A8EE22028 PARSED 413
12 source-0011.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F1B81195DA589C392940461EFFB4241A1531B1DA70BFC547896366AB94626473 PARSED 1
13 source-0012.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 2C3506BA50204A3E8A1E42E0B466587103F80C8F8BEE692F27ED1FD2A7977E43 PARSED 1
14 source-0013.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BF74975CF82BB0CEB2CE6BF005A679BE2514D33A9E7F145DFCF91ED261A875B6 PARSED 1
15 source-0014.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7D2AE6636424016E60AF73B6826F4D9992A0A20356593C7D5D1034E3EBA47173 PARSED 1
16 source-0015.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта D60671EADF93813991C84959F6C3E9CFEEB60F8F44522A6DB27FE64C0CCD8B7A PARSED 1
17 source-0016.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A2B3F6E746DF732AA7FF721BCEE5A4C44442FC74851AE8ECA112B19D87671774 PARSED 1
18 source-0017.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта B9430EC9C2BD7E6231F1A27390F63241111844956B6A32C01FADA6E8C0CB33AA PARSED 1
19 source-0018.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1945DBF7EDD39F7F66605465E72C61FD405A1196D66DEA146E49D04DB8C2BF39 PARSED 1
20 source-0019.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1432526CC6D04A23B0AFFD7F0D7758D95CBC801ECC80CC868100A9849B8DFA05 PARSED 1
21 source-0020.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта EF46F7969E767613029508068B0389A70F78B7781DEB1B1D5B57A55368CE14BF PARSED 1
22 source-0021.xlsx True Plant3D 1 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 2661112A136177954233F1D2AAD0ADA66DFBF0F8BC4FDF7845DF8B4C4604F431 PARSED 0
23 source-0022.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 32637F9E79E4DD99E894B0920945135A3CB17A140A82596E1D02C9309F73FC39 PARSED 1
24 source-0023.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 9E4660630442D118F09FCB11DBE975E25433197A8A5DFB12CC612C153E0F725E PARSED 1
25 source-0024.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 2BBF8C9E52E7B98ACE642BB19D16F3E3CC2F376E39A05E53BF992FF9050B8A1E PARSED 1
26 source-0025.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A1325DC1797468286A02EDE3733DF8219B254E916154D31F34F4B461B6D2BC80 PARSED 1
27 source-0026.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта FB1E886E31C2FB3D52CA0DBBD9E74CD091938B57E7C6F6FCF4966A7FE704392C PARSED 1
28 source-0027.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта C4FEC6A05FB2720D6C4341B8735C85900A8AA15805C5CE245E551C5FFA4EEBF8 PARSED 1
29 source-0028.xlsx True Plant3D 56 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 66B28C7AB727BE7F77491313B75FB62F498C39500DE1CFB41C54A78EB184DFA1 PARSED 55
30 source-0029.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 5F8D42AD0580CFD7F4CB407B45A1B7E4D4F26D9A04A2ADF7DDA7028499BD2146 PARSED 1
31 source-0030.xlsx True Plant3D 90 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F512D38F97E6848FFA80D30D226E8E79B6422AE96096D3B137A8D18D9C7283DD PARSED 89
32 source-0031.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 670D5DA7859B4FAE24EB4F5929939786865CD2B32C7FE829B8C553A74AAF82F8 PARSED 1
33 source-0032.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F08A03A625EBE9807A89BDD9357C92A1475AE7F19A5A3B488B3E8D7356A0D981 PARSED 1
34 source-0033.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 0532B42C2AB5F10B2900A137D8C72745DACDE4EDF8C9612628E07CD388C9FC92 PARSED 1
35 source-0034.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 205F5F22C7E7DD5C9F04B9CA730BC3E79A23A561E280838C62AC4B79741462D5 PARSED 1
36 source-0035.xlsx True Plant3D 252 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7A93BB9B4F04A534D1ABE7B36118288A5B6BA799E829B75B73C8DECAAD78D22C PARSED 251
37 source-0036.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта AB6211135C2391355AEB089B4893A2485869B94D9D4AFFE73936ED59C458676D PARSED 1
38 source-0037.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 08EFD4B8B47E13F5F7F1621B884EE7D75CA060C28F7D6521C0D5BC4EABC79A32 PARSED 1
39 source-0038.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 514E2773029F9D5F827A3CDE7EC28F1F466C98ACBAABD65729FE69CE586DE0A8 PARSED 1
40 source-0039.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта C199078B83D9FE0D78DF631A1534B6308CE801E4CE1AB61404BE33F039C728F6 PARSED 1
41 source-0040.xlsx True Plant3D 3 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта C7BF9E922FF6813037E20C4AFF1B37FA6CEFB275F628BC15E5CFAC8DF374F89E PARSED 2
42 source-0041.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BE31C9D8AC380F283989D5BA048ECB803111AB9599B8E2698834B5B4891E623C PARSED 1
43 source-0042.xlsx True Plant3D 586 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 2865FF71486B4BD98B0B6B30D92E05F21E483DC71C52C7D77C00760D889CDDB4 PARSED 585
44 source-0043.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 3F73CDB5FB6F42172E1D23AC7B63EAB3764E8A97A6000B7D3678F896CBDD58BF PARSED 1
45 source-0044.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта FDD351196C3D124CCA31AFDBEF582DCBFE76C88E4119CF3601BB7D1D0B9EAAFE PARSED 1
46 source-0045.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7DA92F660D6F73EC0333B4E637819DB88ADC6E40A7D2E2E9D780D1E7851D4025 PARSED 1
47 source-0046.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта EF3485449D9F5CEF104B14FE4D16BFDC3A27199C6117732D15CFC994F361F32F PARSED 1
48 source-0047.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 170D835A968A0590ACEA2909AE9DD204A8A7B2B01FD4254FBFD30F7216B2D4C4 PARSED 1
49 source-0048.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта AAC46741C97CA9D5DBBADA8815D0D894F99F37F1CF6CD0FF6E2D1F090D3AD920 PARSED 1
50 source-0049.xlsx True Plant3D 734 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F49CD86C04D7CFDA8F1FE0FB6131F9F28A86916A6C9012D54B116E9F272C8ABE PARSED 733
51 source-0050.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A024F33FD3CD408C7FC62C59D6511F2FB8CA257DF5872A3C793875AD700F0623 PARSED 1
52 source-0051.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 63FC0734C4B58165B3C53E06320ACC86A8D9B11F1B71EE4796071E462C291794 PARSED 1
53 source-0052.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 170D835A968A0590ACEA2909AE9DD204A8A7B2B01FD4254FBFD30F7216B2D4C4 PARSED 1
54 source-0053.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 86AF67FAC7778F3EAEBF51BCF0C643387CCBFADA9020D48B0C0B7403E52E45C4 PARSED 1
55 source-0054.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 76EDCFF3616F370F7EBAF4917EB430B9C606DCAC88B2782A11511B725ED30E84 PARSED 1
56 source-0055.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1C1116CDE1D4D33F5B5C03710999EB74D546E9FD21780DF4F8BFA51F7683FFD1 PARSED 1
57 source-0056.xlsx True Plant3D 25 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта CBAA90125E90F981FC9C9E7C1866C4D7A4AC80020D02B939E3010BA76D5889A5 PARSED 24
58 source-0057.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F50FF129D9F408BD431DC7D9997F675037E3822ED0A2F3EEDDDC37D2E783A2C2 PARSED 1
59 source-0058.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 6B378A5C23A90C23762B9257C36E5DFC6357A7A924E8A435BFA97CD438E94B66 PARSED 1
60 source-0059.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта E4736511A4CE16692ADCF5DF17C006A0CA6BD10E135DFFC4770EA1CCA1FB9EF0 PARSED 1
61 source-0060.xlsx True Plant3D 895 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта DCE700252D4065DF7A03B22FED55E36D75B468DA6207439E968DAEFDB05270F8 PARSED 894
62 source-0061.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F1221EBEAA1FAEFFCCC41A921F55378B1E301806DE862A71A30EC101B37A74E9 PARSED 1
63 source-0062.xlsx True Plant3D 460 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7727E99AC47171CDA1F590B2E6380BC96F7DED676AA335637CE1436612B52D56 PARSED 459
64 source-0063.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта CA8F71B9B2ECF4B27B7B581E3E4BA770873B1E73EEEFEB538ED441C5C8757A0B PARSED 1
65 source-0064.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта C7A1E4C8CB9CB27D05C62D89133A40665F791484431B192A73F59B8F9A6DB29E PARSED 1
66 source-0065.xlsx True Plant3D 237 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 89A2AD33216311E5982DE7D311A4B7BBA5F9120B74B3F45EE480512BDACA650B PARSED 236
67 source-0066.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта AAEA49E5B294B77A9C1ABD2530E84BCE3B5814CEAA8D43638D921D03ADB0B3D7 PARSED 1
68 source-0067.xlsx True Plant3D 117 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 23AD7BE9E3CD38A6141171BC7848CA024AD9DDEA1613719781F8E4F0A695A4EB PARSED 116
69 source-0068.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта ADE70DE40D2ECBBDF6C92CAFAC598A4E79FB1EF4B42B7FD29B86358EDFB882FB PARSED 1
70 source-0069.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 9F995F5F40ABAD9FA72913BD8CD66D4D94252A247ABA1B6AAF1F618C02CC8807 PARSED 1
71 source-0070.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 954F040E98D6D0AB8DA5E3D9226C2F2DDC1320CFA25FA84355346406E89A5562 PARSED 1
72 source-0071.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 861D3B078EE1520FAC14F8BAB765C804DA233545B46C548EACC0894FED45CECF PARSED 1
73 source-0072.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7CC2D143DCDA82A368F478D246086934AE20BC21B8EBCD19B17488D6A1B5C9DA PARSED 1
74 source-0073.xlsx True Plant3D 1 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 658B087B7CDB15130678A5F58E4FA1B1FA5688457FA2FA03DFA7A218D3EA0CCC PARSED 0
75 source-0074.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта D8039752750039DD7A8DA647C21087A12944F4ACDCD636D27BD8624D86375125 PARSED 1
76 source-0075.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта CC9C45987C6DA9646FC4FD771F8D8B6C2F3F466C609203C2AAE31C1AD79C595B PARSED 1
77 source-0076.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 9FE880A33CA691260B76A025145339D1757B8295942323DC1A24020B9D2E1BE1 PARSED 1
78 source-0077.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 69233E373BA94FF1D0F5BEBAE67880BD34BA873992875344E1458254B64B9E8A PARSED 1
79 source-0078.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта D7C5B3583FA52CF6D4DDB4B8D673BE12ECFA7C18C40CED86679D691E3D6E32B6 PARSED 1
80 source-0079.xlsx True Plant3D 697 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта EFD4FC75BDED4E45A774945511D527F71433C58EC86C4F20275AC2D97CE7AAA1 PARSED 696
81 source-0080.xlsx True Plant3D 287 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 222E65CCAB8CA101B3DA836BB2D87FBC77A46B309066270A5A13D48C5FDC8E00 PARSED 286
82 source-0081.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 35044B7D3E03E7C67E7C04AA532E307522226A4CE7D50A51107B4CC2B7AE3117 PARSED 1
83 source-0082.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BF54E9EC75A0716BC4AD71E310AC8558E3EA7FF4FF1AE7616FB6C546F3D05D75 PARSED 1
84 source-0083.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта C2D6E13731016E523F582D065480F385E3D8EFC9379C6CB20A8FEC288330BD33 PARSED 1
85 source-0084.xlsx True Plant3D 1860 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта ED0BC02534ECB9636BE0C2268926942C8DEB9ADDC75823CF6A1E241E188E96DF PARSED 1859
86 source-0085.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 30B54423173405FB2179C2F0C1532DEF28A292A7E3249C5483CED353F692691A PARSED 1
87 source-0086.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BE7148B01F6BF466650D93ED1A1CFF736AFC5DF43567FA4D62C319ED0739863B PARSED 1
88 source-0087.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 27EA9A83CEDB02328F8E99D914CAB7EC9325313458D36678FC14994F028A7C66 PARSED 1
89 source-0088.xlsx True Plant3D 152 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 35C2F37E1453CC52B85BFAA335695931D469844C660CDBE8356FF60FA5EDC094 PARSED 151
90 source-0089.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта FF6B2808D71FD697AC2AD83400152E258EE428FF50CF00D22915AE70CA4F2D19 PARSED 1
91 source-0090.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 4C5AB590CDC6F764326B8DCE845E0DBFB51C9A8710DCA65671173A06B1F4C8BE PARSED 1
92 source-0091.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 9A68D1C2B05E2A1AE7DC08F56A203F12094064DC90CF4A753E6B024944058953 PARSED 1
93 source-0092.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта AA4CF707135416550D390D59275F4EF96597CA413553ED998BAD249266C1BB0C PARSED 1
94 source-0093.xlsx True Plant3D 60 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 6E9634C35B174D2CA2BF67E7E5D5A5D322E8E33366231D419927335D67118158 PARSED 59
95 source-0094.xlsx True Plant3D 810 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7826F33C15EA6164E46A9BB762DDA073ED113B918F81E3BFF9BACBD4F9E9862A PARSED 809
96 source-0095.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 4FE1B8234D58BB533E118659489AD5497E17EC58C935FB467B78FE00AE868782 PARSED 1
97 source-0096.xlsx True Plant3D 3 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта AC2B780B38BBF7B0BDFC6F3134633536A4A64DB3A2C71F010079A99ABC698EBF PARSED 2
98 source-0097.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта FF6A99D2F4042CDEDC0D8AB2863FCA5B74128D9CD39A6FF42E4DCA3CFC8CF62B PARSED 1
99 source-0098.xlsx True Plant3D 91 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта CFDF4380ABFF2899C15963155D1AC991CFDC2E0F6F5615191DC983F7CE8E3708 PARSED 90
100 source-0099.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта ACF37ECD1F508F39F352C3112113F6214741032F642012233F7C0EB71D57FAE3 PARSED 1
101 source-0100.xlsx True Plant3D 1039 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BE19C25F151B4525E0058F7C974B250AFEC651585F71A2B0BC9A28C6D2639521 PARSED 1038
102 source-0101.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 5F8D42AD0580CFD7F4CB407B45A1B7E4D4F26D9A04A2ADF7DDA7028499BD2146 PARSED 1
103 source-0102.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 219ACB4310303A5EE9E5A825998AF9012AD80F597F693B730583ACEC5856B935 PARSED 1
104 source-0103.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 96074CB9DECE06172FD88185CF379830582046A83C7405AD7B41D7F6196BD0C0 PARSED 1
105 source-0104.xlsx True Plant3D 74 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 16D424D7B51535AFF74B02F1FAA113E35A501E7A5C6E991382853FAB0F14AB02 PARSED 73
106 source-0105.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 2BD63E06782C45CAF3A77C301F980ABE6421C098E549DDD639918894987CFD4B PARSED 1
107 source-0106.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 23F20D79B82DA3BE0E979AB55939B308F5CE35264C687A13FAF0B0EFA31912C9 PARSED 1
108 source-0107.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1843EDAF7DBFB71036D62B9C80DBC256199969EF64B1881E9E5A051B1EADEDD5 PARSED 1
109 source-0108.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BE04A1D538CB18E1F909E0F0F911AC7D8DE0C614FD107E5F9209E843F2AE1311 PARSED 1
110 source-0109.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 205F5F22C7E7DD5C9F04B9CA730BC3E79A23A561E280838C62AC4B79741462D5 PARSED 1
111 source-0110.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1A04C1D1FEC0D6DE24AE5B59A303FAC8617D6DCB7C79BA61F493797E249F6BE7 PARSED 1
112 source-0111.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 69D6ECE741A1CE49B9188F9191F04DD49B8FB1D36AE79492D302DAF8BC55DE0D PARSED 1
113 source-0112.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 67E4B2F304BD98BC953742C319AD9FDC60E1DDF809317D264AB92B5DD496D153 PARSED 1
114 source-0113.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 5207B2F0DC0DB9C5399A32A1505310665180EC74D6A26015475986DCBF379563 PARSED 1
115 source-0114.xlsx True Plant3D 107 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта BB0EA311890606D735E090E3CC009275EE1EA0430A861A36E1B5B887619FB9BB PARSED 106
116 source-0115.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 90AF2345A620F5735BA47A7B0A6355CF1FC6ACD508DD566123B20F7FD3E40BCF PARSED 1
117 source-0116.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта B5B54A5399281FE2F6439D499496EF27B110BBB1DE8008428F80BD5E3FE9B6E7 PARSED 1
118 source-0117.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 777C7A38D2F97998426FB4E6A39AA7C4ADA7343D48C00427DEA58FBA915B3D67 PARSED 1
119 source-0118.xlsx True Plant3D 3 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта AC66A34DA4BA02E8452B1CA0CDCFF381AA7F56C2ECF206C6D3E39DC49DFD8B86 PARSED 2
120 source-0119.xlsx True Plant3D 703 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 630481E3722EF0E4F271C812FCB686BFEC679EC2A90B1CE60929FA178276B746 PARSED 702
121 source-0120.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 217E8F2CE5C0E50FFECDFDC69C99629EFF86F8F1C5820B804472CCBB96C83693 PARSED 1
122 source-0121.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 606068897D6B8B66ABABDF0F123679A46864CCD8D3D8F7A64C5DB8242B910AA7 PARSED 1
123 source-0122.xlsx False 0 0 775B72ABA7A5F3277F857C4431A9795192451621DDDA9E568952EE5FC4B818E2 SHEET_NOT_FOUND 1
124 source-0123.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 77C0DBDA49BCF2A61E1E8661FE56069B13F5CD76372B60CCBCB4FED4D9FCC300 PARSED 1
125 source-0124.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 11E3CB994067C2944C72783818094A3B0070E9B20F16E65E4DF5EEC4BC7D4BEF PARSED 1
126 source-0125.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A8D15E45344B4F9914F28EB471C74B90F4C8AB09F588C5932ADEC6A69EF3A1F1 PARSED 1
127 source-0126.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 973258780339702C9EAF6E67B69C8835B5585E00D21764598B619A8490EF6334 PARSED 1
128 source-0127.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта B276743CAB8202E42B5E6578DCFD33FAC968CC809EF258D3D083D1858D42FF9A PARSED 1
129 source-0128.xlsx True Plant3D 3128 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 88200AC6044F16B2B18F5448F6B4BC5BAF6E1F9EE5446E1FD30EB321AC2B8BDC PARSED 3127
130 source-0129.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 78A70F71CF77C11855ADA80A805FAD5F04FF8B5D55516FC6565C1FB86E46D4D5 PARSED 1
131 source-0130.xlsx True Plant3D 65 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта D934BC7DB6C68A6458FFFE801C61B622BDCB10979CCB3B22431867A346DF3559 PARSED 64
132 source-0131.xlsx True Plant3D 1027 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта E0192943F2454E18F72092D794D3E73A55536B7757269638BAD922BBF7E58DCF PARSED 1026
133 source-0132.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 10EB6F3BB853E29C25D5C7781F7DBE32AB66DEFCF74F33A0E041326DB3E058C1 PARSED 1
134 source-0133.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 013EBC9D96D0A2330A708C04C715A97830337DF0E85A13A46B9CEB46B641A662 PARSED 1
135 source-0134.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 480B287CB70F44135B538D406934BC84D48A9907EAC15BCDBE566606F9459814 PARSED 1
136 source-0135.xlsx True Plant3D 1970 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 6213EE80A8303E74E0C5D8D0706F4BF18BA8C66CF7D521269D83342DC129456C PARSED 1969
137 source-0136.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F2351A9EE055766BA23389341EDE4F646EF93A6F4EC5D643FABDC938D6856741 PARSED 1
138 source-0137.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 7BF721DA2ACE12EEBEAE8B810BB36E1609A716312D57123AB8DE5E3AB88A2C67 PARSED 1
139 source-0138.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта B5EFA1E2A03AD1E58DE3A8BD8E654DAE2D6D3BEE25ABD83A1F2DAAA7D1ACBBA0 PARSED 1
140 source-0139.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта D01E5620808DC870F30C7A2F8FBB142989BC64B47ACA75C33EB8891261210D61 PARSED 1
141 source-0140.xlsx True Plant3D 499 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 1E4BA218B03A56523525B6B62FCFA2381CC6C142018426EFB8BC12FD8B5B248E PARSED 498
142 source-0141.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта B39C734C901C75D4E297A7F1044068B28FA2459A2ECD3518BB9FE4B325052344 PARSED 1
143 source-0142.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта A69931EA29521E1AB9CE9EEFAD29E07687B57A6B35CBC0023FD8CEAB706BF2AA PARSED 1
144 source-0143.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 6BF892D6DB59C80850AD3FD316CBC6B6BAAB93AD54D1B7273C525C26141405EE PARSED 1
145 source-0144.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 4940E6C9CBB4C3B8D327F463A3EADA1FEBD622E8065D038D97364CA99D1D2D7F PARSED 1
146 source-0145.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 106F64274F9146D16FC5915A19FE112C287CB91FBE1F466C25D535746A3398AE PARSED 1
147 source-0146.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта EFF26E58F20FCEE544B341129C608788C6A3D96C1BDCD22AF34B6D10BE220492 PARSED 1
148 source-0147.xlsx True Plant3D 181 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 55846ECDE3A730B781564A2059D3DAC56536EC3AAEF69B09BB07178AC8720212 PARSED 180
149 source-0148.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 94278E1422D937D2C6D365036C35732C5D9C24BF70AB51ED78606668D848AB9D PARSED 1
150 source-0149.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта 85B5D8D2537326FA82CFCBA6158AE0F852E0FB7DA4D342C1507CEC4F233D9681 PARSED 1
151 source-0150.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта CF4DB120F80B11598077A842CD458703C2938D010C773D5A5C6E41AE707950C3 PARSED 1
152 source-0151.xlsx True Plant3D 2 6 Файл;Пользователь;Плагин;Дата;Количество запусков;Номер проекта F6DE7BCCBCC3B6B4CEC6FA81F0C5F17DE7E0725E8AE7BF6384798429C431A38D PARSED 1
@@ -1,19 +0,0 @@
{
"XlsxFilesFound": 151,
"TemporaryXlsxIgnored": 0,
"FilesWithPlant3DSheet": 148,
"FilesWithoutPlant3DSheet": 3,
"FilesParsed": 148,
"FilesFailed": 0,
"RawRows": 16713,
"ValidRows": 0,
"UniqueEvents": 0,
"Duplicates": 0,
"RejectedRows": 16716,
"DateRange": "",
"UniquePlugins": 0,
"UniqueComputers": 0,
"MostUsedPlugin": "",
"MostActiveComputer": "",
"SourceModified": "NO"
}
@@ -1,16 +0,0 @@
# Functional inventory: Plant 3D plugin purpose
Date: 2026-07-30. Read-only source: C:\dev\autodesk\link. No EXE/DLL/ARX/DBX/LISP/PowerShell/BAT was run; no build/restore/SQL/runtime was performed.
Unique normalized families: 43. Project/module rows: 229. Raw candidate P_/P3D directories: 138.
P_Rec_Annot is a confirmed Ortho annotation/DataLinks/PnP family and is classified KEEP_REDESIGN. P_Rec_Spec contains spec/catalog helpers and SQLite-oriented programs and is classified KEEP_REDESIGN. Bolt/update families are BUG_WORKAROUND_RETEST, not deletions. Report families may overlap Data Manager/Report Creator, but field parity is not proven. Revit/Hydra/Insul integrations remain research/review items.
Status counts:
- BUG_WORKAROUND_RETEST: 5
- KEEP_REDESIGN: 27
- OFFICIAL_RESEARCH_REQUIRED: 5
- REVIEW_USAGE: 8
- UNKNOWN: 14
All classifications are static and do not approve deletion. See official-sources.md, evidence, retirement-candidates.md, migration-candidates.md, runtime-tests-required.md and unknowns.md.
@@ -1,130 +0,0 @@
"family","path","version_signal","selection","duplicate_or_history"
"P_Check_CompP3D","_v2.5\Applications\P_Check_CompP3D","v2","latest probable version not runtime validated","unknown"
"P_Check_CompP3D","_v2.5\P_Check_CompP3D","v2","latest probable version not runtime validated","unknown"
"P_Check_CompP3D","_v2.5\P_Check_CompP3D\P_Check_CompP3D","v2","latest probable version not runtime validated","unknown"
"P_Check_Pipe","_v2.5\Applications\P_Check_Pipe","v2","latest probable version not runtime validated","unknown"
"P_Check_Pipe","_v2.5\P_Check_Pipe","v2","latest probable version not runtime validated","unknown"
"P_Check_Pipe","_v2.5\P_Check_Pipe\P_Check_Pipe","v2","latest probable version not runtime validated","unknown"
"P_Check_Project","_v2.5\Applications\P_Check_Project","v2","latest probable version not runtime validated","unknown"
"P_Check_Project","_v2.5\P_Check_Project","v2","latest probable version not runtime validated","unknown"
"P_Check_Project","_v2.5\P_Check_Project\P_Check_Project","v2","latest probable version not runtime validated","unknown"
"P_Exp_EquipToRevit","P_Exp_EquipToRevit","none","latest probable version not runtime validated","unknown"
"P_Exp_To5DSmeta","P_Exp_To5DSmeta","none","latest probable version not runtime validated","unknown"
"P_Exp_ToHydra","_v2.5\Applications\P_Exp_ToHydra","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToHydra","_v2.5\P_Exp_ToHydra","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToHydra","_v2.5\P_Exp_ToHydra\P_Exp_ToHydra","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToInsul","_v2.5\P_Exp_ToInsul","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToInsul","_v2.5\P_Exp_ToInsul\info\prev\P_Exp_ToInsul","v2","latest probable version not runtime validated","possible"
"P_Exp_ToInsul","_v2.5\P_Exp_ToInsul\repo\P_Exp_ToInsul","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToRevit_MS","_v2.5\Applications\P_Exp_ToRevit_MS","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToRevit_MS","_v2.5\P_Exp_ToRevit_MS","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToRevit_MS","_v2.5\P_Exp_ToRevit_MS\P_Exp_ToRevit_MS","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToRevit_MS","P_Exp_ToRevit_MS","none","latest probable version not runtime validated","unknown"
"P_Exp_ToRevit_MS","P_Exp_ToRevit_MS\P_Exp_ToRevit_MS v.2.0.0.0","none","latest probable version not runtime validated","unknown"
"P_Exp_ToRevit_MS","P_Exp_ToRevit_MS\P_Exp_ToRevit_MS v.2.0.0.0\P_Exp_ToRevit_MS","none","latest probable version not runtime validated","unknown"
"P_Exp_ToStart","_v2.5\P_Exp_ToStart","v2","latest probable version not runtime validated","unknown"
"P_Exp_ToStart","_v2.5\P_Exp_ToStart\P_Exp_ToStart","v2","latest probable version not runtime validated","unknown"
"P_Imp_FromPTH","_v2.5\Applications\P_Imp_FromPTH","v2","latest probable version not runtime validated","unknown"
"P_Imp_FromPTH","_v2.5\P_Imp_FromPTH","v2","latest probable version not runtime validated","unknown"
"P_Imp_FromPTH","_v2.5\P_Imp_FromPTH\P_Imp_FromPTH","v2","latest probable version not runtime validated","unknown"
"P_Rec_Annot","_v2.5\Applications\P_Rec_Annot","v2","latest probable version not runtime validated","unknown"
"P_Rec_Annot","_v2.5\P_Rec_Annot","v2","latest probable version not runtime validated","unknown"
"P_Rec_Annot","P_Rec_Annot","none","latest probable version not runtime validated","unknown"
"P_Rec_Annot","P_Rec_Annot\v1.0.2.6\P_Rec_Annot v1.0.2","v1","latest probable version not runtime validated","unknown"
"P_Rec_Annot","P_Rec_Annot\v1.0.2\release\P_Rec_Annot v1.0.2","v1","latest probable version not runtime validated","possible"
"P_Rec_Annot","P_Rec_Annot\v1.0.4\release\P_Rec_Annot v1.0.4.2","v1","latest probable version not runtime validated","possible"
"P_Rec_BOP","_v2.5\P_Rec_BOP (old)","v2","latest probable version not runtime validated","possible"
"P_Rec_BOP","_v2.5\P_Rec_BOP (old)\P_Rec_BOP","v2","latest probable version not runtime validated","possible"
"P_Rec_BOP","P_Rec_BOP","none","latest probable version not runtime validated","unknown"
"P_Rec_BOP","P_Rec_BOP\repo\P_Rec_BOP","repo","latest probable version not runtime validated","unknown"
"P_Rec_Brac","_v2.5\Applications\P_Rec_Brac","v2","latest probable version not runtime validated","unknown"
"P_Rec_Brac","_v2.5\P_Rec_Brac","v2","latest probable version not runtime validated","unknown"
"P_Rec_Brac","_v2.5\P_Rec_Brac\P_Rec_Brac","v2","latest probable version not runtime validated","unknown"
"P_Rec_Color","_v2.5\P_Rec_Color","v2","latest probable version not runtime validated","unknown"
"P_Rec_PipelineList","P_Rec_PipelineList","none","latest probable version not runtime validated","unknown"
"P_Rec_Print","_v2.5\Applications\P_Rec_Print","v2","latest probable version not runtime validated","unknown"
"P_Rec_Print","_v2.5\P_Rec_Print","v2","latest probable version not runtime validated","unknown"
"P_Rec_Print","_v2.5\P_Rec_Print\P_Rec_Print","v2","latest probable version not runtime validated","unknown"
"P_Rec_Spec","_v2.5\P_Rec_Spec","v2","latest probable version not runtime validated","unknown"
"P_Rec_TextDoc","_v2.5\P_Rec_TextDoc","v2","latest probable version not runtime validated","unknown"
"P_Rec_TextDoc","_v2.5\P_Rec_TextDoc\P_Rec_TextDoc","v2","latest probable version not runtime validated","unknown"
"P_Rec_Update","_v2.1\P_Rec_Update","v2","latest probable version not runtime validated","unknown"
"P_Rec_Update","_v2.1\P_Rec_Update\P_Rec_Update","v2","latest probable version not runtime validated","unknown"
"P_Rec_Update","P_Rec_Update","none","latest probable version not runtime validated","unknown"
"P_Rec_Update","P_Rec_Update\P_Rec_Update","none","latest probable version not runtime validated","unknown"
"P_Serv_ActualizeProjectBySpec","_v3.0\P_Serv_ActualizeProjectBySpec","v3","latest probable version not runtime validated","unknown"
"P_Serv_ActualizeProjectBySpec","_v3.0\P_Serv_ActualizeProjectBySpec\releases\P_Serv_ActualizeProjectBySpec v.0.100.0","v3","latest probable version not runtime validated","possible"
"P_Serv_ActualizeProjectBySpec","_v3.0\P_Serv_ActualizeProjectBySpec\repo\P_Serv_ActualizeProjectBySpec","v3","latest probable version not runtime validated","unknown"
"P_Serv_CompP3D","_v2.5\Applications\P_Serv_CompP3D","v2","latest probable version not runtime validated","unknown"
"P_Serv_CompP3D","_v2.5\P_Serv_CompP3D","v2","latest probable version not runtime validated","unknown"
"P_Serv_CompP3D","_v2.5\P_Serv_CompP3D\P_Serv_CompP3D","v2","latest probable version not runtime validated","unknown"
"P_Serv_CreateLineGroupAnnotationText","P_Serv_CreateLineGroupAnnotationText","none","latest probable version not runtime validated","unknown"
"P_Serv_CreateLineGroupAnnotationText","P_Serv_CreateLineGroupAnnotationText\P_Serv_CreateLineGroupAnnotationText","none","latest probable version not runtime validated","unknown"
"P_Serv_CreateLineGroupAnnotationText","P_Serv_CreateLineGroupAnnotationText\P_Serv_CreateLineGroupAnnotationText\P_Serv_CreateLineGroupAnnotationText","none","latest probable version not runtime validated","unknown"
"P_Serv_Master","_v2.5\P_Serv_Master","v2","latest probable version not runtime validated","unknown"
"P_Serv_Master","_v2.5\P_Serv_Master\P_Serv_Master","v2","latest probable version not runtime validated","unknown"
"P_Serv_OpenProject","P_Serv_OpenProject","none","latest probable version not runtime validated","unknown"
"P_Serv_Starter","P_Serv_Starter","none","latest probable version not runtime validated","unknown"
"P_Serv_UpdateLinearWeight","_v3.0\P_Serv_UpdateLinearWeight","v3","latest probable version not runtime validated","unknown"
"P_Serv_UpdateLinearWeight","_v3.0\P_Serv_UpdateLinearWeight\releases\P_Serv_UpdateLinearWeight v.0.100.0","v3","latest probable version not runtime validated","possible"
"P_Serv_UpdateLinearWeight","_v3.0\P_Serv_UpdateLinearWeight\repo\P_Serv_UpdateLinearWeight","v3","latest probable version not runtime validated","unknown"
"P_Serv_UpSpecs","_v2.5\P_Serv_UpSpecs","v2","latest probable version not runtime validated","unknown"
"P_Serv_UpSpecs","_v2.5\P_Serv_UpSpecs\P_Serv_UpSpecs","v2","latest probable version not runtime validated","unknown"
"P_Task_MO07","_v2.5\Applications\P_Task_MO07","v2","latest probable version not runtime validated","unknown"
"P_Task_MO07","_v2.5\P_Task_MO07","v2","latest probable version not runtime validated","unknown"
"P_Task_MO07","_v2.5\P_Task_MO07\P_Task_MO07","v2","latest probable version not runtime validated","unknown"
"P3DCheckProject","_v2.0\P3DCheckProject","v2","latest probable version not runtime validated","unknown"
"P3DCheckProject","_v2.0\P3DCheckProject\P3DCheckProject","v2","latest probable version not runtime validated","unknown"
"P3DCheckProject","_v2.0\P3DCheckProject\P3DCheckProject\P3DCheckProject","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.0\P3DCommands","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.0\P3DCommands\P3DCommands","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.0\P3DCommands\P3DCommands\P3DCommands","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.5\Applications\P3DCommands v.0.0.1","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.5\P3DCommands","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.5\P3DCommands\P3DCommands","v2","latest probable version not runtime validated","unknown"
"P3DCommands","_v2.5\P3DCommands\P3DCommands\P3DCommands","v2","latest probable version not runtime validated","unknown"
"P3DCorrectBoltsetLengths","P3DCorrectBoltsetLengths","none","latest probable version not runtime validated","unknown"
"P3DCorrectBoltsetLengths","P3DCorrectBoltsetLengths\old\P3DCorrectBoltsetLengths","old","latest probable version not runtime validated","possible"
"P3DCorrectBoltsetLengths","P3DCorrectBoltsetLengths\repo\P3DCorrectBoltsetLengths","repo","latest probable version not runtime validated","unknown"
"P3DCreateIsoBOM","_v2.5\Applications\P3DCreateIsoBOM v.0.0.4","v2","latest probable version not runtime validated","unknown"
"P3DDeleteNewLineInValues","_v2.0\P3DDeleteNewLineInValues","v2","latest probable version not runtime validated","unknown"
"P3DDeleteNewLineInValues","_v2.0\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues","v2","latest probable version not runtime validated","unknown"
"P3DDeleteNewLineInValues","_v2.0\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues","v2","latest probable version not runtime validated","unknown"
"P3DDeleteNewLineInValues","_v2.5\P3DDeleteNewLineInValues","v2","latest probable version not runtime validated","unknown"
"P3DDeleteNewLineInValues","_v2.5\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues","v2","latest probable version not runtime validated","unknown"
"P3DEnumerateSupports","_v2.0\P3DEnumerateSupports","v2","latest probable version not runtime validated","unknown"
"P3DEnumerateSupports","_v2.0\P3DEnumerateSupports\P3DEnumerateSupports","v2","latest probable version not runtime validated","unknown"
"P3DEnumerateSupports","_v2.0\P3DEnumerateSupports\P3DEnumerateSupports\P3DEnumerateSupports","v2","latest probable version not runtime validated","unknown"
"P3DGetBoltsetReport","P3DGetBoltsetReport","Repo","latest probable version not runtime validated","unknown"
"P3DGetBoltsetReport","P3DGetBoltsetReport\P3DGetBoltsetReport","Repo","latest probable version not runtime validated","unknown"
"P3DGetPnPId","_v2.0\P3DGetPnPId","v2","latest probable version not runtime validated","unknown"
"P3DGetPnPId","_v2.0\P3DGetPnPId\P3DGetPnPId","v2","latest probable version not runtime validated","unknown"
"P3DGetPnPId","_v2.0\P3DGetPnPId\P3DGetPnPId\P3DGetPnPId","v2","latest probable version not runtime validated","unknown"
"P3DGetReportNew","_v2.0\Отчет элементов по линиям\P3DGetReportNew","v2","latest probable version not runtime validated","unknown"
"P3DGetReportNew","_v2.0\Отчет элементов по линиям\P3DGetReportNew\P3DGetReportNew","v2","latest probable version not runtime validated","unknown"
"P3DGetReportNew","_v2.5\Отчет элементов по линиям\P3DGetReportNew","v2","latest probable version not runtime validated","unknown"
"P3DGetReportNew","_v2.5\Отчет элементов по линиям\P3DGetReportNew\P3DGetReportNew","v2","latest probable version not runtime validated","unknown"
"P3DPlotToPdfIsoMasterfile","_v2.0\P3DPlotToPdfIsoMasterfile","v2","latest probable version not runtime validated","unknown"
"P3DPlotToPdfIsoMasterfile","_v2.0\P3DPlotToPdfIsoMasterfile\P3DPlotToPdfIsoMasterfile","v2","latest probable version not runtime validated","unknown"
"P3DPlotToPdfIsoMasterfile","_v2.0\P3DPlotToPdfIsoMasterfile\P3DPlotToPdfIsoMasterfile\P3DPlotToPdfIsoMasterfile","v2","latest probable version not runtime validated","unknown"
"P3DSelectComponents","_v2.0\P3DSelectComponents","v2","latest probable version not runtime validated","unknown"
"P3DSelectComponents","_v2.0\P3DSelectComponents\P3DSelectComponents","v2","latest probable version not runtime validated","unknown"
"P3DSelectComponents","_v2.0\P3DSelectComponents\P3DSelectComponents\P3DSelectComponents","v2","latest probable version not runtime validated","unknown"
"P3DSetLayerForViewport","_v2.0\OrthoTools.2019\P3DSetLayerForViewport","v2","latest probable version not runtime validated","unknown"
"P3DSetLayerForViewport","_v2.0\OrthoTools.2019\P3DSetLayerForViewport\P3DSetLayerForViewport","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFixedPipeLengths","_v2.0\P3DUpdateFixedPipeLengths","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFixedPipeLengths","_v2.5\Applications\P3DUpdateFixedPipeLengths v.0.0.4","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFixedPipeLengths","_v2.5\P3DUpdateFixedPipeLengths","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFixedPipeLengths","_v2.5\P3DUpdateFixedPipeLengths\P3DUpdateFixedPipeLengths","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFlanges","_v2.0\P3DUpdateFlanges","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFlanges","_v2.0\P3DUpdateFlanges\P3DUpdateFlanges","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFlanges","_v2.5\Applications\P3DUpdateFlanges v.0.0.8","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFlanges","_v2.5\P3DUpdateFlanges","v2","latest probable version not runtime validated","unknown"
"P3DUpdateFlanges","_v2.5\P3DUpdateFlanges\_prev v.0.0.8\P3DUpdateFlanges","v2","latest probable version not runtime validated","possible"
"P3DUpdateFlanges","_v2.5\P3DUpdateFlanges\releases\P3DUpdateFlanges v.0.0.11","v2","latest probable version not runtime validated","possible"
"P3DUpdateFlanges","_v2.5\P3DUpdateFlanges\repo\P3DUpdateFlanges","v2","latest probable version not runtime validated","unknown"
"P3DUpdateValves","_v2.0\P3DUpdateValves","v2","latest probable version not runtime validated","unknown"
"P3DUpdateValves","_v2.0\P3DUpdateValves\P3DUpdateValves","v2","latest probable version not runtime validated","unknown"
"P3DUpdateValves","_v2.5\Applications\P3DUpdateValves v.0.0.3","v2","latest probable version not runtime validated","unknown"
"P3DUpdateValves","_v2.5\P3DUpdateValves","v2","latest probable version not runtime validated","unknown"
"P3DUpdateValves","_v2.5\P3DUpdateValves\P3DUpdateValves","v2","latest probable version not runtime validated","unknown"
1 family path version_signal selection duplicate_or_history
2 P_Check_CompP3D _v2.5\Applications\P_Check_CompP3D v2 latest probable version not runtime validated unknown
3 P_Check_CompP3D _v2.5\P_Check_CompP3D v2 latest probable version not runtime validated unknown
4 P_Check_CompP3D _v2.5\P_Check_CompP3D\P_Check_CompP3D v2 latest probable version not runtime validated unknown
5 P_Check_Pipe _v2.5\Applications\P_Check_Pipe v2 latest probable version not runtime validated unknown
6 P_Check_Pipe _v2.5\P_Check_Pipe v2 latest probable version not runtime validated unknown
7 P_Check_Pipe _v2.5\P_Check_Pipe\P_Check_Pipe v2 latest probable version not runtime validated unknown
8 P_Check_Project _v2.5\Applications\P_Check_Project v2 latest probable version not runtime validated unknown
9 P_Check_Project _v2.5\P_Check_Project v2 latest probable version not runtime validated unknown
10 P_Check_Project _v2.5\P_Check_Project\P_Check_Project v2 latest probable version not runtime validated unknown
11 P_Exp_EquipToRevit P_Exp_EquipToRevit none latest probable version not runtime validated unknown
12 P_Exp_To5DSmeta P_Exp_To5DSmeta none latest probable version not runtime validated unknown
13 P_Exp_ToHydra _v2.5\Applications\P_Exp_ToHydra v2 latest probable version not runtime validated unknown
14 P_Exp_ToHydra _v2.5\P_Exp_ToHydra v2 latest probable version not runtime validated unknown
15 P_Exp_ToHydra _v2.5\P_Exp_ToHydra\P_Exp_ToHydra v2 latest probable version not runtime validated unknown
16 P_Exp_ToInsul _v2.5\P_Exp_ToInsul v2 latest probable version not runtime validated unknown
17 P_Exp_ToInsul _v2.5\P_Exp_ToInsul\info\prev\P_Exp_ToInsul v2 latest probable version not runtime validated possible
18 P_Exp_ToInsul _v2.5\P_Exp_ToInsul\repo\P_Exp_ToInsul v2 latest probable version not runtime validated unknown
19 P_Exp_ToRevit_MS _v2.5\Applications\P_Exp_ToRevit_MS v2 latest probable version not runtime validated unknown
20 P_Exp_ToRevit_MS _v2.5\P_Exp_ToRevit_MS v2 latest probable version not runtime validated unknown
21 P_Exp_ToRevit_MS _v2.5\P_Exp_ToRevit_MS\P_Exp_ToRevit_MS v2 latest probable version not runtime validated unknown
22 P_Exp_ToRevit_MS P_Exp_ToRevit_MS none latest probable version not runtime validated unknown
23 P_Exp_ToRevit_MS P_Exp_ToRevit_MS\P_Exp_ToRevit_MS v.2.0.0.0 none latest probable version not runtime validated unknown
24 P_Exp_ToRevit_MS P_Exp_ToRevit_MS\P_Exp_ToRevit_MS v.2.0.0.0\P_Exp_ToRevit_MS none latest probable version not runtime validated unknown
25 P_Exp_ToStart _v2.5\P_Exp_ToStart v2 latest probable version not runtime validated unknown
26 P_Exp_ToStart _v2.5\P_Exp_ToStart\P_Exp_ToStart v2 latest probable version not runtime validated unknown
27 P_Imp_FromPTH _v2.5\Applications\P_Imp_FromPTH v2 latest probable version not runtime validated unknown
28 P_Imp_FromPTH _v2.5\P_Imp_FromPTH v2 latest probable version not runtime validated unknown
29 P_Imp_FromPTH _v2.5\P_Imp_FromPTH\P_Imp_FromPTH v2 latest probable version not runtime validated unknown
30 P_Rec_Annot _v2.5\Applications\P_Rec_Annot v2 latest probable version not runtime validated unknown
31 P_Rec_Annot _v2.5\P_Rec_Annot v2 latest probable version not runtime validated unknown
32 P_Rec_Annot P_Rec_Annot none latest probable version not runtime validated unknown
33 P_Rec_Annot P_Rec_Annot\v1.0.2.6\P_Rec_Annot v1.0.2 v1 latest probable version not runtime validated unknown
34 P_Rec_Annot P_Rec_Annot\v1.0.2\release\P_Rec_Annot v1.0.2 v1 latest probable version not runtime validated possible
35 P_Rec_Annot P_Rec_Annot\v1.0.4\release\P_Rec_Annot v1.0.4.2 v1 latest probable version not runtime validated possible
36 P_Rec_BOP _v2.5\P_Rec_BOP (old) v2 latest probable version not runtime validated possible
37 P_Rec_BOP _v2.5\P_Rec_BOP (old)\P_Rec_BOP v2 latest probable version not runtime validated possible
38 P_Rec_BOP P_Rec_BOP none latest probable version not runtime validated unknown
39 P_Rec_BOP P_Rec_BOP\repo\P_Rec_BOP repo latest probable version not runtime validated unknown
40 P_Rec_Brac _v2.5\Applications\P_Rec_Brac v2 latest probable version not runtime validated unknown
41 P_Rec_Brac _v2.5\P_Rec_Brac v2 latest probable version not runtime validated unknown
42 P_Rec_Brac _v2.5\P_Rec_Brac\P_Rec_Brac v2 latest probable version not runtime validated unknown
43 P_Rec_Color _v2.5\P_Rec_Color v2 latest probable version not runtime validated unknown
44 P_Rec_PipelineList P_Rec_PipelineList none latest probable version not runtime validated unknown
45 P_Rec_Print _v2.5\Applications\P_Rec_Print v2 latest probable version not runtime validated unknown
46 P_Rec_Print _v2.5\P_Rec_Print v2 latest probable version not runtime validated unknown
47 P_Rec_Print _v2.5\P_Rec_Print\P_Rec_Print v2 latest probable version not runtime validated unknown
48 P_Rec_Spec _v2.5\P_Rec_Spec v2 latest probable version not runtime validated unknown
49 P_Rec_TextDoc _v2.5\P_Rec_TextDoc v2 latest probable version not runtime validated unknown
50 P_Rec_TextDoc _v2.5\P_Rec_TextDoc\P_Rec_TextDoc v2 latest probable version not runtime validated unknown
51 P_Rec_Update _v2.1\P_Rec_Update v2 latest probable version not runtime validated unknown
52 P_Rec_Update _v2.1\P_Rec_Update\P_Rec_Update v2 latest probable version not runtime validated unknown
53 P_Rec_Update P_Rec_Update none latest probable version not runtime validated unknown
54 P_Rec_Update P_Rec_Update\P_Rec_Update none latest probable version not runtime validated unknown
55 P_Serv_ActualizeProjectBySpec _v3.0\P_Serv_ActualizeProjectBySpec v3 latest probable version not runtime validated unknown
56 P_Serv_ActualizeProjectBySpec _v3.0\P_Serv_ActualizeProjectBySpec\releases\P_Serv_ActualizeProjectBySpec v.0.100.0 v3 latest probable version not runtime validated possible
57 P_Serv_ActualizeProjectBySpec _v3.0\P_Serv_ActualizeProjectBySpec\repo\P_Serv_ActualizeProjectBySpec v3 latest probable version not runtime validated unknown
58 P_Serv_CompP3D _v2.5\Applications\P_Serv_CompP3D v2 latest probable version not runtime validated unknown
59 P_Serv_CompP3D _v2.5\P_Serv_CompP3D v2 latest probable version not runtime validated unknown
60 P_Serv_CompP3D _v2.5\P_Serv_CompP3D\P_Serv_CompP3D v2 latest probable version not runtime validated unknown
61 P_Serv_CreateLineGroupAnnotationText P_Serv_CreateLineGroupAnnotationText none latest probable version not runtime validated unknown
62 P_Serv_CreateLineGroupAnnotationText P_Serv_CreateLineGroupAnnotationText\P_Serv_CreateLineGroupAnnotationText none latest probable version not runtime validated unknown
63 P_Serv_CreateLineGroupAnnotationText P_Serv_CreateLineGroupAnnotationText\P_Serv_CreateLineGroupAnnotationText\P_Serv_CreateLineGroupAnnotationText none latest probable version not runtime validated unknown
64 P_Serv_Master _v2.5\P_Serv_Master v2 latest probable version not runtime validated unknown
65 P_Serv_Master _v2.5\P_Serv_Master\P_Serv_Master v2 latest probable version not runtime validated unknown
66 P_Serv_OpenProject P_Serv_OpenProject none latest probable version not runtime validated unknown
67 P_Serv_Starter P_Serv_Starter none latest probable version not runtime validated unknown
68 P_Serv_UpdateLinearWeight _v3.0\P_Serv_UpdateLinearWeight v3 latest probable version not runtime validated unknown
69 P_Serv_UpdateLinearWeight _v3.0\P_Serv_UpdateLinearWeight\releases\P_Serv_UpdateLinearWeight v.0.100.0 v3 latest probable version not runtime validated possible
70 P_Serv_UpdateLinearWeight _v3.0\P_Serv_UpdateLinearWeight\repo\P_Serv_UpdateLinearWeight v3 latest probable version not runtime validated unknown
71 P_Serv_UpSpecs _v2.5\P_Serv_UpSpecs v2 latest probable version not runtime validated unknown
72 P_Serv_UpSpecs _v2.5\P_Serv_UpSpecs\P_Serv_UpSpecs v2 latest probable version not runtime validated unknown
73 P_Task_MO07 _v2.5\Applications\P_Task_MO07 v2 latest probable version not runtime validated unknown
74 P_Task_MO07 _v2.5\P_Task_MO07 v2 latest probable version not runtime validated unknown
75 P_Task_MO07 _v2.5\P_Task_MO07\P_Task_MO07 v2 latest probable version not runtime validated unknown
76 P3DCheckProject _v2.0\P3DCheckProject v2 latest probable version not runtime validated unknown
77 P3DCheckProject _v2.0\P3DCheckProject\P3DCheckProject v2 latest probable version not runtime validated unknown
78 P3DCheckProject _v2.0\P3DCheckProject\P3DCheckProject\P3DCheckProject v2 latest probable version not runtime validated unknown
79 P3DCommands _v2.0\P3DCommands v2 latest probable version not runtime validated unknown
80 P3DCommands _v2.0\P3DCommands\P3DCommands v2 latest probable version not runtime validated unknown
81 P3DCommands _v2.0\P3DCommands\P3DCommands\P3DCommands v2 latest probable version not runtime validated unknown
82 P3DCommands _v2.5\Applications\P3DCommands v.0.0.1 v2 latest probable version not runtime validated unknown
83 P3DCommands _v2.5\P3DCommands v2 latest probable version not runtime validated unknown
84 P3DCommands _v2.5\P3DCommands\P3DCommands v2 latest probable version not runtime validated unknown
85 P3DCommands _v2.5\P3DCommands\P3DCommands\P3DCommands v2 latest probable version not runtime validated unknown
86 P3DCorrectBoltsetLengths P3DCorrectBoltsetLengths none latest probable version not runtime validated unknown
87 P3DCorrectBoltsetLengths P3DCorrectBoltsetLengths\old\P3DCorrectBoltsetLengths old latest probable version not runtime validated possible
88 P3DCorrectBoltsetLengths P3DCorrectBoltsetLengths\repo\P3DCorrectBoltsetLengths repo latest probable version not runtime validated unknown
89 P3DCreateIsoBOM _v2.5\Applications\P3DCreateIsoBOM v.0.0.4 v2 latest probable version not runtime validated unknown
90 P3DDeleteNewLineInValues _v2.0\P3DDeleteNewLineInValues v2 latest probable version not runtime validated unknown
91 P3DDeleteNewLineInValues _v2.0\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues v2 latest probable version not runtime validated unknown
92 P3DDeleteNewLineInValues _v2.0\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues v2 latest probable version not runtime validated unknown
93 P3DDeleteNewLineInValues _v2.5\P3DDeleteNewLineInValues v2 latest probable version not runtime validated unknown
94 P3DDeleteNewLineInValues _v2.5\P3DDeleteNewLineInValues\P3DDeleteNewLineInValues v2 latest probable version not runtime validated unknown
95 P3DEnumerateSupports _v2.0\P3DEnumerateSupports v2 latest probable version not runtime validated unknown
96 P3DEnumerateSupports _v2.0\P3DEnumerateSupports\P3DEnumerateSupports v2 latest probable version not runtime validated unknown
97 P3DEnumerateSupports _v2.0\P3DEnumerateSupports\P3DEnumerateSupports\P3DEnumerateSupports v2 latest probable version not runtime validated unknown
98 P3DGetBoltsetReport P3DGetBoltsetReport Repo latest probable version not runtime validated unknown
99 P3DGetBoltsetReport P3DGetBoltsetReport\P3DGetBoltsetReport Repo latest probable version not runtime validated unknown
100 P3DGetPnPId _v2.0\P3DGetPnPId v2 latest probable version not runtime validated unknown
101 P3DGetPnPId _v2.0\P3DGetPnPId\P3DGetPnPId v2 latest probable version not runtime validated unknown
102 P3DGetPnPId _v2.0\P3DGetPnPId\P3DGetPnPId\P3DGetPnPId v2 latest probable version not runtime validated unknown
103 P3DGetReportNew _v2.0\Отчет элементов по линиям\P3DGetReportNew v2 latest probable version not runtime validated unknown
104 P3DGetReportNew _v2.0\Отчет элементов по линиям\P3DGetReportNew\P3DGetReportNew v2 latest probable version not runtime validated unknown
105 P3DGetReportNew _v2.5\Отчет элементов по линиям\P3DGetReportNew v2 latest probable version not runtime validated unknown
106 P3DGetReportNew _v2.5\Отчет элементов по линиям\P3DGetReportNew\P3DGetReportNew v2 latest probable version not runtime validated unknown
107 P3DPlotToPdfIsoMasterfile _v2.0\P3DPlotToPdfIsoMasterfile v2 latest probable version not runtime validated unknown
108 P3DPlotToPdfIsoMasterfile _v2.0\P3DPlotToPdfIsoMasterfile\P3DPlotToPdfIsoMasterfile v2 latest probable version not runtime validated unknown
109 P3DPlotToPdfIsoMasterfile _v2.0\P3DPlotToPdfIsoMasterfile\P3DPlotToPdfIsoMasterfile\P3DPlotToPdfIsoMasterfile v2 latest probable version not runtime validated unknown
110 P3DSelectComponents _v2.0\P3DSelectComponents v2 latest probable version not runtime validated unknown
111 P3DSelectComponents _v2.0\P3DSelectComponents\P3DSelectComponents v2 latest probable version not runtime validated unknown
112 P3DSelectComponents _v2.0\P3DSelectComponents\P3DSelectComponents\P3DSelectComponents v2 latest probable version not runtime validated unknown
113 P3DSetLayerForViewport _v2.0\OrthoTools.2019\P3DSetLayerForViewport v2 latest probable version not runtime validated unknown
114 P3DSetLayerForViewport _v2.0\OrthoTools.2019\P3DSetLayerForViewport\P3DSetLayerForViewport v2 latest probable version not runtime validated unknown
115 P3DUpdateFixedPipeLengths _v2.0\P3DUpdateFixedPipeLengths v2 latest probable version not runtime validated unknown
116 P3DUpdateFixedPipeLengths _v2.5\Applications\P3DUpdateFixedPipeLengths v.0.0.4 v2 latest probable version not runtime validated unknown
117 P3DUpdateFixedPipeLengths _v2.5\P3DUpdateFixedPipeLengths v2 latest probable version not runtime validated unknown
118 P3DUpdateFixedPipeLengths _v2.5\P3DUpdateFixedPipeLengths\P3DUpdateFixedPipeLengths v2 latest probable version not runtime validated unknown
119 P3DUpdateFlanges _v2.0\P3DUpdateFlanges v2 latest probable version not runtime validated unknown
120 P3DUpdateFlanges _v2.0\P3DUpdateFlanges\P3DUpdateFlanges v2 latest probable version not runtime validated unknown
121 P3DUpdateFlanges _v2.5\Applications\P3DUpdateFlanges v.0.0.8 v2 latest probable version not runtime validated unknown
122 P3DUpdateFlanges _v2.5\P3DUpdateFlanges v2 latest probable version not runtime validated unknown
123 P3DUpdateFlanges _v2.5\P3DUpdateFlanges\_prev v.0.0.8\P3DUpdateFlanges v2 latest probable version not runtime validated possible
124 P3DUpdateFlanges _v2.5\P3DUpdateFlanges\releases\P3DUpdateFlanges v.0.0.11 v2 latest probable version not runtime validated possible
125 P3DUpdateFlanges _v2.5\P3DUpdateFlanges\repo\P3DUpdateFlanges v2 latest probable version not runtime validated unknown
126 P3DUpdateValves _v2.0\P3DUpdateValves v2 latest probable version not runtime validated unknown
127 P3DUpdateValves _v2.0\P3DUpdateValves\P3DUpdateValves v2 latest probable version not runtime validated unknown
128 P3DUpdateValves _v2.5\Applications\P3DUpdateValves v.0.0.3 v2 latest probable version not runtime validated unknown
129 P3DUpdateValves _v2.5\P3DUpdateValves v2 latest probable version not runtime validated unknown
130 P3DUpdateValves _v2.5\P3DUpdateValves\P3DUpdateValves v2 latest probable version not runtime validated unknown
File diff suppressed because it is too large Load Diff
@@ -1 +0,0 @@
Generated 2026-07-30T11:10:31

Some files were not shown because too many files have changed in this diff Show More