Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Вставка данных в таблицы 1С прямыми запросами (число прочтений - 2394 )
VitGun
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 06. Июня 2006
Вставка данных в таблицы 1С прямыми запросами
06. Декабря 2008 :: 08:36
Печать  
Кто нибудь пользуется прямыми запросами для вставки данных? например запись в регистр? Если да, то можно примерчик?
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Вставка данных в таблицы 1С прямыми запросами
Ответ #1 - 06. Декабря 2008 :: 09:01
Печать  
VitGun писал(а) 06. Декабря 2008 :: 08:36:
Кто нибудь пользуется прямыми запросами для вставки данных? например запись в регистр? Если да, то можно примерчик?


Пользуюсь для вставки периодических реквизитов

Там проще всего: не надо генерить 36-ричные ID и обновлять соответствующий счетчик.

Код
Выбрать все
	|set nocount on
	|
	|DECLARE @ТоварФильтр char(9)
	|
	|SET @ТоварФильтр = ?
	|
	|BEGIN TRANSACTION
	|
	|DECLARE @vu TABLE ( objid CHAR(9), PRIMARY KEY CLUSTERED (objid) )
	|
	|INSERT INTO @vu
	|SELECT ID FROM
	|$Справочник.Номенклатура (NOLOCK)
	|WHERE
	|$Справочник.Номенклатура.ГлавныйЛист = @ТоварФильтр
	|AND
	|ID <> @ТоварФильтр
	|AND
	|isfolder<>1
	|
	|exec _1sp__1SCONST_TLockX
	|
	|delete from _1sconst
	|where
	|id in (select id from "+ИмяВрТаб+")
	|and
	|objid in (select * from @vu)
	|and docid = '     0   '
	|
	|insert into _1sconst
	|(id, objid, date, value, docid, time, actno,lineno_,tvalue)
	|select seed.id as id, tlist.objid as objid, seed.date as date, seed.value as value, seed.docid as docid, seed.time as time, seed.actno as actno, seed.lineno_ as lineno_, seed.tvalue as tvalue
	|from
	|(select * from _1sconst
	|where
	|id in (select id from "+ИмяВрТаб+")
	|and
	|objid = @ТоварФильтр
	|and docid = '     0   '
	|) seed
	|cross join
	|@vu
	|tlist
	|
	|COMMIT TRANSACTION
	|" 



Как нетрудно догадаться, данный запросик грохает историю реквизитов товаров, ссылающихся своим реквизитом ГлавныйЛист на @ТоварФильтр (список требуемых периодических реквизитов, соответственно, сидит заранее в ИмяВрТаб). А затем заменяет эту историю историей элемента номенклатуры @ТоварФильтр
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
VitGun
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 06. Июня 2006
Re: Вставка данных в таблицы 1С прямыми запросами
Ответ #2 - 06. Декабря 2008 :: 09:12
Печать  
спасибо. будем думать
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вставка данных в таблицы 1С прямыми запросами
Ответ #3 - 08. Декабря 2008 :: 09:55
Печать  
С регистрами не так все просто, вставить то можно, но кроме вставить надо еще пересчитать и таблицу итогов RG. Хотя сложнее всего с бух табличами, там если настроены отборы и итоги - то надо еще в 2 таблицах итоги пересчитывать (а может и в 3).
  
Наверх
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Вставка данных в таблицы 1С прямыми запросами
Ответ #4 - 09. Декабря 2008 :: 13:10
Печать  
когдато давно делал пересчет/расчет данных по регистру
юзал гдето в таком русле:
Код
Выбрать все
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку() = 1 Цикл
	Т = "
	|CREATE PROCEDURE #Регистр AS
	|SET TEXTSIZE 0
	|SET NOCOUNT ON
	|insert into raXXXX (iddoc, lineno_, actno, debkred, sp1, sp2)
	|values (....)
	|return(0)
	|";
	ЗапросСкл.Выполнить(Т);
	ЗапросСкл.Выполнить("exec #Регистр");
	ЗапросСкл.Выполнить("drop procedure #Регистр");
КонецЦикла;
ЗапросСкл.Выполнить("update _1sjourn set actcnt = N, rfXXXX = 1 where iddoc = :Док");
 

  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать