![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Л и с о в о д ы в с е х с т р а н, о б ъ е д и н я й т е с ь !!! |
Синхронизация с MS SQL | |||
---|---|---|---|
Аспид Автор Сообщений: 3215 Откуда: Москва |
1С:Предприятие 8.3 (8.3.8.2054)
Бухгалтерия предприятия, редакция 3.0 (3.0.44.204) Есть синхронизация контрагентов, между 1С и нашей БД на MS SQL. Односторонняя. Тока из 1С. В нашем ПО контрагенты не трогаются. Только выбираются. Где то за год эксплуатации, 2 раза налетал на ошибку. В нашей БД меняется контрагент - наименование и реквизиты. А код 1С от старого. В 1С синхронизация вызывается из формы элемента, из "После запуска на сервере" Сокращенный код MStxt = ТекущийОбъект.Наименование; MStxtFull = ТекущийОбъект.НаименованиеПолное; MScod1s = ТекущийОбъект.Код; ... CmdMS.CommandText = "Cust1SV8Ins"; CmdMS.Parameters.Append(CmdMS.CreateParameter("TXT",200,1,250,MStxt)); CmdMS.Parameters.Append(CmdMS.CreateParameter("TXTFUll",200,1,250,MStxtFull)); CmdMS.Parameters.Append(CmdMS.CreateParameter("COD1S",129,1,9,MScod1s)); ...Т.е. везде использую ТекущийОбъект, который передается параметром из формы. В ХП Cust1SV8Ins. Только основное, чо относится к делу ALTER PROCEDURE[dbo].[Cust1SV8Ins] @TXT varchar(250)=NULL, @TXTfull varchar(250)=null, @COD1S char(9)='', ... *Выбираю @id базы, наплюйте на top 1 select top 1 @id=id_custom from custom where cod1s=@COD1S and ismark=0 order by ID_CUSTOM if @id is null begin *тут все ясно, и без проблем insert into custom (txt,TXTfull,cod1s,...) values (@TXT,@TXTfull,@COD1S,...) select @id=SCOPE_IDENTITY() end else * явно вот тут UPDATE [dbo].[custom] SET txt = @TXT ,[cod1s] = @COD1S ,[txtfull] = @txtfull ... WHERE ID_CUSTOM=@id Впечатление, что где то передается код1С от другой записи. Но я беру ТекущийОбъект. В логе написано, что изменение сделал 1C:Enterprise 8.3 Более того, последний косяк увидел вчера, сделано изменение 24.10.2016 И контрагента, на который поменялось, вообще нет в 8.3 Что то я в тупике( ------------------ ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
PaulWist Сообщений: 13026 |
MStxt = ТекущийОбъект.Наименование; MStxtFull = ТекущийОбъект.НаименованиеПолное; MScod1s = ТекущийОбъект.Код; Размерность в 1С совпадает с параметрами ХП? @TXT varchar(250)=NULL, @TXTfull varchar(250)=null, @COD1S char(9)='', ------------------ Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
Аспид Автор Сообщений: 3215 Откуда: Москва |
Да, конечно.
По моему, при несовпадении, адо даже ругается. Нет. Тут нету косяков. @TXT varchar(250), @TXTfull varchar(250), @COD1S char(9), CmdMS.Parameters.Append(CmdMS.CreateParameter("TXT",200,1,250,MStxt)); CmdMS.Parameters.Append(CmdMS.CreateParameter("TXTFUll",200,1,250,MStxtFull)); CmdMS.Parameters.Append(CmdMS.CreateParameter("COD1S",129,1,9,MScod1s)); ------------------ Исправлено: Аспид, 17.01.17 09:21 ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
PaulWist Сообщений: 13026 |
1. И табличка custom тоже имеет такую же размерность?
2. Вот это "безобразие" select top 1 @id=id_custom from custom where cod1s=@COD1S and ismark=0 order by ID_CUSTOM if @id is null я бы по другому переписал: if not exists ( select top 1 id_custom from custom where cod1s=@COD1S and ismark=0 order by ID_CUSTOM ) ------------------ Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено: PaulWist, 17.01.17 09:26 ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
Аспид Автор Сообщений: 3215 Откуда: Москва |
так мне id нужен.
Он же в апдейте используется Размерности те же. Вообще, в ХП все настолько прозрачно, что полагаю дело не в ней, а в 1С Где то там не тот код1с цепляется. Почему - не пойму( ------------------ Исправлено: Аспид, 17.01.17 10:21 ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
PaulWist Сообщений: 13026 |
1. Дык, ты же этот ID получаешь из комбинации cod1s=@COD1S and ismark=0значит и обновление тоже должно быть на основании этих реквизитов. 2. Как раз с ХП не всё прозрачно, у тебя ismark=0 установлен вольюнтаристким путём, например у тебя НЕ существует запись, где cod1s=@COD1S and ismark=0, те может существовать cod1s=@COD1S and ismark=1, то запрос select top 1 @id=id_custom from custom where cod1s=@COD1S and ismark=0 order by ID_CUSTOM вернёт null ! В это время другой клиент для cod1s=@COD1S изменяет с ismark=1 на ismark=0, то ты получаешь дубль для cod1s=@COD1S 3. Или лог делай в 1С и на сервере, что бы знать, что передаётся и принимается. ------------------ Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
pasha_usue Сообщений: 3001 Откуда: Е-бург |
1. Еще раз, откуда вызывается? Из какого события? Может, "ПослеЗаписиНаСервере"?
2. Почему "ТекущийОбъект"? Откуда он взялся? Исправлено: pasha_usue, 17.01.17 13:16 ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
Аспид Автор Сообщений: 3215 Откуда: Москва |
Ну точно оговорился)
вот вызов &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) _MSSQL.СохранениеКонтрагента(ТекущийОбъект); ------------------ ![]() |
||
Re: Синхронизация с MS SQL | |||
---|---|---|---|
Foxtrot Сообщений: 3359 Откуда: Куда: |
событие ПослеЗаписи() вроде генерится даже если объект не менять в прямом смысле а просто пометить на удаление
Так что ismark=0 не канает имхо, и его мона/нуна удалить ------------------ P.S. будете проходить мимо, не стесняйтесь, проходите ![]() |
||
© 2000-2019 Fox Club  |