Имя: Пароль:
1C
1C 7.7
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) НачатьТранзакцию(); нашел не закоментированную - вот и весь ответ. Нужно смотреть шире в таких случаях - в направлении на верх

Всем спасибо
Ошибка? Это не ошибка, это системная функция.