Имя: Пароль:
1C
1C 7.7
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
*SET ID = i,

Что-то глюкануло :)
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
спасибо, все получилось.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn