Программа предназначена для экспорта данных из системы М-Аптека+. В основном для загрузки в 1С.
Работает данное чудо с базой данных Intersystems CacheDB. Поэтому, для корректной сборки необходим JDBC адаптер к этой БД, файл - cache-jdbc-2.0.0.jar. В состав PhrExp этот файл не входит. Его необходимо будет скачать с оф.сайти или взять из папки где установлена М-Аптека+ и инсталлировать в локальный maven репозиторий, следующей командой.
mvn install:install-file -Dfile=cache-jdbc-2.0.0.jar -DgroupId=com.intersys -DartifactId=cache-jdbc -Dversion=2.0.0 -Dpackaging=jar
Сборка осуществляется с помощью maven, командой
mvn clean install
после чего сформируется артефакт jar и библиотеки в директории lib. Все это необходимо таскать вместе, иначе jar не запустится.
Для вызова используется командная строка следующего вида:
java -jar prh-export-1.0-SNAPSHOT.jar localhost 1972 БД Пользователь Пароль Nomen nomen.json json
где:
- Nomen - имя запроса
- nomen.json - мя выходного файла
- json - формат файла
Вся задача данного ПО - запросить данные из БД и выгрузить их, либо в JSON файл, либо в CSV. В состав входят несколько предопределенных запросов: Все они находятся в файле queries.xml в ресурсах jar файла
- Nomen - выгрузка номенклатуры для загрузки в 1С. В формате CSV для загрузки с помощью стандартного обработчика ЗагрузкаДанныхИзТабличногоДокумента_УФ_v2.epf, а в JSON для загрузки с помощью дополнительного
- Goods - выгрузка текущих остатков на складе
- InvoiceRow - Приходы от поставщиков, для загрузки в 1С с помощью стандартного обработчика ЗагрузкаДанныхИзТабличногоДокумента_УФ_v2.epf
- Vidal - выгрузка справочника Vidal
- Sold - Продажи
- DocTitles - Сводный документ продажи по дням
- SoldDrugs - Выгрузка продаж для экспорта в 1С - Отчет о Розничных продажах. Запрос выполняется только в формате json, так как в нем есть зависимость от DocTitles
- BoughtDrugs - Выгрузка приобретенных у поставщиков товаров
- Profit - Выгрузка по дням продаж и прибыли
- Test - Пустая запись для прохождения теста
Все запросы, за редким исключением, могут выводиться как в JSON, так и в CSV формате
Все это затевалось только для того, чтобы грузить потом в 1С, поэтому часть грузится стандартным обработчиком, а для остальной части написан собственный, который также приложен в данном репозитории в папке src/main/resources/1c/ОтчетОРозничныхПродажах.epf. Что грузит дополнительный обработчик (только формат JSON):
- Номенклатуру. Для загрузки используется запрос Nomen, в JSON формате. Номенклатура загружается с обновлением, т.е. производится поиск существующей, если есть, то часть данных обновляется, если это необходимо, если не найдено, то создается новая запись.
- Отчет о розничных продажах. В качестве источника используется данные запроса SoldDrugs. Загружаются продажи по дням, за определенный период, либо вобще за все время. Команда для вызова немного отличается, добавляются дополнительные параметры - период
java -jar prh-export-1.0-SNAPSHOT.jar localhost 1972 DB USER PWD SoldDrugs sold.json json 25.08.2017 21.10.2017
Для того, чтобы загрузка прошла корректно необходимо поправить в скрипте поиск организации и подразделения, так как там сейчас данные нашей организации
Процедура ДобавитьРозничнуюПродажу(РПО
РП.Организация = Справочники.Организации.НайтиПоИНН("Ваш_ИНН");
РП.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.НайтиПоРеквизиту("КПП", "КПП_Подразделения");
...
КонецПроцедуры
Формат запросов очень прост, выглядит следующим образом:
<Query name="SoldDrugs" dependsOn="DocTitles" parameters="TitleID">
<![CDATA[
select ...
]]>
</Query>
<Query name="DocTitles" extWhere="DateReg:Date">
<![CDATA[
select...
where 1=1
<extWhere>
]]>
</Query>
Это пример для запроса SoldDrugs, видно, что у него есть зависимость от запроса DocTitles, это означает, что для каждой строки DocTitles будет выполнен запрос SoldDrugs, итоговый JSON будет выглядеть как массив DocTitles с дочерними элементеами SoldDrugs. В самом DocTitles есть также параметр extWhere, который определяет фильтр по полю DateReg, в зависимости от того сколько передано доп параметров через командную строку, возможны три варианта:
- Нет параметров, фильтр не применяется, вернуться все записи
- Один параметр, фильтр принимает значение DateRge = ?
- Два параемтра, фильтр принимает значение DateReg between ? and ?
Спасибо за внимание. Удачи!