Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Записи в SH_FACT.DBF с одинаковым TEK_NOMER (номер сч.ф)

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> БЭСТ-4
View previous topic :: View next topic  
Author Message
Magistr



Joined: 19 Aug 2002
Posts: 1264
Location: Петрунин Д.Н.
Occupation: Инженер-программист
Interests: Н.Новгород

PostPosted: 09 Jun 2004 08:49    Post subject: Записи в SH_FACT.DBF с одинаковым TEK_NOMER (номер сч.ф) Reply with quote

Обнаружил в REAL\SH_FACT.DBF записи с одинаковм значением поля TEK_NOMER (номер сч.ф, который видно в Б4) - идут парами, но пары не у всех записей. Причем другие поля различаются. Насколько я понял, поле TEK_NOMER должно быть уникальным или необязательно? К тому же Б4 в реестре сч.ф. отображает только одну запись из каждой пары - уже непорядок.

Что делать с такими "задвоенными" записями?
Многие из них имеют дату 2000,2001г. Можно ли их смело удалять (например через BRO)?
Как можно просто удалить из SH_OP.DBF строки (состав) удаляемой сч.ф. (это что, для каждой сч.ф вручную ) ?
_________________
http://v32.ru - печать и экспорт в Excel отчетов БЕСТ4.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Krosh



Joined: 13 Oct 2003
Posts: 97
Location: КИА
Occupation: СТ
Interests: Москва

PostPosted: 09 Jun 2004 09:47    Post subject: Reply with quote

Проверенная 100%-ная метода. Пишу ОЧЕНЬ подробно.
1. Выбирается в БД пустое, или не используемое поле, или временно создаётся ещё одно служебное, только для данной задачи, поле.
2. Значение этого поля для ВСЕХ записей (т.е. желательно в физ. последовательности, чтобы ничего не пропустить) делается, например, пустым.
3. Делается дополнительный индекс на БД. В ключевое выражение вносятся те поля (или одно поле), которые вместе (или "единолично") определяют УНИКАЛЬНОСТЬ записей БД.
4. Этот индекс делают текущим.
5. Заполняют поле-жертву (см. п.1) неким значением.
6. Переключаемся на физ. последовательность.
7. Ставим фильтр на пустое (см. п.2) значение поля или делаем произвольный индекс с таким же условием.

Итог: имеем список всех записей, для которых в БД есть дубли с точностью до "ключа" уникального индекса (см.п. 3).

А дальше по вкусу - можно их "мочить" или ещё что-нибудь делать с ними.

Проделав данное с SH_FACT.DBF можно отфильтровать в SH_OP.DBF данные по этим сч/ф. Т.о., можно удалить строки сначала в SH_OP.DBF, а затем в SH_FACT.DBF.
Back to top
View user's profile Send private message
Magistr



Joined: 19 Aug 2002
Posts: 1264
Location: Петрунин Д.Н.
Occupation: Инженер-программист
Interests: Н.Новгород

PostPosted: 09 Jun 2004 14:21    Post subject: Reply with quote

Я сделал все один в один и в конце "в остатке" получил "задвоенные" записи, которые нужно было оставить, а не удалить, т.к, похоже, при построении уникального индекса, если есть двойные записи, то остается только первая в физическом порядке, а у меня первая запись каждой пары имеет более раннюю дату - именно эту запись и хочется удалить, то есть, при построени уникального индекса нужно, чтобы оставалсь запись с более поздней датой. Для этого я отсортировал по дате в убывающем порядке, выполнил команду CopyTo - создался новый файл, в котором физический порядок записией соответстует убыванию даты. Сделал уникальный фильтр на поле TEK_NOMER, вот теперь остались только нужны записи, которым я в поле STATUS прописал *, убрал индекс, профильтровал по STATUS<>"*" - получил записи, которые нужно удалить.

Мне нужно чистить не только SH_FACT, но и SH_OP.
Как в BRO сделать аналог операции (с вложенным подзапросом):

DELETE FROM SH_OP
WHERE NNOPER_ IN
== SELECT NNOPER
== FROM SH_FACT
== WHERE STATUS<>"*"
_________________
http://v32.ru - печать и экспорт в Excel отчетов БЕСТ4.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Krosh



Joined: 13 Oct 2003
Posts: 97
Location: КИА
Occupation: СТ
Interests: Москва

PostPosted: 10 Jun 2004 14:44    Post subject: Reply with quote

Quote:
Как в BRO сделать аналог операции (с вложенным подзапросом)

Точно ответить трудно, т.к. языком запросов не владею.
Отвечу как понял.

Вопрос: как чистить не только SH_FACT, но и SH_OP.
1. Открываются в BRO обе БД. Первая SH_FACT (основная), и вторая SH_OP - дочерняя. Осн. БД ДОЛЖНА содержать индекс, по которому будут найдены заголовки сч/ф для строк из БД SH_OP.
2. Далее
вариант 1:фильтр на БД SH_OP по выражению SH_FACT->(DBSEEK(SH_OP->(здесь_выражение_из_полей_SH_OP_по_значению_которого_будет_найден_её_заголовок)))
вариант 2: строится индекс SH_OP с условием FOR как указано в вар.1.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru