On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение





Пост N: 51
Зарегистрирован: 11.11.05
ссылка на сообщение  Отправлено: 27.01.24 10:03. Заголовок: Как побороть результат ошибки DBFNTX/1021 Ошибка размера данных?


Прошу помощи.

В результате незамеченных сбоев: ошибки DBFNTX/1021 - ошибка размера данных (сейчас исправленных) сформировался dbf-файл с полями заполненными звездочками ****.
В harbour-е все читается (такие поля =0). Но этот файл передается в приложение 1С, где бракуется.

Стоит задача исправления этого файла.
Сейчас исправил вручную с помощью DBEDIT Паши (Alt-E проверка файла).
Хорошо бы исправлять автоматом перед посылкой в приложение 1С.
Пока не нашел способ выявить эти переполненные поля кроме как чтения dbf как файла и поиска "***".
Может есть более надежный способ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


Администратор




Пост N: 4148
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.01.24 13:19. Заголовок: Примерно. Так. Код н..


Примерно. Так. Код не тестировал, только откомпилировал

proc main 
Local cRec, aFld, aNO := {}, anf, aStru
Local nOfs := 2

use test new
aStru := dbStruct()
for each aFld in aStru
if aFld[2] = 'N'
AADD(aNO, {nOfs, aFld[3], aFld[1]})
endif
nOfs += aFld[3]
next
go top
while ! eof()
cRec := dbRecordGet()
for each anf in aNO
if Substr(cRec, anf[1], anf[2]) = Replicate('*', anf[2]) .and. RLock()
// здесь исправлять
Field->&(anf[3]) := 0
dbUnlock()
endif
next
skip
enddo

retu

#pragma BEGINDUMP

#include "hbapi.h"
#include "hbapirdd.h"

HB_FUNC( DBRECORDGET )
{
AREAP pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer();
PHB_ITEM pItem = hb_itemPutNI( NULL, 0 );
HB_BYTE *pRec;

if( pArea && (SELF_INFO( (AREAP) pArea, DBI_GETRECSIZE, pItem ) == HB_SUCCESS) && ( SELF_GETREC( (AREAP) pArea, &pRec ) == HB_SUCCESS ) )
{
hb_retclen( pRec, hb_itemGetNI(pItem) );
}
hb_itemRelease( pItem );
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 52
Зарегистрирован: 11.11.05
ссылка на сообщение  Отправлено: 27.01.24 17:13. Заголовок: Класс! Здорово! Все ..


Класс! Здорово! Все получилось!
Огромное человеческое СПАСИБО, Паша!

Никогда в своей практике не пользовался встроенными С-ми функциями.
Оказалось очень прикольно!
Правда при сборке было насколько предупреждений, но все собралось и работает.

Еще раз СПАСИБО!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 329
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет