|
v7: Помогите построить прямой UPDATE запрос к регистру | ☑ | ||
---|---|---|---|---|
0
Pr0gLamer
22.03.12
✎
14:50
|
Есть регистр партии товаров.В него добавил реквизит "Автор".Нужно этот реквизит обновить записями из этого же регистра.Раньше автора получали так:
Автор = Регистр.ПартииТоваров.ТекущийДокумент.РН.Автор; UPDATE ПартииТоваров SET $ПартииТоваров.Автор[Автор $Справочник.Пользователи] = ... Вместо троеточия хотелось бы записать это: Регистр.ПартииТоваров.ТекущийДокумент.РН.Автор; Как это сделать - мне непонятно. Помогите пожалуйста дописать этот запрос либо составить новый |
|||
1
Mikeware
22.03.12
✎
14:52
|
Напишите за меня?
|
|||
2
vinogradъ
22.03.12
✎
14:53
|
(0) типизация точно не нужна
|
|||
3
Pr0gLamer
22.03.12
✎
14:53
|
не пойму как это представить "Регистр.ПартииТоваров.ТекущийДокумент.РН.Автор"
конструктор такого не рисует |
|||
4
vinogradъ
22.03.12
✎
14:55
|
соединение с _1sjourn?
|
|||
5
Ёпрст
22.03.12
✎
14:57
|
(0) с чего вдруг уверенность, что этот регистр заполнен записями, созданными именно РН ?
|
|||
6
Ёпрст
22.03.12
✎
14:58
|
ну и вот это:
UPDATE ПартииТоваров SET $ПартииТоваров.Автор[Автор $Справочник.Пользователи] точно в топку |
|||
7
Pr0gLamer
22.03.12
✎
14:58
|
(5) там много документов,мне бы понять как делать для одного,потом сделаю для всех
|
|||
8
Кириллка
22.03.12
✎
14:58
|
стрЗапрос = "
|UPDATE РегПартии SET | $РегПартии.Автор = Jrn.$ОбщийРеквизит.Автор |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc | AND Jrn.iddocdef = $ВидДокумента.РН |WHERE | $РегПартии.Автор != Jrn.$ОбщийРеквизит.Автор"; Но это если у рбщего реквизита Автор включен отбор. Если не включен - мне лень писать :) |
|||
9
Ёпрст
22.03.12
✎
14:59
|
Автор - у тебя общий реквизит документа ?
Если да, то галка отбор на нём включена ? |
|||
10
Pr0gLamer
22.03.12
✎
14:59
|
(9) Да,да
|
|||
11
Pr0gLamer
22.03.12
✎
15:01
|
(8) Спасибо
|
|||
12
Ёпрст
22.03.12
✎
15:01
|
(10) тогда выкинь из (8) вот это
| AND Jrn.iddocdef = $ВидДокумента.РН и усё.. |
|||
13
Pr0gLamer
22.03.12
✎
15:01
|
Спасибо ВСЕМ!
|
|||
14
Кириллка
22.03.12
✎
15:03
|
(12)ну хз, у человека явно сказано: Автор = Регистр.ПартииТоваров.ТекущийДокумент.!!!!!РН!!!!!.Автор
|
|||
15
Ёпрст
22.03.12
✎
15:04
|
(14) ;)
|
|||
16
Pr0gLamer
22.03.12
✎
15:06
|
Если интересно (14),то это в продолжении предыдущей темы
Неправильно объединяет поля в запросе. на мысль о прямом запросе в которой (15) и натолкнул =) |
|||
17
Кириллка
22.03.12
✎
15:08
|
(16)не, у меня сегодня лимит по добрым делам исчерпан :)
|
|||
18
Mikeware
22.03.12
✎
15:08
|
(17) а авансом не канает? ;-)
|
|||
19
Кириллка
22.03.12
✎
15:10
|
(18)нее, Шемякин вчера авансы на год вперед выбрал :)
|
|||
20
Pr0gLamer
22.03.12
✎
15:31
|
Автор = Регистр.ПартииТоваров.ТекущийДокумент.Скидка.ДокументОснование.Автор;
стрЗапрос = " |UPDATE РегПартии SET | $РегПартии.Автор = Jrn.$ВидДокумента.Скидка.ДокументОснование.Автор; |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc | AND Jrn.iddocdef = $ВидДокумента.Скидка |WHERE | $РегПартии.Автор != Jrn.$ВидДокумента.Скидка.ДокументОснование.Автор"; Скажите пожалуйста,я правильно преобразовал? Понимаю, что наглость,но всё-же. |
|||
21
Ёпрст
22.03.12
✎
15:32
|
(20) блин, смотри (12)
будет для всех видов документов сразу. Выполнишь 1 раз и всё. |
|||
22
Ёпрст
22.03.12
✎
15:33
|
и вот это:
$РегПартии.Автор = Jrn.$ВидДокумента.Скидка.ДокументОснование.Автор; как бэ помягче сказать - бред сумашедшего :) |
|||
23
Pr0gLamer
22.03.12
✎
15:34
|
(21)в том то и дело,что нужно для всех докумнетов так,а для скидки по-другому
|
|||
24
МихаилМ
22.03.12
✎
15:37
|
ну и храните автора в документе
зачем же в расчетном объекте. никчемная денормализация. |
|||
25
Ёпрст
22.03.12
✎
15:40
|
(23) воткни
в (8) | AND Jrn.iddocdef <> $ВидДокумента.Скидка будет для всех, окромя скидки |
|||
26
acsent
22.03.12
✎
15:41
|
(22) а в 8 можно
|
|||
27
Pr0gLamer
22.03.12
✎
15:43
|
(25) да,это понятно,но нужно записать в регистр авторов документов,а вместо автора скидки - автора основания для скидки
|
|||
28
Ёпрст
22.03.12
✎
15:43
|
(26) че можно ?
|
|||
29
acsent
22.03.12
✎
15:44
|
(28) не поверишь - все. и даже минет делает ))
|
|||
30
Ёпрст
22.03.12
✎
15:44
|
(27) какие виды документов могут быть основанием для товей скидки ?
|
|||
31
Ёпрст
22.03.12
✎
15:45
|
(29) а ёпта, ты про снеговика шо ли ?
це понятно |
|||
32
Pr0gLamer
22.03.12
✎
15:45
|
(30) пока только РН,но на данный момент этого будет достаточно
|
|||
33
Ёпрст
22.03.12
✎
15:51
|
(32) тип ДокОснование - <Документ> без вида ?
|
|||
34
Pr0gLamer
22.03.12
✎
15:52
|
ДокОснование - РН
|
|||
35
Pr0gLamer
22.03.12
✎
15:53
|
стрЗапрос = "
|UPDATE РегПартии SET | $РегПартии.Автор = Jrn.$ОбщийРеквизит.Автор; |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc | AND Jrn.iddocdef = $ВидДокумента.РН | AND Jrn.$ВидДокумента.Скидка.ДокументОнование.iddoc = Jrn.$ВидДокумента.РН.iddoc |WHERE | $РегПартии.Автор != Jrn.$ОбщийРеквизит.Автор; о5 бред? |
|||
36
Ёпрст
22.03.12
✎
16:08
|
тип того:
|UPDATE РегПартии SET | |$РегПартии.Автор = coalesce( | case when Jrn.iddocdef <> $ВидДокумента.Скидка then | Jrn.$ОбщийРеквизит.Автор | else | (select Ж.$ОбщийРеквизит.Автор from _1sjourn as Ж where Ж.iddoc = substring($Д.ДокОснование,5,9)) | end,$ПустойИД) |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc |left join $Документ.Скидка as Д on Д.iddoc = Jrn.iddoc |
|||
37
Ёпрст
22.03.12
✎
16:12
|
(34) тогда в (36) выкини substring, оставь так where Ж.iddoc = $Д.ДокОснование)
|
|||
38
Ёпрст
22.03.12
✎
16:12
|
в общем, развлекайся
|
|||
39
МихаилМ
22.03.12
✎
16:16
|
+(38)
на копии |
|||
40
Pr0gLamer
22.03.12
✎
16:19
|
Дякую вам,товарищи альтруисты,особенно (Ёпрст4)
|
|||
41
Pr0gLamer
13.04.12
✎
16:57
|
апаю тему ибо ошибка
State 23000, native 515, message [Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось вставить значение NULL в столбец "SP7209", таблицы "test_perf.dbo.RA277"; в столбце запрещены значения NULL. Ошибка в UPDATE. Вот запрос |UPDATE РегПартии SET |$РегПартии.Автор = | (select Ж.$ОбщийРеквизит.Автор from _1sjourn as Ж where Ж.iddoc = $Д.ДокументОснование) |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc |LEFT JOIN $Документ.Скидка as Д ON | Д.iddoc = Jrn.iddoc"; буду признателен,если укажете на ошибку |
|||
42
vinogradъ
13.04.12
✎
17:04
|
посмотри сначала что select выберет этим запросом
|
|||
43
Pr0gLamer
13.04.12
✎
17:07
|
select будет пустой,т.к. поля автор у регистра раньше не было
|
|||
44
Ёпрст
13.04.12
✎
17:08
|
(43) :)
|
|||
45
Ёпрст
13.04.12
✎
17:10
|
ээх..
у тя ж запрос не верный.. Как в (36) не судьба была написать ? |
|||
46
vinogradъ
13.04.12
✎
17:10
|
(43) выбери не автора из регистра, а то, что записать в него хочешь
|
|||
47
Ёпрст
13.04.12
✎
17:12
|
с поправкой, что
ДокОснование - реквизит типа "Документ.Скидка", а не "<Документ>" без вида: |UPDATE РегПартии SET | |$РегПартии.Автор = coalesce( | case when Jrn.iddocdef <> $ВидДокумента.Скидка then | Jrn.$ОбщийРеквизит.Автор | else | (select Ж.$ОбщийРеквизит.Автор from _1sjourn as Ж where Ж.iddoc = $Д.ДокОснование) | end,$ПустойИД) |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc |left join $Документ.Скидка as Д on Д.iddoc = Jrn.iddoc |
|||
48
Pr0gLamer
13.04.12
✎
17:17
|
запрос выполнился,а поле автор не заполнилось
|
|||
49
Ёпрст
13.04.12
✎
17:21
|
что возвращает это:
|select | coalesce( | case when Jrn.iddocdef <> $ВидДокумента.Скидка then | Jrn.$ОбщийРеквизит.Автор | else | (select Ж.$ОбщийРеквизит.Автор from _1sjourn as Ж where Ж.iddoc = $Д.ДокОснование) | end,$ПустойИД) Автор |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc |left join $Документ.Скидка as Д on Д.iddoc = Jrn.iddoc |
|||
50
Pr0gLamer
13.04.12
✎
17:21
|
вру.у документа скидка не заполнилось, у расходных заполнилось
|
|||
51
Pr0gLamer
13.04.12
✎
17:23
|
(49)
вернуло что-то такое 1R 2M ... |
|||
52
Ёпрст
13.04.12
✎
17:23
|
очень хорошо..
Какой тип имеет реквизит ДокОснование в документе Скидка в пофигураторе ? |
|||
53
Ёпрст
13.04.12
✎
17:24
|
усложним, что возвращает это ?
|
|||
54
Pr0gLamer
13.04.12
✎
17:25
|
(52)
без меня поменяли да "Документ" была расходная(( сейчас еще раз попробую полную версию |
|||
55
Ёпрст
13.04.12
✎
17:26
|
|select
| (select Ж.$ОбщийРеквизит.Автор from _1sjourn as Ж where Ж.iddoc = $Д.ДокОснование) | end,$ПустойИД) Автор1 | ,(select Ж.$ОбщийРеквизит.Автор from _1sjourn as Ж where Ж.iddoc = substring($Д.ДокОснование,5,9)) | end,$ПустойИД) Автор2 |FROM $Регистр.ПартииТоваров as РегПартии |INNER JOIN _1sjourn as Jrn ON | Jrn.iddoc = РегПартии.iddoc |inner join $Документ.Скидка as Д on Д.iddoc = Jrn.iddoc |
|||
56
Ёпрст
13.04.12
✎
17:26
|
(54) тогда выполняй (36) и всё
|
|||
57
Pr0gLamer
13.04.12
✎
17:28
|
(56)сработало.еще раз спасибо.
а можно глупый вопрос?долго ты учился такие запросы писать? |
|||
58
Ёпрст
13.04.12
✎
17:29
|
(57) пару дней, наверное..
|
|||
59
Ёпрст
13.04.12
✎
17:29
|
если не меньше
|
|||
60
Ёпрст
13.04.12
✎
17:30
|
заходишь сюда
http://www.1cpp.ru/forum/YaBB.pl?board=query смотришь на FAQ и читаешь статью.. всё собственно. Всё остальное есть в BOL |
|||
61
Pr0gLamer
13.04.12
✎
17:30
|
|$РегПартии.Автор = coalesce(
| case when Jrn.iddocdef <> $ВидДокумента.Скидка OR Jrn.iddocdef <> $ВидДокумента.ПриходнаяВозвратная then | Jrn.$ОбщийРеквизит.Автор а так будет работать? |
|||
62
Ёпрст
13.04.12
✎
17:31
|
(61) будет
|
|||
63
Ёпрст
13.04.12
✎
17:32
|
можешь и не апдейтить, если сумневаешься, а просто select делать - если усё верно, тогда update
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |