Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как объединить регист с документом? (число прочтений - 5032 )
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Как объединить регист с документом?
24. Октября 2011 :: 13:43
Печать  
 Есть у меня один отчет  в 7.7, который честно говоря, работает  через жж... Возможности решить проблему штатными средствами нет, знающие люди как-то посоветовали сделать средствами 1с++. Но я нечего не понимаю в ++, так вот из-за этого забросила в "ящик" эту проблему на долго, но всетаки проблема сама собой не решится, потому просмотрела FAQ, решила буду пробовать. Конструктором сформировала запрос
Код
Выбрать все
RS = СоздатьОбъект("ODBCRecordset");
	//Создание объекта типа Запрос
	ТекстЗапроса = "
	|SELECT ПартииОстатки.МестоХранения [МестоХранения $Справочник]
	|, ПартииОстатки.ТМЦ [ТМЦ $Справочник.ТМЦ]
	|, ПартииОстатки.Поставка [Поставка $Документ]
	|, ПартииОстатки.ОстатокТовараОстаток ОстатокТовараОстаток
	|, ПартииОстатки.СтоимостьОстаток СтоимостьОстаток
	|FROM $РегистрОстатки.Партии(:КонПериода,
	|	INNER JOIN $ДокументСтроки.ПриходныйОрдер AS ПриходныйОрдерСтроки ON Поставка = ПриходныйОрдерСтроки.IDDOC,
	|	(Поставка = ПриходныйОрдерСтроки.IDDOC)
	|	AND (ТМЦ = $ПриходныйОрдерСтроки.ТМЦ),
	|	(МестоХранения, ТМЦ, Поставка),
	|	(ОстатокТовара, Стоимость)) AS ПартииОстатки
	|GROUP BY ПартииОстатки.МестоХранения
	|, ПартииОстатки.ТМЦ
	|, ПартииОстатки.Поставка
	|ORDER BY ПартииОстатки.МестоХранения
	|, ПартииОстатки.ТМЦ
	|, ПартииОстатки.Поставка
	|";
	RS.УстановитьТекстовыйПараметр("КонПериода", КонПериода);
	RS.Отладка(1);
	ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗНаФорме.Загрузить(ТЗ); 


Не работает запрос - ошибка Column 'ПартииОстатки.ОстатокТовараОстаток' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
  В запрос нужно вытянуть МВЗ из приходного ордера, а также нужно фильтровать даные по месту хранения или МВЗ. Помогите пожалуйста Круглые глаза
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #1 - 24. Октября 2011 :: 13:55
Печать  
elle писал(а) 24. Октября 2011 :: 13:43:
 Конструктором сформировала запрос ... Не работает

Если бы конструктором - этой ошибки не было бы. А так:
  • GROUP BY здесь лишняя - ВТ группирует результат;
  • ORDER BY не имеет смысла - сортировка по внутренним идентификаторам;
  • :КонПериода ~ - на конец дня;
  • AS ПриходныйОрдерСтроки With (NOLOCK) ON - разрешить грязное чтение.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Re: Как объединить регист с документом?
Ответ #2 - 24. Октября 2011 :: 14:06
Печать  
Исправила и  Подмигивание о чудо!!! ошибок не было, но запрос так и ничего не выгрузил (в регистре партии точно есть).
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #3 - 24. Октября 2011 :: 14:13
Печать  
Значит, в таблице ПриходныйОрдерСтроки нет строк, удовлетворяющих условию соединения.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #4 - 24. Октября 2011 :: 14:18
Печать  
elle писал(а) 24. Октября 2011 :: 14:06:
Исправила и  Подмигивание о чудо!!! ошибок не было, но запрос так и ничего не выгрузил (в регистре партии точно есть).

Посмею предположить что измерение Поставка имеет тип Документ
тогда необходимо написать вот так:
Код
Выбрать все
INNER JOIN $ДокументСтроки.ПриходныйОрдер AS ПриходныйОрдерСтроки ON RIGHT(Поставка,9) = ПриходныйОрдерСтроки.IDDOC,(RIGHT(Поставка,9) = ПриходныйОрдерСтроки.IDDOC) 

  
Наверх
IP записан
 
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Re: Как объединить регист с документом?
Ответ #5 - 24. Октября 2011 :: 14:25
Печать  
Нет Улыбка, значит запрос неправильно сделан, (я же проверяю даные через другой отчет и знаю что там должно попасть). Поставка - тип документ (в регист кроме приходного ордера попадают и другие документы), но мне нужно к осткам партий привязать из приходного ордера справочник МВЗ.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #6 - 24. Октября 2011 :: 14:30
Печать  
elle писал(а) 24. Октября 2011 :: 14:25:
Нет Улыбка, значит запрос неправильно сделан, (я же проверяю даные через другой отчет и знаю что там должно попасть). Поставка - тип документ (в регист кроме приходного ордера попадают и другие документы), но мне нужно к осткам партий привязать из приходного ордера справочник МВЗ.

Поток мыслей понят не был.
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #7 - 24. Октября 2011 :: 14:32
Печать  
elle писал(а) 24. Октября 2011 :: 14:25:
Нет Улыбка, значит запрос неправильно сделан, (я же проверяю даные через другой отчет и знаю что там должно попасть). Поставка - тип документ (в регист кроме приходного ордера попадают и другие документы), но мне нужно к осткам партий привязать из приходного ордера справочник МВЗ.

Сделай его в последней версии конструктора (оно умеет согласовывать типы) и всё получится. Там нет ничего сложного.  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Re: Как объединить регист с документом?
Ответ #8 - 24. Октября 2011 :: 14:34
Печать  
leshik писал(а) 24. Октября 2011 :: 14:18:
elle писал(а) 24. Октября 2011 :: 14:06:
Исправила и  Подмигивание о чудо!!! ошибок не было, но запрос так и ничего не выгрузил (в регистре партии точно есть).

Посмею предположить что измерение Поставка имеет тип Документ
тогда необходимо написать вот так:
Код
Выбрать все
INNER JOIN $ДокументСтроки.ПриходныйОрдер AS ПриходныйОрдерСтроки ON RIGHT(Поставка,9) = ПриходныйОрдерСтроки.IDDOC,(RIGHT(Поставка,9) = ПриходныйОрдерСтроки.IDDOC) 


Спасибо, выгружает, что означает RIGHT(Поставка,9)?
Как вывести МВЗ с приходного ордера в тз? Как поставить фильтр по МВЗ?
  
Наверх
 
IP записан
 
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Re: Как объединить регист с документом?
Ответ #9 - 24. Октября 2011 :: 14:38
Печать  
berezdetsky писал(а) 24. Октября 2011 :: 14:32:
elle писал(а) 24. Октября 2011 :: 14:25:
Нет Улыбка, значит запрос неправильно сделан, (я же проверяю даные через другой отчет и знаю что там должно попасть). Поставка - тип документ (в регист кроме приходного ордера попадают и другие документы), но мне нужно к осткам партий привязать из приходного ордера справочник МВЗ.

Сделай его в последней версии конструктора (оно умеет согласовывать типы) и всё получится. Там нет ничего сложного.  Улыбка

Пожалуйста ссылку а последню версию тыкни Улыбка  может есть FAQ по конструктору, потому что пользуюсь им более на ослеп, чем осознано Смущённый
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #10 - 24. Октября 2011 :: 14:41
Печать  
elle писал(а) 24. Октября 2011 :: 14:38:
Пожалуйста ссылку а последню версию тыкни Улыбка  может есть FAQ по конструктору, потому что пользуюсь им более на ослеп, чем осознано Смущённый

http://www.1cpp.ru/forum/YaBB.pl?num=1148127139. FAQ нету - интуитивно-"понятный" интерфейс..   Смех
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #11 - 25. Октября 2011 :: 09:38
Печать  
elle писал(а) 24. Октября 2011 :: 14:34:
Спасибо, выгружает, что означает RIGHT(Поставка,9)?

http://www.1csql.ru/materials/articles/develop.html~59d890ad-7ddb-f487-3aae-bcf7...
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Re: Как объединить регист с документом?
Ответ #12 - 25. Октября 2011 :: 11:42
Печать  
berezdetsky писал(а) 24. Октября 2011 :: 14:41:
elle писал(а) 24. Октября 2011 :: 14:38:
Пожалуйста ссылку а последню версию тыкни Улыбка  может есть FAQ по конструктору, потому что пользуюсь им более на ослеп, чем осознано Смущённый

http://www.1cpp.ru/forum/YaBB.pl?num=1148127139. FAQ нету - интуитивно-"понятный" интерфейс..   Смех

Ну не всем интуитивно-"понятный" интерфейс Класс, что такое грязное чтение? (а что есть чистое чтение? Смех), где поставить условие фильтра? наверно у меня нету интуиции Смущённый Почему нету смайла "Я блондико" (лирическое отступление от теми)
Код
Выбрать все
|SELECT ПартииОстатки.МестоХранения [МестоХранения $Справочник]
	|, ПартииОстатки.ТМЦ [ТМЦ $Справочник.ТМЦ]
	|, ПартииОстатки.Поставка [Поставка $Документ]
	|, ПартииОстатки.ОстатокТовараОстаток ОстатокТовараОстаток
	|, ПартииОстатки.СтоимостьОстаток СтоимостьОстаток
	|, ПриходныйОрдерСтроки.МВЗ [МВЗ $Справочник.МВЗ]
	|FROM $РегистрОстатки.Партии(:КонПериода~,
	|INNER JOIN $ДокументСтроки.ПриходныйОрдер AS ПриходныйОрдерСтроки ON RIGHT(Поставка,9) = ПриходныйОрдерСтроки.IDDOC,
	|(RIGHT(Поставка,9) = ПриходныйОрдерСтроки.IDDOC)
	|АND (ТМЦ = $ПриходныйОрдерСтроки.ТМЦ)
	|AND (МестоХранения IN (SELECT val FROM #Sklad)),
	|	(МестоХранения, ТМЦ, Поставка, МВЗ),
	|	(ОстатокТовара, Стоимость)) AS ПартииОстатки
	|"; 


Ошибка - meta name parser error недопустимое значение параметра  "$РегистрОстатки.Партии" (4) . Я так понимаю документ и регистр так просто не соединить.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как объединить регист с документом?
Ответ #13 - 25. Октября 2011 :: 12:04
Печать  
elle писал(а) 25. Октября 2011 :: 11:42:
Ну не всем интуитивно-"понятный" интерфейс Класс

Потому и в кавычках.  Улыбка

elle писал(а) 25. Октября 2011 :: 11:42:
что такое грязное чтение? (а что есть чистое чтение?

http://msdn.microsoft.com/ru-ru/library/ms190805.aspx

elle писал(а) 25. Октября 2011 :: 11:42:
где поставить условие фильтра?

На вкладке "Условие".

elle писал(а) 25. Октября 2011 :: 11:42:
Почему нету смайла "Я блондико"



elle писал(а) 25. Октября 2011 :: 11:42:
Ошибка - meta name parser error недопустимое значение параметра  "$РегистрОстатки.Партии" (4) . Я так понимаю документ и регистр так просто не соединить.

Просто, но не так. Нужно соединение ВТ с таблицей документа (снаружи ВТ). Конструктор построит его, если вывести МВЗ в список выбора.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
elle
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 15
Зарегистрирован: 21. Октября 2011
Re: Как объединить регист с документом?
Ответ #14 - 25. Октября 2011 :: 14:09
Печать  
Мой конструктор не коректно работает или мои ручки корявые Плачущий,  я так понимаю нужно делать еще Left join, но не понятно по чем связать, что опять регистр с приходным ордером? Смущённый
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать