powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Fox Pro 2.6 - получить третий файл
9 сообщений из 9, страница 1 из 1
Fox Pro 2.6 - получить третий файл
    #33351611
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Граждане, помогите пожалуйста.
Необходимо выбрать некоторые записи из двух файлов в третий файл (в курсор),
предварительно отфильтровав оные.
Имеется файл SUBS_CLT.dbf, из которого по определенной дате и максимальному времени (эта часть работает) я должен вытянуть сумму.
Также имеется файл DOGOVOR.DBF в котором кроме всего прочего имеются поля KOD (код предприятия) и поле In_n (ИНН).
В третьем файле мне нужно как поле KOD из DOGOVOR.DBF так и поле Sum1 из SUBS_CLT.dbf.
«Склющить» эти два файла я могу только по полю Inn.
Но в третий файл попадают дублирующиеся записи и неправильные поля, напр. Одна и таже сумма идет у двух предприятий (хотя в SUBS_CLT – только у одного). В чем может быть ошибка?
Код:
b_path=sys(2003)+"\"
set date to german
set century on
dd2={27.10.2005}

select 1
use alltrim(b_path+"SUBS_CLT.dbf") alias s_bank
s_inn=alltrim(upper(s_bank.Inn))

select 3
use alltrim(b_path+"dogovor.dbf") alias dogovor

CREATE CURSOR max_v ;
(TIME3 C(5))

select 16
SELECT MAX(s_bank.TIME3) AS max_t;
FROM s_bank;
WHERE s_bank.Dat2 = dd2;
INTO CURSOR max_v
max_x=eval(field(1))

select 1
set filter to s_bank.TIME3=max_x.and.s_bank.Dat2=dd2.and.s_bank.Sum1<>0

************************************
select 18
create cursor i_bnk;
(kod_r c(3), kod c(5), Sum1 n(15,2), dat2 d(8), nom_doc c(15))

select 17
select distinct dogovor.kod_r, dogovor.kod, s_bank.Sum1, s_bank.dat2,;
s_bank.nom_doc;
from dogovor, s_bank;
where alltrim(dogovor.In_n)=alltrim(s_bank.Inn);
and s_bank.dat2 = dd2;
and s_bank.time3=max_x;
into cursor i_bnk

Заранее спасибо.
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33351714
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно тебя понял, то посмотри вот это

Выбрать из дочерней таблицы записи с максимальной датой

Модифицируй приведенный там год в соответствии со своей задачей.
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33351803
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ.
Но, как раз выбор по максимальной дате работает,
т.е. на первую часть кода не обращайте внимание.
Меня интересует банальная выборка из 2-х файлов в третий,
через связь по одному полю (ИНН). Почему результат нулевой?
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33354088
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. весь вопрос заключается в том, почему нет результата в выборке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select distinct dogovor.kod_r, dogovor.kod, s_bank.Sum1, s_bank.dat2,;
s_bank.nom_doc;
from dogovor, s_bank;
where alltrim(dogovor.In_n)=alltrim(s_bank.Inn);
and s_bank.dat2 = dd2;
and s_bank.time3=max_x;
into cursor i_bnk

Ну, если значения переменных dd2 и max_x корректны и есть соответствующие записи в таблице s_bank, а также должны быть записи в табице dogovor (т.е. ручками нашел соответствующие записи), то если версия младше VFP6SP5 (с учетом Service Pack) необходимо убедиться, что сделана настройка

SET COLLATE TO MACHINE

Это настройка по умолчанию. При настройке отличной от MACHINE в младших версиях FoxPro возможны самые разные глюки.
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33354175
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установил set collate to machine.

Выборка происходит, но не такая, какая нужна.
Например я (вручную проверив) точно знаю,
что за 27.10.2005, время 14.09 у меня прошло 12 платежей
(т.е. имеется 12 таких записей в файле s_bank).
В конечном же курсоре i_bnk я получаю 45 записей.
Файл dogovor мне нужен только для получения кодов предприятий.
Но в i_bnk я вижу один и тот же платеж, но продублированный
под разными кодами предприятий. (отсюда столько лишних записей).
В файле dogovor поле In_n - это c(14).
В файле s_bank поле Inn - это c(12).
По этому полю я их соединяю.
Файл s_bank создан в VFP 6, а файл dogovor - в FoxPro 2.6.
Может в этом проблема?
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33354241
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi AlexanderKR!

SET ANSI ON - а на будущее очень советую разобраться с ключевыми полями -
т.к. сцеплять таблицы по alltrim(dogovor.In_n)=alltrim(s_bank.Inn) - это
полнейший бардак! У тебя код "1" сцепится с "11","111","1234", и вообще
всеми прочими начинающимися на 1-цу кодами! И в обратную стророну такая-же
ерунда будет.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33354243
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi AlexanderKR!

SET ANSI ON - а на будущее очень советую разобраться с ключевыми полями -
т.к. сцеплять таблицы по alltrim(dogovor.In_n)=alltrim(s_bank.Inn) - это
полнейший бардак! У тебя код "1" сцепится с "11","111","1234", и вообще
всеми прочими начинающимися на 1-цу кодами! И в обратную стророну такая-же
ерунда будет.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33354966
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanderKRВ файле dogovor поле In_n - это c(14).
В файле s_bank поле Inn - это c(12).
По этому полю я их соединяю.
Файл s_bank создан в VFP 6, а файл dogovor - в FoxPro 2.6.
Может в этом проблема?
Убедись, что в файле DBF созданном в FPD установлена кодовая страница. Это можно проверить функцией

Код: plaintext
?CPDBF()

Если получил значени 0, то необходимо установить кодовую страницу вручную. Если речь идет о версии FoxPro for DOS, то нужно устновить кодовую страницу 866. Если FoxPro for Windows, то нужна 1251. Сделать это можно так:

DO (Home()+'tools\cpzero\cpzero.prg') with "MyTable.dbf",866

Также должен существовать файл конфигурации CONFIG.FPW (это обычный текстовый файл) со строкой CODEPAGE=1251. Подробнее об этом файле и как его подключать читай здесь

Часть букв при вводе заменяются латинскими
...
Рейтинг: 0 / 0
Fox Pro 2.6 - получить третий файл
    #33356341
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все выяснилось (правда не в лучшую сторону).
Действительно, особенность базы - несколько кодов
у одного ИННа - отсюда дубли.
Спасибо всем.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Fox Pro 2.6 - получить третий файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]