Конвертация из ТЧ в реквизит

1. corbenSG 16 04.06.14 21:02 Сейчас в теме
Осваиваю конвертацию. появилась необходимость из табличной части справочника(1 строка) выгрузить данные в реквизиты другого справочника.
PS выгрузка спецификацииНоменклатуры КА_1.1 -> БП_3.0
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. RocKeR_13 1382 05.06.14 09:13 Сейчас в теме
(1) corbenSG, в ПКО перед выгрузкой:
Строка = Источник.<НазваниеТЧ>[0];
ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("НазваниеРеквизитаПриемника", Строка.<НазваниеКолонки>);
---------------------------//---------------------------------------------------

Создаешь ПКС для этих реквизитов с пустыми источниками, ставишь галку "Получать из входящих данных". Во входящих данных наименование ключа строго должно совпадать с наименованием реквизита приемника! Если типы реквизитов приемника не являются примитивными (строка, число и т.д.), то в ПКС указываешь правило конвертации.
VickWood; corbenSG; +2 Ответить
6. corbenSG 16 09.06.14 09:38 Сейчас в теме
(4) RocKeR_13,
Опять уперся... Не могу загрузить основную спецификацию для номенлактуры.
В КА это РегСв а в БП реквизит номенклатуры.
Что я сделал:
В ПКС создал правило --> ОсновнаяСпецификацияНоменклатуры (с пустым источником), поставил галку "Получать из входящих данных".
В ПКО в Перед Выгрузкой прописал
Если не Источник.ЭтоГруппа Тогда
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура,
		|	ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры
		|ИЗ
		|	РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
		|ГДЕ
		|	ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";

	Запрос.УстановитьПараметр("Номенклатура", Источник.Ссылка);

	РезультатЗапроса = Запрос.Выполнить();

	Выборка = РезультатЗапроса.Выбрать();
    		Пока Выборка.Следующий() Цикл
			ВходящиеДанные = Новый Структура;
			ВходящиеДанные.Вставить("ОсновнаяСпецификацияНоменклатуры", Выборка.СпецификацияНоменклатуры);
		КонецЦикла;
КонецЕсли;
Показать

Что я сделал не так?
2. adva 45 05.06.14 08:06 Сейчас в теме
Как вариант, ПВД (правило выгрузки данных) с произвольным запросом
3. adva 45 05.06.14 08:08 Сейчас в теме
если всегда только одна строка в ТЧ, то можно в объекте просто обращаться в ПередВыгрузкой в ПКС (правило конвертации свойств) так

Значение = Источник.ИмяТабличнойЧасти[0].ИмяРеквизитаТЧ
corbenSG; +1 Ответить
5. corbenSG 16 05.06.14 13:01 Сейчас в теме
(3) adva,
Да, в тч только одна строка.
(3) adva, (4) RocKeR_13,
Всем спасибо получилось
сделал так "Значение = Источник.ИмяТабличнойЧасти[0].ИмяРеквизитаТЧ"
7. corbenSG 16 09.06.14 09:39 Сейчас в теме
Пишет ошибку
Ошибка получения свойства объекта из входящих данных
ПКО = Номенклатура (Справочник: Номенклатура)
ПКС = 18 (--> ОсновнаяСпецификацияНоменклатуры)
Объект = Прочие материалы (Номенклатура)
СвойствоПриемника = ОсновнаяСпецификацияНоменклатуры (СправочникСсылка.СпецификацииНоменклатуры)
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8283)
КодСообщения = 68

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1694)}: Ошибка получения свойства объекта из входящих данных
ПКО = Номенклатура (Справочник: Номенклатура)
ПКС = 18 (--> ОсновнаяСпецификацияНоменклатуры)
Объект = Прочие материалы (Номенклатура)
СвойствоПриемника = ОсновнаяСпецификацияНоменклатуры (СправочникСсылка.СпецификацииНоменклатуры)
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8283)
КодСообщения = 68
8. RocKeR_13 1382 09.06.14 10:22 Сейчас в теме
(7) corbenSG, в ПКС "--> ОсновнаяСпецификацияНоменклатуры" перед выгрузкой пропиши
Отказ = Источник.ЭтоГруппа;
corbenSG; +1 Ответить
9. corbenSG 16 09.06.14 10:41 Сейчас в теме
(8) RocKeR_13,
Спасибо получилось!
Еще В ПКО в Перед Выгрузкой дописал если в источнике по номенклатуре нет спецификации
Может кому поможет:

Если не Источник.ЭтоГруппа Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура,
        |    ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры
        |ИЗ
        |    РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних КАК ОсновныеСпецификацииНоменклатурыСрезПоследних
        |ГДЕ
        |    ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";

    Запрос.УстановитьПараметр("Номенклатура", Источник.Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();
	    Если Выборка.Количество()>0 Тогда
			Пока Выборка.Следующий() Цикл
	            ВходящиеДанные = Новый Структура;
	            ВходящиеДанные.Вставить("ОсновнаяСпецификацияНоменклатуры", Выборка.СпецификацияНоменклатуры);
			КонецЦикла;
		Иначе
			ВходящиеДанные = Новый Структура;
	        ВходящиеДанные.Вставить("ОсновнаяСпецификацияНоменклатуры", Справочники.СпецификацииНоменклатуры.ПустаяСсылка());	
		КонецЕсли;
КонецЕсли;
Показать
10. RocKeR_13 1382 09.06.14 10:50 Сейчас в теме
(9) corbenSG, да-да, раз уж получаем из входящих данных, то в них что-то обязательно должно содержаться)
11. corbenSG 16 17.06.14 12:36 Сейчас в теме
Теперь пытаюсь сделать обмен с самописной 1с7 и УТ 10.3. Номенклатуру выгрузил, а понять как выгрузить ед. хранения остатков не могу нашел типовые правила Бухгалтерский учет, редакция 4.5 --> КА (УПП) но разобраться не могу.
Проблема в том что в моей семерке ед изм-строка.
Базовую ед загрузил так (перед выгрузкой):
Отказ = Источник.ЭтоГруппа();
Если (СокрЛП(Источник.БазоваяЕдиница) = "л") или (СокрЛП(Источник.БазоваяЕдиница) = "л.") Тогда
	Значение = "л";
ИначеЕсли (СокрЛП(Источник.БазоваяЕдиница) = "шт") или (СокрЛП(Источник.БазоваяЕдиница) = "шт.") Тогда
	Значение = "шт";
ИначеЕсли (СокрЛП(Источник.БазоваяЕдиница) = "кг") или (СокрЛП(Источник.БазоваяЕдиница) = "кг.") Тогда
	Значение = "кг";
ИначеЕсли Источник.ЭтоГруппа() Тогда	
	//ни чего не делаем
Иначе
	Сообщить("Для источника " +  Источник + " с ед. изм. " + Источник.БазоваяЕдиница + " не удалось найти единицу в базе приемнике");
КонецЕсли;
Показать

потом делаю поиск по наименованию в класификатореЕдИзм.

Как можно реализовать загрузку ед. хранения остатков из строки?
12. corbenSG 16 17.06.14 12:41 Сейчас в теме
Проблема осложняется тем что я вообще не умею программировать на семерке...
13. adva 45 17.06.14 15:11 Сейчас в теме
Я бы так сделал:

Для базовой единицы создал ПКО "КлассификаторЕдиницИзмерения" с ПКС "Наименование" (источник в ПКО не указывать)

и в ПКС "БазоваяЕдиница" у ПКО "Номенклатура" в "ПередВыгрузкой" прописал:

Значение = СоздатьОбъект("СписокЗначений");
Значение .Установить("Наименование", Источник.БазоваяЕдиница); // здесь можно и условия выше

Для единицы хранения остатокв создал ПКО "Единицы" с ПКС "Классификатор" правило КлассификаторЕдиницИзмерения, "Владелец" правило Номенклатура (поиск по обоим);

в ПКС "ЕдиницаХранения" у ПКО "Номенклатура" в "ПередВыгрузкой" прописал:

БазоваяЕдиница = СоздатьОбъект("СписокЗначений");
БазоваяЕдиница.Установить("Наименование", Источник.БазоваяЕдиница); // здесь можно и условия выше

Значение = СоздатьОбъект("СписокЗначений");
Значение .Установить("Классификатор", БазоваяЕдиница); // здесь можно и условия выше
Значение .Установить("Классификатор", Источник);


для 7.7 не проверял, так бы сработало в 8 если вместо списка значений была структура.

галку "получить из входящих данных" у свойст при этом надо будет снять
corbenSG; +1 Ответить
14. corbenSG 16 19.06.14 10:49 Сейчас в теме
(13) adva,
Спасибо ОГРОМНОЕ, получилось.

Конечный код в ПКС "ЕдиницаХранения" у ПКО "Номенклатура" в "ПередВыгрузкой"

Отказ = Источник.ЭтоГруппа();

БазоваяЕдиница	= СоздатьОбъект("СписокЗначений"); 
Значение		= СоздатьОбъект("СписокЗначений");

Если (СокрЛП(Источник.БазоваяЕдиница) = "л") или (СокрЛП(Источник.БазоваяЕдиница) = "л.") Тогда
	ЕдИзмСтрока = "л";
ИначеЕсли (СокрЛП(Источник.БазоваяЕдиница) = "шт") или (СокрЛП(Источник.БазоваяЕдиница) = "шт.") Тогда
	ЕдИзмСтрока = "шт";
ИначеЕсли (СокрЛП(Источник.БазоваяЕдиница) = "кг") или (СокрЛП(Источник.БазоваяЕдиница) = "кг.") Тогда
	ЕдИзмСтрока = "кг";
ИначеЕсли Источник.ЭтоГруппа() = 1 Тогда	
	ЕдИзмСтрока = "";
Иначе
	ЕдИзмСтрока = "";
	Сообщить("Для источника " +  Источник + " с ед. изм. " + Источник.БазоваяЕдиница + " не удалось найти единицу в базе приемнике");
КонецЕсли;

БазоваяЕдиница.Установить("Наименование", ЕдИзмСтрока); 

Значение.Установить("Наименование", ЕдИзмСтрока);
Значение.Установить("ЕдиницаПоКлассификатору", БазоваяЕдиница);
Значение.Установить("Владелец", Источник);
Показать
15. natarezn 26.09.16 12:11 Сейчас в теме
а что делать, если ТЧ - это семерка ?
16. natarezn 26.09.16 12:11 Сейчас в теме
ТЧ = СоздатьОбъект("ТаблицаЗначений");
ВходящиеДанные.Получить("ТЧ").Выгрузить(ТЧ);
ТЧ.ВыбратьСтроки();
Пока ТЧ.ПолучитьСтроку() = 1 Цикл
Физлицо = ТЧ.Сотрудник.Получить("Физлицо");

//Если Физлица.НайтиЗначение(Физлицо) = 0 Тогда
// Физлица.ДобавитьЗначение(Физлицо);
//КонецЕсли;
КонецЦикла;
17. natarezn 26.09.16 12:12 Сейчас в теме
Ошибка исполнения обработчика: ПКО_ПриВыгрузке_КадровоеПеремещениеОрганизацийИндексация
- Значение не представляет агрегатный объект (Выгрузить)
Оставьте свое сообщение

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