helpf.pro
Регистрация

v8: Сложный обмен основными средствами между неидентичными конфигурациями.

AndrewM
09.04.2012 12:46Прочитано: 4028
Всем привет.

Ситуация у меня такая:
Из конфы "Управление автотранспортом" (рарусовская разработка) надо выгрузить основные средства в конфу "Управление строительной организацией" (УПП со строительным функционалом).
Всё бы хорошо, можно написать правило в КД с проверкой одного из реквизитов (а именно гаражный номер, т.к. в данном случае речь идёт об учёте транспортных средств), да только рарусовцы засунули все (абсолютно все) данные об основном средстве в регистр сведений.
То есть если в УСО все реквизиты по-человечески лежат прямо в элементе справочника, то в УАТ в справочнике "Основные средства" вообще нет ни одного доп. реквизита, только стандартные (код, наименование и т.д.). Усложнили рарусовцы нам жизнь, короче. )
Делать сверку по стандартному коду не вариант, т.к. коды могут не совпадать, а вот гаражный номер у транспортного средства и в первой базе, и во второй есть всегда (что-то вроде инвентарника).

Задача:
1. В правиле обмена взять из источника основное средство и в правиле же по нему найти запись в соответствующем регистре сведений, получив гаражный номер ОС.
2. Полученный из регистра гаражный номер в правиле же сверить с гаражным номером из ОС приёмника.
3. И данные из ОС источника, и данные из элемента регистра по этому ОС записать в один и тот же элемент ОС приёмника.
Главная трудность на данный момент: гаражный номер, по которому я хочу сверять ОС, в источнике хранится в регистре сведений, поэтому в КД я не могу в ПКС просто поставить галочку напротив гаражного номера. Видимо, придётся писать какой-то код на обработчик "ПриЗагрузке" либо "ПередЗагрузкой".

В книжке по КД примеров, похожих на мой, не нашёл. Может, плохо искал.
Подскажите.
Если вдруг не понятно, что я хотел сказать, прикладываю схему на скорую руку, олицетворяющую всё вышесказанное. )
Небольшая блок-схема
Изменено 09.04.12 12:47:24 по причине: Смена категории
Yandex
Возможно, вас также заинтересует
Реклама на портале
AndrewM
09.04.2012 21:08Ответ № 1
У ПКО "Основные средства" попробовал для эксперимента добавить в ПКС строку для гаражного номера, у которого в источнике пусто (потому что в источнике гаражный номер хранится в регистре), а в приёмнике выбран гаражный номер осн. средства приёмника.
Далее в обработчике "Перед выгрузкой" этой строки ПКС написал:
Код 1C v 8.2 УП
 Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| уатПервоначальныеСведенияТС.ГаражныйНомер
|ИЗ
| РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС
|ГДЕ
| уатПервоначальныеСведенияТС.ОсновноеСредство = &ОсновноеСредство";
Запрос.УстановитьПараметр("ОсновноеСредство", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Значение = Выборка.ГаражныйНомер;
КонецЕсли;


Но при выгрузке получил следующую ошибку:
Цитата
Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ОсновныеСредства (Справочник: Основные средства)
ПКС = 6 ( --> ГаражныйНомер)
Объект = 111 (Строка)
СвойствоПриемника = ГаражныйНомер (Строка)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Ссылка)
ПозицияМодуля = (13)
КодСообщения = 55


Что я сделал не так?
E_Migachev
10.04.2012 10:57Ответ № 2
(1) AndrewM, ошибка вылетает сразу или сначала что-то выгружает?
AndrewM
10.04.2012 16:38Ответ № 3
Вылетает сразу.
Причина оказалась в следующем: реквизит "Гаражный номер" в справочнике "ОС" приёмника имеет тип неограниченной строки, а по неограниченной строке сверять нельзя. Отсюда ошибка.
Когда я сделал реквизит строкой с длиной "10 символов" (как в источнике), обмен по моей схеме заработал.
Изменено 12.04.12 08:22:33
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.