From 0dac3a2475f2fcdd1177324c61bd63fe6d1be5b5 Mon Sep 17 00:00:00 2001 From: tsvetkoff Date: Tue, 3 Nov 2026 15:31:44 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D1=8F?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0?= =?UTF-8?q?=20=C2=AB=D0=9F=D1=80=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=B2=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=B6=D0=B5=D0=B9=C2=BB=201.0.0=20=E2=80=94?= =?UTF-8?q?=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20XML-=D1=80=D0=B5?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=B2=20=D0=BA=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D1=91=D0=B6=D0=BD=D1=8B=D0=BC=20=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D1=82=D1=8C=20=D1=80=D0=B5=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 + .project | 18 + .settings/Default.cset | 8 + ...._1c.g5.v8.dt.platform.services.core.prefs | 2 + .settings/com.e1c.v8codestyle.autosort.prefs | 2 + .settings/com.e1c.v8codestyle.bsl.prefs | 3 + .settings/com.e1c.v8codestyle.prefs | 3 + .settings/org.eclipse.core.resources.prefs | 2 + DT-INF/PROJECT.PMF | 4 + README.md | 67 + bin/ПросмотрРеестровПлатежей.epf | Bin 0 -> 56328 bytes .../Forms/Форма/Form.form | 1638 +++++++++++++++++ .../Forms/Форма/Items/Лого/Picture.png | Bin 0 -> 39527 bytes .../Forms/Форма/Module.bsl | 686 +++++++ .../ПросмотрРеестровПлатежей.mdo | 22 + 15 files changed, 2462 insertions(+) create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/Default.cset create mode 100644 .settings/com._1c.g5.v8.dt.platform.services.core.prefs create mode 100644 .settings/com.e1c.v8codestyle.autosort.prefs create mode 100644 .settings/com.e1c.v8codestyle.bsl.prefs create mode 100644 .settings/com.e1c.v8codestyle.prefs create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 DT-INF/PROJECT.PMF create mode 100644 README.md create mode 100644 bin/ПросмотрРеестровПлатежей.epf create mode 100644 src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Form.form create mode 100644 src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Items/Лого/Picture.png create mode 100644 src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Module.bsl create mode 100644 src/ExternalDataProcessors/ПросмотрРеестровПлатежей/ПросмотрРеестровПлатежей.mdo diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f150d7c --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# Служебные файлы EDT и ОС +.metadata/ +*.log +*.bak +*.tmp +Thumbs.db +.DS_Store diff --git a/.project b/.project new file mode 100644 index 0000000..8dca6db --- /dev/null +++ b/.project @@ -0,0 +1,18 @@ + + + ПросмотрРеестровПлатежей + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ExternalObjectsNature + + diff --git a/.settings/Default.cset b/.settings/Default.cset new file mode 100644 index 0000000..a8537f8 --- /dev/null +++ b/.settings/Default.cset @@ -0,0 +1,8 @@ +{ + "version": 1, + "settings": { + "common-module-server-call": { + "enabled": true + } + } +} \ No newline at end of file diff --git a/.settings/com._1c.g5.v8.dt.platform.services.core.prefs b/.settings/com._1c.g5.v8.dt.platform.services.core.prefs new file mode 100644 index 0000000..4f1e2a2 --- /dev/null +++ b/.settings/com._1c.g5.v8.dt.platform.services.core.prefs @@ -0,0 +1,2 @@ +com._1c.g5.v8.dt.platform.services.core.PREF_AUTO_EXT_OBJECT_DUMP_GENERATION=true +eclipse.preferences.version=1 diff --git a/.settings/com.e1c.v8codestyle.autosort.prefs b/.settings/com.e1c.v8codestyle.autosort.prefs new file mode 100644 index 0000000..23b0625 --- /dev/null +++ b/.settings/com.e1c.v8codestyle.autosort.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +topObjects=true diff --git a/.settings/com.e1c.v8codestyle.bsl.prefs b/.settings/com.e1c.v8codestyle.bsl.prefs new file mode 100644 index 0000000..ac5ba52 --- /dev/null +++ b/.settings/com.e1c.v8codestyle.bsl.prefs @@ -0,0 +1,3 @@ +addModuleStrictTypesAnnotation=false +createModuleStructure=false +eclipse.preferences.version=1 diff --git a/.settings/com.e1c.v8codestyle.prefs b/.settings/com.e1c.v8codestyle.prefs new file mode 100644 index 0000000..9e9b57e --- /dev/null +++ b/.settings/com.e1c.v8codestyle.prefs @@ -0,0 +1,3 @@ +commonChecks=true +eclipse.preferences.version=1 +standardChecks=true diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/DT-INF/PROJECT.PMF b/DT-INF/PROJECT.PMF new file mode 100644 index 0000000..9a51562 --- /dev/null +++ b/DT-INF/PROJECT.PMF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.5.1 +X-External-Script-Variant: Russian +X-External-Languages: ru;name="Русский" diff --git a/README.md b/README.md new file mode 100644 index 0000000..ab203af --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# Просмотр реестров платежей + +Внешняя обработка 1С:Предприятия для просмотра и печати XML-файлов реестров к платёжным поручениям на общую сумму с реестром (формат `ProcessRegPayOrder`, поставка форматов `PPRegister`, вид обмена «Обмен с ОФК (ПП с реестром)»). + +Обработка внешняя: конфигурацию не меняет, с поддержки не снимает, ставится как файл `.epf`. + +## Зачем + +Организации получают из СУФД файлы реестров, в которых перечислены распоряжения плательщиков. Читать XML неудобно, а грузить кассовые поступления и разбирать назначения платежей ради просмотра — избыточно. Обработка показывает содержимое файлов в таблице и печатает реестр. + +## Возможности + +- выбор каталога с файлами `*.xml` — кнопкой «Выбрать каталог» или в поле каталога; +- обработка всех файлов каталога за один проход, строки всех реестров в одной таблице; +- контроль целостности: сумма строк сверяется с суммой платёжного поручения из файла, расхождение выводится предупреждением; +- мягкая обработка ошибок: файл, который не удалось прочитать, пропускается, остальные обрабатываются; +- печать: заголовок «Реестр платежей», таблица с рамками и строка «ИТОГО» по сумме. + +## Колонки + +| Колонка | Источник в XML | +|---|---| +| Файл | имя файла | +| № ПП | `NOM_PP` | +| № распоряжения | `NOM_PAY_DOC` | +| Дата распоряжения | `DATE_PAY_DOC`, при пустом — `DATE_REESTR_PP` | +| Плательщик | `NAME_PLAT` до разделителя `//`, при пустом — `FIO_PLAT` | +| Счёт плательщика | `NOM_LS_PLAT` | +| Сумма | `SUM_REESTR_PP` (в файле в копейках, выводится в рублях) | +| Назначение платежа | `PURPOSE` целиком | +| Статус | `PAYSTATUS` | + +## Требования + +- платформа 1С:Предприятие 8.5.1 (под ней собран проект); +- любая конфигурация — обработка внешняя, объекты конфигурации не используются; +- файлы реестров в формате `ProcessRegPayOrder`. + +## Как запустить + +1. `1С:Предприятие` → **Файл → Открыть…** → `bin/ПросмотрРеестровПлатежей.epf`. +2. Нажать «Выбрать каталог» и указать папку с файлами реестров. +3. Нажать «Сформировать» — строки появятся в таблице. +4. Нажать «Печать реестра» — сформируется печатная форма. + +## Как открыть и собрать в EDT + +1. **File → Import → General → Existing Projects into Workspace**, выбрать корневую папку репозитория. Проект называется `ПросмотрРеестровПлатежей`. +2. Сборка: **Проект → Очистить**, затем **Проект → Собрать**. Результат — `bin/ПросмотрРеестровПлатежей.epf`. Отдельного экспорта `.epf` в EDT не требуется. + +## Устройство + +Вся логика — в модуле формы обработки (`src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Module.bsl`); модуль объекта не используется. + +- клиентские обработчики: выбор каталога, «Сформировать», «Печать реестра»; +- серверные (`&НаСервере` / `&НаСервереБезКонтекста`): чтение каталога (`НайтиФайлы`), разбор XML потоком (`ЧтениеXML`), заполнение таблицы формы, формирование табличного документа; +- суммы из файла приходят в копейках и делятся на 100; даты разбираются из формата `ГГГГ-ММ-ДД`. + +## Ограничения + +- назначение платежа выводится целиком и не разбирается на реквизиты (лицевой счёт ребёнка, группа, период): у разных организаций свободный текст, разбор по запятым даёт мусор; +- электронная подпись файлов не проверяется: подписанные контейнеры нужно предварительно расшифровать; +- обрабатываются только файлы формата «платёжное поручение на общую сумму с реестром»; прочие файлы пропускаются с сообщением. + +## Версия + +1.0.0 diff --git a/bin/ПросмотрРеестровПлатежей.epf b/bin/ПросмотрРеестровПлатежей.epf new file mode 100644 index 0000000000000000000000000000000000000000..fa11f1f05331f0e09776b8056b445a5e072ebd30 GIT binary patch literal 56328 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 literal 0 HcmV?d00001 diff --git a/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Form.form b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Form.form new file mode 100644 index 0000000..51a3427 --- /dev/null +++ b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Form.form @@ -0,0 +1,1638 @@ + + + + ГруппаКаталога + 53 + + КнопкаВыбратьКаталог + 51 + + <key>ru</key> + <value>Выбрать каталог</value> + + true + true + + true + + + ФормаВыбратьКаталогРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбратьКаталог + Normal + Auto + true + true + UserCmds + Auto + + + Каталог + 44 + + <key>ru</key> + <value>Каталог с реестрами</value> + + true + true + + true + + + Каталог + + None + + StartChoice + КаталогНачалоВыбора + + + КаталогРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + КаталогКонтекстноеМеню + 45 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.FieldSelectionBackColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа каталога</value> + + + ГруппаКаталогаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + Auto + Auto + true + true + Auto + Auto + + + + ТаблицаРеестра + 1 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра + + None + + ТаблицаРеестраТаблицаРеестра + 14 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.Файл + + + ТаблицаРеестраТаблицаРеестраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестраКонтекстноеМеню + 15 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра1 + 17 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.НомерПП + + + ТаблицаРеестраТаблицаРеестра1РасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра1КонтекстноеМеню + 18 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра2 + 20 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.НомерРаспоряжения + + + ТаблицаРеестраТаблицаРеестра2РасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра2КонтекстноеМеню + 21 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра3 + 23 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.ДатаРаспоряжения + + + ТаблицаРеестраТаблицаРеестра3РасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра3КонтекстноеМеню + 24 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра4 + 26 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.Плательщик + + + ТаблицаРеестраТаблицаРеестра4РасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра4КонтекстноеМеню + 27 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра5 + 29 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.СчетПлательщика + + + ТаблицаРеестраТаблицаРеестра5РасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра5КонтекстноеМеню + 30 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра6 + 32 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.Сумма + + + ТаблицаРеестраТаблицаРеестра6РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра6КонтекстноеМеню + 33 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра7 + 35 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.Назначение + + + ТаблицаРеестраТаблицаРеестра7РасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра7КонтекстноеМеню + 36 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра8 + 38 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.Получатель + + + ТаблицаРеестраТаблицаРеестра8РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра8КонтекстноеМеню + 39 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраТаблицаРеестра9 + 41 + + <key>ru</key> + <value>Строки реестров</value> + + true + true + + true + + + ТаблицаРеестра.Статус + + + ТаблицаРеестраТаблицаРеестра9РасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ТаблицаРеестраТаблицаРеестра9КонтекстноеМеню + 42 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаРеестраКоманднаяПанель + 2 + Left + true + + + ТаблицаРеестраСтрокаПоиска + 5 + + ТаблицаРеестраСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ТаблицаРеестраСтрокаПоискаКонтекстноеМеню + 6 + true + + ТаблицаРеестра + + true + + + + ТаблицаРеестраСостояниеПросмотра + 11 + + ТаблицаРеестраСостояниеПросмотраРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ТаблицаРеестраСостояниеПросмотраКонтекстноеМеню + 12 + true + + ViewStatusAddition + ТаблицаРеестра + + true + + + + ТаблицаРеестраУправлениеПоиском + 8 + + ТаблицаРеестраУправлениеПоискомРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ТаблицаРеестраУправлениеПоискомКонтекстноеМеню + 9 + true + + SearchControlAddition + ТаблицаРеестра + + true + + + + ТаблицаРеестраРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ТаблицаРеестраКонтекстноеМеню + 3 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + true + + true +
+ + ГруппаКонтактныеДанные + 55 + + Лого + 57 + + <key>ru</key> + <value>Лого</value> + + true + true + + true + + + ЛогоРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ЛогоКонтекстноеМеню + 58 + true + + 10 + true + 3 + true + + + Proportionally + AsFileRef + + + + ГруппаИнформацияСлева + 60 + + НаименованиеОрганизации + 62 + true + true + + true + + + НаименованиеОрганизацииРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + НаименованиеОрганизацииКонтекстноеМеню + 63 + true + + LabelField + Enter + true + Left + true + + true + true + + Style.SpecialTextColor + + + Style.NormalTextFont + true + false + false + false + + + + + НадписьПоВопросам + 65 + + <key>ru</key> + <value>По вопросам, возникающим при обслуживании программных продуктов фирмы "1С" связывайтсь по следующим контактным данным:</value> + + true + true + + true + + + НадписьПоВопросамРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + НадписьПоВопросамКонтекстноеМеню + 66 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа информация слева</value> + + + ru + Группа информация слева + + + ГруппаИнформацияСлеваРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + + ГруппаИнформацияСправа + 68 + + ГруппаНаименование + 70 + + КонтактныеДанные5 + 72 + + <key>ru</key> + <value>Партнер 1С:</value> + + true + true + + true + + + КонтактныеДанные5РасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + КонтактныеДанные5КонтекстноеМеню + 73 + true + + Label + true + true + + Left + + + + КонтактныеДанные6 + 75 + + <key>ru</key> + <value>ООО "Профи-Софт"</value> + + true + true + + true + + + КонтактныеДанные6РасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + КонтактныеДанные6КонтекстноеМеню + 76 + true + + Label + true + true + + Style.FieldSelectionBackColor + + + Style.NormalTextFont + true + false + false + false + + + Left + + + true + true + + true + + + ru + Группа электронная почта + + + ГруппаНаименованиеРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + Auto + Auto + + + + ГруппаЭлектроннаяПочта + 78 + + КонтактныеДанные1 + 80 + + <key>ru</key> + <value>Электронная почта:</value> + + true + true + + true + + + КонтактныеДанные1РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + КонтактныеДанные1КонтекстноеМеню + 81 + true + + Label + true + true + + Left + + + + КонтактныеДанные2 + 83 + + <key>ru</key> + <value>info@profi-soft.ru</value> + + true + true + + true + + + КонтактныеДанные2РасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + КонтактныеДанные2КонтекстноеМеню + 84 + true + + Label + true + true + + Style.FieldSelectionBackColor + + + Style.NormalTextFont + true + false + false + false + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа электронная почта</value> + + + ru + Группа электронная почта + + + ГруппаЭлектроннаяПочтаРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + Auto + Auto + + + + ГруппаНомерТелефона + 86 + + КонтактныеДанные3 + 88 + + <key>ru</key> + <value>Номера телефонов:</value> + + true + true + + true + + + КонтактныеДанные3РасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + КонтактныеДанные3КонтекстноеМеню + 89 + true + + Label + true + true + + Left + + + + КонтактныеДанные4 + 91 + + <key>ru</key> + <value>сотовый +7 776 00 74353, городской 77353</value> + + true + true + + true + + + КонтактныеДанные4РасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + КонтактныеДанные4КонтекстноеМеню + 92 + true + + Label + true + true + + Style.FieldSelectionBackColor + + + Style.NormalTextFont + true + false + false + false + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа номер телефона</value> + + + ru + Группа номер телефона + + + ГруппаНомерТелефонаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа информация справа</value> + + + ru + Группа информация справа + + + ГруппаИнформацияСправаРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + Vertical + StrongSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Сведения о разработчике</value> + + + ru + Группа контактные данные + + + ГруппаКонтактныеДанныеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + NormalSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + КнопкаСформировать + 47 + + <key>ru</key> + <value>Сформировать</value> + + true + true + + true + + + ФормаСформироватьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.Сформировать + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаПечать + 49 + + <key>ru</key> + <value>Печать реестра</value> + + true + true + + true + + + ФормаПечатьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + true + true + true + Auto + true + true + true + auto + true + + Объект + 1 + + ExternalDataProcessor.ПросмотрРеестровПлатежей + + + true + + + true + +
true
+
+ + Каталог + + <key>ru</key> + <value>Каталог с реестрами</value> + + 2 + + String + + 500 + + + + true + + + true + + + + ТаблицаРеестра + + <key>ru</key> + <value>Строки реестров</value> + + 3 + + ValueTable + + + true + + + true + + + Файл + + <key>ru</key> + <value>Файл</value> + + 4 + + String + + 100 + + + + true + + + true + + + + НомерПП + + <key>ru</key> + <value>№ ПП</value> + + 5 + + String + + 100 + + + + true + + + true + + + + НомерРаспоряжения + + <key>ru</key> + <value>№ распоряжения</value> + + 6 + + String + + 100 + + + + true + + + true + + + + ДатаРаспоряжения + + <key>ru</key> + <value>Дата распоряжения</value> + + 7 + + Date + + + + true + + + true + + + + Плательщик + + <key>ru</key> + <value>Плательщик</value> + + 8 + + String + + 100 + + + + true + + + true + + + + СчетПлательщика + + <key>ru</key> + <value>Счёт плательщика</value> + + 9 + + String + + 100 + + + + true + + + true + + + + Сумма + + <key>ru</key> + <value>Сумма</value> + + 10 + + Number + + 15 + 2 + + + + true + + + true + + + + Назначение + + <key>ru</key> + <value>Назначение платежа</value> + + 11 + + String + + 100 + + + + true + + + true + + + + Получатель + + <key>ru</key> + <value>Получатель</value> + + 12 + + String + + 100 + + + + true + + + true + + + + Статус + + <key>ru</key> + <value>Статус</value> + + 13 + + String + + 100 + + + + true + + + true + + + + + Сформировать + + <key>ru</key> + <value>Сформировать</value> + + 1 + + true + + + + Сформировать + + + + + Печать + + <key>ru</key> + <value>Печать реестра</value> + + 2 + + true + + + + Печать + + + + + ВыбратьКаталог + + <key>ru</key> + <value>Выбрать каталог</value> + + 3 + + true + + + + ВыбратьКаталог + + + + + + + + +
diff --git a/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Items/Лого/Picture.png b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Items/Лого/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..06ac30c32168fac7eb2d344ea41cca222cffd398 GIT binary patch literal 39527 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�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 SltueLk1{r}(67Je`trXqELRBt literal 0 HcmV?d00001 diff --git a/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Module.bsl b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Module.bsl new file mode 100644 index 0000000..eee7516 --- /dev/null +++ b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Module.bsl @@ -0,0 +1,686 @@ +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура КаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ВыбратьКаталогИзДиалога(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыбратьКаталог(Команда) + + ВыбратьКаталогИзДиалога(); + +КонецПроцедуры + +&НаКлиенте +Процедура Сформировать(Команда) + + Если Не ЗначениеЗаполнено(Каталог) Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Укажите каталог с файлами реестров.'")); + Возврат; + КонецЕсли; + + Результат = ПрочитатьРеестры(); + + Если ЗначениеЗаполнено(Результат.ТекстСообщений) Тогда + ПоказатьПредупреждение(, Результат.ТекстСообщений); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Печать(Команда) + + Если ТаблицаРеестра.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Список строк пуст. Укажите каталог и нажмите «Сформировать».'")); + Возврат; + КонецЕсли; + + ТабличныйДокумент = СформироватьПечатнуюФорму(); + ТабличныйДокумент.Показать(НСтр("ru = 'Реестр платежей'")); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ВыбратьКаталогИзДиалога() + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + Диалог.Заголовок = НСтр("ru = 'Каталог с файлами реестров'"); + + Если ЗначениеЗаполнено(Каталог) Тогда + Диалог.Каталог = Каталог; + КонецЕсли; + + Если Диалог.Выбрать() Тогда + Каталог = Диалог.Каталог; + КонецЕсли; + +КонецПроцедуры + +// Читает все xml-файлы реестров из каталога и заполняет таблицу формы. +// +// Возвращаемое значение: +// Структура - ТекстСообщений - Строка - сообщения об ошибках и итоги чтения. +// +&НаСервере +Функция ПрочитатьРеестры() + + СтрокиРеестров = НоваяТаблицаСтрок(); + Ошибки = Новый Массив; + Итоги = ПрочитатьКаталогФайлов(Каталог, СтрокиРеестров, Ошибки); + + ТаблицаРеестра.Очистить(); + + Для Каждого СтрокаРеестра Из СтрокиРеестров Цикл + НоваяСтрока = ТаблицаРеестра.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРеестра); + КонецЦикла; + + ТекстСообщений = СтрСоединить(Ошибки, Символы.ПС); + + Если Итоги.ОбработаноФайлов = 0 И Не ЗначениеЗаполнено(ТекстСообщений) Тогда + ТекстСообщений = НСтр("ru = 'В каталоге не найдено ни одного файла реестра.'"); + КонецЕсли; + + Если Итоги.ПропущеноФайлов > 0 Тогда + ИтогиТекст = СтрШаблон(НСтр("ru = 'Обработано файлов: %1, пропущено: %2.'"), + Итоги.ОбработаноФайлов, Итоги.ПропущеноФайлов); + ТекстСообщений = ИтогиТекст + ?(ЗначениеЗаполнено(ТекстСообщений), Символы.ПС + ТекстСообщений, ""); + КонецЕсли; + + Возврат Новый Структура("ТекстСообщений", ТекстСообщений); + +КонецФункции + +&НаСервере +Функция СформироватьПечатнуюФорму() + + ТабличныйДокумент = Новый ТабличныйДокумент; + ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; + ТабличныйДокумент.АвтоМасштаб = Истина; + + ШрифтОбычный = Новый Шрифт("Arial", 8); + ШрифтЖирный = Новый Шрифт("Arial", 8, Истина); + ШрифтЗаголовка = Новый Шрифт("Arial", 12, Истина); + ЛинияРамки = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Колонки = КолонкиПечати(); + КоличествоКолонок = Колонки.Количество(); + ИндексСуммы = ИндексКолонкиСуммы(Колонки); + + ОбластьЗаголовка = ТабличныйДокумент.Область(1, 1, 1, КоличествоКолонок); + ОбластьЗаголовка.Объединить(); + ОбластьЗаголовка.Текст = НСтр("ru = 'Реестр платежей'"); + ОбластьЗаголовка.Шрифт = ШрифтЗаголовка; + ОбластьЗаголовка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + + СтрокаШапки = 3; + + Для Индекс = 1 По КоличествоКолонок Цикл + Колонка = Колонки[Индекс - 1]; + ОбластьЯчейки = ТабличныйДокумент.Область(СтрокаШапки, Индекс); + ОбластьЯчейки.Текст = Колонка.Заголовок; + ОбластьЯчейки.Шрифт = ШрифтЖирный; + ОбластьЯчейки.Обвести(ЛинияРамки, ЛинияРамки, ЛинияРамки, ЛинияРамки); + ОбластьЯчейки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + ОбластьЯчейки.ШиринаКолонки = Колонка.Ширина; + КонецЦикла; + + НомерСтроки = СтрокаШапки + 1; + ИтогоСумма = 0; + + Для Каждого СтрокаРеестра Из ТаблицаРеестра Цикл + + Для Индекс = 1 По КоличествоКолонок Цикл + + Колонка = Колонки[Индекс - 1]; + ОбластьЯчейки = ТабличныйДокумент.Область(НомерСтроки, Индекс); + ОбластьЯчейки.Текст = ТекстЗначения(СтрокаРеестра[Колонка.Данные], Колонка.Формат); + ОбластьЯчейки.Шрифт = ШрифтОбычный; + ОбластьЯчейки.Обвести(ЛинияРамки, ЛинияРамки, ЛинияРамки, ЛинияРамки); + + Если Колонка.Выравнивание = "Право" Тогда + ОбластьЯчейки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + КонецЕсли; + + КонецЦикла; + + ИтогоСумма = ИтогоСумма + СтрокаРеестра.Сумма; + НомерСтроки = НомерСтроки + 1; + + КонецЦикла; + + ОбластьИтога = ТабличныйДокумент.Область(НомерСтроки, 1, НомерСтроки, ИндексСуммы - 1); + ОбластьИтога.Объединить(); + ОбластьИтога.Текст = НСтр("ru = 'ИТОГО:'"); + ОбластьИтога.Шрифт = ШрифтЖирный; + ОбластьИтога.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + + ОбластьСуммы = ТабличныйДокумент.Область(НомерСтроки, ИндексСуммы); + ОбластьСуммы.Текст = Формат(ИтогоСумма, "ЧДЦ=2; ЧН=0"); + ОбластьСуммы.Шрифт = ШрифтЖирный; + ОбластьСуммы.Обвести(ЛинияРамки, ЛинияРамки, ЛинияРамки, ЛинияРамки); + ОбластьСуммы.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + + Возврат ТабличныйДокумент; + +КонецФункции + +&НаСервереБезКонтекста +Функция КолонкиПечати() + + Колонки = Новый Массив; + + Колонки.Добавить(КолонкаПечати("Файл", "Файл", 22)); + Колонки.Добавить(КолонкаПечати("№ ПП", "НомерПП", 8)); + Колонки.Добавить(КолонкаПечати("№ распоряжения", "НомерРаспоряжения", 12)); + Колонки.Добавить(КолонкаПечати("Дата распоряжения", "ДатаРаспоряжения", 12, "ДЛФ=D")); + Колонки.Добавить(КолонкаПечати("Плательщик", "Плательщик", 28)); + Колонки.Добавить(КолонкаПечати("Счёт плательщика", "СчетПлательщика", 20)); + Колонки.Добавить(КолонкаПечати("Сумма", "Сумма", 14, "ЧДЦ=2; ЧН=0", "Право")); + Колонки.Добавить(КолонкаПечати("Назначение платежа", "Назначение", 40)); + Колонки.Добавить(КолонкаПечати("Статус", "Статус", 7)); + + Возврат Колонки; + +КонецФункции + +&НаСервереБезКонтекста +Функция КолонкаПечати(Заголовок, Данные, Ширина, ФорматЗначения = "", Выравнивание = "Лево") + + Колонка = Новый Структура; + Колонка.Вставить("Заголовок", Заголовок); + Колонка.Вставить("Данные", Данные); + Колонка.Вставить("Ширина", Ширина); + Колонка.Вставить("Формат", ФорматЗначения); + Колонка.Вставить("Выравнивание", Выравнивание); + + Возврат Колонка; + +КонецФункции + +&НаСервереБезКонтекста +Функция ИндексКолонкиСуммы(Колонки) + + Для Индекс = 1 По Колонки.Количество() Цикл + Если Колонки[Индекс - 1].Данные = "Сумма" Тогда + Возврат Индекс; + КонецЕсли; + КонецЦикла; + + Возврат Колонки.Количество(); + +КонецФункции + +&НаСервереБезКонтекста +Функция ТекстЗначения(Значение, ФорматЗначения) + + Если Значение = Неопределено Тогда + Возврат ""; + КонецЕсли; + + Если ТипЗнч(Значение) = Тип("Дата") И Не ЗначениеЗаполнено(Значение) Тогда + Возврат ""; + КонецЕсли; + + Если ЗначениеЗаполнено(ФорматЗначения) Тогда + Возврат Формат(Значение, ФорматЗначения); + КонецЕсли; + + Возврат Строка(Значение); + +КонецФункции + +// Создаёт пустую таблицу строк реестров. +// +// Возвращаемое значение: +// ТаблицаЗначений - колонки строки реестра. +// +&НаСервереБезКонтекста +Функция НоваяТаблицаСтрок() + + КвалификаторыСуммы = Новый КвалификаторыЧисла(15, 2); + ОписаниеСуммы = Новый ОписаниеТипов("Число", КвалификаторыСуммы); + ОписаниеСтроки = Новый ОписаниеТипов("Строка"); + ОписаниеДаты = Новый ОписаниеТипов("Дата"); + ОписаниеНомера = Новый ОписаниеТипов("Число"); + + Строки = Новый ТаблицаЗначений; + Строки.Колонки.Добавить("Файл", ОписаниеСтроки); + Строки.Колонки.Добавить("НомерПП", ОписаниеСтроки); + Строки.Колонки.Добавить("ДатаПП", ОписаниеДаты); + Строки.Колонки.Добавить("НомерСтроки", ОписаниеНомера); + Строки.Колонки.Добавить("НомерРаспоряжения", ОписаниеСтроки); + Строки.Колонки.Добавить("ДатаРаспоряжения", ОписаниеДаты); + Строки.Колонки.Добавить("Плательщик", ОписаниеСтроки); + Строки.Колонки.Добавить("СчетПлательщика", ОписаниеСтроки); + Строки.Колонки.Добавить("Сумма", ОписаниеСуммы); + Строки.Колонки.Добавить("Назначение", ОписаниеСтроки); + Строки.Колонки.Добавить("Получатель", ОписаниеСтроки); + Строки.Колонки.Добавить("Статус", ОписаниеСтроки); + + Возврат Строки; + +КонецФункции + +// Читает все xml-файлы реестров из каталога и добавляет их строки в общую таблицу. +// +// Параметры: +// Каталог - Строка - путь к каталогу с файлами реестров к платёжным поручениям. +// СтрокиРеестров - ТаблицаЗначений - таблица, созданная функцией НоваяТаблицаСтрок. +// Ошибки - Массив из Строка - в него добавляются сообщения о файлах, которые не удалось прочитать. +// +// Возвращаемое значение: +// Структура - итоги чтения: +// * ОбработаноФайлов - Число - количество прочитанных файлов реестров; +// * ПропущеноФайлов - Число - количество файлов, которые не удалось прочитать. +// +&НаСервереБезКонтекста +Функция ПрочитатьКаталогФайлов(Каталог, СтрокиРеестров, Ошибки) + + Итоги = Новый Структура("ОбработаноФайлов, ПропущеноФайлов", 0, 0); + + Попытка + Файлы = НайтиФайлы(Каталог, "*.xml"); + Исключение + Ошибки.Добавить(СтрШаблон("Каталог %1 недоступен - %2", Каталог, ИнформацияОбОшибке().Описание)); + Возврат Итоги; + КонецПопытки; + + Для Каждого Файл Из Файлы Цикл + + Если Файл.ЭтоКаталог() Тогда + Продолжить; + КонецЕсли; + + Если ПрочитатьФайл(Файл.ПолноеИмя, СтрокиРеестров, Ошибки) Тогда + Итоги.ОбработаноФайлов = Итоги.ОбработаноФайлов + 1; + Иначе + Итоги.ПропущеноФайлов = Итоги.ПропущеноФайлов + 1; + КонецЕсли; + + КонецЦикла; + + Возврат Итоги; + +КонецФункции + +// Читает один файл реестра к платёжному поручению на общую сумму с реестром. +// +// Параметры: +// ИмяФайла - Строка - полный путь к файлу. +// СтрокиРеестров - ТаблицаЗначений - таблица, созданная функцией НоваяТаблицаСтрок. +// Ошибки - Массив из Строка - в него добавляются сообщения об ошибках чтения. +// +// Возвращаемое значение: +// Булево - Истина, если файл прочитан как реестр. +// +&НаСервереБезКонтекста +Функция ПрочитатьФайл(ИмяФайла, СтрокиРеестров, Ошибки) + + ЧтениеXML = Новый ЧтениеXML; + + Попытка + ЧтениеXML.ОткрытьФайл(ИмяФайла); + Исключение + Ошибки.Добавить(СтрШаблон("%1: файл не открыт - %2", ИмяФайлаИзПути(ИмяФайла), ИнформацияОбОшибке().Описание)); + Возврат Ложь; + КонецПопытки; + + Результат = Ложь; + + Попытка + Результат = РазобратьРеестр(ЧтениеXML, ИмяФайла, СтрокиРеестров, Ошибки); + Исключение + Ошибки.Добавить(СтрШаблон("%1: ошибка разбора - %2", ИмяФайлаИзПути(ИмяФайла), ИнформацияОбОшибке().Описание)); + КонецПопытки; + + ЧтениеXML.Закрыть(); + + Возврат Результат; + +КонецФункции + +// Разбирает поток XML и добавляет строки реестра в общую таблицу. +// +// Параметры: +// ЧтениеXML - ЧтениеXML - открытый поток чтения. +// ИмяФайла - Строка - путь к файлу, для сообщений об ошибках. +// СтрокиРеестров - ТаблицаЗначений - таблица, созданная функцией НоваяТаблицаСтрок. +// Ошибки - Массив из Строка - в него добавляются сообщения об ошибках. +// +// Возвращаемое значение: +// Булево - Истина, если файл прочитан как реестр. +// +&НаСервереБезКонтекста +Функция РазобратьРеестр(ЧтениеXML, ИмяФайла, СтрокиРеестров, Ошибки) + + Шапка = НоваяШапка(); + СтрокиФайла = НоваяТаблицаСтрок(); + + Если Не ПрочитатьУзлы(ЧтениеXML, Шапка, СтрокиФайла) Тогда + Ошибки.Добавить(СтрШаблон("%1: пропущен, это не реестр к платёжному поручению", ИмяФайлаИзПути(ИмяФайла))); + Возврат Ложь; + КонецЕсли; + + ДобавитьСтрокиФайла(СтрокиФайла, Шапка, ИмяФайла, СтрокиРеестров, Ошибки); + + Возврат Истина; + +КонецФункции + +// Читает узлы XML, заполняя шапку реестра и строки файла. +// +// Параметры: +// ЧтениеXML - ЧтениеXML - открытый поток чтения. +// Шапка - Структура - шапка реестра. +// СтрокиФайла - ТаблицаЗначений - строки текущего файла. +// +// Возвращаемое значение: +// Булево - Истина, если корневой элемент соответствует реестру. +// +&НаСервереБезКонтекста +Функция ПрочитатьУзлы(ЧтениеXML, Шапка, СтрокиФайла) + + ЭтоРеестр = Ложь; + ТекущаяСтрока = Неопределено; + ИмяЭлемента = ""; + + Пока ЧтениеXML.Прочитать() Цикл + + ТипУзла = ЧтениеXML.ТипУзла; + + Если ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ИмяЭлемента = ЧтениеXML.Имя; + + Если ИмяЭлемента = "ProcessRegPayOrder" Тогда + ЭтоРеестр = Истина; + КонецЕсли; + + Если ИмяЭлемента = "RegPP" Тогда + ТекущаяСтрока = СтрокиФайла.Добавить(); + КонецЕсли; + + ИначеЕсли ТипУзла = ТипУзлаXML.Текст Тогда + + Значение = СокрЛП(ЧтениеXML.Значение); + + Если ТекущаяСтрока = Неопределено Тогда + ЗаполнитьШапку(Шапка, ИмяЭлемента, Значение); + Иначе + ЗаполнитьСтроку(ТекущаяСтрока, Шапка, ИмяЭлемента, Значение); + КонецЕсли; + + ИначеЕсли ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + + Если ЧтениеXML.Имя = "RegPP" Тогда + ТекущаяСтрока = Неопределено; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат ЭтоРеестр; + +КонецФункции + +// Переносит строки файла в общую таблицу и сверяет их сумму с суммой платёжного поручения. +// +// Параметры: +// СтрокиФайла - ТаблицаЗначений - строки текущего файла. +// Шапка - Структура - шапка реестра. +// ИмяФайла - Строка - путь к файлу, для сообщений об ошибках. +// СтрокиРеестров - ТаблицаЗначений - общая таблица строк реестров. +// Ошибки - Массив из Строка - в него добавляются сообщения об ошибках. +// +&НаСервереБезКонтекста +Процедура ДобавитьСтрокиФайла(СтрокиФайла, Шапка, ИмяФайла, СтрокиРеестров, Ошибки) + + СуммаСтрок = 0; + + Для Каждого СтрокаФайла Из СтрокиФайла Цикл + + СтрокаФайла.Файл = ИмяФайлаИзПути(ИмяФайла); + СтрокаФайла.НомерПП = Шапка.НомерПП; + СтрокаФайла.ДатаПП = Шапка.ДатаПП; + СтрокаФайла.Получатель = Шапка.Получатель; + СуммаСтрок = СуммаСтрок + СтрокаФайла.Сумма; + + НоваяСтрока = СтрокиРеестров.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаФайла); + + КонецЦикла; + + Если Шапка.СуммаПП <> 0 И СуммаСтрок <> Шапка.СуммаПП Тогда + Ошибки.Добавить(СтрШаблон("%1: сумма строк %2 не равна сумме платёжного поручения %3", + ИмяФайлаИзПути(ИмяФайла), Формат(СуммаСтрок, "ЧДЦ=2; ЧН=0"), Формат(Шапка.СуммаПП, "ЧДЦ=2; ЧН=0"))); + КонецЕсли; + +КонецПроцедуры + +// Возвращает пустую шапку платёжного поручения. +// +// Возвращаемое значение: +// Структура - реквизиты шапки реестра. +// +&НаСервереБезКонтекста +Функция НоваяШапка() + + Шапка = Новый Структура; + Шапка.Вставить("НомерПП", ""); + Шапка.Вставить("ДатаПП", Дата(1, 1, 1)); + Шапка.Вставить("СуммаПП", 0); + Шапка.Вставить("НазначениеПП", ""); + Шапка.Вставить("Получатель", ""); + Шапка.Вставить("Исполнитель", ""); + Шапка.Вставить("Телефон", ""); + + Возврат Шапка; + +КонецФункции + +// Заполняет реквизит шапки по имени элемента XML. +// +// Параметры: +// Шапка - Структура - шапка реестра. +// ИмяЭлемента - Строка - имя элемента XML. +// Значение - Строка - текст элемента. +// +&НаСервереБезКонтекста +Процедура ЗаполнитьШапку(Шапка, ИмяЭлемента, Значение) + + Если ИмяЭлемента = "NOM_PP" Тогда + Шапка.НомерПП = Значение; + КонецЕсли; + + Если ИмяЭлемента = "DATE_PP" Тогда + Шапка.ДатаПП = РазобратьДату(Значение); + КонецЕсли; + + Если ИмяЭлемента = "SUM_PP" Тогда + Шапка.СуммаПП = РазобратьСумму(Значение); + КонецЕсли; + + Если ИмяЭлемента = "PURPOSE_PP" Тогда + Шапка.НазначениеПП = Значение; + КонецЕсли; + + Если ИмяЭлемента = "FIO_ISP" Тогда + Шапка.Исполнитель = Значение; + КонецЕсли; + + Если ИмяЭлемента = "TEL_ISP" Тогда + Шапка.Телефон = Значение; + КонецЕсли; + +КонецПроцедуры + +// Заполняет реквизит строки реестра по имени элемента XML. +// +// Параметры: +// Строка - СтрокаТаблицыЗначений - строка реестра. +// Шапка - Структура - шапка реестра, заполняется получателем средств. +// ИмяЭлемента - Строка - имя элемента XML. +// Значение - Строка - текст элемента. +// +&НаСервереБезКонтекста +Процедура ЗаполнитьСтроку(Строка, Шапка, ИмяЭлемента, Значение) + + Если ИмяЭлемента = "NAME_RCV" Тогда + Шапка.Получатель = Значение; + КонецЕсли; + + Если ИмяЭлемента = "NOM_LINE" И ЗначениеЗаполнено(Значение) Тогда + Строка.НомерСтроки = Число(Значение); + КонецЕсли; + + Если ИмяЭлемента = "NOM_PAY_DOC" Тогда + Строка.НомерРаспоряжения = Значение; + КонецЕсли; + + Если ИмяЭлемента = "DATE_PAY_DOC" Тогда + Строка.ДатаРаспоряжения = РазобратьДату(Значение); + КонецЕсли; + + Если ИмяЭлемента = "DATE_REESTR_PP" И Не ЗначениеЗаполнено(Строка.ДатаРаспоряжения) Тогда + Строка.ДатаРаспоряжения = РазобратьДату(Значение); + КонецЕсли; + + Если ИмяЭлемента = "SUM_REESTR_PP" Тогда + Строка.Сумма = РазобратьСумму(Значение); + КонецЕсли; + + Если ИмяЭлемента = "NAME_PLAT" Тогда + Строка.Плательщик = ИмяПлательщика(Значение); + КонецЕсли; + + Если ИмяЭлемента = "FIO_PLAT" И Не ЗначениеЗаполнено(Строка.Плательщик) Тогда + Строка.Плательщик = Значение; + КонецЕсли; + + Если ИмяЭлемента = "NOM_LS_PLAT" Тогда + Строка.СчетПлательщика = Значение; + КонецЕсли; + + Если ИмяЭлемента = "PURPOSE" Тогда + Строка.Назначение = Значение; + КонецЕсли; + + Если ИмяЭлемента = "PAYSTATUS" Тогда + Строка.Статус = Значение; + КонецЕсли; + +КонецПроцедуры + +// Извлекает имя плательщика из строки вида "ФИО//адрес//". +// +// Параметры: +// Значение - Строка - значение элемента NAME_PLAT. +// +// Возвращаемое значение: +// Строка - имя плательщика без адреса. +// +&НаСервереБезКонтекста +Функция ИмяПлательщика(Значение) + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат ""; + КонецЕсли; + + Части = СтрРазделить(Значение, "//", Ложь); + + Если Части.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; + + Возврат СокрЛП(Части[0]); + +КонецФункции + +// Преобразует сумму в копейках из файла в рубли. +// +// Параметры: +// Значение - Строка - значение элемента с суммой в копейках. +// +// Возвращаемое значение: +// Число - сумма в рублях. +// +&НаСервереБезКонтекста +Функция РазобратьСумму(Значение) + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат 0; + КонецЕсли; + + СтрокаСуммы = СтрЗаменить(СтрЗаменить(Значение, " ", ""), Символ(160), ""); + + Если Не СтрПодобнаПоРегулярномуВыражению(СтрокаСуммы, "^-?[0-9]+$") Тогда + Возврат 0; + КонецЕсли; + + Возврат Число(СтрокаСуммы) / 100; + +КонецФункции + +// Преобразует дату из формата ГГГГ-ММ-ДД в дату. +// +// Параметры: +// Значение - Строка - значение элемента с датой. +// +// Возвращаемое значение: +// Дата - прочитанная дата, при ошибке - пустая дата. +// +&НаСервереБезКонтекста +Функция РазобратьДату(Значение) + + ПустаяДата = Дата(1, 1, 1); + + Если Не ЗначениеЗаполнено(Значение) Тогда + Возврат ПустаяДата; + КонецЕсли; + + Если Не СтрПодобнаПоРегулярномуВыражению(Значение, "^[0-9]{4}-[0-9]{2}-[0-9]{2}") Тогда + Возврат ПустаяДата; + КонецЕсли; + + Части = СтрРазделить(Значение, "-"); + + Попытка + Возврат Дата(Число(Части[0]), Число(Части[1]), Число(Лев(Части[2], 2))); + Исключение + Возврат ПустаяДата; + КонецПопытки; + +КонецФункции + +// Возвращает имя файла без пути. +// +// Параметры: +// Путь - Строка - полный путь к файлу. +// +// Возвращаемое значение: +// Строка - имя файла с расширением. +// +&НаСервереБезКонтекста +Функция ИмяФайлаИзПути(Путь) + + Части = СтрРазделить(Путь, ПолучитьРазделительПути()); + + Возврат Части[Части.Количество() - 1]; + +КонецФункции + +#КонецОбласти diff --git a/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/ПросмотрРеестровПлатежей.mdo b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/ПросмотрРеестровПлатежей.mdo new file mode 100644 index 0000000..36458bf --- /dev/null +++ b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/ПросмотрРеестровПлатежей.mdo @@ -0,0 +1,22 @@ + + + + + + ПросмотрРеестровПлатежей + + ru + Просмотр реестров платежей + + + ExternalDataProcessor.ПросмотрРеестровПлатежей.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + +