Имя: Пароль:
1C
1С v8
Конвертация данных: из двух баз в одну
, ,
0 DenYuliya
 
16.01.19
16:28
Идея такова: у одной конторы есть 2 идентичные по метаданным базы ЗУП (допустим, ЗУП1 и ЗУП2). Префиксов в базах нет, потому что сначала не подумали, а теперь там вовсю идет учет и менять поздно.
Решено было делать выгрузку из ЗУП1 и ЗУП2 в Бухгалтерию, типовыми (почти, за исключением вопроса ниже).

Вопрос: как сделать так, чтобы перенесенные элементы справочников и документы, при совпадение кода/наименования, не затерли друг друга и при этом все были перенесены?

Грубо говоря, Док1 из базы ЗУП1 и Док1 из базы ЗУП2 - это 2 разных документа, они должны быть перенесены оба.

Вариант добавления префикса (в зависимости от базы) в процессе переноса - годный? Что-то вроде "Номер = Зуп1 + Номер".
Или я изобретаю велосипед, и есть какое-то более изящное решение?

Погушлила
1 DenYuliya
 
16.01.19
16:31
блин. Естественно, перед созданием темы погуглила.
Ничего толком не нашла. Буду очень благодарна, если тема не будет засоряться неконструктивными советами типа "погугли, почитай СП".
А вот если посоветуете "кодовое слово для поиска" - буду премного благодарна, т.к., возможно, я не правильно задаю вопрос Гуглу)).
2 ДенисЧ
 
16.01.19
16:32
Да, префиксация документов сойдёт.
Но учти, у тебя ещё и справочники поедут, их тоже префиксовать надо... А это не во всех возможно...
3 OldCondom
 
16.01.19
16:34
поддержу (2), рабочая схема, делал так с 5-6 зупами в одну бухию. И да, постоянная проблема со справочниками физ. лиц были. Но у нас еще и одно физ. лицо могло в двух и более базах быть=)
4 OldCondom
 
16.01.19
16:34
в смысле на 0.2 ставки быть и там и там и там
5 OldCondom
 
16.01.19
16:35
Справочникам в итоге менял поля поиска, в большинстве случаев спасало. А потом добился от бухов перейти на "сводно по всем сотрудникам".
6 DenYuliya
 
16.01.19
16:37
Спасибо!
Да, про справочники я понимаю, что там тоже надо префиксы задавать.
А что за известная проблема со справочниками?
7 DenYuliya
 
16.01.19
16:38
Ну то есть из-за чего она возникает, эта проблема? Какие-то ограничения со стороны платформы?
8 DenYuliya
 
16.01.19
16:39
И еще, (3), глупый вопрос: а вы для каждого из 5-6 баз делали свои правила с разными префиксами, или делали одно правило с условием по организации и префиксом в зависимости от?
9 ДенисЧ
 
16.01.19
16:40
(7) Ну если у тебя у какого-о справочника код числовой, а не текстовый, как ты ему префикс прикрутишь?
Или вести в бухе какой-то регистр соответствия, но заполнять руками и сопоставлять по нему...
10 GANR
 
16.01.19
16:40
(6) Со справочниками сложнее всего. Пробуй после каждого этапа загрузки проверять базу на дубли (типовая обработка) и по ходу решай как менять правила конвертации.
11 DenYuliya
 
16.01.19
16:41
спасибо, приму к сведению!
12 OldCondom
 
16.01.19
16:42
(8) Лишь для 1-2 что-то свое добавлял, исключительно из-за своей специфики, а так одно переписанное работало для всех.
13 Ботаник Гарден Меран
 
16.01.19
16:48
Все объекты синхронизировать только по GUID. Всё.
14 DenYuliya
 
16.01.19
16:50
(13) была у меня такая мысль, мол "что -то ведь там еще есть. кроме кода и наименования, типа УИН".
Не может быть все так просто))) Наверняка найдутся подводные камни - а то все бы так и делали.
15 DenYuliya
 
16.01.19
16:52
(13) могут ведь и guid совпасть...
16 GANR
 
16.01.19
16:55
(13) Я всеми руками за. Но как сопоставить несихронизированные заранее объекты из разных баз!?
(15) Беда в том, что вся НСИ будет дублирована если просто втупую выключить в КД синхронизацию по свойствам (ИНН, КПП, наименование и т.д.)
17 DenYuliya
 
16.01.19
17:02
(16) А для документов - если тупо включить синхронизацию по guid + генерировать новый номер? guid в разных базах же может совпасть

(9) числовой префикс? Некая комбинация цифр, не встречающаяся в нумерации.
18 Йохохо
 
16.01.19
17:05
(17) а как завалы разгребать? по гуид не выйдет
19 DenYuliya
 
16.01.19
17:18
(18) это все к поиску по guid относится, или первая часть сообщения - к цифровому префиксу для справочников?
20 Йохохо
 
16.01.19
17:22
(19) не, глазами же будут сравнивать, искать расхождения, лучше дать что то понятное типа номера с префиксом
21 DenYuliya
 
16.01.19
17:38
(20) это да...
22 DenYuliya
 
18.01.19
16:17
возвращаясь к (12).
А как вы идентифицировали базу? Условия же разные для баз были?

Условно: у меня должно быть так: "если это документ из базы А, то префикс = "А" Иначе Префикс = "Б".

Я изначально думала опираться от "Источник.Организация", но идея с треском провалилась.

Больше не придумала ничего лучше, чем  опираться на Константу "_НомерБазы".

Примерно так: в "ПКС - Номер - При Выгрузке" пишу:
Если Константа.НомерБазы.Получить() = 1" Тогда    Значение="А"+Прав(Значение,7)
Иначе
Значение="Б"+Прав(Значение,7)
КонецЕсли

А как до значения константы достучаться из ПКС? В Параметры ее засунуть? Или как-то попроще можно? В Источнике-то то его нет...

В типовых правилах к значениям констант обращаются в обработчиках на вкладке "Основная" - "Конвертация_ПослеЗагрузкиПараметров".

Но блин, как оттуда что-то передать в ПКС((((?
23 hhhh
 
18.01.19
16:51
(22) ну сама же пишешь, в ПКС Константы.НомерБазы.Получить()

Так и пиши
24 DenYuliya
 
18.01.19
16:53
(23) а так можно было))? *щас попробую*, я думала это неправильный синтаксис
25 OldCondom
 
18.01.19
17:00
Так при выгрузке из базы создавай параметр текстовый и туда префикс вставляй. В номерах так и пиши "Номер = Параметры.ПрефиксБазы + Номер";
26 OldCondom
 
18.01.19
17:00
В глобальном обработчике перед выгрузкой вроде. Давно не открывал.
27 DenYuliya
 
18.01.19
17:02
Пасибо, осмыслю и попробую так.
P.S. (25), ник у вас огонь, улыбнуло))))
28 al_zzz
 
18.01.19
17:26
Ко мне коллега сегодня подходила посоветоваться с похожей задачей. Только там учет велся в одной базе КА2 по двум организациям и теперь ей не сливать надо, а перекинуть все зарплатные документы на одну из организаций. Предложил ей сделать ВыгрузкуЗагрузку зарплатных доков которые не на той организации, потом в текстовом файле подменить гуид организации и загрузить назад. Как думаете - взлетит такое?
29 DenYuliya
 
18.01.19
17:33
(28) вопрос , я так понимаю, не ко мне, а к массам?
А как вы планируете перенести сотрудников и прочие ссылки, тоже "Выгрузкой-загрузкой"?
30 al_zzz
 
18.01.19
17:33
(29) Ага
31 jsmith82
 
18.01.19
17:51
зачем справочники префиксовать?
32 jsmith82
 
18.01.19
17:52
в каждом зупе отпрефиксовать документы
перенос по уид
справочники, пвх и проч. по полям поиска
33 DenYuliya
 
18.01.19
18:05
(32) на тот случай, если в каждой из 2 баз окажутся одинаковые физлица, которые должны быть как бы разными физлицами, чтобы клиент понимал, что один Иванов Иван - "прилетел" из 1 базы, а второй точно такой же Иванов Иван прилетел из второй базы, понимая, к какой базе какой сотрудник относится.
34 lodger
 
18.01.19
18:12
(28) от чего бы и нет? только кроме Организаций, надо бы сличить\подмахнуть и ряд других НСИ, которые могут совпадать в той и этой базах. те же ФЛ, как уже поминали.
35 jsmith82
 
18.01.19
19:08
(33) какой в этом смысл? даже тёзки по инн не задублятся
36 jsmith82
 
18.01.19
19:08
лишняя информация, имхо
37 DenYuliya
 
21.01.19
09:35
(35) я пыталась выявить сию страшную тайну- "нафига?",но "заказчик всегда прав, любой каприз за их деньги" - начальство сказало "делай так, как сказали". Короче, они хотят, чтобы у них в Бухне были 2 одинаковых Марь Петровны, одна с признаком первой базы, другая - второй.Но да - полностью одинаковые сущности при этом. То есть смысл как раз в том, чтобы они задублировались. Для контроля чего-то там по субконто.
38 breezee
 
21.01.19
09:45
(37) Ну и делай стандартную конвертацию. Поиск оставляй по ссылкам. Ничего даже изменять не нужно будет.
39 Serg_1960
 
21.01.19
10:10
(37) "Беда, коль пироги начнет печи сапожник, а сапоги тачать пирожник".
40 Serg_1960
 
21.01.19
10:12
Эти, sorry за грубые слова, идиоты не понимают, что они сами себе создают проблемы по НДФЛ (как пример)?
41 DenYuliya
 
21.01.19
10:15
(40) они не собираются сдавать отчетность по этим выгрузкам, конечно.

(38) так я это и делаю,только префиксы прикорячить надо.
42 DenYuliya
 
22.01.19
17:59
(23) не работает так.
Пишу в ПКС свойства "Код" справочника "Физлица":



Если СокрЛП(Константы.Константы._ПрефиксБазы.Получить()) = "Ак1" Тогда    
    Значение="АК"+Прав(Значение,7)
КонецЕсли;


При попытке выгрузить из ЗУП, что было ожидаемо, вываливается ошибка:

Ошибка в обработчике события ПриВыгрузке (свойства)
    ПКО                    =  ФизическиеЛица  (СправочникСсылка.ФизическиеЛица --> СправочникСсылка.ФизическиеЛица)
    ПКС                    =  3  (Код --> Код)
    Объект                 =  Сёмин Алексей Владимирович  (Физические лица)
    СвойствоПриемника      =  Код  (Строка)
    КонвертируемоеЗначение =  0000000003  (Строка)
    Обработчик             =  ПриВыгрузкеСвойства
    ОписаниеОшибки         =  Поле объекта не обнаружено (Константы)
    ПозицияМодуля          =  (2)
    КодСообщения           =  56

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1697)}: Ошибка в обработчике события ПриВыгрузке (свойства)
    ПКО                    =  ФизическиеЛица  (СправочникСсылка.ФизическиеЛица --> СправочникСсылка.ФизическиеЛица)
    ПКС                    =  3  (Код --> Код)
    Объект                 =  Сёмин Алексей Владимирович  (Физические лица)
    СвойствоПриемника      =  Код  (Строка)
    КонвертируемоеЗначение =  0000000003  (Строка)
    Обработчик             =  ПриВыгрузкеСвойства
    ОписаниеОшибки         =  Поле объекта не обнаружено (Константы)
    ПозицияМодуля          =  (2)
    КодСообщения           =  56

Ну логично, у спр. ФизЛица нет свойства "Константы".

А во откуда и как обращаться к константам базы - не могу понять(((. Точнее нашла, что есть обращения к константам в основных обработчиках.
Но если обращаться оттуда - как потом передать полученное  значение в ПКС?
43 ДенисЧ
 
22.01.19
18:04
"Константы.Константы._ПрефиксБазы.Получить()"

Прямо так дословно и пишешь?
44 yavasya
 
22.01.19
18:27
(42) Перед выгрузкой такое работает
45 OldCondom
 
22.01.19
19:10
Освой уже параметры. В глобальных обработчиках КД прописывай. Справку там почитай, что ли. Не нужны эти константы.
46 ДенисЧ
 
22.01.19
19:17
(44) То, что я указал в (43) не будет работать даже в ПриНачалеСистемы().
47 Конструктор1С
 
22.01.19
19:40
(0) нужно переносить по-идентификаторам, а при загрузке прикручивать к кодам-номерам префиксы
48 DenYuliya
 
23.01.19
09:21
(47)  да у меня проблема не с тем, как и когда прикручивать префиксы, а с тем, где и как поставить условие на значение константы текущей базы.
Префиксы-то нормально переносятся.
49 DenYuliya
 
23.01.19
09:30
(45) это да, но то ли я справку читать не умею, то ли этого там нет - не поняла я, как тот или иной параметр из глобальных обработчиков в ПКС перенести?

То есть как это? Создаю я параметр ПрефиксБазы.
Делаю проверку этой самой константы, передаю полученное значение в параметр.
А как его дальше вызывать из ПКС, просто обращаться по имени? В типовых правилах не нашла, чтобы в ПКС с параметрами работали.

Как в данном случае обойтись без констант - я не смогла придумать. Идентификаторы при выгрузке из нескольких баз могут совпадать. Изначально в базах не ведется префиксация ни в разрезе префикса базы, ни в разрезе префикса документов.
Поэтому было решено создать константу "префиксБазы", позволяющую идентифицировать базу.
От того, из базы "Х" делается выгрузка, или из базу "Y", зависит, какой будет присвоен префикс при выгрузке.
50 DenYuliya
 
23.01.19
10:25
(46) прямо вот...Дай я пожму тебе лапу))))! Как это я не заметила такую кошмарную очипяточку... Большое спасибо!

Вот так все работает:

Если Константы._ПрефиксБазы.Получить() = "АК1" Тогда    
    Значение= "АК" + Прав(Значение,7)
ИначеЕсли Константы._ПрефиксБазы.Получить() = ""   Тогда
    Значение = "АМ" + Прав(Значение, 7)
Иначе
    Значение = "АВ" + Прав(Значение, 7)
КонецЕсли;

В ПКС - Свойства - Код в справочниках, и в ПКС - Свойства - Номер, в документах.
51 DenYuliya
 
23.01.19
15:21
Какая-то ерунда в итоге. Префикс добавляется, добавляется тот, какой надо, это все хорошо.
Но почему-то элементы затирают друг друга.

пример:
Беру базу Б1 с префиксом Б1. В базе есть физлица
Иванов, код 123
Петров, код 456

Выгружаю из из базы Б1 dt. Из него делаю базу Б2 с префиксом Б2.
В ней теперь тоже есть физлица
Иванов, код 123
Петров, код 456

В идеале после выгрузки/загрузки сначала из Б1, потом из Б2  в базе-приемнике у меня должны появиться физлица:
Иванов, код Б1_123
Петров, код Б1_456
Иванов, код Б2_123
Петров, код Б2_456

А вместо этого сначала из Б1 я загружаю физлица:
Иванов, код Б1_123
Петров, код Б1_456

А потом делаю загрузку из Б2, и ранее выгруженное перезатирается на
Иванов, код Б2_123
Петров, код Б2_456

Поиск в ПКС поставила "По коду", везде, где он не стоял. Что за нафиг, не знаете? Я что-то явно делаю не так.
52 user-ok
 
23.01.19
16:00
>> Поиск в ПКС поставила "По коду"
а галку "искать по внутреннему идентификатору" сняла?
53 DenYuliya
 
23.01.19
16:01
(52) В ПКО? Она и не стояла.
54 Ботаник Гарден Меран
 
23.01.19
16:12
При обмене типовые процедуры, выполняющие обмен, часто используют регистр сведений в качестве кэша.
Т.к. базы Б1 и Б2 идентичны (ГУИД элементов в них одинаковые) и различается только префикс, то второй обмен находит ГУИД в кэше, и обновляет уже существующий элемент.

В БП это РС СоответствияОбъектовИнформационныхБаз
55 DenYuliya
 
23.01.19
16:18
(54) Большое спасибо за инфу! Я этого не знала, хотя догадывалась, что дело в идентичности баз.
Сейчас посмотрю в этом направление.
56 DenYuliya
 
23.01.19
16:57
(54) для этого регистра надо тоже правила настроить?
57 DenYuliya
 
23.01.19
17:13
(54) или с этим регистром надо танцы с бубном выполнить, например очистить его, а ПКО - не надо настраивать?
58 DenYuliya
 
23.01.19
17:14
(54)кстати, я посмотрела - в базе-приемнике этот регистр пустой...
59 Ботаник Гарден Меран
 
23.01.19
17:18
Если перезатирается с разными значениями синхронизации, то ГУИД где-то сохранен или поиск по нему настроен.
60 DenYuliya
 
23.01.19
17:22
(59) мне надо отключить поиск по GUID во всех правилах в рамках данной конвертации, верно?
Я имею в виду, включенный поиск по GUID в ПКО "Реализация товаров и услуг" может мешать выгрузке без затирания справочника "Физлица"?
61 DenYuliya
 
23.01.19
17:23
И еще вопрос, этот регистр надо добавлять в ПКО и настраивать для него правила?
62 OldCondom
 
23.01.19
17:25
Покликай галки на второй вкладке ПКО физ. лиц. Там какая-то неоднозначная дичь была, если я не ошибаюсь. Про гуиды и коды.
63 DenYuliya
 
23.01.19
17:29
Есть там такое, я покликала еще днем - у меня там все снято сейчас, оке, потыкаю еще там