|
Уникальный идентификатор | ☑ | ||
---|---|---|---|---|
0
Азат
29.02.12
✎
10:35
|
Собственно, суть: выгрузка из самописки (ОУ) в бухгалтерию, причем из первой во вторую сразу несколько документов переносятся в документ одного вида ("Операция, введенная вручную"). Бухия ни разу не тронутая, девственная и тп.
Внимание, вопрос: что можно использовать в качестве уникального идентификатора при таком переносе? |
|||
1
PVV65
29.02.12
✎
10:36
|
Уникальный идентификатор.
|
|||
2
mikecool
29.02.12
✎
10:36
|
новый уникальй, сохраненный в документе и присвоенный операции в бухе
|
|||
3
PVV65
29.02.12
✎
10:37
|
+(1) Который уже существует.
|
|||
4
Reset
29.02.12
✎
10:38
|
Уникальный идентификатор ссылки. Вероятность совпадения "крайне мала" (с).
|
|||
5
Азат
29.02.12
✎
10:38
|
(2) а повторения не будет?
|
|||
6
Азат
29.02.12
✎
10:38
|
(3) херню сказал
|
|||
7
Азат
29.02.12
✎
10:38
|
(4) см (6) к тебе тоже относится... получил я такую вероятность - когда сливал 2 объекта по 10000 элементов в 1 общий
|
|||
8
PVV65
29.02.12
✎
10:39
|
(6) Да ты что!!!
|
|||
9
Reset
29.02.12
✎
10:39
|
(6) Не груби
|
|||
10
PVV65
29.02.12
✎
10:39
|
(7) Не повезло...
|
|||
11
mikecool
29.02.12
✎
10:40
|
(7) я еще ни разу не попался на таком
бульбень тогда херь какую нить из вид + номер+ дата + время и все в 36 разрядном виде ) |
|||
12
Reset
29.02.12
✎
10:40
|
(10) ... с руками
|
|||
13
Азат
29.02.12
✎
10:42
|
(11) ну это канеш вариант - типа в коммент пихать "ЗначениеВСтрокуВнутр" или что-нить такое
(12) тебе с ДНК не повезло, никто же об этом не кричит на весь форум |
|||
14
ЭЦ
29.02.12
✎
10:42
|
Я бы использовал GUID (Глобальный уникальный идентификатор).
И еще потребуется создать регистр в котором отслеживать какие исходные документы соответствуют каким операциям. |
|||
15
Азат
29.02.12
✎
10:42
|
(14) в принципе, в ОУ проблем нет, вопрос, насколько это затронет все остальные процессы в конфе
|
|||
16
ЭЦ
29.02.12
✎
10:47
|
никакие процессы это не затронет и даже обновляться будет нормально.
При этом конечно имеется в виду, что в базе приемнике хранится XML представление GUID |
|||
17
Азат
29.02.12
✎
10:49
|
(16) эмм, а что имеется в виду под ГУИД? в смысле, как его получить средствами 1С?
|
|||
18
PVV65
29.02.12
✎
10:50
|
(17) Не поверишь, так же как УникальныйИдентификатор.
|
|||
19
ЭЦ
29.02.12
✎
10:53
|
Например вот так :
XML_ПредставлениеGUID = XMLСтрока(СсылкаНаОбъект); |
|||
20
Азат
29.02.12
✎
10:54
|
(19) спс, щас попробую
|
|||
21
Sammo
29.02.12
✎
10:57
|
(20) Секундочку, вроде бы оно у тебя судя по 7 пересеклось.
Кстати, пересечение возможно, когда гуиды ставят шаловливыми ручками... |
|||
22
Азат
29.02.12
✎
10:59
|
(21) да, пересеклось, думалось, что будет уникально, но при попытке УстановитьСсылкуНового оч сильно ругалось и материлось...
ЗЫ, ни одного ууида из перечисленных руками не ставилось... |
|||
23
Reset
29.02.12
✎
11:00
|
Про (19) сказано еще в (1). Правда, автор сказал, что это херня.
|
|||
24
Sammo
29.02.12
✎
11:04
|
(22) Что и требовалось доказать. Пересечение возникло при установке ссылки руками...
|
|||
25
Азат
29.02.12
✎
11:11
|
(24) читай постскриптум в (22) до полного просветления...
в ОУ загрузили 2 справочника по 10000 элементов... после этого запустили перенос в один справочник в БП в БП при создании устанавливали ссылку элемента из ОУ... |
|||
26
Азат
29.02.12
✎
11:12
|
(23) читай второе предложение в (13) до полного просветления
|
|||
27
Sammo
29.02.12
✎
11:21
|
(25) У разных элементов метаданных могут быть одинаковые уникальные идентификаторы. Но опять же только в том случае, если их ставили руками
|
|||
28
Азат
29.02.12
✎
11:25
|
(27) я не собираюсь тебя уговаривать и в чем-то оправдываться...
(19) почему-то XMLСтрока тот же УУИД возвращает... короче, все извраты нафиг, ЗначениеВСтрокуВнутр рулит... |
|||
29
PVV65
29.02.12
✎
11:37
|
(28) Как будто ЗначениеВСтрокуВнутр вернет другое...
|
|||
30
Азат
29.02.12
✎
11:38
|
(29) ну ты хоть посмотри сначала, советчик ***
|
|||
31
ЭЦ
29.02.12
✎
11:40
|
(28) Смотри внимательно - часто бывает, что отличается только одна буква
|
|||
32
Reset
29.02.12
✎
11:46
|
(29) Забей, полудурок он и есть полудурок.
|
|||
33
Азат
29.02.12
✎
11:46
|
(31) я канеш оч сильно извиняюсь, но: http://s017.radikal.ru/i429/1202/ee/03b38bc8c687.jpg
Код: Стр = СокрЛП(Расход.УникальныйИдентификатор()) + Символы.ПС + СокрЛП(XMLСтрока(Расход.Ссылка)) + Символы.ПС + СокрЛП(ЗначениеВСтрокуВнутр(Расход)); |
|||
34
Азат
29.02.12
✎
11:49
|
(32) канеш забей, даром, что полудурок на тебя из зеркала смотрит
|
|||
35
ZUM
29.02.12
✎
11:51
|
Используй один и тот же GUID что в источнике что в приемнике и не будет проблем с синхронизацией УстановитьСсылкуНового() тебе поможет.
|
|||
36
ЭЦ
29.02.12
✎
11:51
|
а код обработки можно посмотреть
|
|||
37
Sammo
29.02.12
✎
11:52
|
(29) Емнип, значениевнутр вернет 2 идентификатора.
Второй - гуид в форме хранения скуля. Первый, емнип, метаданного, но зуб не дам. |
|||
38
ZUM
29.02.12
✎
11:55
|
//Определяем есть ли документ в системе
докСсылка = Документы.ДокуменПриемник.ПолучитьСсылку(Новый УникальныйИдентификатор(ТаблицаДанных.Ид)); //ТаблицаДанных.Ид - текстовое представление GUID источника Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокуменПриемник.Ссылка |ИЗ | Документ.ДокуменПриемник КАК ДокуменПриемник |ГДЕ | ДокуменПриемник.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",докСсылка); Если Запрос.Выполнить().Пустой() Тогда // Нету, создаем новый устанавливаем ссылку ДокументОбъект = Документы.ДокуменПриемник.СоздатьДокумент(); ДокументОбъект.УстановитьСсылкуНового(докСсылка); Иначе //Есть будем работать с найденным документом ДокументОбъект = докСсылка.ПолучитьОбъект(); КонецЕсли; |
|||
39
ZUM
29.02.12
✎
11:57
|
У меня указанная схема уже пол года молотит нареканий небыло
|
|||
40
ЭЦ
29.02.12
✎
11:59
|
(33)
СокрЛП(Расход.УникальныйИдентификатор()) СокрЛП(XMLСтрока(Расход.Ссылка)) это одно и тоже только второе набивать быстрее и лучше просто XMLСтрока(Расход.Ссылка) |
|||
41
ЭЦ
29.02.12
✎
12:05
|
(38) А как быть если база приемник была ранее получена путем копирования базы источника.
и сответственно в ней много повторяющихся GUIDов |
|||
42
ZUM
29.02.12
✎
12:06
|
Они не могут совпадать по определению это одни и те же элементы.
|
|||
43
ZUM
29.02.12
✎
12:08
|
Используйте конвертацию 2.0 быстро и красиво.
И по внутренним идентификаторам умеет синхронизировать. Указанную обработку на конвертации можно за 1 час с чайком намолотить. |
|||
44
ЭЦ
29.02.12
✎
12:10
|
Они не могут НЕ совпадать именно потому, что на момент копирования это были одни и теже объекты.
А затем эти объекты могли быть переименованы - т.е. по смыслу стать другими. |
|||
45
Sammo
29.02.12
✎
12:11
|
(41) Тогда это одни и теже данные.
|
|||
46
Sammo
29.02.12
✎
12:11
|
+ 45 с учетом 44 - тогда ССЗБ
|
|||
47
ZUM
29.02.12
✎
12:23
|
(44) Регистр соответствия GUID-ов Вам в помощь.
|
|||
48
ЭЦ
29.02.12
✎
12:24
|
(45) С точки зрения GUID - одни и теже, а по смыслу может быть разные.
например был контрагент Пупкин. Скопировали базу и мудрая девушка переименовала Пупкина в Газпром. А в первичной базе Пупкин остался Пупкиным - Вы на него вешаете наладные и оплаты пупкина. В тоже время в базе копии на него вешаются накладные Газпрома. Потом Вы делаете обмен по GUID и в лучшем случае у Вас Пупкин пропадает и появляется Газпром, а в худшем на Пупкина вешаются все долги Газпрома. |
|||
49
PVV65
29.02.12
✎
12:27
|
(48) И какой вывод?
|
|||
50
ZUM
29.02.12
✎
12:28
|
(47) :)
|
|||
51
ЭЦ
29.02.12
✎
12:32
|
(49) Вывод такой.
По GUID синхронизировать очень хорошо, НО Если синхронизируются не пустые базы, то прежде чем запускать обмен надо проверить, что синхронизируемые по GUID объекты семантически идентичны (т.е. обозначают одно и тоже). Я напимер, писал обработочку которая, которая находила одинаковые GUID в обеих базах и сравнивала их типы и наименования. В случае их совпадения вс Зер гуд. Иначе - разбираться. |
|||
52
PVV65
29.02.12
✎
12:34
|
(51) А если после (51) пользователь сделал (48)?
|
|||
53
ZUM
29.02.12
✎
12:35
|
(51) ага и в случае не совпадения создать новый элемент и
(47) :) |
|||
54
ЭЦ
29.02.12
✎
12:38
|
(52) В этом случае уже должна работать бизнес логика заложенная в обмене. Какая база является первоисточником данных по контрагентам, кто может их переиминовывать, нужно ли спрашивать разрешение на переименование при загрузке и т.п.
|
|||
55
PVV65
29.02.12
✎
12:40
|
(54) Тогда к чему пост (48). То, что изложено в (54) должно быть всегда (хотя и не все).
|
|||
56
PVV65
29.02.12
✎
12:41
|
+(55) А бизнес-логика должна быть при работе с базой (например, нельзя переименовывать контрагента).
|
|||
57
ЭЦ
29.02.12
✎
12:44
|
(55) К тому что 48 - предполагает ручное разбирательсво которое никак не запрограмировать.
а 54 - это уже после выполнения ручного разбирательства и сопоставления контрагенов |
|||
58
ShoGUN
29.02.12
✎
12:48
|
Облин, у кого-то GUID-ы пересеклись, причём он утверждает, что они сами по себе так сделали... Ну-ну. Математику принципиально игнорируем :)
|
|||
59
ZUM
29.02.12
✎
12:49
|
(57) Зачем эти сложности?
Один раз пишется обработка которая в базе приемнике в случае совпадения GUID с базой приемника перепривязываются на другие назначенные им в источнике Пример: Источник: Приемник |
|||
60
ZUM
29.02.12
✎
12:50
|
Петров 1 Иванов 1
Иванов 2 Петров 2 Обработали Пертров 1 Иванов 2 Иванов 2 Петров 1 Все |
|||
61
ЭЦ
29.02.12
✎
12:52
|
(60) В некоторых случаях надо препривязывать, а в некотрых не надо.
Каждый раз (до первичной синхронизации) надо смотреть. |
|||
62
Beduin
29.02.12
✎
12:55
|
Смешно. У автора ИЗ в профиле.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |