commit 0dac3a2475f2fcdd1177324c61bd63fe6d1be5b5 Author: tsvetkoff Date: Tue Nov 3 15:31:44 2026 +0500 feat: внешняя обработка «Просмотр реестров платежей» 1.0.0 — чтение XML-реестров к платёжным поручениям и печать реестра 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 0000000..fa11f1f Binary files /dev/null and b/bin/ПросмотрРеестровПлатежей.epf differ 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 0000000..06ac30c Binary files /dev/null and b/src/ExternalDataProcessors/ПросмотрРеестровПлатежей/Forms/Форма/Items/Лого/Picture.png differ 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 + +