Git Product home page Git Product logo

prhexp's Introduction

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 ?

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.