Не нашел, в каком форуме месяц назад я задавал ы на тему.
Короче. Фирма ведет рабочую БД, в которой формируются и печатаются накладные и счета фактуры.
В другую БД переносится часть накладных с помощью специальной программы. Здесь же ведется книга продаж.
Это - отчетная система.
Пришло время сделать программу для автоматического формирования записей книги продаж по накладным. То есть формирование BOOK по MDOC, отбирая конкретный диапазон дат.
Для этого я формирую файл BOOK_ADD, в который переношу все необходимое из MDOC, а затем присоединяю его к BOOK. Особенностью является MEMO поле SUM_DATA, в котором хранится информация о суммах и НДС по разным ставкам. Использую FOX (append blank и repl ).
Записи книги я формирую по ТИПУ "По ПРОЧИМ ПРОДАЖАМ". Это позволяет не связываься со счетами -фактурами (они есть в печатном виде из другой БД)
Структуру текста в MEMO поле легко определить опытным путем. Это строка, тппа (для НДС 18%)
где SUM_WITH_NDS, SUMNDS - величина суммы и суммы НДС, взятые из MDOC
Есть еще поле NNOPER, в котором хранится очередной внутренний номер ЗАПИСИ книги, формируемый по понятному алгоритму.
Короче, все формируется красиво. В мемо - поле все сидит на своем месте. Подставляю BOOK в REAL. Открываю БЭСТ - список записей вижу, но внутри MEMO поля не раскрываются в список сумм с НДС.
Два дня ковыряюсь - не могу найти причину.
Может у кого - нибудь есть соображения?
Особенно, у мудрейшего А.Титова. Так нужен толчок!
Александр я бы очень не советовал в базы БЭСТ-4 писать фоксом. Досовский фокс разрушает индексы БЭСТ-4 при записи в таблицы да еще с мемо-полями.
При работе пользователей это дело поплывет. У харбора свой драйвер CDX и от фоксовского он серъезно отличается. Даже из-под клиппера лучше этого не делать.
Проверено на практике.
Задачу надо решить!
Я пользуюсь, при необходимости, программками на FOX. (Переношу кассовые ордера и накладные из разных БД и др.).
Да, действительно, технология требует обязательной переиндексации. Но, игра стоит свеч. Если за один вечер таким образом переносится 3-5 тыс. накладных, то проиндексировать товары за пол-часа - не грех.
1.Меня очень интересует, правильно ли я понял структуру текстового поля SUM_DATA.
Исходя из образцов, которые я сфорировал в БЭСТ (Книга продаж, по прочим продажам), я вижу, что образцы имеют такую структуру (примеры с конкретными суммами и суммами НДС)
для НДС=18%
{{{{5600.23,.F.},{11,.F.},{854.29,.F.}},{{0,.F.},{-1,.F.},{0.00,.F.}},{{0,.F.},{-1,.F.},{0.00,.F.}},{{0,.F.},{-1,.F.},{0.00,.F.}}}}
2. Кроме файла BOOK, я понял, что еще необходимо изменять пару полей в файле MEMDAT в TOVAR (номер последней записи). Может быть еще какой -то файл отвечает за КНИГУ ПРОДАЖ (без счетов - фактур - по прочим продажам) ???
Действвительно, проблема состоит в отличии FPT файла, измененного FOX и видимо того, что создает БЭСТ. Я конролирую себя с помощью старой ДОС - программы BDBFS, которая позволяет смотреть и корректировать DBF файлы, в т. ч. и MEMO поля. Содержимое MEMO поля она показывает одинаково, однако править то, что создал БЭСТ - не дает, сообщение об ошибке. Поля же, подготовленные FOX корректируются, однако БЭСТ не видит изменений.
Пытаюсь воспользоваться встроенным HARBOUR. Однако, спотыкаюсь на каждом операторе.
На Fox у меня всего - то вот такой текст
set defa to c:\temp\
sele 1
use BOOK
* файл с книгой продаж. Все находится в папке c:\temp\
sele 2
use BOOK_ADD
* заранее подготовленный файл по накладным
sele 2
do while !eof()
n=NNOPER
o1=OPER_FACT
o2=OPER_ST
D1=TEK_DATA
n1=TEK_NOMER
t=alltrim(str(TYPE))
MEM=SUM_DATA
SF=SUMMA_FACT
SN=SUMMA_NDS
D2=DATA_OPL
ag=AG_CODE
D3=SH_DATA
sele 1
append blank
repl NNOPER with n
repl OPER_FACT with o1
repl OPER_ST with o2
repl TEK_DATA with D1
repl TEK_NOMER with n1
repl TYPE with t
repl SUM_DATA with MEM
* данный оператор вносит текст в MEMO поле
repl SUMMA_FACT with SF
repl SUMMA_NDS with SN
repl DATA_OPL with D2
repl AG_CODE with ag
repl SH_DATA with D3
sele 2
skip
enddo
use in 1
use in 2
Может быть кто - то подскажет аналогичные операторы в Harbour
В каталоге установки БЭСТа есть ".\news\develop\ng" - там документация по Клипперу в формате "ng" + "гляделка". Харбор полностью поддерживает команды и функции этого языка, однако документация как раз по Харбору может привести к продолжительным "танцам с бубном" при его использовании с БЭСТом, где скомпилировано далеко не все, что Харбор "умеет", поэтому надежнее использовать по началу именно доки от Клиппера. Единственное, на что необходимо обязательно обратить - подключение драйвера, используемого в БЭСТе - это "DBFCDX". Конкретно - до определения первой процедуры/функции в программе надо декларировать используемый драйвер: "Request DBFCDX", а в теле процедуры/функции "MAIN" назначить его "по умолчанию": "DbSetDriver('DBFCDX')"(это мне так больше нравится - использовать функцию, а не команду, возможно более корректным будет использование команды "SET DRIVER"). Дополнительно не помешает "таким же макаром" установить кодовую страницу: "Request HB_CODEPAGE_RU866" и "HB_SetCodePage('RU866')" соответственно. Еще может оказаться необходимым задание формата даты и времени в соответствии с форматом, принятым в БЭСТе. В мануале по Клипперу описаны "прототипы" этих функций и команд - в Харборе они работают точно так же.
Скачайте инструментарий разработчика.
Там есть исходники различных функций разработчика, может помочь в ознакомлении.
Проблему с этим полем обсуждают уже несколько лет, в архиве форума, для интереса, сделайте поиск по sum_data.