Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перенос справочников (число прочтений - 8701 )
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #15 - 23. Октября 2008 :: 05:40
Печать  
Если элемент присутствует уже в справочнике, то он только обновляется (выбранные реквизиты).  А вообще, обработка практически готова и довольно неплохо выполняет то, что надо мне. И гораздо быстрее, чем это делать через OLE.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Перенос справочников
Ответ #16 - 23. Октября 2008 :: 06:45
Печать  
Antes писал(а) 23. Октября 2008 :: 05:40:
Если элемент присутствует уже в справочнике, то он только обновляется (выбранные реквизиты).  А вообще, обработка практически готова и довольно неплохо выполняет то, что надо мне. И гораздо быстрее, чем это делать через OLE.


синхронизация по внешнему id ? Или по какому полю?
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #17 - 23. Октября 2008 :: 06:57
Печать  
Берем элемент текущей базы, определяем по коду или наименованию его ID  в удаленной базе (с учетом подчинений, родителей). Если таковой имеется в базе, то простым запросом по ID обновляем строку (можем выборочно реквизиты) в таблице справочника (и, соотв. в таблице _1sconst). Если такового нет, то добавляем новую запись, заполняя все поля и делая записи в _1sconst (если есть периодич. реквизиты).
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #18 - 23. Октября 2008 :: 07:07
Печать  
Выглядит это вот так.
  

1_006.jpg ( 114 KB | Загрузки )
1_006.jpg
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Перенос справочников
Ответ #19 - 23. Октября 2008 :: 09:17
Печать  
синхронизировать по наименованию или коду опасно, бухи такое натворить могут, дублей не оберешься (переименуют в удаленной базе куда выгружаешь несколько элементов и вот он дубль)
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #20 - 23. Октября 2008 :: 09:23
Печать  
А тут без вариантов! По-моему.
Тем более, что можно выбирать и реквизиты, и справочники, и элементы...
К внешнему ID вообще привязываться нельзя - такое натворить можно, что дубли - просто шалости! ID в двух базах будут совпадать только в том случае, если инфа вносится в одной, а в другую производится только выгрузка.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перенос справочников
Ответ #21 - 23. Октября 2008 :: 09:26
Печать  
Делал. Все кроме периодических реквизитов переноситься:
INSERT - того чего нет, и UPDATE - тто что есть, синхронизация по ID. MD должны быть полностью одинаковыми.
  
Наверх
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Перенос справочников
Ответ #22 - 23. Октября 2008 :: 09:27
Печать  
Antes писал(а) 23. Октября 2008 :: 09:23:
А тут без вариантов! По-моему.
Тем более, что можно выбирать и реквизиты, и справочники, и элементы...
К внешнему ID вообще привязываться нельзя - такое натворить можно, что дубли - просто шалости!


Внешний ID - единственный выход когда, например в одну базу в спр-к номенклатура сливается из разных баз, где номенклатура межет не совпадать.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #23 - 23. Октября 2008 :: 09:31
Печать  
ID в двух базах будут совпадать только в том случае, если инфа вносится в одной, а в другую производится только выгрузка.
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Перенос справочников
Ответ #24 - 23. Октября 2008 :: 09:32
Печать  
pvase писал(а) 23. Октября 2008 :: 09:26:
Делал. Все кроме периодических реквизитов переноситься:
INSERT - того чего нет, и UPDATE - тто что есть, синхронизация по ID. MD должны быть полностью одинаковыми.


ID элемента при Insert так правильно получать ?

Код
Выбрать все
set nocount on
select @id=MAX(ID) from SCХХХХ(NOLOCK)
if @id is null select @id='         ' 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #25 - 23. Октября 2008 :: 09:34
Печать  
Видимо, под термином "внешний ID" мы понимаем разные вещи. Я понимаю это, как ID справочника из "чужой" базы, по отношению к данной.
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Перенос справочников
Ответ #26 - 23. Октября 2008 :: 09:35
Печать  
Antes писал(а) 23. Октября 2008 :: 09:31:
ID в двух базах будут совпадать только в том случае, если инфа вносится в одной, а в другую производится только выгрузка.

можно конечно, но нужно на 100% уверенным быть в этом, бухи что и удалять не могут в справочниках и чистить помеченных на удаление ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Перенос справочников
Ответ #27 - 23. Октября 2008 :: 09:37
Печать  
Antes писал(а) 23. Октября 2008 :: 09:34:
Видимо, под термином "внешний ID" мы понимаем разные вещи. Я понимаю это, как ID справочника из "чужой" базы, по отношению к данной.

Да. так и есть, я имел ввиду под внешним id то что в моде называется idd
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #28 - 23. Октября 2008 :: 09:37
Печать  
Неверно!
В этом случае вы получаете максимальный из имеющихся в базе. А вам это значение нужно увеличить на 1, для чего вы должны преобразовать из 36-ричной системы в 10-ю, добавить 1, и преобразовать обратно!
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Перенос справочников
Ответ #29 - 23. Октября 2008 :: 09:39
Печать  
Я сделал это вот так:

ТекстЗапроса = "
                             |DECLARE @syst int
                             |DECLARE @MAX_ID CHAR(9)
                             |DECLARE @num int
                             |DECLARE @ID CHAR(9)
                             |DECLARE @i bigint
                             |DECLARE @c int
                             |DECLARE @Len_ID_1SObj int
                             |DECLARE @DateValue datetime
                             |DECLARE @IDRekv int
                             |DECLARE @Value char(255) 
                             |DECLARE @ТValue char(3)
                             |SET @syst = 36
                             |SET @Len_ID_1SObj = 6
                             |SET @MAX_ID = ''
                             |SET @i=0
                             |
                             |EXEC _1sp_" + ТабБД + "_MaxID @ID OUTPUT 
                             |SELECT @ID = UPPER(LTRIM(LEFT(@ID,@Len_ID_1SObj)))
                             |
                             |WHILE @ID<>''
                             |      SELECT @c=ascii(LEFT(@ID,1)),
                             |          @c=case when @c>57
                             |                  then @c-55
                             |                  else @c-48 end,
                             |               @i = @i + @c * power(@syst,len(@ID)-1),
                             |          @ID=SUBSTRING(@ID,2, len(@ID))
                             |
                             |
                             |SET @num = @i + 1
                             |
                             |WHILE @num>0
                             |         select @MAX_ID=char(case when @num%@syst < 10
                             |                   then @num%@syst + ascii('0')
                             |                   else @num%@syst + ascii('A')-10 end)   +@MAX_ID, 
                             |             @num=@num / @syst
                             |
                             |WHILE Len(@MAX_ID)<@Len_ID_1SObj
                             |      select @MAX_ID = ' '+@MAX_ID
                             |SELECT @MAX_ID = CONVERT(char(9), @MAX_ID)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать