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



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Проставить реквизит у подчинённых документов
18. Августа 2006 :: 07:00
Печать  
В базе есть документ - "приемЗакзаов", у него есть реквизит/флаг - "Готовность", необходимо выбрать все заказы у которых готовность=0 и подчинённые документы и проставить у них реквизит общий с отбором свернут = 1. На данный момент выбрал все приёмы заказов:
[code]|SELECT

|  Жур.IDDoc as [Док $Документ],

|  Жур.IDDocDef as Док_вид,

|  CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,

|  $Док.Готовность as Готовность
//|  COUNT(*)

|FROM

|  _1SJourn Жур

|INNER JOIN


|  $Документ.ПриемЗаказов as Док ON Док.IDDoc = Жур.IDDoc

|WHERE

|  $Док.Готовность = 0 AND

|  Жур.IDDocDef = $ВидДокумента.ПриемЗаказов AND

|  Жур.Closed & 1 = 1";
|  ORDER BY ДатаДок";[/code]
Теперь ломаю голову как дальше..... Буду благодарен за помощь.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #1 - 18. Августа 2006 :: 07:20
Печать  
Пример выборки подчинённых документов есть в FAQ.
  

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



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #2 - 18. Августа 2006 :: 07:22
Печать  
berezdetsky - да знаю - вот сижу ковыряюсь - пока не выходит каменная чаша:
Код
Выбрать все
|SELECT

|  ЖурП.IDDoc [Док $Документ],

|  ЖурП.IDDocDef Док_вид

|FROM

|  _1SJourn ЖурП

|INNER JOIN

|  _1SCRDOC Отбор ON Отбор.ChildID = ЖурП.IDDoc AND

|			  Отбор. MDID = 0 AND

|			  Отбор.ParentVal in (SELECT

|											  Жур.IDDoc

|										FROM

|											_1SJourn Жур

|										INNER JOIN

|											  $Документ.ПриемЗаказов as Док ON Док.IDDoc = Жур.IDDoc

|										WHERE

|											  $Док.Готовность = 0 AND

|											  Жур.IDDocDef = $ВидДокумента.ПриемЗаказов AND

|											  Жур.Closed & 1 = 1)"; 

  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #3 - 18. Августа 2006 :: 07:39
Печать  
Код
Выбрать все
SELECT ЖурП.IDDOC [Док $Документ]
	, ЖурП.IDDOCDEF Док_вид
FROM _1SJOURN AS Жур With (NOLOCK)
	INNER JOIN $Документ.ПриемЗаказов AS Док With (NOLOCK) ON Жур.IDDOC = Док.IDDOC
	INNER JOIN _1SCRDOC AS Отбор With (NOLOCK) ON Отбор.PARENTVAL = 'O1 ' + $ВидДокумента36.ПриемЗаказов + Жур.IDDOC
	INNER JOIN _1SJOURN AS ЖурП With (NOLOCK) ON Отбор.CHILDID = ЖурП.IDDOC
WHERE ($Док.Готовность = 0)
	AND ((Жур.CLOSED & 1) = 1)
	AND (Отбор.MDID = 0) 



Изменено:
Сорри,
Отбор.PARENTVAL = 'O1 ' + $ВидДокумента36.ПриемЗаказов + Жур.IDDOC
  

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



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #4 - 18. Августа 2006 :: 12:07
Печать  
Чо-то я не пойму - нужно разжёвывние ;О) (не сработало - выдало пустоту):
Код
Выбрать все
SELECT ЖурП.IDDOC [Док $Документ]
	, ЖурП.IDDOCDEF Док_вид
FROM _1SJOURN AS Жур With (NOLOCK)
 

- ну тут понятно - выбираем из таблицы общего журнала id документа и его вид
Код
Выбрать все
	INNER JOIN $Документ.ПриемЗаказов AS Док With (NOLOCK) ON Жур.IDDOC = Док.IDDOC
 

  - тут объединяем таблицой "Приема заказов"
Код
Выбрать все
	INNER JOIN _1SCRDOC AS Отбор With (NOLOCK) ON Отбор.PARENTVAL = 'O1 ' + $ВидДокумента36.ПриемЗаказов + Жур.IDDOC
 

- объеденение с таблице связей по  строке 01+внутренний идентификатор +id - не понятный момент - что же хранит поле PARENTVAL?
Код
Выбрать все
	INNER JOIN _1SJOURN AS ЖурП With (NOLOCK) ON Отбор.CHILDID = ЖурП.IDDOC
 

- объединение - не пойму для чего оно и что делает....
Код
Выбрать все
WHERE ($Док.Готовность = 0)
	AND ((Жур.CLOSED & 1) = 1)
	AND (Отбор.MDID = 0)
 

- ну и тут условия - хотя готовность каким образом здесь работает?
Короче как говорится - ниасилил Печаль((((
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #5 - 18. Августа 2006 :: 12:11
Печать  
berezdetsky писал(а) 18. Августа 2006 :: 07:39:
Изменено:
Сорри,
Отбор.PARENTVAL = 'O1 ' + $ВидДокумента36.ПриемЗаказов + Жур.IDDOC

пробел всеже не нужен: 'O1'
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #6 - 18. Августа 2006 :: 12:14
Печать  
green писал(а) 18. Августа 2006 :: 12:07:
01+внутренний идентификатор +id - не понятный момент - что же хранит поле PARENTVAL?

не НОЛЬ ОДИН
а лат.буква'O' ОДИН
  

1&&2&&3
Наверх
 
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #7 - 18. Августа 2006 :: 12:17
Печать  
trad - без пробела сработало - но "сам прием заказов в выборку не включился" и понимать от этого я больше не стал как это работает - может поможешь? - дашь комментарии
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #8 - 18. Августа 2006 :: 12:26
Печать  
trad писал(а) 18. Августа 2006 :: 12:11:
пробел всеже не нужен: 'O1'

Смущённый
Цитата:
"сам прием заказов в выборку не включился"
Их выборка есть у тебя же в начале топика. Я полагал, что она уже не нужна. Объедини запросы - UNION ALL.

P.S. PARENTVAL хранится в формате неопределённого значения.
  

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



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #9 - 18. Августа 2006 :: 12:29
Печать  
berezdetsky - хорошо объеденю, но объясните как это работает - а то щас плакать буду :О)
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #10 - 18. Августа 2006 :: 12:35
Печать  
green писал(а) 18. Августа 2006 :: 12:29:
berezdetsky - хорошо объеденю, но объясните как это работает - а то щас плакать буду :О)

Хранение объектов конфигурации
  

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



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #11 - 18. Августа 2006 :: 12:39
Печать  
berezdetsky за ссылку спасибо - пригодится
а как насчёт джойнов - как там всё это работает Плачущий?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #12 - 18. Августа 2006 :: 12:48
Печать  
Первый _1sjourn и документ - для отбора приёмов заказов.
_1scrdoc - для отбора подчинённых документов.
Последний _1sjourn - для получения вида (iddocdef) подчинённого документа.
  

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



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #13 - 18. Августа 2006 :: 12:51
Печать  
berezdetsky - ок. спасибо за всё - буду много думать
  
Наверх
 
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #14 - 18. Августа 2006 :: 13:38
Печать  
в итоге вот что сделал - прошу проверить, т.к. обработка достаточно критичная:
Код
Выбрать все
ТекстЗапроса = "
|UPDATE _1SJOURN
|SET _1SJOURN.$ОбщийРеквизит.Свёрнут = 1
|WHERE _1SJOURN.IDDOC IN(
|SELECT ЖурП.IDDOC [Док $Документ]
//|	ЖурП.IDDOCDEF Док_вид
|FROM _1SJOURN AS Жур With (NOLOCK)
|	INNER JOIN $Документ.ПриемЗаказов AS Док With (NOLOCK) ON Жур.IDDOC = Док.IDDOC
|	INNER JOIN _1SCRDOC AS Отбор With (NOLOCK) ON Отбор.PARENTVAL = 'O1' + $ВидДокумента36.ПриемЗаказов + Жур.IDDOC
|	INNER JOIN _1SJOURN AS ЖурП With (NOLOCK) ON Отбор.CHILDID = ЖурП.IDDOC
|WHERE ($Док.Готовность = 0)
|AND ((Жур.CLOSED & 1) = 1)
|AND (Отбор.MDID = 0)
|UNION ALL
|SELECT
|  ЖурПРЗ.IDDoc as [Док $Документ]
//|  ЖурПРЗ.IDDocDef as Док_вид
|FROM
|  _1SJourn ЖурПРЗ
|INNER JOIN
|  $Документ.ПриемЗаказов as ДокПРЗ ON ДокПРЗ.IDDoc = ЖурПРЗ.IDDoc
|WHERE
|  $ДокПРЗ.Готовность = 0 AND
|  ЖурПРЗ.IDDocDef = $ВидДокумента.ПриемЗаказов AND
|  ЖурПРЗ.Closed & 1 = 1)"; 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать