Имя: Пароль:
1C
1С v8
Конвертация данных 2.1
,
0 ilyayakimets
 
25.03.19
17:31
Добрый день!
Есть две конфигурации, между которыми необходимо настроить обмен (ERP 2 для Беларуси и Моя Бухгалтерия 8 для Беларуси)
В общем, пишу правила обмена для данных конфигураций и столкнулся со следующей проблемой:
Необходимо из ERP в Бухгалтерию выгрузить справочник номенклатура. В ERP в данный справочник добавлены дополнительные реквизиты через "Дополнительные реквизиты и свойства" (В КД их видит как ТЧ справочника номенклатура).
В бухгалтерии аналогичные реквизиты уже присутствуют как обычные реквизиты.
Вопрос - Как выгрузить значение дополнительного реквизита ERP в обычный реквизит справочника Бухгалтерии?
1 mikecool
 
25.03.19
17:33
добавить пкс , описать заполнение входящих данных
и это - разве не кд3 уже в ерп надо использовать?
2 Ёпрст
 
25.03.19
17:33
Добавляешь реквизит в ПКС, в источнике пусто в приёмнике твой реквизит из бухни, в ПередВыгрузкой Значение = <тут значение из доп свойства>
усё
3 ilyayakimets
 
25.03.19
17:37
(1) если бы Бухгалтерия для Беларуси не была таким старьём, использовал бы КД3, да и такой проблемы бы не возникло.
(2) Спасибо, сейчас попробую.
4 ilyayakimets
 
25.03.19
17:42
(2) Может подскажете, как правильно будет обратить к значению из доп. свойств? КД только начинаю изучать..
5 Мимохожий Однако
 
25.03.19
17:46
6 ilyayakimets
 
26.03.19
09:00
Ап
7 ilyayakimets
 
26.03.19
09:06
(5) Не совсем то, что мне нужно.
8 ilyayakimets
 
26.03.19
15:17
Может быть есть какие примеры кода?
9 hhhh
 
26.03.19
15:43
(8) ну а какие могут быть нахрен примеры, перебираете циклом табчасть, находите нужную строчку, и выбираете из нее значение.
10 ilyayakimets
 
26.03.19
16:56
(9) Например, так:

ТЧ = Источник.ДополнительныеРеквизиты;
Если ЗначениеЗаполнено(ТЧ) Тогда
    Для Каждого СтрокаТЧ Из ТЧ Цикл
        Значение =  ТЧ[0].Свойство;
    КонецЦикла
КонецЕсли

?
11 ilyayakimets
 
26.03.19
17:08
Дело в том, что физически на форме это не ТабЧасть, а несколько дополнительных реквизитов, наверное поэтому просто обойти ТЧ и получить значение не получается.
Вот и спрашиваю, как грамотно поступить?
12 mistеr
 
26.03.19
17:23
(11) КД оперирует со структурой хранения данных, а не с реквизитами на формах. Поэтому обращайся к ТЧ.

И лучше наверное это делать в ПередВыгрузкой в ПКО, т.к. нужно получить несколько реквизитов. И передавать через ВходящиеДанные.
13 hhhh
 
26.03.19
17:39
(11) в КД вообще нет форм. А физически это как раз самая обыкновенная табчасть, а никакая не форма. Форма это всегда мираж, она никогда не бывает физически.
14 ilyayakimets
 
27.03.19
09:06
(12) (13) Я понимаю, к ТЧ и обращаюсь, однако что-то не выходит..
15 ilyayakimets
 
27.03.19
09:14
16 mistеr
 
27.03.19
10:22
(15) Значит, ВходящиеДанные не заполнены.
17 ilyayakimets
 
27.03.19
10:31
(16) В ПКО Номенклатура код:
Если ЗначениеЗаполнено(Источник.ДополнительныеРеквизиты) Тогда
    ТЧ = Источник.ДополнительныеРеквизиты;
    ВходящиеДанные = Новый Структура;
    ВходящиеДанные.Вставить("КодВоВнешнейИБ", ТЧ[0].ТекстоваяСтрока);    
КонецЕсли

Надо ли что-то в ПКС писать для обработки данного кода?
18 mistеr
 
27.03.19
10:36
(17) Убери Если. ВходящиеДанные должны быть всегда инициализированы, только могут быть пустые значения.
19 Ёпрст
 
27.03.19
10:36
(17)

в ПКС добавляешь новое свойство, источник - пусто, приемник - нужный реквизит шапки документа.
в ПприВыгрузки пишешь Значение = <тут получение значения из доп свойства, хоть перебором, хоть запросом>
усё.
20 Ёпрст
 
27.03.19
10:38
* реквизит справочника (не шапки дока)
21 ilyayakimets
 
27.03.19
10:44
(18) Когда убираю "Если", то:
http://prntscr.com/n3hq1g
"Табачные изделия" это Вид номенклатуры, у него не может быть ТЧ, поэтому нужно делать проверку на существование ТЧ. (Если я правильно понял)
22 Йохохо
 
27.03.19
10:50
(21) напиши уже код во внешней обработке!!11 а потом перенеси как (19)
тч это метаданные, а не данные
23 mistеr
 
27.03.19
10:50
(21) На скрине ясно написано, что "Табачные изделия" это Номенклатура
24 ilyayakimets
 
27.03.19
11:01
25 Йохохо
 
27.03.19
11:02
в своей, файл - новый
26 ilyayakimets
 
27.03.19
11:09
(25) Запросом получает значения доп.реквизитов:
http://prntscr.com/n3i2hc
27 ilyayakimets
 
27.03.19
11:11
(26) Вопрос - как мне получить необходимое значение в КД?
28 Йохохо
 
27.03.19
11:12
(27) так же, запихни в запрос источник.ссылка
29 Ёпрст
 
27.03.19
11:13
(27) поставить условие в запрос только на нужное свойство
30 ilyayakimets
 
27.03.19
11:17
(28) Т.е. вот так?

ВЫБРАТЬ
                          НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,
                          НоменклатураДополнительныеРеквизиты.НомерСтроки КАК НомерСтроки,
                          НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,
                          НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
                          НоменклатураДополнительныеРеквизиты.ТекстоваяСтрока КАК ТекстоваяСтрока
                    ИЗ
                          Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
                    ГДЕ Ссылка = &Ссылка

И в параметр передавать Источник.Ссылка ?
31 Йохохо
 
27.03.19
11:25
(30) еще (29) по красоте
32 famnam
 
27.03.19
11:31
както так:

-----ПередВыгрузкойОбъекта
ИсходящиеДанные = Новый структура;
Для каждого текСтрока из Источник.ДополнительныеРеквизиты  Цикл
ИсходящиеДанные.Вставить(Строка(текСтрока.Свойство), текСтрока.Значение;
КонецЦикла

-----ПередВыгрузкойСвойства
Если ВходящиеДанные <> Неопределено Тогда
ВходящиеДанные.Свойство("<ИмяСвойства>", Значение);
КонецЕсли;
33 ilyayakimets
 
27.03.19
11:32
(31) Как-то так:
http://prntscr.com/n3ie1b

Осталось понять, как этот результат вставить в реквизит)
34 Ёпрст
 
27.03.19
11:41
(33) как в (19)



на выходе будет
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
      Значение = Выборка.Значение;
КонецЕсли;
35 Ёпрст
 
27.03.19
11:42
в параметры запроса запихнешь Источник.ССылка и своё свойство
36 Ёпрст
 
27.03.19
11:42
усё
37 ilyayakimets
 
27.03.19
11:56
(36) Вроде бы сделал, но:

http://prntscr.com/n3ir3w
38 ilyayakimets
 
27.03.19
12:05
(37) Во внешней обработке всё как надо отрабатывает..
39 Ёпрст
 
27.03.19
12:28
(37) нам отсюда не видно, что сделал и где
40 ilyayakimets
 
27.03.19
12:31
41 hhhh
 
27.03.19
12:35
(40) а почему правило стоит Номенклатура?
42 ilyayakimets
 
27.03.19
12:39
(41) А не должно? Это я когда-то что-то пытался..
43 ilyayakimets
 
27.03.19
12:43
(41) Действительно: убрал - выгрузило, что надо!
Ну и намучился я с этим..
Спасибо всем огромное!
44 ilyayakimets
 
27.03.19
13:37
Ещё вопрос:
Делаю то же самое, но для другого реквизита - ФорматСигарет. В Источнике это строка, в Приемнике - СправочникСсылка.КлассТМЦ .
Собственно ничего не передаётся, как тут можно поступить?
http://prntscr.com/n3kdu3
45 Ёпрст
 
27.03.19
14:49
(44) делаешь ПКО  - ФорматСигарет, источник - пусто, приёмник твой СправочникСсылка.КлассТМЦ
в ПКС добавляешь новый реквизит Наименование, источник пусто, приёмник Наименование, втыкаешь галку поиск, в настройках ПКО сымаешь галку поиска по внутр. идентификатору и оставляешь искать по полям поиска.

в ПКС Наименование втыкаешь ПередВыгрузкой Значение = Источник;

в ПКО номенклатура в нужном ПКС всё тоже самое что и в (19) только правило для реквизита ставишь созданное выше пко ФорматСигарет.

Или.. можешь создать ПКО и юзать галку - получить из входящих данных, а в ПКО номенклатура , в ПКС реквизита в Значение = пихать структуру с данными
46 ilyayakimets
 
27.03.19
15:01
(45) Так и сделал, однако когда подвязываю реквизиту правило - ошибка при выгрузке:
https://prnt.sc/n3ir3w
47 Мимохожий Однако
 
27.03.19
15:04
(46) Покажи код, который прописал в ПКС и ПКО с указанной строкой из сообщения об ошибке.
48 ilyayakimets
 
27.03.19
15:11
49 ilyayakimets
 
27.03.19
15:15
(47) По всей видимости галку поиска сперва не снял, всё работает.