Имя: Пароль:
1C
 
Конвертация двух значений перечисления в третье
,
0 Kraspila
 
19.05.21
12:13
Правила имеют некоторую универсальность, используются в двух разных базах. В первой перечисление имеет значение "Супермаркеты" во второй "НДСГипер"
их нужно консолидировать в базу приемник в виде значения "НДССети"
Подскажите, как это сделать. Завести такое значение нельзя, так как правила загрузятся в другую базу и там его не будет.
Просто заменить на строковое значение тоже не получается.
Такой код тоже не работает:
        Если Строка(Источник) =  "Супермаркеты" ИЛИ  Строка(Источник) =  "НДСГипер" Тогда
        Значение = "НДССети"
    КонецЕсли;
1 Малыш Джон
 
19.05.21
12:30
в базе приемнике нет значения НДССети, но его нужно там поставить?
2 Kraspila
 
19.05.21
12:32
(1) В приемнике как раз всё в порядке, НДССети есть, но в одной базе источнике оно называется "Супермаркеты" во второй "НДСГипер", на выходе надо получить "НДССети "
3 mikecool
 
19.05.21
12:33
настроить соответствие значений?
4 mikecool
 
19.05.21
12:34
+3 добавить условие и настроить программное соответствие
5 Малыш Джон
 
19.05.21
12:34
(2) ну в конвертации значений в ПКС этого перечисления ставь сопоставление соответствующее
6 Kraspila
 
19.05.21
12:35
(3) да, но для другой базы будет ошибка, называется то оно по другому в другой базе, т.е. этого не найдется
7 Малыш Джон
 
19.05.21
12:36
(6) если у тебя разные базы, значит и правила будут разные
8 Kraspila
 
19.05.21
12:36
(5)  для одной настрою,  но для другой базы будет ошибка, называется то оно по другому в другой базе, т.е. этого не найдется. И к тому же в метаданные его не добавишь с другим именем
9 mikecool
 
19.05.21
12:36
(6) тогда напиши в коде в передвыгрузкой
если это такая то база и Значение = одно, то Значение = сети
иначеесли
10 Kraspila
 
19.05.21
12:37
(4) типа того ?
Если Строка(Источник) =  "Супермаркеты" ИЛИ  Строка(Источник) =  "НДСГипер" Тогда
        Значение = "НДССети"
КонецЕсли; (9) (9)
11 Kraspila
 
19.05.21
12:37
(9) Если Строка(Источник) =  "Супермаркеты" ИЛИ  Строка(Источник) =  "НДСГипер" Тогда
        Значение = "НДССети"
КонецЕсли; (9) (9)
12 Малыш Джон
 
19.05.21
12:37
(6) можно конечно через попу сделать, но это обязательный гемморой в будущем
13 Kraspila
 
19.05.21
12:38
(12) понимаю, что для каждой базы лучше свои правила иметь, но это не от меня зависит
14 Малыш Джон
 
19.05.21
12:39
(13) база приемник одна? в смысле экземпляр один? или на каждый регион своя база?
15 Kraspila
 
19.05.21
12:39
(9) в каком месте? В передвыгрузкой перечисления? Или значения свойства объекта, где оно участвует?
16 Kraspila
 
19.05.21
12:40
(14) Приемник один экземпляр, источника два
17 RomanYS
 
19.05.21
12:40
(11) только не "Источник", а "Источник.ТвойРЕквизит"
18 Kraspila
 
19.05.21
12:42
(17) да, но если источник уже перечисление, можно оставить  "Источник"? (вопрос с подвохом)
19 Малыш Джон
 
19.05.21
12:43
(16) тогда как выше рекомендуют: в событии "Перед выгрузкой" по условию присваивай значение
20 Малыш Джон
 
19.05.21
12:44
(18) Источник - это владелец ПКО
21 RomanYS
 
19.05.21
12:44
(18) тогда не понятно где ты это пишешь. У перечислений можно просто задать соответствие значений и больше ничего не делать
22 Kraspila
 
19.05.21
12:50
(18) (21) да! Но значения в разных базах называются по разному.
23 Kraspila
 
19.05.21
12:51
(19) перед выгрузкой реквизита? Или перечисления?
24 RomanYS
 
19.05.21
12:57
(22) Соотнести два в один вроде никакой проблемы нет. Естественно сами значения добавить руками придется - из конфигурации придёт только одно значение
25 Kraspila
 
19.05.21
12:58
(24) вторая конфигурация не примет правила со значением которого нет
26 RomanYS
 
19.05.21
13:00
(25) Проверял?
27 Kraspila
 
19.05.21
13:02
(26) да
28 Kraspila
 
19.05.21
13:02
(26) при загрузке правил падает
29 RomanYS
 
19.05.21
13:04
(23) Значит делай при выгрузке реквизита
(28) Так у тебя таблица соответствий пустая?
30 Kraspila
 
19.05.21
13:11
(29) настроены только общие, те, которые совпадают в обеих базах
31 Pro-tone
 
19.05.21
13:28
(2) >>В приемнике как раз всё в порядке, НДССети есть, но в одной базе источнике оно называется "Супермаркеты" во второй "НДСГипер", на выходе надо получить "НДССети "

а что в качестве выхода? куда выход? в третью базу? если нет, то в приемнике есть "НДССети"
32 Pro-tone
 
19.05.21
13:30
(29) именно так, похоже структуру базы он не обновил, значений перечислений в конвертахе нет, потому и падает у него на получении значения
33 Kraspila
 
19.05.21
14:45
(32) Совершенно верно. Структуру базы обновить нельзя, так как в разных базах значения перечисления называются по разному
34 Pro-tone
 
19.05.21
14:49
(33) обычно так всегда и бывает, значения разные, в кд ты их сам сопоставляешь либо в ПКЗ либо кодом в обработчике ПКС "Перед выгрузкой"
35 Kraspila
 
20.05.21
10:49
Решение не было найдено. В итоге пришлось сделать так, что-бы в обеих базах-источниках значение перечисления называлось одинаково.
36 RomanYS
 
20.05.21
11:34
(35) Ничего не мешало прописать замену для каждого реквизита. Ссылок на это перечисление явно не должно быть много
37 Kraspila
 
20.05.21
11:47
(36) просто переименовали значение. Для обмена этого достаточно. Но тем не менее это не решение, а выход из ситуации. Пришлось обращаться в филиал, которому принадлежит база
38 azt-yur
 
20.05.21
12:24
(0) Подозреваю что здесь
Если Строка(Источник) =  "Супермаркеты" ИЛИ  Строка(Источник) =  "НДСГипер" Тогда
при преобразовании в строку получается представление перечисления в виде Синонима, а ты сравниваешь с Именем. По идее подобный код должен был сработать
39 RomanYS
 
20.05.21
12:24
(37) Решение было в (10) с поправкой (17) при выгрузке реквизита. Это как минимум.
40 RomanYS
 
20.05.21
12:25
(38) +1 Вместо Строка использовать XMLСтрока если это имена значений перечислений
41 Pro-tone
 
20.05.21
12:34
(40) решение было в (34), а он тут огород городит
42 Pro-tone
 
20.05.21
12:34
он - это автор ветки
43 Kraspila
 
20.05.21
12:53
(41) метаданные в базах источниках по разному называются. Как ты их сопоставишь?
44 RomanYS
 
20.05.21
13:06
(43) Бери второй вариант - ПКС
45 Pro-tone
 
20.05.21
13:39
(43) я понимаю так как он написал в (0)
>>В первой перечисление имеет значение "Супермаркеты" во второй "НДСГипер"

здесь нет ни слова что это перечисления с разными именами метаданных, а что такое "значение" перечисления, это то что внутри самого перечисления, так вот он пишет что разные значения, а их как сопоставить я причел в (34)
46 Pro-tone
 
20.05.21
13:39
*привел
47 Pro-tone
 
20.05.21
13:40
поэтому Kraspila , хочешь ответ получить научись верно формулировать вопрос
48 Pro-tone
 
20.05.21
13:58
да, если разные метаданные, то тоже не вижу проблемы - сопоставляются реквизиты с разными типами метаданных, а в ПКС принудительно устанавливаются значения, как ты написал в (0), и все работает, только значения надо устанавливать не строчно, а ссылочно, типа такого Перечисления.ТвоеПеречисление.ЗначениеПеречисления
49 Pro-tone
 
20.05.21
13:58
и правило конвертации пустое при этом
50 RomanYS
 
20.05.21
14:14
(48) Так в источнике нет таких значений. Поэтому устанавливать как раз строкой.
(49) +1
51 Pro-tone
 
20.05.21
14:22
(50) тогда это делается передачей в параметр, а дальше в ПКО "Перед загрузкой":
Объект.РеквизитТипПеречисления = Перечисления.ТвоеПеречисление[ПараметрыОбъекта["РеквизитДляПриемника"]]
52 Pro-tone
 
20.05.21
14:25
(51) если быть точнее,  то в ПКО "При загрузке", в "Перед загрузкой" там нет еще объекта