|
v7: Конвертация данных | ☑ | ||
---|---|---|---|---|
0
Joshim
23.10.13
✎
15:24
|
Несколько раз в день мне необходимо переносить данные справочников из одной базы 1С 7.7 в другую базу 1С 7.7. Для этого буду использовать конфигурацию "Конвертация данных". С настройкой правил разобрался. Вопрос: Как определить какие элементы справочников в базе были изменены с момента последнего обмена и соответсвенно должны быть перенесены в другую базу?
|
|||
1
Попытка1С
23.10.13
✎
15:26
|
Для этого лучше бы УРБД подошло.
|
|||
2
Joshim
23.10.13
✎
15:26
|
(1) Базы разные
|
|||
3
Joshim
23.10.13
✎
16:22
|
никакого нет способа?
|
|||
4
Mikeware
23.10.13
✎
16:23
|
(3) УРБД
|
|||
5
Mikeware
23.10.13
✎
16:24
|
вообще, для этого МОД пидуман.
|
|||
6
varelchik
23.10.13
✎
16:25
|
(5)+100.
|
|||
7
Joshim
23.10.13
✎
16:30
|
(5) что такое МОД?
|
|||
8
varelchik
23.10.13
✎
17:18
|
(7)Менеджер Обмена Данными
|
|||
9
arsik
гуру
23.10.13
✎
17:22
|
(0) УРБД уже было?
|
|||
10
arsik
гуру
23.10.13
✎
17:22
|
(5) Он нестабилен
|
|||
11
zak555
23.10.13
✎
17:24
|
перейти на 8ку -- там реализовать обмен с помощью плана
|
|||
12
arsik
гуру
23.10.13
✎
17:24
|
(0) Ну или самое простое.
Какой ни будь справочник, с полем типа неопределено. И при изменении документа, справочника создавать новый элемент со ссылкой на это справочник. |
|||
13
varelchik
23.10.13
✎
17:30
|
(10) а ты его юзал коли такое вердикт выносиш?
|
|||
14
arsik
гуру
23.10.13
✎
17:35
|
(13) К сожалению да :)) Но это было где то лет 7-8 назад. Не думаю, что то то изменилось
|
|||
15
Mikeware
23.10.13
✎
17:36
|
(10) У людей годами работает без проблем....
---- но я бы применил УРБД с самостоятельным управлением... |
|||
16
mikecool
23.10.13
✎
17:37
|
я бы рекомендовал использовать КД2
|
|||
17
ЧессМастер
23.10.13
✎
17:40
|
(16) если я правильно понял у ТС проблема - как определить что именно нужно переносить (что изменилось между сеансами обмена)
|
|||
18
varelchik
23.10.13
✎
17:41
|
(14) Ну не нравятся мне ваши кошки.
Ха! Да вы не умеете их готовить! |
|||
19
mikecool
23.10.13
✎
17:43
|
(17) это никак не связано с моим топиком, согласен
но на будущее - запарится он править правила,написанные в КД1 |
|||
20
ЧессМастер
23.10.13
✎
17:49
|
(19) так вот в связи со стоящими перед ним проблемами встаеет вопрос - а нужна ли ему КД ? я согласен с (5) что нужно использовать МОД. он позволяет организовать обмен между РАЗНЫМИ конфами и отлично справляется с решением проблемы "что выгружать"
а заявления что МОД глючный это вранье. есть кривые руки или плохая постановка задачи а МОД отличный инструмент |
|||
21
varelchik
23.10.13
✎
17:55
|
(20)+100.
Я его еще и доработал на предмет регистрации изменений. У меня щас все на триггерах построено. Так что регистрируются изменения даже если база в пространстве УРБД находиться. И не надо использовать ОбъектЗаписать(). Триггеры сами реагируют не только на интерактивные но и программные изменения. |
|||
22
ЧессМастер
23.10.13
✎
17:58
|
(21) не понял. как ты реализовывал то что далает ЗарегистрироватьОбъектДляМод() при интерактивной записи ?
|
|||
23
GreyK
23.10.13
✎
18:14
|
(0) Если известна дата последнего обмена, то можно использовать журнал изменений.
|
|||
24
Mikeware
23.10.13
✎
19:29
|
(22) Элементарно. триггер.
(23) крайне плохое решение. |
|||
25
GreyK
23.10.13
✎
19:40
|
(24) Почему? Думаешь у ТС часто меняют справочники обработками?
|
|||
26
varelchik
24.10.13
✎
09:33
|
(25) согласен.
Думаю не часто. Вот только шерстить ЖР это уже совсем другое дело. |
|||
27
varelchik
24.10.13
✎
09:34
|
(22) Мало того я практически из форм документов и модулей проведения вообще убрал то что мод туда насовал.
И переправили все в Перехватчика. |
|||
28
varelchik
24.10.13
✎
09:35
|
+(27) и форм списков справочников и форм элементов тож.
|
|||
29
dk
24.10.13
✎
09:41
|
немного работал с МОДом лет 7-8 назад
валился, собака, если нужно было выгрузить большой объем данных - что-то около 4000 эл. номенклатуры |
|||
30
varelchik
24.10.13
✎
09:55
|
(29) это смотря какую версию mod.dll ты использовал.
так что последняя воплне нормально справляется и о огромными объемами выгрузки-загрузки. |
|||
31
Joshim
24.10.13
✎
10:59
|
Решил задачу следующим образом:
Каждому справочнику добавил реквизит GUID куда при записи записываю уникальный код. Сделал справочник "Измененные объекты" - Вид справочника - GUIDОбъекта - GUIDСобытия - Удален Глобальным поиском нашел все команды "Записать()", добавил после "Записать()" код записи в справочник "Измененные объекты". Конвертацией буду выбирать все строки из этого справочника, находить элементы базы и выгружать. Контролировать успешность обмена буду по "GUIDСобытия". После загрузки объекта в базу приемник, буду выгружать GUIDСобытия обратно в базу источник для подтверждения приема. Есть что-то еще, что необходимо учесть при обмене? |
|||
32
varelchik
24.10.13
✎
11:12
|
(31) Возми доку по УРБД и ее механизму.
Где то тут на форуме было. И все поймешь. |
|||
33
VladZ
24.10.13
✎
11:17
|
(31) Это ты молодец... Но если у тебя справочники или документы делаются какой-то обработкой - в своем чудном справочнике ты эты события не увидишь.
|
|||
34
Господин ПЖ
24.10.13
✎
11:18
|
конвертация на 7.7 - ж.па еще та...
|
|||
35
Mikeware
24.10.13
✎
11:27
|
(31) Это "чрезж0пица®"
(34) Писать правила в КД1 - да, мазохизм. но с другой стороны, работает же... |
|||
36
varelchik
24.10.13
✎
11:28
|
(35) Каждый извращается по своему.
Кому как нравится. |
|||
37
Joshim
24.10.13
✎
11:31
|
(35) какие преимущества в КД1?
|
|||
38
Joshim
24.10.13
✎
11:32
|
(33) учту это
|
|||
39
ЧеловекДуши
24.10.13
✎
11:33
|
(0) Лучше переносить через свой файлик, который бы выгружал все не в текстовый XML, а в DBF :)
Быстрее, на больших объемах :) А так же в "Конвертация данных" без бутылки не разобраться :) |
|||
40
dk
24.10.13
✎
11:36
|
(37) перенос периодических реквизитов - тупо галку поставить
а в КД2 - самому выборку настраивать и загрузку |
|||
41
Mikeware
24.10.13
✎
11:36
|
(39) Думаешь, у него не найдется денег на бутылку?
(37) у КД1 - никаких. В КД2 - удобнее |
|||
42
Aleksey
24.10.13
✎
11:38
|
(15) просто никто не говорит об этом
|
|||
43
Aleksey
24.10.13
✎
11:40
|
(20) к инструменту вопросов нет, а вот к реализации его ...., к реализации куча вопросов и допиливания напильником
|
|||
44
Aleksey
24.10.13
✎
11:41
|
(32) для файлово версии она ему не сильно поможет, ибо нет механизма работы с таблицей изменений
|
|||
45
arsik
гуру
24.10.13
✎
11:46
|
(44) Нормально все с файловой работает.
|
|||
46
Mikeware
24.10.13
✎
11:48
|
(44) Прямой очистки - нет. но можно вполне сделать "подтверждение". Это еще проще :-)
|
|||
47
Mikeware
24.10.13
✎
11:48
|
(45) проблемы с индексами
|
|||
48
Aleksey
24.10.13
✎
11:49
|
(45) и с индексами проблем нет, ну давай рассказывай как туда записать, как удалить...
|
|||
49
vvf1973
24.10.13
✎
11:52
|
в КД2 для 7.7 нет возможности синхронизировать по УИД, нет возможности организовать поиск в зависимости от условий, надо писать синхронизацию по бух. операциям, так как сами операции переносятся без проводок, подробнее у Бояркина, если нельзя перепроводить, нет возможности без перепроведения сформировать движения по регистрам :-) нет возможности организовать поиск документов по дате и номеру одновременно :-) а вот МОД, имхо, интересная разработка :-)
|
|||
50
arsik
гуру
24.10.13
✎
11:56
|
(48)
Вытаскиваем примерно так ТекстЗапроса = "SELECT | урбд.dbsign as dbsign, | урбд.typeid as typeid, | урбд.objid as objid, | урбд.deleted as deleted, | урбд.dwnldid as dwnldid, | урбд.typeid+урбд.objid as [Ссылка $Документ] | |FROM | 1SUPDTS as урбд |WHERE | урбд.dbsign = :КодБД AND | урбд.dwnldid <> ' 0' AND | урбд.typeid IN ("+СпИДДокументов+")"; А чистим вот так: //Подключимся через 1cpp к базе 77 внутри ОЛЕ Соединение = " |Provider=VFPOLEDB.1; // |Deleted=Yes; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=" + СокрЛП(ИБ77Каталог) + "; |Mode=ReadWrite; |Extended Properties=""""; |User ID=""""; |Password=""""; |Mask Password=False; |Collating Sequence=MACHINE; |DSN="""""; Рез = База.Соединение(Соединение); Если Рез = 0 Тогда Предупреждение("Не смогли подключится через OLEDBData"); Возврат Ложь; КонецЕсли; //Запросом 1cpp вытащим идентификаторы и уиды периферийной и центральной базы. Запрос = База.СоздатьКоманду(); ТекстЗапроса = "SELECT | SSYSTEM.dbsign as dbsign77, | DBSET.dbuuid as uid77, | SSYSTEM.dbsetuuid as uuid, | Подзапрос.dbsign82, | Подзапрос.uid82, | Подзапрос.filein82, | Подзапрос1.dwnldid |FROM 1SSYSTEM AS SSYSTEM |INNER JOIN 1SDBSET as DBSET ON SSYSTEM.dbsign = DBSET.dbsign |INNER JOIN ( | SELECT | DBSET.dbsign as dbsign82, | DBSET.dbuuid as uid82, | DBSET.dbfnpc as filein82 | FROM | 1SDBSET as DBSET | WHERE | DBSET.dbsign = 'V82') AS Подзапрос ON 0=0 | |INNER JOIN ( | SELECT | max(base.dwnldid) as dwnldid | FROM 1SDWNLDS as base | WHERE | base.dbsign = 'V82' AND | base.direct = 'O' AND | base.acknowl = '' |) AS Подзапрос1 ON 0=0 "; ТЗДок = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗДок.ВыбратьСтроки(); Если ТЗДок.получитьСтроку() = 0 Тогда Возврат Ложь; КонецЕсли; //собираем вручную файлы обмена КаталогВременныхФайлов = КаталогВременныхФайлов(); тФайл = Новый ТекстовыйДокумент; стр = "{""Download ID"","+СокрЛП(ТЗДок.uuid)+","""+СокрЛП(ТЗДок.dbsign82)+""","+СокрЛП(ТЗДок.uid82)+","""+СокрЛП(ТЗДок.dbsign77)+""","+СокрЛП(ТЗДок.uid77)+","""+ Формат(МД.СтрокаВЧисло(СокрЛП(Лев(ТЗДок.dwnldid,6)),36),"ЧГ=0")+"|"+СокрЛП(ТЗДок.dbsign82)+"""}"; тФайл.УстановитьТекст(стр); //Сообщить(стр); тФайл.Записать(КаталогВременныхФайлов+"1Cv77Dld.id",КодировкаТекста.OEM); стр = "{"+СокрЛП(ТЗДок.uuid)+","""+СокрЛП(ТЗДок.dbsign77)+""","+СокрЛП(ТЗДок.uid77)+","""+СокрЛП(ТЗДок.dbsign82)+""","+СокрЛП(ТЗДок.uid82)+","""+ Формат(МД.СтрокаВЧисло(СокрЛП(Лев(ТЗДок.dwnldid,6)),36),"ЧГ=0")+"|"+СокрЛП(ТЗДок.dbsign82)+""", |{""Acknowledgements"", |{"""+Формат(МД.СтрокаВЧисло(СокрЛП(Лев(ТЗДок.dwnldid,6)),36),"ЧГ=0")+"|"+СокрЛП(ТЗДок.dbsign77)+"""}}, |{""Constants""}, |{""References""}, |{""Documents""}, |{""Deleted References""}, |{""Deleted Documents""}}"; тФайл.УстановитьТекст(стр); //Сообщить(стр); тФайл.Записать(КаталогВременныхФайлов+"1Cv77Chs.dat",КодировкаТекста.OEM); архивУРБД = Новый ЗаписьZipФайла(КаталогНастроек+СокрЛП(ТЗДок.filein82)); архивУРБД.Добавить(КаталогВременныхФайлов+"1Cv77Dld.id"); архивУРБД.Добавить(КаталогВременныхФайлов+"1Cv77Chs.dat"); архивУРБД.Записать(); СоздатьПакетныеФайлы(); ТекущийКаталог = """"+оле77.КаталогПрограммы()+""""; Команда = """"+оле77.КаталогПрограммы()+"1cv7.exe"" CONFIG "+ "/D"""+СокрЛП(ИБ77Каталог)+""" "+ "/N"""+СокрЛП(ИБ77ИмяПользователя)+""" "+ "/P"""+СокрЛП(ИБ77Пароль)+""" "+ "/@"""+КаталогНастроек+"8_to_77.prm"""; тФайл = Новый ТекстовыйДокумент; тФайл.УстановитьТекст(Команда); тФайл.Записать(КаталогНастроек+"st8_to_7.cmd",КодировкаТекста.OEM); ЗапуститьПриложение(КаталогНастроек+"st8_to_7.cmd",ТекущийКаталог,Истина,КодВозврата); Возврат КодВозврата <> Неопределено; |
|||
51
Aleksey
24.10.13
✎
12:04
|
(50) Я вроде бы про чтения ничего не спрашивал
|
|||
52
arsik
гуру
24.10.13
✎
12:08
|
(51) Там и чтение и очистка.
|
|||
53
ЧессМастер
25.10.13
✎
09:53
|
(31) у тебя в твоем справочнике не будут зарегистрированы интерактивные измерения. например сделанные обработками.
можешь легко это проверить. |
|||
54
ЧессМастер
25.10.13
✎
09:56
|
(31) кстати после установки МОД на рабочую конфигурацию обязательно надо во всех новых документах методы Записать() и ему подобные переписывать на те которые использует МОД (насколько помню он называется ЗарегистироватьОбъектДляМОД)
об этом отл\дельно в доке по МОД написано |
|||
55
ЧессМастер
25.10.13
✎
09:57
|
(31) кайф УРДБ в отличии от МОД в том что тебе не надо ничего выдумывать для регистрации объектов - все что создано и изменено будет зарегистрировано (хоть в режиме пользователя хоть интерактивно)
|
|||
56
ЧессМастер
25.10.13
✎
09:59
|
(27) поясни пожалуйста про триггер. я правильно понимаю что ты это через триггеры скуля делал ?
|
|||
57
varelchik
25.10.13
✎
10:03
|
(56) Да под SQL.
|
|||
58
varelchik
25.10.13
✎
10:03
|
(56)Стучись в аську если очень интересно.
|
|||
59
ЧессМастер
25.10.13
✎
10:11
|
у УРДБ есть еще одна возможность которой у МОД нет.
это восстановление объектов которые удалены прямым удалением. после обмена объекты восстанавливаются. у меня был случай когда случайно в центральной базе удалил прямым удалением несколько десятков элементов справочника Номенклатуры (на которые были естественно ссылки в документах). уже собирался восстанавливать из архива по ОЛЕ. но после обмена с периферийной базой эти удаленные элементы восстановились |
|||
60
ЧессМастер
25.10.13
✎
10:13
|
(58) ага. на работе аська запрещена стукнусь на выходных - если ты не против
|
|||
61
Диманыч
25.10.13
✎
10:13
|
(0) Очень легко к каждому элементу справочника добавляешь
поле флаг (о том что реквизит изменен) При любой записи туда прописываешь 1(какое нить значение), при выгрузке обмена ее обнуляешь (стираешь). Это как примитив. Более сложнее можешь использовать не флаг а версию объекта, этот вариант более гибче но больше кодить |
|||
62
varelchik
25.10.13
✎
10:14
|
(59) так порукам за такие весчи давать надо и пальцы в двери.
|
|||
63
vvf1973
25.10.13
✎
10:23
|
(62) вам хочется это сделать и без повода :-)
|
|||
64
ЧессМастер
25.10.13
✎
11:30
|
(62) зачем мне самому себе давать по рукам ? сам накосячил сам исправил
|
|||
65
varelchik
25.10.13
✎
11:35
|
(60) не против.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |