Skip to content
This repository has been archived by the owner on Nov 5, 2021. It is now read-only.

Latest commit

 

History

History
92 lines (69 loc) · 7.39 KB

README.md

File metadata and controls

92 lines (69 loc) · 7.39 KB

PhrExp

https://www.infoq.com/presentations/akka-jctools?utm_source=link&utm_medium=twitter&utm_campaign=calendar

Программа предназначена для экспорта данных из системы М-Аптека+. В основном для загрузки в 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С

Все это затевалось только для того, чтобы грузить потом в 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

Для того, чтобы загрузка прошла корректно необходимо поправить в скрипте поиск организации и подразделения, так как там сейчас данные нашей организации

Процедура ДобавитьРозничнуюПродажу(РПО
    РП.Организация = Справочники.Организации.НайтиПоИНН("Ваш_ИНН");
	РП.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.НайтиПоРеквизиту("КПП", "КПП_Подразделения");
    ...
КонецПроцедуры

Формат запросов в queries.xml

Формат запросов очень прост, выглядит следующим образом:

<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 ?

Спасибо за внимание. Удачи!