Экспорт - Импорт
Select messages from
# through # FAQ
[/[Print]\]

-> Программирование в БЭСТ-4

#1: Экспорт - Импорт Author: mrs_2005Location: Михайлов Р.С. PostPosted: 07 Sep 2005 14:50
    —
Здравствуйте.
Стоит такая задача:
1. Есть две базы: Общая и Правильная (Модуль Материалы).
2. Документы первоначально заводятся в Общей базе материалов.
2. Из Общей базы материалов нужно отобрать только те документы, которые соответствуют некоторому условию и импортировать в Правильную базу.

Для решения данной задачи пока использую выгрузку в режиме работы с удаленными складами через ВРЕМЕННУЮ базу для удаления ненужных документов (есть соответствующий HFileEval).
Т.е. схема документооборота следующая:
1. Общая база - Выгрузка в файл ВСЕХ документов за период
2. Временная база - а) загрузка ВСЕХ документов б) удаление всех документов, не удовлетворяющих условию правильности. в) исправление ошибок при импорте г) выгрузка правильных документов.
3. Правильная база - загрузка правильных документов и снова исправлени ошибок при импорте.

Хочу избавиться от Временной базы и импортировать нужные документы напрямую из Общей базы во временную.

Как можно решить эту проблему?


Last edited by mrs_2005 on 08 Sep 2005 14:37; edited 1 time in total

#2:  Author: mrs_2005Location: Михайлов Р.С. PostPosted: 07 Sep 2005 15:42
    —
Посмотрел программу БЭСТ-Утиль Интеллект-Сервис-Самара.
То что надо, но - для товаров. А нужно для материало

#3:  Author: nordkLocation: Горбунов Константин PostPosted: 07 Sep 2005 16:25
    —
Ну Вы же понимаете что обмен документами между базами писать самоятотельно это очень даже чревато, абсолютно правильно что через возможности удаленного склада - кстати они (эти возможности) позволяют при записи документа его удалять и корректировать автоматически.
В 12-й версии есть функция через HFILEEVAL позволяющая выполнять процедуру загрузки с удаленного склада применительно к конкретной БД, я ее еще на практике не пробовал применять но думать бы начал по Вашему вопросу в этом направлении.
Еще можно задуматься над использованием XML, но в этом направлении работы по решению Вашего вопроса мне думается значительно больше будет.
А в принципе писали и полностью создание накладных в БЭСТе на HFIleEval - а значит их можно корректировать и удалять, тут главное определиться в своих навыках, сроках которые стоят и целесообразност

#4:  Author: mrs_2005Location: Михайлов Р.С. PostPosted: 08 Sep 2005 14:52
    —
Здравствуйте, Константин. Спасибо за участие.

nordk wrote:
позволяют при записи документа его удалять и корректировать автоматически.

А можно ли при записи документа его автоматически удалять по условию и как?

Quote:

В 12-й версии есть функция через HFILEEVAL позволяющая выполнять процедуру загрузки с удаленного склада применительно к конкретной БД, я ее еще на практике не пробовал применять но думать бы начал по Вашему вопросу в этом направлении.


Сроки достаточно короткие, таких навыков пока не очень много. Но есть необходимость и желание.
В принципе я тут надумал еще один вариант.
1. Выгружаем из Общей базы ВСЕ документы. - получаем файл.
2. Разархивируем этот файл.
3. В таблицах вида _doc.dbf, _docm.dbf удаляем лишние документы по необходимому условию
4. Архивируем назад в файл.
5. Принимаем его в Правильную базу.

И похоже, что он самый быстрый для реализации. Поэтому вопрос: можно ли это реализовать через HFileEval?

#5:  Author: Олег СмирновLocation: Олег Смирнов PostPosted: 08 Sep 2005 15:52
    —
mrs_2005 wrote:
А можно ли при записи документа его автоматически удалять по условию и как?

Ну, наверное, в Вашем-то случае лучше документ по условию просто не принимать
mrs_2005 wrote:
В принципе я тут надумал еще один вариант.

Так этот вариант ничем не лучше того, что у Вас уже работает...
И реализовывать его вовсе даже не обязательно через HFileEval или вообще какие-нить плагины, а можно просто написать на FoxPro, или даже (страшно подумать... ) на Access-е...
А у моих клиентов с 1998 года работает отдельная программулька на FoxPro для прямого переноса товарных документов из одной базы в другую (почти такую же... )...
А году так в 1999-2000 я забацал программку для Новолита, которая переносила ещё и материалы - по тому же принципу (а там и разницы никакой нет - только каталоги отличаются - SCLAD\ и ZAPAS\).

#6:  Author: ВАЛЕРИ БОНДАРЧУКLocation: БОНДАРЧУК ВАЛЕРИЙ ИВАНОВИЧ PostPosted: 08 Sep 2005 19:01
    —
Добрый день всем.
Один фильтр в удаленном складе - это период выгрузки.
Нужные документы передачи перебиваем на дату вперед или выходные.
Передаем документы и принимаем в нужной базе.
Это в том случае, когда даты не имеют критичного значения.
Если имеют, то перебить даты на нужные.
Второй вариант - отдельный склад. Остатки по всему предприятию сходятся, а по нужному складу нет.
Искренне с вами, Валери Бондарч

#7:  Author: nordkLocation: Горбунов Константин PostPosted: 09 Sep 2005 10:50
    —
Олег Смирнов
Quote:
И реализовывать его вовсе даже не обязательно через HFileEval или вообще какие-нить плагины, а можно просто написать на FoxPro, или даже (страшно подумать... ) на Access-е...
А у моих клиентов с 1998 года работает отдельная программулька на FoxPro для прямого переноса товарных документов из одной базы в другую (почти такую же... )...


Я нисколько не сомневаюсь в Ваших способностях, но пользоваться access сейчас когда есть харбор - здесь извините но я считаю это неправильно изначально. Зачем делать какие-то сторонние окна-разработки когда все можно сделать изнутри БЭСТа да еще и на индексах dbfcdx........ Вы можете писать на фоксе - я все понимаю, в свете 98 года согласен, в свете счаз - нет, когда вы напрямую из БЭСТа через переменные памяти можете сразу с SQL таблицами работать... МЫ ОТКРЫЛИ ЭТОТ САЙТ ДЛЯ ТОГО ЧТОБЫ УЧИТЬ ЛЮДЕЙ ПРОГРАММИРОВАТЬ В HARBOUR потому что теперь ЕГО ВОЗМОЖНОСТИ ШИРОКИ ИЗНУТРИ БЭСТА а не СНАРУЖИ
А в остальном если Вы привыкли делать по-своему - это Ваше пра

#8:  Author: nordkLocation: Горбунов Константин PostPosted: 09 Sep 2005 11:01
    —
mrs_2005
Quote:
А можно ли при записи документа его автоматически удалять по условию и как?



Дело в том что если при приемке документов через базы удаленного склада вы положите в БД deleted.dbf Ваш документ - он будет удален
в процессе выполнения обработки документов с удаленного склада

Quote:
Сроки достаточно короткие, таких навыков пока не очень много. Но есть необходимость и желание.
В принципе я тут надумал еще один вариант.
1. Выгружаем из Общей базы ВСЕ документы. - получаем файл.
2. Разархивируем этот файл.
3. В таблицах вида _doc.dbf, _docm.dbf удаляем лишние документы по необходимому условию
4. Архивируем назад в файл.
5. Принимаем его в Правильную базу.

И похоже, что он самый быстрый для реализации. Поэтому вопрос: можно ли это реализовать через HFileEval?


Да разумеется можно. Это полноценный язык программирования, а значит имеющий все необходимые возможности для этого...
Моя рекомендация будет такой чтобы в процессе реализации данной задачи в короткий срок Вы заранее продумали и заложили дальнейшие возможности - такие как определять БД с какими выполнять данную функцию, возможность дать свой экран на котором Вы могли бы в дальнейшем по всей цепочке документов источник-копия- копия в другой БД и т.п. иметь возможность их корректировки, настройка процентов изменения цен внутри документа - тут много чего в механизм заложить - на это нужно время и желание. Подсказывать и направлять - это моя задача. Но в короткий срок нужно делать так как Вы сможете сделать это сч

#9:  Author: nordkLocation: Горбунов Константин PostPosted: 09 Sep 2005 11:05
    —
А вообще я счаз работаю над "скользким" вопросом записи документа сразу в любую БД и т.п. Но об этом пока развивать тему не буду - слишком рано

#10:  Author: mrs_2005Location: Михайлов Р.С. PostPosted: 14 Sep 2005 16:04
    —
nordk wrote:

Дело в том что если при приемке документов через базы удаленного склада вы положите в БД deleted.dbf Ваш документ - он будет удален
в процессе выполнения обработки документов с удаленного склада


Странно, но не удаляет.
1. Положил ненужные документы в deleted.dbf в ОБЩЕЙ базе

Code:

Private cscr
//altd()
DBPUSH()

  cscr:='  Выполняется подготовка к перемещению документов...   '
  SayAndWait (cscr)
//*************************************************************
  dbpush("MDOC","MDOC_R","",{})
  MDOC->(dbgotop())
  do while (mdoc->(!eof()))

 IF (MDOC->VID="2".and.MDOC->TYPE="1".and.MDOC->Sclad="000010".and.MDOC->CODEOPER="0001").or.(MDOC->VID="2".and.MDOC->TYPE="1".and.MDOC->Sclad="000010".and.MDOC->CODEOPER="0002")

 else
    // добавляем, запись по ненужному документу в deleted.dbf
    deleted->(Addrec())
    deleted->Vid:=mdoc->Vid
    deleted->Type:=mdoc->Type
    deleted->Sclad:=mdoc->Sclad
    deleted->CodeDoc:=mdoc->CodeDoc
    deleted->NumDoc:=mdoc->NumDoc
    deleted->Date:=mdoc->Date
    deleted->AgentName:=mdoc->AgentName
    deleted->Summa:=mdoc->Summa
    deleted->AgentCode:=mdoc->AgentCode
    deleted->CodeDoc1:=mdoc->CodeDoc1
    deleted->NumDoc1:=mdoc->NumDoc1
    deleted->Input:=mdoc->Input

    deleted->(F_dbunlock())

 endif

     mdoc->(dbskip())
enddo

  cscr:='  Подготовка к перемещению документов завершена!   '
  SayAndWait (cscr)

dbpop()


? что здесь нехорошо и как исправить?

2. Выгрузил документы через удаленный склад из ОБЩЕЙ базы. В протоколе на выдачу получил список выгруженных документов и список удаленных документов.
3. При приеме через удаленный склад в ПРАВИЛЬНОЙ базе принимает ВСЕ документы. Если пытаться загрузить второй раз, то удаляет, но не все. Говорит, что нет смежных документов по внутреннему перемещению. И при удалении на каждом документе спрашивает об удалении, а мне удалять нужно больше, чем принимать.

#11:  Author: nordkLocation: Горбунов Константин PostPosted: 14 Sep 2005 19:05
    —
Честно говоря я видел себе это несколько иначе.
А именно - создал бы допустим удаленный склад и на нем бы создал файл архива для приема данных...
Далее бы этот файл открыл, посмотрел какие внутри таблицы, нашел бы среди них таблицу DELETED (чуть по другому звучит по-моему с подчеркиванием впереди) и просто бы из плагина воспроизвел бы сразу создание этих файлов и их упаковку в файл, чтобы осталось только запустить функцию приема этого файла. Т.е. поставил бы целью создание файла по которому производится прием с удаленного склада непосредственно.

И еще что сразу бросилось в глаза в Вашем примере - нигде не вижу DBCOMMIT()
Т.е. после завершения цикла просится deleted->( DBCOMMIT() )
Вы само содержимое БД deleted анализировали после выполнения Вашего плагина ?



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group