|
Работа функции ВыгрузитьПоПравилу | ☑ | ||
---|---|---|---|---|
0
NikePopov
27.11.12
✎
12:41
|
Добрый день, Господа.
Опять таки столкнулся с вопросами Конвертации данных. Вопрос примерно следующий: Один и тот же объект может быть в зависимости от параметров и его реквизитов конвертирован по разному. Для этого использую конструкцию с подменой ИмяПКО: Если Параметры.НоменклатураСветнуто Тогда ИмяПКО = "Продукты_Свернуто"; ИначеЕсли Константы.Питание_ДвижениеПоКалькуляции.Получить() Тогда ИмяПКО = "Продукты_Детально"; Иначе ИмяПКО = "Блюда_ПоНаименованию"; КонецЕсли; ПКО = НайтиПравило(Источник, ИмяПКО); работает отлично. Теперь появилась потребность изменить источник(связана она с возможностью переноса с группировкой, например, все блюда становятся номенклатурой - "готовое блюдо"). Способ переноса определяется параметрами конвертации, константами, реквизитами объекта. При написании следующего кода: Если Параметры.НоменклатураСветнуто Тогда ИмяПКО = "Продукты_Свернуто"; Источник = Перечисления.Питание_ВидыНоменклатуры.Блюдо; ИначеЕсли Константы.Питание_ДвижениеПоКалькуляции.Получить() Тогда ИмяПКО = "Продукты_Детально"; Источник = Источник.НоменклатураГБ; Иначе ИмяПКО = "Блюда_ПоНаименованию"; КонецЕсли; ПКО = НайтиПравило(Источник, ИмяПКО); возникла следующая ошибка: Ошибка в обработчике события ПередВыгрузкойОбъекта ПКО = Блюда (Справочник: Блюда) Объект = Батон (Блюдо) Обработчик = ПередВыгрузкойОбъекта ОписаниеОшибки = Поле объекта недоступно для записи (Ссылка) ПозицияМодуля = (6) КодСообщения = 41 Это и понятно, так как входной параметр функции ВыгрузитьПоПравилу передается по ссылке. Добавлением "Знач" перед параметром "Источник" в функцию проблему решил. Но может кто-нибудь знает менее вероломный метод подмена Источника? |
|||
1
lxndr
27.11.12
✎
12:42
|
что мешает использовать ВыгрузитьПоПравилу напрямую?
|
|||
2
NikePopov
27.11.12
✎
12:43
|
Уже пробовал( v8: Работа функции ВыгрузитьПоПравилу ), так и не смог перебороть...
|
|||
3
Сияющий Асинхраль
27.11.12
✎
12:47
|
Что мешает сделать так:
Если Параметры.НоменклатураСветнуто Тогда ИмяПКО = "Продукты_Свернуто"; Значение = Перечисления.Питание_ВидыНоменклатуры.Блюдо; ИначеЕсли Константы.Питание_ДвижениеПоКалькуляции.Получить() Тогда ИмяПКО = "Продукты_Детально"; Значение = Источник.НоменклатураГБ; Иначе ИмяПКО = "Блюда_ПоНаименованию"; КонецЕсли; |
|||
4
NikePopov
27.11.12
✎
12:49
|
Переменная "Значение" в обработке "ПередВыгрузкойОбъекта" не участвует и конвертироваться в дальнейшем будет именно переменная "Источник".
|
|||
5
Сияющий Асинхраль
27.11.12
✎
12:50
|
(4) Ты попробуй сначала. Я чаще всего делаю именно приведенным методом, проблем не было ни разу, а работаю с КД достаточно часто...
|
|||
6
lxndr
27.11.12
✎
12:51
|
(3) +1
(4) приведенный алгоритм сработает для обработчика "Перед выгрузкой" в ПКС, а не для ПКО |
|||
7
Йохохо
27.11.12
✎
12:55
|
ВходящиеДанные
|
|||
8
NikePopov
27.11.12
✎
13:02
|
Не хочется запихивать алгоритм в ПКС, для минимизации возможных ошибок(участвует правило достаточно часто) и схемы с Входящими данными тоже использовать не хочется для очевидности алгоритма.
Всем, кто сразу же скажет что "подмена ПКО" - уже неочевидно отвечаю - в документацию внятно это поместить возможно. А изменение заголовка функции не столь усложнит жизнь при дальнейшей разработке(описав такой "артефакт" в документации), просто никто же не прочитает такой "ньанс". |
|||
9
NikePopov
27.11.12
✎
13:04
|
При создании правил есть требование автономности каждого ПКО. При этом неоптимальности не столь важны.
|
|||
10
lxndr
27.11.12
✎
13:12
|
По мне так самый логичный способ.
Еще вариант - подменить значение в самом ПКО (Свернуто/детально): брать поля источника, перечисление или чего там еще нужно. |
|||
11
NikePopov
27.11.12
✎
14:24
|
Понятно. Спасибо за вашу точку зрения. Думаю вопрос закрыт.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |