Имя: Пароль:
1C
1С v8
Пряморукие SQL-запросы. Как запихнуть Null?
,
0 Sintez123
 
12.11.13
14:36
Подхожу к компу, смотрю и ничего понять не могу. Монитор черно-белый. А оказалось это у Мисты новое цветовое оформление. Пугаете народ.

Есть SQL запрос, есть руки. Начальство хочет, как они выразились, "пряморукий" SQL-запрос. Итак, берем запрос, идем на Мисту, там есть прямые руки, у нас всё получится! :)

Command.CommandText = Command.CommandText +
" insert " + ИмяТаблицы
+ " (Pole1, Pole2 блаблабла
...
+ Выборка.Дата + "," //вот туда надо null, если дата пустая


Я сделал так:


Если НЕ ЗначениеЗаполнено(Выборка.Дата) Тогда
   ВыбДата = Null;
КонецЕсли;
Command.CommandText = Command.CommandText +
" insert " + ИмяТаблицы
+ " (Pole1, Pole2 блаблабла
...
+ ВыбДата + "," //вот туда надо null, если дата пустая


В SQL студии менеджерёнка я вижу что там всё равно встает дата 1900 года. Формат столбца в таблице SQL (Date, null).

Чего не так? Где выпремлять?
1 Зойч
 
12.11.13
14:38
покажи полный текст команды
2 Ёпрст
 
12.11.13
14:38
ВыбДата = "Null";
3 Sintez123
 
12.11.13
14:38
[Microsoft][ODBC SQL Server Driver][SQL Server]There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
4 Sintez123
 
12.11.13
14:38
(1) Command.CommandText = Command.CommandText +
        " insert " + ИмяТаблицы
        + " (Firm, Number, qty, KZNumber, KZDate, KlientID, PriceZ, SZNumber, SZDate, SupplierID, "
        + " PriceRMS, CancelDate, Number2, RecDate, Price, SaleDate, PriceK, isWork) Values ("
        + "'" + Выборка.Производитель + "',"                                             //1  [Firm]
        + "'" + Выборка.Артикул + "',"                                                     //2  [Number]        
        + Выборка.Колво + ","                                                            //3  [qty]
        + "'" + СокрЛП(Выборка.КЗНомер) + "',"                                            //4  [KZNumber]
        +"CAST('" + Формат(Выборка.КЗДата, "ДФ=""ггггММдд""") + "' as Date),"             //5  [KZDate]
        + Выборка.КонтрКод + ","                                                        //6  [KlientID]
        + Цена + ","                                                                    //7  [PriceZ]        
        + "'" + Выборка.СЗНомер + "',"                                                    //8  [SZNumber]        
        +"CAST('" + Формат(Выборка.СЗДата, "ДФ=""ггггММдд""") + "' as Date),"            //9  [SZDate]
        + ?(ЗначениеЗаполнено(Выборка.КодВеб), Выборка.КодВеб, 0) + ","                    //10 [SupplierID]        
        + ЦенаПоставщик + ","                                                            //11 [PriceRMS]
        + "CAST('" + Формат(Выборка.ДатаБекЛог, "ДФ=""ггггММдд""") + "' as Date),"        //12 [CancelDate]
        + "'" + Выборка.БэклогКолво + "',"                                                //13 [Number2]
        + ДатаПоступления                                                                //14 [RecDate]
        + ЦенаПоступления + ","                                                            //15 [Price]
        + "CAST('" + Формат(Выборка.ДатаПродажи, "ДФ=""ггггММдд""") + "' as Date),"     //16 [SaleDate]
        + ЦенаПродажи + ","                                                                //17 [PriceK]
        //+ "CAST('" + Формат(ТекущаяДата(), "ДФ=ггггММдд") + "' as Date),"             //18 [dt]
        + "'0'"                                                                            //19 [isWork]
        +")";
5 Ёпрст
 
12.11.13
14:38
ну и .. саму дату, тоже надо в нужный формат лепить, если че..
6 Sintez123
 
12.11.13
14:39
(2) Во чо

[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Null0'.
7 Ёпрст
 
12.11.13
14:40
(4) ну и где ты тут в коде null свой пихаешь ?
8 Sintez123
 
12.11.13
14:40
(5) это как? Так?


Нул = "Null";
"CAST('" + Формат(Нул, "ДФ=""ггггММдд""")
9 Sintez123
 
12.11.13
14:40
(7) + ДатаПоступления
10 Sintez123
 
12.11.13
14:41
(7) Перед запросом вот такая феня еще:

Если Выборка.Статус = НаСкладе Или Выборка.Статус = Отгружен Тогда
            ДатаПоступления = Формат(Выборка.ДатаПоступления, "ДФ=""ггггММдд""");
            ДатаПоступления = "CAST('" + ДатаПоступления + "' as Date),";
        Иначе
            ДатаПоступления = "Null";
            ЦенаПоступления = 0;
        КонецЕсли;
11 Ёпрст
 
12.11.13
14:42
(8) нет, просто

?(ЗначениеЗаполено(Выборка.ДатаПродажи),"CAST('" + Формат(Выборка.ДатаПродажи, "ДФ=""ггггММдд""") + "' as Date)","null");
12 Sintez123
 
12.11.13
14:42
Аааааааааааааааа.... это у меня картинки в браузеры отключены. Думаю чо миста чернобелая такая
13 Ёпрст
 
12.11.13
14:43
Это ежели твое поле в табличке скуля поддерживает null значения.. можешь и вообще ничего не писать, null сам автоматом заинс1ёртится, просто зпт и всё.
14 Sintez123
 
12.11.13
14:44
(11) сделал так, но...

[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'null0'.
15 Sintez123
 
12.11.13
14:46
(13) а как проверить, у поля написано в менеджмент студио так:

(Date, null)

Если тыкать пару раз по столбцу, то в окошке параметры так:
Allow Nulls = True


Я так понял всё тут ТРУ. К тому же скуль таблицу пряморукий наш делал, он шарит, верно всё вроде
16 Ёпрст
 
12.11.13
14:50
(10)

+ ДатаПоступления                                                                //14 [RecDate]

        + ЦенаПоступления + ","

тут ты ЗПТ пропустил
17 Ёпрст
 
12.11.13
14:50
отсюда ошибка nvalid column name 'null0'.
18 Ёпрст
 
12.11.13
14:51
должно быть

+ ДатаПоступления  +"," + ЦенаПоступления +","
19 Sintez123
 
12.11.13
15:00
(16) Спасибо тебе, мистер Прямые Ручки :) Мне как раз тебя не хватало. Всё работает. Тебя надо в швейцарскую палату мер и весов поместить, кормить плюшками :)

ТЕМА ЗАКРЫТА
20 Зойч
 
12.11.13
15:02
А если бы показал полный текст запроса, а не код обработки, то ошибку бы и сам увидел
21 kiruha
 
12.11.13
18:17
Динамический запрос SQL - постоянный источник ошибок и тормозов при множественном insert .
Намного лучше параметрический

Навскидку поставь ЦенаПродажи 1000 руб
или Колво 1000 полюбуйся на результат
22 kiruha
 
12.11.13
18:18
ЦенаПродажи =1000;
Потом свой запрос
23 lexusrus
 
28.11.13
10:23
(0) привет, заинтересовала тема v8: Поисковик на 1с, биржевой робот на 1с. Еще занимаешься?
24 DmitriyDI
 
28.11.13
10:33
(19) +100