|
v7: Подкиньте пример прямой записи данных в регистр (прямой запрос) | ☑ | ||
---|---|---|---|---|
0
dimm7310
23.01.14
✎
16:07
|
База SQL
Необходимо максимально быстро добавлять записи в регистр остатков РегистрацияИзменений, у которого только два измерения : ТипЗначения, ЗначениеРеквизита. По сути это имитация регистра сведений. Предполагается , что запись будет производится из обработки. Никогда ранее не осмеливался писать данные в базу прямыми запросами, только выборка для отчетов и подборов. Подкиньте пример как это сделать и обязательно ли при этом указывать регистратор ? |
|||
1
Mikeware
23.01.14
✎
16:09
|
Не используй регистр,используй справочник
|
|||
2
Mikeware
23.01.14
✎
16:10
|
а регистратор - естественно, надо. Для регистра
а для эмулироемого РС - по желанию. |
|||
3
dimm7310
23.01.14
✎
16:12
|
хорошо, как писать в справочник прямыми запросами ? (т.к. пробовал стандартными - блокировки)
|
|||
4
КонецЦикла
23.01.14
✎
16:15
|
Можно удалять/писать новое, но чтобы форма списка спр-ка не была открыта иначе пипец 1С. Апдейтить можно.
Можно заблокировать таблицу, сделать в транзакции если долго. Далее update insert по вкусу. |
|||
5
КонецЦикла
23.01.14
✎
16:18
|
Вот апдейт регистра
ТекстЗапроса = " |BEGIN TRAN |UPDATE $Регистр.РезервТовараПоЗаявке |SET $Регистр.РезервТовараПоЗаявке.ЧастьЗаявки = ВремРег.Pz |FROM $Регистр.РезервТовараПоЗаявке AS Регистр |LEFT JOIN #tempra AS ВремРег With (NOLOCK) ON Регистр.Actno = ВремРег.Actno |WHERE Регистр.IDDOC = :ВыбЗаявка | |DELETE FROM Zayavkipmax |WHERE Iddoc = :ВыбЗаявка |INSERT INTO Zayavkipmax |SELECT DISTINCT :ВыбЗаявка, Pz, Zone, 0, :Этап, :ЭтапПер |FROM #tempra (NOLOCK) | |DROP TABLE #tempra |COMMIT TRAN |"; Вот ковыряние в итогах ТекстЗапроса = " |DELETE |FROM $Регистр.РезервТовараПоЗаявке |WHERE IDDOC = :ВыбДок |AND ACTNO IN (SELECT ActNo FROM #tempdoc) |"; RecordSet.УстановитьТекстовыйПараметр("ВыбДок", ТекДок); RecordSet.ВыполнитьИнструкцию(ТекстЗапроса); ТекстЗапроса = " |DELETE $РегистрИтоги.РезервТовараПоЗаявке |FROM $РегистрИтоги.РезервТовараПоЗаявке AS Итоги |INNER JOIN #tempdoc AS ТемпДок With (NOLOCK) ON $Итоги.Товар = ТемпДок.Tov AND $Итоги.Ключ = ТемпДок.Kl |WHERE PERIOD >= :Период |AND $Итоги.Заявка = :ВыбДок |AND $Итоги.АдресХранения = $ПустойИД |"; RecordSet.УстановитьТекстовыйПараметр("Период", НачМесяца(ДатаДок)); RecordSet.УстановитьТекстовыйПараметр("ВыбДок", ТекДок); RecordSet.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
6
dimm7310
23.01.14
✎
16:22
|
если советуете справочник, то мне бы пример добавления записи в справочник
|
|||
7
Mikeware
23.01.14
✎
16:42
|
(6) Да как в (5)
|
|||
8
dimm7310
23.01.14
✎
17:07
|
например
UPDATE Спр SET Спр.Descr = "Наименование1", $Спр.ТипЗначения = "ТипЗначения1", $Спр.ЗначениеРеквизита= "Значения1" FROM $Справочник.РегистрацияИзменений as Спр а Id какой присваивать? |
|||
9
vinogradъ
23.01.14
✎
17:09
|
максимальный+1
|
|||
10
vinogradъ
23.01.14
✎
17:11
|
id36 в id10, id10+1, id10 в id36
|
|||
11
kiruha
23.01.14
✎
17:13
|
(0)
И что - итоги будешь каждый месяц считать ? Когда записей будет млн, то каждый мес в таблице остатков при расчете итогов будет + 1 млн |
|||
12
vinogradъ
23.01.14
✎
17:15
|
+(9) максимальный можно из хранимой процедуры получить
|
|||
13
КонецЦикла
23.01.14
✎
17:17
|
(8) Если апдейт, то зачем id присваивать? Элемент же существует и на него могут быть ссылки. Секция from необязательна если нет соединений
|
|||
14
ADirks
23.01.14
✎
17:24
|
А можно вообще свою табличку создать - никаких проблем с ИДшиками, и индексы какие надо, а не какие дали.
|
|||
15
Mikeware
23.01.14
✎
17:30
|
(8) "а Id какой присваивать?"
select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (Спр.id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) from $Справочник.ТвойСправочник Спр where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys) |
|||
16
Mikeware
23.01.14
✎
17:31
|
(14) только 1с ее не увидит. а мало ли....
|
|||
17
Mikeware
23.01.14
✎
17:31
|
(13) в (0) - "добавлять записи"
|
|||
18
varelchik
23.01.14
✎
17:32
|
(14)+100
у мене так работает ЖурналРегистрации и ЖурналИзменений |
|||
19
varelchik
23.01.14
✎
17:33
|
+(18) и лежит это все хозяйство в отдельной базе.
|
|||
20
ADirks
23.01.14
✎
17:37
|
(16) моё дело предложить :)
|
|||
21
varelchik
23.01.14
✎
18:27
|
(16)с чего бы это?
|
|||
22
varelchik
23.01.14
✎
18:28
|
у мене все базы лежат на 3 серваках и прекрасно друг друга все видят.
|
|||
23
ADirks
23.01.14
✎
20:36
|
(21) Самое главное - ссылочная целостность может пострадать. Всё остальное легко решаемо.
|
|||
24
ЧеловекДуши
23.01.14
✎
20:53
|
(0) Через документ, лучше...
И лучше использовать оборотный регистр, без Ресурсов :) В реквизитах нужные тебе значения :) |
|||
25
ЧеловекДуши
23.01.14
✎
20:54
|
+ >>> По сути это имитация регистра сведений
Как раз и получишь Регистр Сведений... Только к регистру придется обращаться через прямые запросы. :) |
|||
26
dimm7310
23.01.14
✎
21:05
|
(13) мне нужно добавление записей. Тогда insert?
insert Спр SET Спр.Descr = "Наименование1", $Спр.ТипЗначения = "ТипЗначения1", $Спр.ЗначениеРеквизита= "Значения1" FROM $Справочник.РегистрацияИзменений as Спр и как это склеить с (15) ? |
|||
27
Злопчинский
23.01.14
✎
21:54
|
дайте лучше прямой запрос для ДБФа на 1.пересчет итогов и 2.открытие нового периода
|
|||
28
kiruha
24.01.14
✎
09:56
|
(24)
Документ ??? В 77 все заголовки документов хранятся в общей табличке, что и так вызывает кучу проблем. Написали же - оптимально своя табличка либо справочник. Никаких регистров и документов |
|||
29
КонецЦикла
24.01.14
✎
10:07
|
(26) Можно и вставлять
Только не забудь преобразовать id к 36 виду или хотя бы чтобы было так ' 1000' если id не важны - т.е. шестой знак ненулевой. Вот почитай Не работает найти по реквизиту после прямой вставки данных Там я вставлял данные во временную таблицу и просто нумеровал строки, а потом уже вставлял в справочник ТекстЗапроса = " |DECLARE i int |SET i = 999 |UPDATE #temp SET ID = i, i = i + 1 |"; RecordSet.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
30
КонецЦикла
24.01.14
✎
10:08
|
||||
31
КонецЦикла
24.01.14
✎
10:09
|
А вообще поддерживаю (14) если это просто доп. данные
|
|||
32
Андрей_Андреич
naïve
24.01.14
✎
10:11
|
При доп.таблице вопросик есть - что делать если базу надо выгрузить-загрузить в другом месте. Табличка-то ёк?
|
|||
33
КонецЦикла
24.01.14
✎
10:14
|
(32) Бэкапик SQL-ем делай или детач-атач
|
|||
34
КонецЦикла
24.01.14
✎
10:15
|
При реструктуризации 1С их не трогает + практически на лету можно менять структуру
|
|||
35
Mikeware
24.01.14
✎
12:04
|
(27) пересчитать не проблема. записать проблема (с индексами)
|
|||
36
dimm7310
24.01.14
✎
12:46
|
(15) пробовал так:
рс = СоздатьОбъект("ODBCRecordset"); пр = СоздатьОбъект("AccountsRecordset"); ТекстЗапроса = " //|insert |UPDATE |Спр |SET | Спр.ID = (select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (Спр.id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) from $Справочник.ТестНастройки Спр where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys)), | Спр.Descr = :Наименование1, | $Спр.ТипРеквизита = :ТипЗначения1, | $Спр.ЗначениеРеквизита = :Значение1 |FROM |$Справочник.ТестНастройки as Спр "; рс.УстановитьТекстовыйПараметр("Наименование1", "Наименование1"); рс.УстановитьТекстовыйПараметр("ТипЗначения1", "ТипЗначения1"); рс.УстановитьТекстовыйПараметр("Значение1", "Значение1"); тз = рс.ВыполнитьИнструкцию(ТекстЗапроса); выдает ошибку Invalid object name 'dbo.convert10to36'. |
|||
37
varelchik
24.01.14
✎
13:06
|
(36) А у тебя хранимка convert10to36 хоть есть?
|
|||
38
Mikeware
24.01.14
✎
13:08
|
CREATE FUNCTION Convert10To36(@Val_10 int) Returns char(4)
Begin DECLARE @j int, @nSpaces int, @Res36 char(4) DECLARE @Arr36 CHAR(36) SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' SELECT @Res36 = '' SELECT @j = LOG(@Val_10) / LOG(36) + 1 SET @nSpaces = 4 - @j while @j>0 begin SELECT @Res36 = LTRIM(RTRIM(@Res36)) + SUBSTRING(@Arr36, @Val_10/POWER(36,@j-1) + 1 ,1) SELECT @Val_10 = @Val_10 % POWER(36, @j-1) SELECT @j = @j - 1 end SET @Res36 = Left(' ', @nSpaces) + Rtrim(@Res36) Return @Res36 End CREATE FUNCTION Convert36To10(@Val_36 varchar(9)) Returns int Begin DECLARE @j int, @len int, @Val_10 int DECLARE @Arr36 char(36) SET @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' SET @Val_10 = 0 SET @j = 1 SET @Val_36 = LTrim(RTrim(@Val_36)) SET @len = Len(@Val_36) while @j <= @len begin if @j <> 1 SET @Val_10 = @Val_10 * 36 SET @Val_10 = @Val_10 + CharIndex(Substring(@Val_36, @j ,1), @Arr36) - 1 SET @j = @j+1 end Return @Val_10 End |
|||
39
varelchik
24.01.14
✎
13:09
|
Если что лови:
[code] //{ служебные функции лЗапрос=глСоединение(); ТекстЗапроса = " |IF IsNull( | OBJECT_ID ('Convert10To36', N'TF'), | IsNull( | OBJECT_ID ('Convert10To36', N'IF'), | OBJECT_ID ('Convert10To36', N'FN')))IS NOT NULL | DROP FUNCTION Convert10To36 |"; лЗапрос.ВыполнитьИнструкцию(ТекстЗапроса); ТекстЗапроса = " |CREATE FUNCTION Convert10To36(@Val_10 int) Returns char(4) |Begin | DECLARE @j int, @nSpaces int, @Res36 char(4) | DECLARE @Arr36 CHAR(36) | SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' | SELECT @Res36 = '' | SELECT @j = LOG(@Val_10) / LOG(36) + 1 | SET @nSpaces = 4 - @j | | while @j>0 | begin | SELECT @Res36 = LTRIM(RTRIM(@Res36)) + SUBSTRING(@Arr36, @Val_10/POWER(36,@j-1) + 1 ,1) | SELECT @Val_10 = @Val_10 % POWER(36, @j-1) | SELECT @j = @j - 1 | end | SET @Res36 = Left(' ', @nSpaces) + Rtrim(@Res36) | | Return @Res36 |End |"; лЗапрос.ВыполнитьИнструкцию(ТекстЗапроса); ТекстЗапроса = " |IF IsNull( | OBJECT_ID ('Convert36To10', N'TF'), | IsNull( | OBJECT_ID ('Convert36To10', N'IF'), | OBJECT_ID ('Convert36To10', N'FN')))IS NOT NULL | DROP FUNCTION Convert36To10 |"; лЗапрос.ВыполнитьИнструкцию(ТекстЗапроса); ТекстЗапроса = " |CREATE FUNCTION Convert36To10(@Val_36 varchar(9)) Returns int |Begin | DECLARE @j int, @len int, @Val_10 int | DECLARE @Arr36 char(36) | SET @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' | SET @Val_10 = 0 | SET @j = 1 | SET @Val_36 = LTrim(RTrim(@Val_36)) | SET @len = Len(@Val_36) | while @j <= @len | begin | if @j <> 1 | SET @Val_10 = @Val_10 * 36 | SET @Val_10 = @Val_10 + CharIndex(Substring(@Val_36, @j ,1), @Arr36) - 1 | SET @j = @j+1 | end | Return @Val_10 |End |"; лЗапрос.ВыполнитьИнструкцию(ТекстЗапроса); //} [/code] |
|||
40
dimm7310
24.01.14
✎
13:36
|
(38-39) Спасибо. Теперь ошибки нет, но запись не добавляется . Я создал руками одну запись в справочнике, и запустив запрос на выполнение и эта запись обновилась - затерлась данными из запроса(и при этом запись осталась блокировалась).
При попытке заменить update на insert выдало ошибку Incorrect syntax near the keyword 'SET'. |
|||
41
dimm7310
24.01.14
✎
16:59
|
подскажите как правильно пользоваться
insert into ТекстЗапроса = " |insert into |Спр |SET | Спр.ID = (select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (Спр.id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) from $Справочник.ТестНастройки Спр where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys)), | Спр.Descr = :Наименование1, | $Спр.ТипРеквизита = :ТипЗначения1, | $Спр.ЗначениеРеквизита = :Значение1 |FROM |$Справочник.ТестНастройки as Спр "; рс.УстановитьТекстовыйПараметр("Наименование1", "Наименование1"); рс.УстановитьТекстовыйПараметр("ТипЗначения1", "ТипЗначения1"); рс.УстановитьТекстовыйПараметр("Значение1", "Значение1"); тз = рс.ВыполнитьИнструкцию(ТекстЗапроса); ошибка Incorrect syntax near the keyword 'SET |
|||
42
ADirks
24.01.14
✎
17:11
|
ТекстЗапроса = "
|insert into $Справочник.ТестНастройки |SET | ID = (select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) from $Справочник.ТестНастройки Спр where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys)), | Descr = :Наименование1, | $Справочник.ТестНастройки.ТипРеквизита = :ТипЗначения1, | $Справочник.ТестНастройки.ЗначениеРеквизита = :Значение1"; рс.УстановитьТекстовыйПараметр("Наименование1", "Наименование1"); рс.УстановитьТекстовыйПараметр("ТипЗначения1", "ТипЗначения1"); рс.УстановитьТекстовыйПараметр("Значение1", "Значение1"); |
|||
43
dimm7310
24.01.14
✎
18:10
|
(42) все равно выдает ошибку Incorrect syntax near the keyword 'SET
|
|||
44
ADirks
24.01.14
✎
18:18
|
блин, этож INSERT а не UPDATE :))
ТекстЗапроса = " |insert into $Справочник.ТестНастройки (ID, Descr, $Справочник.ТестНастройки.ТипРеквизита, $Справочник.ТестНастройки.ЗначениеРеквизита) |VALUES ( | ( | select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) | from $Справочник.ТестНастройки Спр | where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys) | ), | :Наименование1, | :ТипЗначения1, | :Значение1 |)"; |
|||
45
КонецЦикла
24.01.14
✎
18:19
|
никого не смутил синтаксис? :)
Уж тогда так declare @id char(9) set @id = наша фнукция insert into @id , '' ,'' |
|||
46
dimm7310
24.01.14
✎
21:07
|
(44) выдает ошибку Subqueries are not allowed in this context. Only scalar expressions are allowed.
(45) это к (44) относится ? Если да то как полностью? |
|||
47
ADirks
24.01.14
✎
21:49
|
(46) именно туда и относится
ТекстЗапроса = " |declare @id char(9) |set @id = ( | select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) | from $Справочник.ТестНастройки Спр | where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys) | ) | |insert into $Справочник.ТестНастройки (ID, Descr, $Справочник.ТестНастройки.ТипРеквизита, $Справочник.ТестНастройки.ЗначениеРеквизита) |VALUES ( | @id, | :Наименование1, | :ТипЗначения1, | :Значение1 |)"; |
|||
48
ЧеловекДуши
24.01.14
✎
22:28
|
(28) Справочники тормозное Гуано :)
|
|||
49
ЧеловекДуши
24.01.14
✎
22:29
|
+(28)Но это дело каждого... Я же не на теории говорю. :)
|
|||
50
dimm7310
24.01.14
✎
22:38
|
(47) все равно ошибка Cannot insert the value NULL into column 'VERSTAMP', table 'Proba2.dbo.SC30040'; column does not allow nulls. INSERT fails.
|
|||
51
dimm7310
24.01.14
✎
22:41
|
(49) где советуете хранить ? Нужен аналог регистра сведений , но что бы ничего не пересчитывать, а просто вытаскивать данные по необходимости
|
|||
52
dimm7310
24.01.14
✎
23:08
|
меня устроит и справочник, лишь бы быстро записывалось
|
|||
53
dimm7310
25.01.14
✎
19:59
|
профи прямых запросов, пожалуйста скиньте рабочий пример прямой записи в справочник
|
|||
54
Злопчинский
25.01.14
✎
21:04
|
(51) а тут баланс надо выбирать - если тебе надо чтобы максимально быстро записывалось то вариант простой - справочник, без кода и без наименования, с нужными реквизитами без сортировок и отборов. Запись будет максимально быстрой.
. другое дело что чтение при этом - тормозное будет, т.к. никаких индексов нет... но тут надо смотреть - какие данные нужны, каким темпом.. и т.д. |
|||
55
Злопчинский
25.01.14
✎
21:05
|
При таком подходе, ядумаю из апись даже без прямых запросов может быть достаточной по скорости
|
|||
56
КонецЦикла
25.01.14
✎
21:05
|
(52) Да будет быстро, тебе кинули уже как минимум два примера кода
|
|||
57
КонецЦикла
25.01.14
✎
21:07
|
(55) Не, проигрыш существенный.
Просто иногда можно пожертвовать скорость ради надежности и проч. Ну мало ли там нюансы или автор не справится. |
|||
58
ADirks
25.01.14
✎
21:49
|
Пока товарищ не понимает простейшей механики, что там и как, советовать бесполезно.
К товарищу: есть такая штука "Management Studio", пока ты туда не залезешь, понимания не будет. |
|||
59
dimm7310
25.01.14
✎
23:11
|
(58) да залезал и еще в Enterprise Manage на SQL 2000
(56) который вариант рабочий , ни один не сработал без ошибки. Мне нужен простейший рабочий пример а на счет достать запросом - без проблем , лет 5 назад только тем и занимался, что оптимизировал отчеты на старой работе под прямые запросы (последнее годы только на 8ке), но записывать тогда запросами так и не осмелился |
|||
60
Злопчинский
26.01.14
✎
00:00
|
(57) ну тады - прямыми...
. \а то что рабочего пример а нет - я автора понимаю... |
|||
61
КонецЦикла
26.01.14
✎
01:33
|
(59) Пиши что нужно конкретно. Вставка построчная или из какой-то таблицы?
|
|||
62
dimm7310
26.01.14
✎
10:06
|
(61) Что неправильно в (47) ? выдает ошибку описанную в (50)
|
|||
63
monsterZE
26.01.14
✎
10:59
|
(62) в (50) сказано, что ты пытаешься записать нул в колонку, значения которой не могут быть нул.
|
|||
64
dimm7310
27.01.14
✎
09:55
|
(63) да , нужно было присваивать ISMARK и VERSTAMP. Новый элемент записался, визуально в справочнике отображается. Делаю запрос по этому справочнику и выгружаю в ТЗ, при просмотре оказывается в поле Ссылка - <Объект на найден>(/3)
Что опять не так? |
|||
65
Ёпрст
27.01.14
✎
10:12
|
свою табличку лепить не предлагали еще ?
|
|||
66
Mikeware
27.01.14
✎
10:18
|
(64) ну мы же не знаем, что ты сделал....
(65) иногда бывает нужно ссылочную целостность.... |
|||
67
dimm7310
27.01.14
✎
10:22
|
(65) вот последний вариант запроса
ТекстЗапроса = " |declare @id char(9) |set @id = ( | select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) | from $Справочник.ТестНастройки Спр | where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys) | ) | |insert into $Справочник.ТестНастройки (ID, Descr, $Справочник.ТестНастройки.ТипРеквизита, $Справочник.ТестНастройки.ЗначениеРеквизита,VERSTAMP,ISMARK) |VALUES ( | @id, | :Наименование1, | :ТипЗначения1, | :Значение1, | 0, | 0 // | :Код |)"; рс.УстановитьТекстовыйПараметр("Наименование1", "Наименование1"); рс.УстановитьТекстовыйПараметр("ТипЗначения1", "ТипЗначения1"); рс.УстановитьТекстовыйПараметр("Значение1", "Значение1"); |
|||
68
dimm7310
27.01.14
✎
10:26
|
(65) я не против попробовать , мне бы пример как это реализовать и в каком формате хранить
|
|||
69
Mikeware
27.01.14
✎
10:27
|
(67) Ну а стркутура справочника "ТестНастройки"?
|
|||
70
dimm7310
27.01.14
✎
10:33
|
код = 0
Наименование = 25 симв ТипРеквизита = строка 110 ЗначениеРеквизита = строка 110 |
|||
71
Mikeware
27.01.14
✎
10:39
|
(70) и где тут "поле ссылка"?
|
|||
72
Mikeware
27.01.14
✎
10:41
|
что выдает select * from $Справочник.ТестНастройки ?
|
|||
73
dimm7310
27.01.14
✎
10:46
|
похоже ID записано неверно, у корректной ссылки " 2", у добавленных запросом "3 ", "4 " и т.д.
|
|||
74
Ёпрст
27.01.14
✎
10:48
|
(73) какой догадливый.. код уриба надо в начало пихать, а не в конец..
|
|||
75
Ёпрст
27.01.14
✎
10:48
|
Ну, тут Алексей усё правильно сделал - кинул удочку.. можно сказать, 98% рабочую
:) |
|||
76
Mikeware
27.01.14
✎
10:48
|
(73) как-то странно. dbsign пустой, чтоль?
судя по наличию verstamp база была распределенкой.... ну замени тогда select sys1.dbsign from _1ssystem sys1 на ' ' |
|||
77
Mikeware
27.01.14
✎
10:49
|
(74) чиво?
|
|||
78
Ёпрст
27.01.14
✎
10:49
|
а не, наврал.. уриб всё же в конце..
|
|||
79
Ёпрст
27.01.14
✎
10:49
|
(77) да обмишурился, от чего :)
|
|||
80
Mikeware
27.01.14
✎
10:53
|
set @id =
( select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (id,6) ) )+1))) +(select sys1.dbsign from _1ssystem sys1) Или лучше ( select dbo.convert10to36(max(dbo.convert36to10(left (id,6) ) )+1)) +(select sys1.dbsign from _1ssystem sys1) |
|||
81
ADirks
27.01.14
✎
10:56
|
(75) да я даже и не смотрел, как там ИД генерится - мне как-то на это начхать :) Вопрос был про синтаксис - я про исключительно него и отвечал.
|
|||
82
Ёпрст
27.01.14
✎
10:58
|
вообще , для хранения 2-х строковых реквизитов..справочник как бэ и не нуден :)
|
|||
83
Mikeware
27.01.14
✎
11:06
|
(82) вообще говоря, да. Но "у обстчем и у цэлом", нужно учитывать, что найдется такой прогер, который не сможер писать или читать во внешню табличку прямым запросом. и будет хотеть "чОрный запрос", перебор и т.п.
|
|||
84
dimm7310
27.01.14
✎
11:07
|
(82) на самом деле там не два реквизита будет в дальнейшем
|
|||
85
dimm7310
27.01.14
✎
11:10
|
ТекстЗапроса = "
|declare @id char(9) |set @id =( //| select ltrim(dbo.convert10to36(max(dbo.convert36to10(left (id,6)))+1) +(select sys1.dbsign from _1ssystem sys1)) | (select dbo.convert10to36(max(dbo.convert36to10(left (id,6) ) )+1)) +(select sys1.dbsign from _1ssystem sys1) | from $Справочник.ТестНастройки Спр | where right(Спр.id,3)=(select sys.dbsign from _1ssystem sys) | ) | |insert into $Справочник.ТестНастройки (ID, Descr, $Справочник.ТестНастройки.ТипРеквизита, $Справочник.ТестНастройки.ЗначениеРеквизита,VERSTAMP,ISMARK) |VALUES ( | @id, | :Наименование1, | :ТипЗначения1, | :Значение1, | 1, | 0 |)"; выдает ошибку Incorrect syntax near the keyword 'from |
|||
86
Ёпрст
27.01.14
✎
11:14
|
(85) одна скобочка лишняя
|
|||
87
trad
27.01.14
✎
11:25
|
Моё личное мнение - прямой инсерт в справочник надо делать через объект SQLLock
Пример http://www.1cpp.ru/forum/YaBB.pl?num=1217317353/3#3 |
|||
88
Mikeware
27.01.14
✎
11:26
|
(87) и оно правильное. только как же насчет "стоя в гамаке"? :-)
|
|||
89
trad
27.01.14
✎
11:26
|
+87
из примера нужно выпилить реквизиты Владелец и Категория и впилить свои |
|||
90
trad
27.01.14
✎
11:27
|
+87 и насчет УРИБ не уверен нужно проверять
|
|||
91
trad
27.01.14
✎
11:28
|
(88) чтобы "лежа на кровати", нужно использовать "дикую" таблицу
|
|||
92
trad
27.01.14
✎
11:31
|
Могу предложить свою реализацию РС для 77
Но только у ТС будет вопросов больше чем у меня времени на ответы. Может быть опытным товарищам бы и пригодилось, но у них наверняка свои "могильнички" есть |
|||
93
Дык ё
27.01.14
✎
11:31
|
(85) без блокировок есть шанс наступить на race condition
|
|||
94
Mikeware
27.01.14
✎
11:44
|
(93) есть. ПОэтому лучше через (87)
|
|||
95
dimm7310
27.01.14
✎
12:22
|
Всем спасибо. По ссылке (87) записалось нормально
|
|||
96
dimm7310
27.01.14
✎
13:44
|
усложним задачу, нужно добавить/обновить реквизит неопределенного типа. Добавил в справочник ТестНастройки реквизит Значение2 (неопределенного типа. В том справочнике который нужно будет изменять запросами такой реквизит есть) Запускаю обработку на добавление новой записи , выдает ошибку Cannot insert the value NULL into column 'TSP30102', table 'Proba3.dbo.SC30096'; column does not allow nulls. INSERT fails. Видимо в этой колонке нужно указывать тип для новой колонки Значение (SP30102). Допустим я хочу записать в реквизит Значение2 - число, что в этом случае присвоить колонке 'TSP30102' ?
|
|||
97
Mikeware
27.01.14
✎
13:59
|
||||
98
dimm7310
27.01.14
✎
16:27
|
спасибо, все получилось.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |