:: Вопросы по 1С
Синхронизация с MS SQL
Аспид
Автор

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
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
Что то я в тупике(


------------------
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
MStxt = ТекущийОбъект.Наименование;
MStxtFull = ТекущийОбъект.НаименованиеПолное;
MScod1s = ТекущийОбъект.Код;

Размерность в 1С совпадает с параметрами ХП?

@TXT varchar(250)=NULL,
@TXTfull varchar(250)=null,
@COD1S char(9)='',


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
Аспид
Автор

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Да, конечно.
По моему, при несовпадении, адо даже ругается.
Нет. Тут нету косяков.
@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));


------------------




Исправлено 1 раз(а). Последнее : Аспид, 17.01.17 10:21
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
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
)


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 17.01.17 10:26
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
Аспид
Автор

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
так мне id нужен.
Он же в апдейте используется
Размерности те же.
Вообще, в ХП все настолько прозрачно, что полагаю дело не в ней, а в 1С
Где то там не тот код1с цепляется. Почему - не пойму(


------------------




Исправлено 1 раз(а). Последнее : Аспид, 17.01.17 11:21
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Аспид
так мне id нужен.
Он же в апдейте используется
Размерности те же.
Вообще, в ХП все настолько прозрачно, что полагаю дело не в ней, а в 1С
Где то там не тот код1с цепляется. Почему - не пойму(

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С и на сервере, что бы знать, что передаётся и принимается.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
1. Еще раз, откуда вызывается? Из какого события? Может, "ПослеЗаписиНаСервере"?
2. Почему "ТекущийОбъект"? Откуда он взялся?



Исправлено 1 раз(а). Последнее : pasha_usue, 17.01.17 14:16
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
Аспид
Автор

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Ну точно оговорился)
вот вызов
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
_MSSQL.СохранениеКонтрагента(ТекущийОбъект);


------------------
Ratings: 0 negative/0 positive
Re: Синхронизация с MS SQL
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
событие ПослеЗаписи() вроде генерится даже если объект не менять в прямом смысле а просто пометить на удаление
Так что ismark=0 не канает имхо, и его мона/нуна удалить


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика