Имя: Пароль:
1C
1C 7.7
v7: запрос к dbf
,
0 Junior1s
 
26.06.14
07:53
Привет всем,
картина такая. Есть две базы (1 и 2), по структуре идентичные. Работал вот такой запрос, из 1 базы к dbf 2 базы. Этим запросом из dbf я тащил даты продаж купонов и возврата из 2 базы в свою 1 базу.

СтрокаСоединение = "Provider=VFPOLEDB.1;Data Source="+СокрЛП(ПутьДоОргБД)+";Mode=ReadWrite;Collating Sequence=MACHINE";
    DB = СоздатьОбъект("OLEDBData");    
    Рез = DB.Соединение(СтрокаСоединение);    
    Запрос = DB.СоздатьКоманду();        
    Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
    Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
    
    ТекстЗапроса = "
    |SELECT
    |    Серия.code as Номер_Купона,
    |    $Серия.ДатаВыдачи as Дата_Продажи,
    |    $Серия.ДатаВозврата as Дата_Возврата
    |FROM
    |    $Справочник.Серия as Серия
    |WHERE                                                          
    |   (($Справочник.Серия.ДатаВыдачи >= :НачДата~~) and ($Справочник.Серия.ДатаВыдачи <= :КонДата~~))
    |ORDER BY
    |    Серия.code
    |";
        
    Запрос.УстановитьТекстовыйПараметр("НачДата", Дата1);
    Запрос.УстановитьТекстовыйПараметр("КонДата", Дата2);
    
    _тз = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Я изменил в 1 базе реквизит "ДатаВозврата", сделал его периодическим. Запрос поломался, так как пишет, что нет такого поля в табличке. Почитав в инете, я понял, что все пер. рекв. хранятся в табличке 1SCONST.DBF, но ведь во 2й базе этот реквизит не периодический, почему не работает запрос. И если я добавлю левое соединение к этой таблице, как этот запрос будет отрабатывать во 2й базе ?
1 Junior1s
 
26.06.14
09:56
апну чтоли :)
2 Junior1s
 
26.06.14
14:17
еще один ап.
3 acanta
 
26.06.14
14:19
В первой базе той скл запрос компилируется как к своей?
4 КонецЦикла
 
26.06.14
14:41
Тянешь из первой базы во вторую?
И в первой базе сделал реквизит периодическим?
Ну вроде все сходится, конечно поломался.
Перед юзанием прямого доступа надо хотя бы приблизительно понимать что где хранится и как менять структуру.
5 Junior1s
 
26.06.14
14:44
не из 1й во 2ю, а из 2й в 1ю.
6 acanta
 
26.06.14
14:46
Неважно туда или обратно, запрос лезет в чей ДДшник?
7 Ёпрст
 
26.06.14
14:48
вообще не так надо делать было..
Можно и в 1 запросе обращаться к разным базам данных, и что самое главное, заставить работать метапарсер.
8 Ёпрст
 
26.06.14
14:49
т.е, строку подключения, можно было тупо травить на КаталогИБ, а не на каталог в стороннюю бд.
9 КонецЦикла
 
26.06.14
14:50
Вот может пригодиться для синхронизированного переноса

http://1c911.by/stati_1s/statya-zaprosy-v-1s-k-dvum-bazam-odnovremenno-dbf-ole-db.htm
10 Junior1s
 
26.06.14
15:04
спасибо.
11 pechevas
 
26.06.14
15:17
Попробуйте так:
ТекстЗапроса = "
    |SELECT
    |    Серия.code as Номер_Купона,
    |    $Серия.ДатаВыдачи as Дата_Продажи,
    |    $Серия.ДатаВозврата as Дата_Возврата
    |FROM
    |    $Справочник.Серия as Серия
    |LEFT OUTER JOIN (
    |  SELECT
    |     Период.objid as objid,
    |     Период.value as Цена
    |  FROM 1sconst as Период
    |  WHERE
    |     Период.date IN
    |     (SELECT
    |           MAX(Константа.date)
    |     FROM 1sconst as Константа
    |     WHERE
    |           (Константа.date <= :КонДата~~)
    |           AND (Константа.id = $ИсторияРеквизита.Серия.ДатаВозврата)
    |           AND (Константа.objid = Период.objid)
    |     )
    |     AND Период.id = $ИсторияРеквизита.Серия.ДатаВозврата
    |  ) as ДатаВозврата ON ДатаВозврата.objid = Серия.id
    |WHERE                                                          
    |   (($Справочник.Серия.ДатаВыдачи >= :НачДата~~) and ($Справочник.Серия.ДатаВыдачи <= :КонДата~~))
    |ORDER BY
    |    Серия.code
    |";
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.