• Обсуждения на сайте Альта-Софт

Помогите написать SQL запрос к базе ГТД.

вопросы по работе с программным обеспечением

Модераторы: Renat, Gala, alta_olg, expert, Lemur

Ответить
batoo
Новый участник
Сообщения: 4
На форуме: c 24 янв 2012
Сказал: 1 ед.
Получил: 0 ед.

Помогите написать SQL запрос к базе ГТД.

Сообщение batoo »

Помогите , плиз, с написанием запроса к SQL серверу.
Из базы данных мне нужно получить: номер ГТД, дату ГТД, код ТН ВЭД товара, номер товара, страна происхождения, описание товара (31-я графа), вес нетто, вес брутто, таможенная стоимость, номер инвойса, дата инвойса, валюта и + желательно вся 44-я графа со всеми возможными разбивками по полям (ну, т.е. не сплошным текстом в одном поле). Всё это нужно по каждому товару из декларации, т.е. 1 товар - 1 запись, 10 товаров - 10 записей.

Если кто в курсе как это сделать, помогите, люди добрые.
Я бы и сам написал, но структуру базы мне пока разгадать не удалось.
batoo
Новый участник
Сообщения: 4
На форуме: c 24 янв 2012
Сказал: 1 ед.
Получил: 0 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение batoo »

... совсе забыл - цена товара (42-я графа) тоже нужна в запросе.
Аватара пользователя
Nick
Аксакал
Сообщения: 734
На форуме: c 02 фев 2005
Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Nick »

Именно над рабочей базой Альты такого запроса сделать, к сожалению, нельзя. Потому что большая часть документа хранится в большом бинарном поле типа BLOB в абсолютно не читаемом виде. Это полный аналог файла во внутреннем формате *.GTD, пришедшем еще из DOS. Наружу (в таблицах Docs и GTDList) торчат только несколько полей заголовка: номер, тип ГТД, валюта и еще по мелочи.

Рекомендуемый способ для изготовления отчетов - завести рядом с рабочей БД отдельную "БД зарегистрированных ГТД" http://alta.ru/docs2sql.php

В нее попадают только выпущенные ГТД, или при получении сообщения о выпуске по ЭД от таможни, или при нажатии кнопки "синяя печать" и присвоении регистрационного номера вручную. В этой БД уже лежит ГТД не одним полем неясной структуры, а развернутая в несколько таблиц. Формат при этом тот же, что используется в программах таможни, он документирован на http://www.customs.ru. Ну и названия граф там в большинстве своем понятные, типа G22_2 или G47_1_1 - от номера графы.
Следующие пользователи поблагодарили Nick за это собщение: batoo
batoo
Новый участник
Сообщения: 4
На форуме: c 24 янв 2012
Сказал: 1 ед.
Получил: 0 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение batoo »

ясно
жаль что так дело обстоит
все равно, спасибо за ответ
Аватара пользователя
Koteneff
Аксакал
Сообщения: 877
На форуме: c 13 мар 2009
Сказал: 73 ед.
Получил: 45 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Koteneff »

Nick писал(а):Именно над рабочей базой Альты такого запроса сделать, к сожалению, нельзя. Потому что большая часть документа хранится в большом бинарном поле типа BLOB в абсолютно не читаемом виде. Это полный аналог файла во внутреннем формате *.GTD, пришедшем еще из DOS. Наружу (в таблицах Docs и GTDList) торчат только несколько полей заголовка: номер, тип ГТД, валюта и еще по мелочи.

Рекомендуемый способ для изготовления отчетов - завести рядом с рабочей БД отдельную "БД зарегистрированных ГТД" http://alta.ru/docs2sql.php

В нее попадают только выпущенные ГТД, или при получении сообщения о выпуске по ЭД от таможни, или при нажатии кнопки "синяя печать" и присвоении регистрационного номера вручную. В этой БД уже лежит ГТД не одним полем неясной структуры, а развернутая в несколько таблиц. Формат при этом тот же, что используется в программах таможни, он документирован на http://www.customs.ru. Ну и названия граф там в большинстве своем понятные, типа G22_2 или G47_1_1 - от номера графы.
Все время забывал спросить :) а как мы с документами работаем если в базе они в неудобоваримом формате ? ) что даже запроса не сделать к нему ния ? ) в чем фокус ? )
Аватара пользователя
Nick
Аксакал
Сообщения: 734
На форуме: c 02 фев 2005
Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Nick »

Документ каждый раз загружается в память целиком, вся его загрузка/выгрузка спрятана в один объект. Для всей остальной программы его внутреннее устройство не важно, она работает с ним через методы GetField/SetField.

Для получения отчетов над базой есть еще два способа
1) Меню "Сервис/"Отчеты", там есть много разных полезных вариантов, они делаются над рабочей базой специальной программой на том же Delphi. Может там найдется подходящий вариант.
2) Меню "Печать в Word/Excel", там тоже есть разные отчеты. Обычно над одной ГТД, но можно сделать и над всеми декларациями в папке. Там же есть подробный хелп по их изготовлению.
Марат Казань
Эксперт
Сообщения: 1249
На форуме: c 28 сен 2009
Сказал: 229 ед.
Получил: 113 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Марат Казань »

Nick писал(а):1) Меню "Сервис/"Отчеты", там есть много разных полезных вариантов, они делаются над рабочей базой специальной программой на том же Delphi. Может там найдется подходящий вариант.
Скажите, а эти подходящие варианты можно самому подправить как и при "Печать в Word/Excel" ?
batoo
Новый участник
Сообщения: 4
На форуме: c 24 янв 2012
Сказал: 1 ед.
Получил: 0 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение batoo »

Вообще, использование выгрузки данных это, конечно, хорошо, но меня интересует автоматизация такой выгрузки на сколько это вообще возможно.
Поэтому возвращаясь к своему первому посту, попробуем поставит задачу по другому.
Я так понимаю ничто не мешает извлечь данные из таблиц на SQL сервере. Проблемма потом прочитать столбец с BLOB-данными.
Как бы тогда написать на питоне (ведь он же, по моему для этого в альте используется) такую программу, которая извлекала бы эти данные и передавала их... ну, скажем обратно на SQL сервер в темповую таблицу, но только уже в нормальном удобочитаемом виде?
Более того я почти уверен, что в каком либо модуле в файлах альты уже есть такая или похожая процедура. Вот тока где и как её приручить...
Аватара пользователя
Nick
Аксакал
Сообщения: 734
На форуме: c 02 фев 2005
Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Nick »

Марат Казань писал(а):Скажите, а эти подходящие варианты можно самому подправить как и при "Печать в Word/Excel" ?
Поправить можно, они прописаны скриптами на pascal-подобном язычке в файлах C:\ALTA\REPORT*.DAT
Еще можно прислать свой образец отчета в Альту и по нему вам сваяют еще один скрипт. На данный момент их в дистрибутиве уже 92 различных варианта...
Проблема потом прочитать столбец с BLOB-данными. Более того я почти уверен, что в каком либо модуле в файлах альты уже есть такая или похожая процедура. Вот тока где и как её приручить...
Процедура конечно же есть, точнее класс TDocument написанный на Delphi. Примерно 100Кб кода, плюс еще кое-какие библиотечки тянутся. Только мы его обычно никому не даем. По очень простой причине - это внутренний формат и состав полей в нем все время меняется (вместе с таможенными приказами по заполнению и таможенной электронной копией). И что, обновления исходников каждый раз всем "автоматизаторам" рассылать?

Поэтому стандартный способ - это работа с утвержденным таможней открытым XML-форматом. Один из вариантов как его получить я уже здесь описывал - утилитой Docs2SQL. Она делает как вы просите - берет из SQL бинарник и кладет его обратно уже в разобранном виде - на 20 таблиц и 500 полей.

Есть еще вариант - слазить в таблицу EDMsgs, там хранятся сообщения ЭД-2 для таможни и от таможни. У них тоже есть BLOB, только в нем лежит не абы что, а вполне читабельный XML, утвержденного таможней формата. Описание его есть например вот здесь http://ved.customs.ru/index.php?option= ... temid=1833
SBOdin
Новый участник
Сообщения: 1
На форуме: c 15 май 2012
Сказал: 1 ед.
Получил: 0 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение SBOdin »

Здравствуйте!
Помогите пожалуйста написать запрос для получения из ПИ/ж/д сведений о номере вагона, получателе, отправителе, номере ТТН, наименовании товара, весе нетто. Отбор по номерам вагонов и дате
.
Аватара пользователя
Nick
Аксакал
Сообщения: 734
На форуме: c 02 фев 2005
Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Nick »

Одним запросом к базе ГТД здесь не обойдется. Документы в ней хранятся в виде блобов, в лучшем случае - в виде XML. А не в виде нескольких связанных таблиц с полями, как это обычно надо для отчетов.

Получить все XML-документы типа ПИ ж/д, отправленные в таможню и зарегистрированные можно запросом
SELECT Msg FROM EDMsgs WHERE MessageType='CMN.12015' and Status=3

Дальше уже смотрите что именно из него вам надо вытащить, инструменты для работы с XML есть в любой современной СУБД.

Или есть еще один вариант, попроще. Пришлите нам на почту образец отчета который надо получить (в виде Excel), а мы вам его нарисуем и подключим в программу :)
Следующие пользователи поблагодарили Nick за это собщение: SBOdin
Аватара пользователя
Nick
Аксакал
Сообщения: 734
На форуме: c 02 фев 2005
Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.

Re: Помогите написать SQL запрос к базе ГТД.

Сообщение Nick »

Q: Существует ли возможность при помощи docs2sql, вытащить информацию Артикул (не товара) и таможенную стоимость артикула? У каждой ДТ есть связанный инвойс и хотелось бы делать такой запрос через SQL (например Access), так как работа рутинная.

A: Из Docs2SQL не получится, потому что она отображает ГТД, а в ней артикулы с одинаковым кодом ТНВЭД уже сплющены в один товар. Смотреть на стоимость по-артикульно (и на платежи, кстати) можно выгружая исходный документ Инвойс. Почитать про выгрузку инвойса можно здесь.
Ответить