Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Прямой, но кривой запрос (http://forums.kuban.ru/f1040/pryamoj_no_krivoj_zapros-7779697.html)

USSR 29.05.2016 07:35

Прямой, но кривой запрос
 
Что-то сломал голову с весьма простой задачей. Надо исправить кое-какие косяки в регистрах без перепроведения, но вот вышла непонятка с запросом. Несущественные детали опускаю. Есть простой запрос на чтение:
ТекстЗапроса = "
|SELECT
| $Рег.*,
| Наряды.$ОбщийРеквизит.ДокументОснование AS ДокументОснование
|FROM
| $Регистр." + ИмяРегистра + " AS Рег
|INNER JOIN
| $Документ.НарядНаОперацию AS Наряды ON ($Рег.Наряд = Наряды.IdDoc)
|WHERE
| ($Рег.План NOT IN (SELECT
| Jr.IdDoc
| FROM
| 1SJOURN AS Jr))
|";
Вот такой запрос на изменение записей тоже работает:
ТекстЗапроса = "
|UPDATE
| Рег
|SET
| $Рег.План = ""000""
|FROM
| $Регистр." + ИмяРегистра + " AS Рег
// |INNER JOIN
// | $Документ.НарядНаОперацию AS Наряды ON ($Рег.Наряд = Наряды.IdDoc)
|WHERE
| ($Рег.План NOT IN (SELECT
| Jr.IdDoc
| FROM
| 1SJOURN AS Jr))
|";
Пусть "000" не смущают, это просто для отладки, на самом деле замена должна быть реквизитом из "Наряды", для того то с ними и требуется соединение. Итак такой UPDATE (без внутреннего соединения) прекрасно работает. Но как только возвращаю внутреннее соединение, убрав комментарии с INNER JOIN так запрос не работает, думает, думает и выдавая сообщение, что темповый файл слишком большой. Но связь с Наряды один к одному, искомых (кривых) записей регистра тоже всего ничего, около сотни. В чем мой косяк ? База DBF, но это видно и по 1SJOURN

USSR 29.05.2016 07:36

а почему текст выводится неформатированным, как его прилично опубликовать ?)

USSR 29.05.2016 07:53

в запросе только не $Рег.*, а Рег.*, это я для простоты понимания требуемые поля заменил звездочкой, а про $ забыл )

USSR 29.05.2016 08:26

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


Текущее время: 20:43. Часовой пояс GMT +3.