|
v7: 1С++ Не выполняется UPDATE | ☑ | ||
---|---|---|---|---|
0
burrya
25.04.13
✎
19:23
|
ТекстПроверкаНаличия = "
|SELECT | Спр.Code as Код, | Спр.Descr as Наименование |FROM | $Справочник.СпрТМЦ1 as Спр |WHERE | Code = :CodeParam"; ТекстИзменить = " |UPDATE | $Справочник.СпрТМЦ1 |SET | Descr = '****123****', | $Справочник.СпрТМЦ1.ЦенаКаталога = 123 |FROM | $Справочник.СпрТМЦ1 as Спр |WHERE | Code = :CodeParam"; //ОсновнойТекст = "select * from sc847 where code = :CodeParam"; ODBCRecordset.УстановитьТекстовыйПараметр("CodeParam", КодИзФайла); ОсновнойЗапрос = ODBCRecordset.ВыполнитьИнструкцию(ТекстПроверкаНаличия); Если ОсновнойЗапрос.КоличествоСтрок() > 0 Тогда ODBCRecordset.УстановитьТекстовыйПараметр("CodeParam", КодИзФайла); ОсновнойЗапрос = ODBCRecordset.ВыполнитьИнструкцию(ТекстИзменить); КонецЕсли; В CodeParam передается текстовый параметр, сам код в текстовом формате, проверяю по коду. Обновление не прошло. В чем тут ошибка |
|||
1
Ёпрст
25.04.13
✎
19:29
|
UPDATE
Спр SET Спр.Descr = '****123****', $Спр.ЦенаКаталога = 123 FROM $Справочник.СпрТМЦ1 as Спр WHERE Спр.Code = :CodeParam |
|||
2
burrya
25.04.13
✎
19:36
|
результат тот же
|
|||
3
Ёпрст
25.04.13
✎
19:38
|
значит, элемента с таким кодом нет
ЗЫ: и как ты проверяешь, что наименование не изменилось ? :) |
|||
4
Ёпрст
25.04.13
✎
19:39
|
и есть уверенность, что запрос у тебя вообще выполняется ?
|
|||
5
burrya
25.04.13
✎
19:41
|
(3)
1. В первом запросе элемент по этому коду находит, так почему не находит во втором где идет обновление?? 2. захожу в форму элемента 3. Смотрел в отладчике, первый запрос возвращает ТЗ с одной строкой, второй раз возвращает 1 |
|||
6
Ёпрст
25.04.13
✎
19:45
|
не тот поди элемент смотришь ?
|
|||
7
Ёпрст
25.04.13
✎
19:45
|
или не тот вид справочника ?
|
|||
8
burrya
25.04.13
✎
19:48
|
та пробовал даже открыть закрыть 1С и зайти в форму элемента, код которого беру из отладчика :)
|
|||
9
burrya
25.04.13
✎
19:49
|
Вот запрос из обработки, переделанный:
|UPDATE | Спр |SET | Спр.Descr = '****123****', | $Спр.ЦенаКаталога = 123 |FROM | $Справочник.СпрТМЦ1 as Спр |WHERE | Спр.Code = :CodeParam |
|||
10
Ёпрст
25.04.13
✎
19:52
|
чудес не бывает..
Либо ты этот запрос не выполняешь, либо нет элемента с таким кодом |
|||
11
Ёпрст
25.04.13
✎
19:53
|
ну и для update лучше Выполнить делать, а не ВыполнитьИнструкцию
|
|||
12
МихаилМ
25.04.13
✎
22:02
|
дедушка Норбеков с зрение улучшить может, а мозги - нет.
|
|||
13
burrya
25.04.13
✎
22:12
|
(12) не совсем тебя понял
|
|||
14
burrya
26.04.13
✎
12:05
|
Попрабовал в CodeParam передать несуществующий код в справочнке, ODBCRecordset.Выполнить(ТекстИзменить) вернуло единицу
|
|||
15
dk
26.04.13
✎
12:07
|
update поменяй на select погляди что находит
|
|||
16
spock
26.04.13
✎
12:09
|
(14)это значит что твой запрос отметапарсился, скомпилировался и выполнился. Но это не значит, что у тебя какие-то данные изменились.
|SELECT * |FROM | $Справочник.СпрТМЦ1 as Спр |WHERE | Спр.Code = :CodeParam че вернет? думаю ничего. |
|||
17
burrya
26.04.13
✎
16:32
|
Если взять код существующего элемента справочника, то возвращает таблицу значений с двумя колонками и одной строкой, в которой код и наименование элемента.
Но АПДЕЙТ не срабатывает.. |
|||
18
burrya
26.04.13
✎
16:32
|
сейчас попробую прописать запрос напрямую
|
|||
19
burrya
26.04.13
✎
16:42
|
Вот такой запрос тоже не выполнился
|UPDATE | sc847 |SET | Descr = '****123****', | SP852 = 123 |WHERE | Code = :CodePara А вот такой выполнился |UPDATE | sc847 |SET | Descr = '****123****', | SP852 = 123 |WHERE | Code = '6E0971235D' Но как такое может быть, что в селекте параметр работает а в апдейте нет? |
|||
20
burrya
26.04.13
✎
16:44
|
В первом запросе WHERE Code = :CodeParam, то я не докопировал просто
|
|||
21
toypaul
гуру
26.04.13
✎
16:46
|
попробуй после первого селекта закрыть набор. и только потом делать апдейт.
|
|||
22
toypaul
гуру
26.04.13
✎
16:48
|
плюс не понятно откуда вызывается код. из модуля проведения документа может быть?
|
|||
23
varelchik
26.04.13
✎
16:51
|
А ты спробуй
ODBCRecordset.Отладка(1); ODBCRecordset.УстановитьТекстовыйПараметр("CodeParam", КодИзФайла); ОсновнойЗапрос = ODBCRecordset.ВыполнитьИнструкцию(ТекстИзменить); Что получишь? |
|||
24
varelchik
26.04.13
✎
16:52
|
а вот на счет модуля проведения это хорошо подмечено.
|
|||
25
burrya
26.04.13
✎
16:57
|
Это Внешний отчет
|
|||
26
burrya
26.04.13
✎
16:58
|
т.е. обработка :)
|
|||
27
burrya
26.04.13
✎
17:03
|
вот что если включить отладку
UPDATE Спр SET Спр.Descr = '****123****', Спр.sp852 = 123 FROM sc847 as Спр WHERE Спр.Code = '5Z1971349C' |
|||
28
Дык ё
26.04.13
✎
17:16
|
(16) собственно, возвращаемая единица обозначает одну обработанную строку
а вот почему автор этого не видит - хз. откат транзакции, не тот элемент, не та база и т.п. :-) |
|||
29
burrya
26.04.13
✎
17:33
|
Есть у меня подозрение одно по поводу текстового кода и его длины
|
|||
30
burrya
26.04.13
✎
17:37
|
UPDATE
sc847 SET Descr = '****123****', SP852 = 123 WHERE Code = '1L0971011LS ' Остальные пробелы - добираю до длины кода, но все-равно не помогло |
|||
31
burrya
26.04.13
✎
17:38
|
Что значит откат транзакции?
|
|||
32
burrya
26.04.13
✎
17:39
|
(28) Возвращает 1 даже когда задаю не сущ. код всправочнике
|
|||
33
Mikeware
26.04.13
✎
17:39
|
(30) из QA/1CQA - выполняется ?
|
|||
34
Mikeware
26.04.13
✎
17:42
|
||||
35
burrya
26.04.13
✎
17:48
|
из QA выполняется
|
|||
36
Mikeware
26.04.13
✎
17:55
|
(35) выполни через ВыполнитьСкалярный()
или поставь sen nocount on |
|||
37
burrya
26.04.13
✎
18:13
|
(36) SET NOCOUNT ON
И ВыполнитьСкалярный() - возвращает -1, обновление не проходит |
|||
38
burrya
26.04.13
✎
18:18
|
Если только set nocount on, и использовать Выполнить() Возвращает всегда 1, и на сущ. кодах и на не сущ. кодах
|
|||
39
burrya
26.04.13
✎
18:19
|
А вобще добавлять пробелы до длины кода нужно?
WHERE Code = '1L0971011LS ' Хотя у меня и так и таку не срабатывает.. |
|||
40
Ёпрст
26.04.13
✎
18:23
|
(38) ё..
он и должен возвращать 1 - обработана 1 запись |
|||
41
Ёпрст
26.04.13
✎
18:24
|
Точнее, Выполнить возвращае 1 - запрос выполнился успешно, 0 - безуспешно
|
|||
42
burrya
26.04.13
✎
18:24
|
На всякий добавил в код ODBCRecordset.УстБД1С();
не помогло (40) даже на не существующих кодах? |
|||
43
Ёпрст
26.04.13
✎
18:25
|
(42) а есть разница ?
|
|||
44
Ёпрст
26.04.13
✎
18:25
|
запрос выполнился успешно!
|
|||
45
Ёпрст
26.04.13
✎
18:25
|
не догоняешь, не ?
|
|||
46
burrya
26.04.13
✎
18:26
|
та доганяю, только что-ж данные не изменяются, никак не могу понять
|
|||
47
Ёпрст
26.04.13
✎
18:27
|
Ну тригер мот на табличку понавешан
|
|||
48
burrya
26.04.13
✎
18:27
|
думал может не в ту базу пишу, но ODBCRecordset.УстБД1С(); ничего не дал
|
|||
49
burrya
26.04.13
✎
18:28
|
(47) из QA выполняется
|
|||
50
Ёпрст
26.04.13
✎
18:29
|
Покажи весь код целиком, весь
|
|||
51
burrya
26.04.13
✎
18:55
|
(50) НачатьТранзакцию(); нашел не закоментированную - вот и весь ответ. Нужно смотреть шире в таких случаях - в направлении на верх
Всем спасибо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |