Вопрос по конвертации данных

1. D_e_X_T_e_R 574 06.09.17 18:50 Сейчас в теме
Доброго времени. У меня пока мало опыта в разработке правил на КД. Пишу всего лишь свои третьи правила и вот что не могу понять. Правила пишу для унф 1.6 и бп 2.0. Есть такой документ, как авансовый отчет, так вот в УНФ в этом документе есть реквизит сотрудник с типом СправочникСсылкаСотрудники, а в бп в этом документе реквизит Физ. лицо с типом СправочникСсылкаФизическиеЛица, если настраиваю между ними соответствие, то почему не то не переносится реквизит. Как поступают в таких случаях?
По теме из базы знаний
Найденные решения
4. maks_20 165 06.09.17 21:16 Сейчас в теме
Для таких случаев нужно создавать правило конвертации объекта СотрудникВФизЛицо, где в источнике будет СправочникСсылкаСотрудники, в приемнике СправочникСсылкаФизическиеЛица, в этом правиле настраивать соответствия полей и далее в ПКО документа АвансовыйОтчет при конвертации свойства использовать созданное правило.
D_e_X_T_e_R; +1 Ответить
17. D_e_X_T_e_R 574 07.09.17 13:35 Сейчас в теме
В общем, после почти суток попыток и блуждания по интернету, у меня получилось. Нашел на одном форуме ответ разработчиков 1С и подогнал их решения под себя.

В итоге надо так:
Создать правило для конвертации.
Затем в обработчике "ПередВыгрузкой" пишем код:
Приемник = Источник;

Это нужно для того, чтобы не создавалась ссылка на элемента справочника. У правила должен быть включен флажок "Не запоминать выгруженные объекты".

Далее в обработчике "После выгрузки" написал код:
Если Источник.Ставка = 10 Тогда
	УзелСсылки = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
	УзелСсылки = "НДС18";
Иначе УзелСсылки = "БезНДС";
КонецЕсли;
Отказ = Истина;


Переменная Источник предоставляет доступ к выгружаемому объекту, в данном сулчае к справочнику. В переменную УзелСсылки пишем значение перечисления, так как оно должно быть записано в выходной файл. Строка "Отказ = ИСТИНА;" обязательна. По ней мы прерываем штатную выгрузку справочника и возвращаем значение переменной УзелСсылки, которое будет записано в значение соответсвующего реквизита.

Вот как то так. Спасибо всем за помощь.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user633533_encantado 11 06.09.17 18:54 Сейчас в теме
Так вы правило то написали, по которому сотрудник будет конвертироваться в физ. лицо ?
3. D_e_X_T_e_R 574 06.09.17 18:58 Сейчас в теме
(2)Правило конвертации свойств имеете ввиду?
4. maks_20 165 06.09.17 21:16 Сейчас в теме
Для таких случаев нужно создавать правило конвертации объекта СотрудникВФизЛицо, где в источнике будет СправочникСсылкаСотрудники, в приемнике СправочникСсылкаФизическиеЛица, в этом правиле настраивать соответствия полей и далее в ПКО документа АвансовыйОтчет при конвертации свойства использовать созданное правило.
D_e_X_T_e_R; +1 Ответить
5. D_e_X_T_e_R 574 07.09.17 06:54 Сейчас в теме
(4)Спасибо. Сотрудников и ФизЛиц получилось сопоставить. Но пытаюсь применить этот же метод со ставкой НДС(Проблема в том, что в УНФ СтавкаНДС - Это справочник, а в БП - перечисление) не работает. Я так же добавил свойство, в нем прописал в ПередВыгрузкой такой код:
Если Источник.Ставка = 0 Тогда
	Значение = "НДС0";
ИначеЕсли Источник.Ставка = 10 Тогда
	Значение = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
	Значение = "НДС18";
Иначе Значение = "БезНДС";
КонецЕсли;

Выгружает нормально, а при загрузке в бп ругается, что метод объекта не обнаружен "ПолучитьСсылку".
В чем может быть причина?
6. maks_20 165 07.09.17 11:00 Сейчас в теме
(5) скриншот настроек можете скинуть? при таком коде у вас в поле Правило ничего не должно быть заполнено.
7. D_e_X_T_e_R 574 07.09.17 11:27 Сейчас в теме
Если я этот код вставляю просто соответствие, то при выгрузке дает ошибку, что не видит "Ставка", хотя это реквизит справочника. Поэтому я по примеру из сотрудников и физ.лиц создал правило, где указал, что источник - это справочник и приемник - перечисление и вставил этот код туда.
8. D_e_X_T_e_R 574 07.09.17 12:18 Сейчас в теме
Вот скрин.
Прикрепленные файлы:
9. kudlach 13 07.09.17 12:42 Сейчас в теме
У Вас не указано по какому правилу Ставку НДС грузите
10. D_e_X_T_e_R 574 07.09.17 12:58 Сейчас в теме
(9) Я пробовал и с ним и без него. Результат один.
13. user623969_dusa 07.09.17 13:14 Сейчас в теме
правило должно быть и в нем должны быть ПКЗ
(10)
11. pm74 202 07.09.17 13:07 Сейчас в теме
в типовой есть алгоритм ЗаполнитьСтавкуНДСТабличнойЧасти
// Алгоритм предназначен для заполнения ставки НДС в типовой табличной части
// Вызывается в обработчике "перед выгрузкой" ПКС
Если ОбъектКоллекции.СтавкаНДС.НеОблагается Тогда
	Выражение = "Перечисления.СтавкиНДС.БезНДС";	
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 18
		И НЕ ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС18";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 18
		И ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС18_118";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 10 
	 И НЕ ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС10";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 10 
		И ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС10_110";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 0 Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС0"; 
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 20
	 И НЕ ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС20";
ИначеЕсли ОбъектКоллекции.СтавкаНДС.Ставка = 20
		И ОбъектКоллекции.СтавкаНДС.Расчетная Тогда
	Выражение = "Перечисления.СтавкиНДС.НДС20_120";
Иначе
	Выражение = "Перечисления.СтавкиНДС.НДС18";
КонецЕсли;
Показать
12. kudlach 13 07.09.17 13:11 Сейчас в теме
Про передачу сотрудника в Физлицо.
Правильнее и проще сделать так.

В табличной части документа:
Источник: Сотрудник
Приемник: Физлицо
Правило конвертации: Физлица

Перед выгрузкой:
Значение=Сотрудник.Физлицо;
14. D_e_X_T_e_R 574 07.09.17 13:20 Сейчас в теме
Правило сделал. В обработчике ПриВыгрузке написал так:

Если Источник.Ставка = 10 Тогда
	УзелСсылки = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
	УзелСсылки = "НДС18";
Иначе УзелСсылки = "БезНДС";
КонецЕсли;


Если БезНДС, то срабатывает.
15. user623969_dusa 07.09.17 13:27 Сейчас в теме
а почему ваще выгрузка через узел ссылки почему нельзя по простом через значения?
16. D_e_X_T_e_R 574 07.09.17 13:32 Сейчас в теме
(15)Через значение не работает.
17. D_e_X_T_e_R 574 07.09.17 13:35 Сейчас в теме
В общем, после почти суток попыток и блуждания по интернету, у меня получилось. Нашел на одном форуме ответ разработчиков 1С и подогнал их решения под себя.

В итоге надо так:
Создать правило для конвертации.
Затем в обработчике "ПередВыгрузкой" пишем код:
Приемник = Источник;

Это нужно для того, чтобы не создавалась ссылка на элемента справочника. У правила должен быть включен флажок "Не запоминать выгруженные объекты".

Далее в обработчике "После выгрузки" написал код:
Если Источник.Ставка = 10 Тогда
	УзелСсылки = "НДС10";
ИначеЕсли Источник.Ставка = 18 Тогда
	УзелСсылки = "НДС18";
Иначе УзелСсылки = "БезНДС";
КонецЕсли;
Отказ = Истина;


Переменная Источник предоставляет доступ к выгружаемому объекту, в данном сулчае к справочнику. В переменную УзелСсылки пишем значение перечисления, так как оно должно быть записано в выходной файл. Строка "Отказ = ИСТИНА;" обязательна. По ней мы прерываем штатную выгрузку справочника и возвращаем значение переменной УзелСсылки, которое будет записано в значение соответсвующего реквизита.

Вот как то так. Спасибо всем за помощь.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот