Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехват Объект.Записать() (число прочтений - 12012 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #30 - 28. Сентября 2007 :: 09:38
Печать  
freagle писал(а) 28. Сентября 2007 :: 08:29:
А можешь подсказать как в УРБД реализовать следующее: документ "Реализация (комиссия)" должен в периферийной БД стать "Поступлением ТМЦ (комисиия)", и создать для себя партии, а не хватать те, которые пришли по обмену?

Могу рассказать, как это делается в простом случае. Но для 69-ти баз моя абстракция не просто протечет, а мгновенно превратится в дохлую медузу в руках ребенка.
  
Наверх
www  
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Перехват Объект.Записать()
Ответ #31 - 28. Сентября 2007 :: 09:42
Печать  
freagle писал(а) 28. Сентября 2007 :: 08:29:
Цитата:
Что имеется ввиду, не уже ли "Переносчик работает вне контекстов 1С соединяемых баз, а является самостоятельным приложением"?


Цитата:
А чем не устраивает УРБД + резать самому
( уменьшать число записей ) в _1DWNLDS перед выгрузкой ???


А можешь подсказать как в УРБД реализовать следующее: документ "Реализация (комиссия)" должен в периферийной БД стать "Поступлением ТМЦ (комисиия)", и создать для себя партии, а не хватать те, которые пришли по обмену?



Идея в том, чтоб использовать "Перехват Объект.Записать()" средствами УРБД, которая каждое изменение фиксирует в таблице _1SUPDTS, а с ней можешь делать все, что хочешь, главное получить те объекты, которые изменились.
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Перехват Объект.Записать()
Ответ #32 - 28. Сентября 2007 :: 09:43
Печать  
Правда УРБД платное 480 у.е.  Улыбка
  
Наверх
 
IP записан
 
freagle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 87
Зарегистрирован: 21. Июня 2006
Re: Перехват Объект.Записать()
Ответ #33 - 28. Сентября 2007 :: 09:44
Печать  
Цитата:
Могу рассказать, как это делается в простом случае.


Расскажи, пожалуйста. Я сам не допер.
  
Наверх
 
IP записан
 
freagle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 87
Зарегистрирован: 21. Июня 2006
Re: Перехват Объект.Записать()
Ответ #34 - 28. Сентября 2007 :: 09:55
Печать  
Цитата:
Идея в том, чтоб использовать "Перехват Объект.Записать()" средствами УРБД, которая каждое изменение фиксирует в таблице _1SUPDTS, а с ней можешь делать все, что хочешь, главное получить те объекты, которые изменились.


Это оно?
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Перехват Объект.Записать()
Ответ #35 - 28. Сентября 2007 :: 10:07
Печать  
freagle писал(а) 28. Сентября 2007 :: 09:55:
Цитата:
Идея в том, чтоб использовать "Перехват Объект.Записать()" средствами УРБД, которая каждое изменение фиксирует в таблице _1SUPDTS, а с ней можешь делать все, что хочешь, главное получить те объекты, которые изменились.


Это оно?


Наверное оно.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #36 - 28. Сентября 2007 :: 10:13
Печать  
freagle писал(а) 28. Сентября 2007 :: 09:44:
Цитата:
Могу рассказать, как это делается в простом случае.

Расскажи, пожалуйста. Я сам не допер.


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

Для этого на каждый филиал был заведен свой собственный вид документа. Этакий документ шаблон переноса.
Его формирует обработка продажи в филиал.
У него настройка миграции "место создания, центр и база соответствующего филиала.

В филиале при каждом первом запуске за день запускается обработка анализа еще не обработанных документов переноса. Она формирует приходную накладную на основании приехавших данных. В шаблоне ставится флажок обработанности.

Эту обработку анализа можно запустить и ручками. При запуске ручками можно указать период и положить болт на флаг обработанности.

Решение громоздкое и неочевидное для пользователей даже для трех филиалов.
  
Наверх
www  
IP записан
 
freagle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 87
Зарегистрирован: 21. Июня 2006
Re: Перехват Объект.Записать()
Ответ #37 - 28. Сентября 2007 :: 10:17
Печать  
Цитата:
Для этого на каждый филиал был заведен свой собственный вид документа


А можешь из "Описания метаданных" выдернуть, какой он именно из себя?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #38 - 28. Сентября 2007 :: 10:29
Печать  
freagle писал(а) 28. Сентября 2007 :: 10:17:
Цитата:
Для этого на каждый филиал был заведен свой собственный вид документа

А можешь из "Описания метаданных" выдернуть, какой он именно из себя?


Поскольку там самая главная информация - это список товаров с количествами и ценами, то я просто скопировал расходную накладную. А, ну добавил флажок обработанности на филиале.
  
Наверх
www  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #39 - 28. Сентября 2007 :: 10:39
Печать  
freagle писал(а) 28. Сентября 2007 :: 09:00:
Ведь объекты в двух базах могут быть эквивалентны (попарное сравнение полей), но не идентичны - (сравнение ссылок, в нашем случае - сравнение IDDOC/ID)

Ну так если у тебя есть таблица соответствия, то сравнение будет примерно такое:

Если ( IDздесь <> соответствия.ПолучитьIDздесь( IDтам ) )
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #40 - 28. Сентября 2007 :: 10:41
Печать  
fez писал(а) 28. Сентября 2007 :: 10:13:
freagle писал(а) 28. Сентября 2007 :: 09:44:
Цитата:
Могу рассказать, как это делается в простом случае.

Расскажи, пожалуйста. Я сам не допер.



Для этого на каждый филиал был заведен свой собственный вид документа. Этакий документ шаблон переноса.
Его формирует обработка продажи в филиал.
Решение громоздкое и неочевидное для пользователей даже для трех филиалов.


Можно сделать один вид документа ( но так как у тебя всего три филиала для тебя
не очень принципиально).
Миграция место создания центр.
В шапке документ содержит признак филиала.
Заранее в каждом филиале формируешь пустышки скажем штук по 100 скажем за дату 01.01.1980
Когда надо центр заполняет нужную пустышку и ставит тек дату док.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #41 - 28. Сентября 2007 :: 10:47
Печать  
Z1 писал(а) 28. Сентября 2007 :: 10:41:
Можно сделать один вид документа ( но так как у тебя всего три филиала для тебя
не очень принципиально).
Миграция место создания центр.
В шапке документ содержит признак филиала.
Заранее в каждом филиале формируешь пустышки скажем штук по 100 скажем за дату 01.01.1980
Когда надо центр заполняет нужную пустышку и ставит тек дату док.


В принципе да, тема. Небольшие поправки и дополнения.

"Миграция место создания центр." - миграция место создания, центр, база в москве.

"Заранее в каждом филиале формируешь пустышки скажем штук по 100 скажем за дату 01.01.1980
Когда надо центр база в москве заполняет нужную пустышку и ставит тек дату док."
Филиал, по получении заполненных пустышек, немедленно формирует аналогичное количество новых пустышек, чтобы поддерживать запас на безопасном уровне.
  
Наверх
www  
IP записан
 
freagle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 87
Зарегистрирован: 21. Июня 2006
Re: Перехват Объект.Записать()
Ответ #42 - 28. Сентября 2007 :: 12:07
Печать  
Цитата:
Ну так если у тебя есть таблица соответствия, то сравнение будет примерно такое....


Ага, мысль хороша... Действительно, что такое IDD MOD, да и любой пользовательский реквизит? Это реализация способа понять что Объект где-то там =  Объект здесь (или !=).
К плюсам идеи - прозрачное встраивание в конфигурацию, т.к. не надо иметь никакой геморрой с добавлением реквизитов, централизованой выдачей уникальных идентификаторов, и тому подобными вещами.

Перехватом записи журнала регистрации получаем DocId, асинхронно дергаем метод сервиса, что-то типа "ОбъектИзменен(Тип,Вид,ID,Действие) " Все. Рабочий поток 1С пошел дальше, тормозов - никаких, а как поступит сервис с этими данными - дело самого сервиса. Главное, что потом по этим данным можно однозначно достать объект из базы. Просто, понятно, прозрачно... Улыбка

К минусам - хотя мы не можем придумать ситуацию, когда DocId/Id будет изменен, я лично встречался с ситуацией, когда возникали дубли DocId. Исправлялось это ручной правкой. Соответственно, при обмене начнется гон, который очень тяжело будет опознать...

К возможным минусам - ручная организация таблицы соответствий. Хотя это, возможно, одновременно и плюс - можно написать все, "как надо"  Улыбка

  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Перехват Объект.Записать()
Ответ #43 - 28. Сентября 2007 :: 14:38
Печать  
freagle писал(а) 28. Сентября 2007 :: 12:07:
Перехватом записи журнала регистрации получаем...
Хо! Спасибо за наводку.

freagle писал(а) 28. Сентября 2007 :: 12:07:
хотя мы не можем придумать ситуацию, когда DocId/Id будет изменен, я лично встречался с ситуацией, когда возникали дубли DocId... Соответственно, при обмене начнется гон...
Появление дубля - это конкретный косяк в БД, такое я видел, при таком повреждении этот объект и без переноса будет вести себя невнятно, так что как бы и не до переноса будет.. Если речь о ДБФ (чтобы такое учудила 1С под SQLем - сильно сомневаюсь), то можно сделать прямые запросы, которые, в свободное от работы время, отключивши индексы, лопатят все таблицы в поисках дублей ID. Параноя Улыбка

freagle писал(а) 28. Сентября 2007 :: 12:07:
К возможным минусам - ручная организация таблицы соответствий...
Тык а какая автоматизация здесь возможна вообще? Даже если использовать не таблицу соответствий, а что-то другое? Не, понятное дело, что я сократил объем ручной работы, поставив соответствия для элементов справочников, добуквенно совпадающих по наименованию и еще несколько подобных вещей, но если базы, которые собираемся сцеплять, не пустые, то ручная работа понадобится по любому.
  
Наверх
ICQ  
IP записан
 
freagle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 87
Зарегистрирован: 21. Июня 2006
Re: Перехват Объект.Записать()
Ответ #44 - 28. Сентября 2007 :: 16:14
Печать  
Цитата:
чтобы такое учудила 1С под SQLем - сильно сомневаюсь


Хех. Твои бы слова да богу в уши... Чудила, еще как чудила. Я потратил неделю на поиски косяка, пока не начал проверять ВСЕ, в том числе и DocId.

Сейчас у нас ночь с пятницы на субботу, время, когда я могу отключить все - сотовый, почту, аську... Попробую что-нить наваять. Спасибо за идею.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать