Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Пустой результат :( (число прочтений - 7486 )
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Пустой результат :(
12. Июля 2007 :: 16:09
Печать  
Люди добрые, подскажите, почему у меня в результате - пустая таблица?  Плачущий

     ТЗ = Запрос.ВыполнитьИнструкцию("
     |SELECT
     |      Рег.Документ [Счет $Документ],
     |      Рег.Менеджер [Сотрудник $Справочник.Сотрудники],
     |      Рег.Товар [Товар $Справочник],
     |      Рег.Клиент [Клиент $Справочник.Контрагенты],
     |      Рег.КвоОстаток Кво,
     |      Рег.КвоПришлоОстаток КвоПришло,
     |      Рег.ДатаОплаты ДатаОплаты,
     |      Рег.Идентификатор Идентификатор
     |FROM
     |      $РегистрОстатки.Резерв(
     |      :ДатаКонца~,
     |      INNER JOIN $Справочник.Запчасти СпрЗапчасти ON СпрЗапчасти.ID = Товар
     |      1 = 1,
     |      (Документ, Менеджер, Товар, Клиент, Идентификатор, ДатаОплаты),
     |      (Кво, КвоПришло)
     |      ) Рег
     |");
     ТЗ.ВыбратьСтроку();

Причем, если убрать INNER JOIN, то данные выбирает, ТЗ не пустая. Помогите пожалуйста!
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Пустой результат :(
Ответ #1 - 12. Июля 2007 :: 18:01
Печать  
Начнем с того что нехватает запятой, разделяющей параметры связей и условий в ВТ.

Вероятнее всего тип измерения Товар - Справочник (неопределенного вида), в этом случае в измерении хранится еще вид справочника.

PS: а ниЧО такой регистр.. Улыбка видать тяжелая рука у разработчика..
  
Наверх
ICQ  
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #2 - 12. Июля 2007 :: 18:08
Печать  
Запятую я просто потерял при копировании Улыбка
Что касается справочника, верно, он неопределённого вида, но в измерении регистра вид справочника не хранится - я в этом запросе выбрал все измерения. Так как же всё-таки мне идентифицировать вид товара?  Смущённый
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Пустой результат :(
Ответ #3 - 12. Июля 2007 :: 18:20
Печать  
Дело в том, что когда тип измерения Справочник, тип поля в таблицах регистра будет char(13). Что есть: char(4) (вид справочника) + char(9) (идентификатор элемента справочника), т.о. чтобы исполнить такую связь надо писать так:
INNER JOIN $Справочник.Запчасти СпрЗапчасти ON $ВидСправочника36.Запчасти + СпрЗапчасти.ID = Товар
  
Наверх
ICQ  
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #4 - 13. Июля 2007 :: 06:40
Печать  
Спасибо оргомное, DmitrO! Заработало!
  
Наверх
ICQ  
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #5 - 13. Июля 2007 :: 07:43
Печать  
Теперь встал другой вопрос. Надо сделать, чтоб в результирующую таблицу попадали элементы не только справочника Запчасти, но и справочника Автомобили тоже. Я, конечно, интуитивно догадываюсь, что надо сделать полное объединение таблиц справочников, а потом внутреннее объединение с содержимым регистра, но не знаю как реализовать. Подскажите пожалуйста!
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Пустой результат :(
Ответ #6 - 13. Июля 2007 :: 08:19
Печать  
Цитата:
чтоб в результирующую таблицу попадали элементы не только справочника Запчасти, но и справочника Автомобили тоже

ну, вообще говоря, для решения этой задачи никаких соединений не требуется:
     |SELECT
     |      Рег.Документ [Счет $Документ],
     |      Рег.Менеджер [Сотрудник $Справочник.Сотрудники],
     |      Рег.Товар [Товар $Справочник],
     |      Рег.Клиент [Клиент $Справочник.Контрагенты],
     |      Рег.КвоОстаток Кво,
     |      Рег.КвоПришлоОстаток КвоПришло,
     |      Рег.ДатаОплаты ДатаОплаты,
     |      Рег.Идентификатор Идентификатор
     |FROM
     |      $РегистрОстатки.Резерв(
     |      :ДатаКонца~,
     |      ,
     |      LEFT(Товар, 4) in ($ВидСправочника36.Запчасти, $ВидСправочника36.Автомобили),
     |      (Документ, Менеджер, Товар, Клиент, Идентификатор, ДатаОплаты),
     |      (Кво, КвоПришло)
     |      ) Рег
так будет быстрее работать и потребуется меньше ресурсов сервера
  
Наверх
ICQ  
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #7 - 13. Июля 2007 :: 08:33
Печать  
О. Круто, спасибо!
  
Наверх
ICQ  
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #8 - 13. Июля 2007 :: 11:36
Печать  
Продолжение банкета. Допустим, надо установить фильтр по реквизиту документа. К примеру, оторать гарантийные счета. Пишу так:
     ТЗ = Запрос.ВыполнитьИнструкцию("
     |SELECT
     |      Рег.Документ [Счет $Документ],
     |      Жур.IDDocDef Счет_вид,
     |      Рег.Менеджер [Сотрудник $Справочник.Сотрудники],
     |      Рег.Товар [Товар $Справочник],
     |      Рег.Клиент [Клиент $Справочник.Контрагенты],
     |      Рег.КвоОстаток Кво,
     |      Рег.КвоПришлоОстаток КвоПришло,
     |      Рег.ДатаОплаты ДатаОплаты,
     |      Рег.Идентификатор Идентификатор
     |FROM
     |      $РегистрОстатки.Резерв(
     |      :ДатаКонца~,
     |      ,
     |       AND LEFT(Товар, 4) IN ($ВидСправочника36.Запчасти,$ВидСправочника36.Авто),
     |      (Документ, Менеджер, Товар, Клиент, Идентификатор, ДатаОплаты),
     |      (Кво, КвоПришло)
     |      ) Рег
     |LEFT JOIN
     |      _1SJOURN Жур ON Жур.IDDoc = Рег.Документ
     |WHERE
     |Жур.РезервПоГарантии = 1
     |");
     ТЗ.ВыбратьСтроку();

ТЗ = Запрос.ВыполнитьИнструкцию("
{D:\1CBASES\1CV7.7\РЕЗЕРВИРОВАНИЕТОВАРОВ.ERT(272)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'РезервПоГарантии'.
Подскажите пожалуйста, почему?
  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Пустой результат :(
Ответ #9 - 13. Июля 2007 :: 14:11
Печать  
не Жур.РезервПоГарантии = 1
а $ОбщийРеквизит.РезервПоГарантии = 1
это ж общий реквизит документов?
  
Наверх
 
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #10 - 13. Июля 2007 :: 14:21
Печать  
Нет, не работает.  Плачущий
Кроме того, если вместо LEFT JOIN написать INNER JOIN, то выборка будет пуста, Следовательно, на документах спозиционироваться не получается.
  
Наверх
ICQ  
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #11 - 14. Июля 2007 :: 09:04
Печать  
Дошел до такого:

ТЗ = Запрос.ВыполнитьИнструкцию("
     |SELECT
     |      Рег.Документ [Счет $Документ],       
     |      Рег.Менеджер as [Сотрудник $Справочник.Сотрудники],
     |      Рег.Товар as [Товар $Справочник],
     |      Рег.Клиент as [Клиент $Справочник.Контрагенты],
     |      Рег.КвоОстаток as Кво,
     |      Рег.КвоПришлоОстаток as КвоПришло,
     |      Рег.ДатаОплаты as ДатаОплаты,
     |      Рег.Идентификатор as Идентификатор
     |FROM
     |      $РегистрОстатки.Резерв(
     |      :ДатаКонца~,
     |      INNER JOIN _1SJOURN Жур ON Жур.IDDoc = RIGHT(Документ, 9),
     |      1 = 1   
     |      AND (Жур.IDDOCDEF = $ВидДокумента.Счет) OR (Жур.IDDOCDEF = $ВидДокумента.Заявка)
     |       AND Жур.РезервПоГарантии = 1,
     |      (Документ, Менеджер, Товар, Клиент, Идентификатор, ДатаОплаты),
     |      (Кво, КвоПришло)
     |      ) as Рег
     |");
     ТЗ.ВыбратьСтроку();   

Ну никак не находит это поле в таблице:
ТЗ = Запрос.ВыполнитьИнструкцию("
{D:\1CBASES\1CV7.7\РЕЗЕРВИРОВАНИЕТОВАРОВ.ERT(272)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'РезервПоГарантии'.

И в том и в другом документе такой реквизит присутствует... Подскажите пожалуйста как тут выкрутиться, всё утро мучаюсь... Спасибо!
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Пустой результат :(
Ответ #12 - 14. Июля 2007 :: 18:22
Печать  
Для такого финта "РезервПоГарантии" должен быть общим реквизитом с отбором
Может пора таки заглянуть что же содержат таблицы?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
dunkpi
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 03. Июля 2007
Пол: Мужской
Re: Пустой результат :(
Ответ #13 - 14. Июля 2007 :: 18:25
Печать  
Ок, тогда, возможно, есть иной финт для выполнения аналогиных действий?
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Пустой результат :(
Ответ #14 - 14. Июля 2007 :: 18:30
Печать  
Если уж так сложилось что нет реквизита в регистре (или есть?), то надо дописывать соединения с шапкой документов и там условие ставить
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать