Как правильно написать обработчик ПередЗагрузкой в КонвертацииДанных

1. AndKovalchuk 195 25.07.19 13:16 Сейчас в теме
Есть типовая загрузка из торговли 77 в бухгалтерию 3.0 Все отлично, кроме одной проблемы
При загрузке документа Реализация товаров, работ, услуг (у меня только товары) он проводится уже в бухгалтерии 3.0 и соответственно суммы списанной себестоимости различаются ( в торговле 77 списываются партии по методу ФИФО), в бухгалтерии 3.0 списываются остатки по скользящей средней.

Соответственно хочу поменять типовые правила, чтобы при обмене сразу заполнялся реквизит себестоимость в табличной части Товары.


В семерке алгоритм выборки себестоимости следующий

рег = СоздатьОбъект("Регистр.ПартииНаличие");
Рег.ВыбратьДвиженияДокумента(Док.ТекущийДокумент());
Пока рег.получитьДвижение() =1 Цикл

//Чтобы не сворачивать будем сразу искать номенклатуру
Стр="";
Если ТаблицаСебестоимости.НайтиЗначение(Рег.Номенклатура,Стр,"Номенклатура")=0 Тогда
ТаблицаСебестоимости.НоваяСтрока();
ТаблицаСебестоимости.Номенклатура = Рег.Номенклатура;
ТаблицаСебестоимости.Продажи=Рег.ПродСтоимость;
ТаблицаСебестоимости.Количество = Рег.Количество;
ТаблицаСебестоимости.СуммаБух = Рег.СуммаРуб;
ТаблицаСебестоимости.СуммаБезНДС = Рег.СуммаБезНДС;
Иначе
ТаблицаСебестоимости.ПолучитьСтрокуПоНомеру(Стр);
ТаблицаСебестоимости.Продажи=ТаблицаСебестоимости.Продажи+Рег.ПродСтоимость;
ТаблицаСебестоимости.Количество = ТаблицаСебестоимости.Количество+Рег.Количество;
ТаблицаСебестоимости.СуммаБух = ТаблицаСебестоимости.СуммаБух+Рег.СуммаРуб;
ТаблицаСебестоимости.СуммаБезНДС = ТаблицаСебестоимости.СуммаБезНДС + Рег.СуммаБезНДС;
КонецЕсли;

КонецЦикла;
Показать



а что написать в обработчике ПередЗагрузкой?
Найденные решения
6. AndKovalchuk 195 26.07.19 14:10 Сейчас в теме
Разобрался. Нужно еще и поменять функцию
ПКГС_ПередОбработкойВыгрузки_РеализацияТоваровУслуг_Товары_Т­абличнаяЧасть1()
Обработки XMLВыгрузкаДанныхВБП30
чтобы она соответствовала исправлениям обработчика.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. AndKovalchuk 195 25.07.19 13:38 Сейчас в теме
И вот еще вопрос, что в данном обработчике будет источником

ТабличнаяЧастьДокумента или сам Документ

3. Поручик 4692 25.07.19 14:06 Сейчас в теме
Источник везде сам объект (Документ, Справочник, ПВХ). Табличная часть или таблица значений - КоллекцияОбъектов
AndKovalchuk; +1 Ответить
4. AndKovalchuk 195 25.07.19 14:38 Сейчас в теме
Да. В 7.7 наверно, по другому и быть не может. Там нет ссылки на табличную часть документа.

Вот написал обработчик



Но при выгрузке из Торговли 7.7 пишет следующее

ПКС_ПередВыгрузкой_РеализацияТоваровУслуг_Товары_Себестоимос­ть_Реквизит34<<?>>(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, НомерПКС, НомерПКО, ОбъектКоллекции, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, НеЗамещать, УзелКоллекцииСвойств)
Функция не обнаружена (ПКС_ПередВыгрузкой_РеализацияТоваровУслуг_Товары_Себестоимос­ть_Реквизит34)


5. AndKovalchuk 195 25.07.19 16:19 Сейчас в теме
Вот на самом деле движения по партиям выбираются в правиле конвертации группы свойств
ТабличнаяЧасть -> Товары

Пробую заполнять себестоимость там:

Исправил обработчик ПередОбработкой

ТабДокумента      = СоздатьОбъект("ТаблицаЗначений");
ТабПартий         = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");

Источник.ВыгрузитьТабличнуюЧасть(ТабДокумента);
ТабДокумента.Выгрузить(КоллекцияОбъектов);
КоллекцияОбъектов.УдалитьСтроки();

КоллекцияОбъектов.НоваяКолонка("НомерГТД");
КоллекцияОбъектов.НоваяКолонка("СтранаПроисхождения");
КоллекцияОбъектов.НоваяКолонка("СтатусПартии");
КоллекицяОбъектов.НоваяКолонка("Себестоимость","Число",15,2);

ТабПартий.НоваяКолонка("Номенклатура");
ТабПартий.НоваяКолонка("Количество");
ТабПартий.НоваяКолонка("НомерСтр");
ТабПартий.НоваяКолонка("ГТД");
ТабПартий.НоваяКолонка("СтранаПроисхождения");
ТабПартий.НоваяКолонка("СтатусПартии");
ТабПартий.НоваяКолонка("Себестоимость","Число",15,2);

ТабДокумента.НоваяКолонка("Себестоимость","Число",15,2);

Рег = СоздатьОбъект("Регистр.ПартииНаличие");
Рег.ВыбратьДвиженияДокумента(Источник);

Пока Рег.ПолучитьДвижение() = 1 Цикл
	
	ТабДокумента.ПолучитьСтрокуПоНомеру(Рег.НомерСтроки());
	Если (Рег.Количество > 0) И (ТабДокумента.Количество > 0) Тогда
		
		КоллекцияОбъектов.НоваяСтрока();
		КоллекцияОбъектов.Номенклатура        = ТабДокумента.Номенклатура;
		КоллекцияОбъектов.Количество          = Мин(ТабДокумента.Количество, Рег.Количество);
		КоллекцияОбъектов.Единица             = ТабДокумента.Единица;
		КоллекцияОбъектов.Коэффициент         = ТабДокумента.Коэффициент;
		КоллекцияОбъектов.Цена                = ТабДокумента.Цена;
		КоллекцияОбъектов.Сумма               = ?(ТабДокумента.Количество = КоллекцияОбъектов.Количество, ТабДокумента.Сумма,
													ТабДокумента.Цена * КоллекцияОбъектов.Количество);
		КоллекцияОбъектов.СтавкаНДС           = ТабДокумента.СтавкаНДС;
		КоллекцияОбъектов.СуммаНДС            = ?(ТабДокумента.Количество = КоллекцияОбъектов.Количество, ТабДокумента.СуммаНДС,
												  ?(Источник.СуммаВклНДС=1, КоллекцияОбъектов.Сумма * глВыделяемыйНДС(КоллекцияОбъектов.СтавкаНДС),
												  	КоллекцияОбъектов.Сумма * глНачисляемыйНДС(КоллекцияОбъектов.СтавкаНДС)));
		КоллекцияОбъектов.НомерГТД            = Рег.Партия.ГТД;
		КоллекцияОбъектов.СтранаПроисхождения = Рег.Партия.СтранаПроисхождения;
		КоллекцияОбъектов.СтатусПартии        = Рег.СтатусПартии;
		КоллекцияОбъектов.Себестоимость       = Рег.СуммаБезНДС;
		
		ТабДокумента.Количество = ТабДокумента.Количество - КоллекцияОбъектов.Количество;
		ТабДокумента.Сумма      = ТабДокумента.Сумма      - КоллекцияОбъектов.Сумма;
		ТабДокумента.СуммаНДС   = ТабДокумента.СуммаНДС   - КоллекцияОбъектов.СуммаНДС;
		ТабДокумента.Себестоимость =  ТабДокумента.Себестоимость - КоллекцияОбъектов.Себестоимость;
	КонецЕсли;
	
КонецЦикла;

// Даже, если движения по партиям по каким-то причинам отсутствуют все равно выгружаем остатки количства по строкам
ТабДокумента.ВыбратьСтроки();
Пока ТабДокумента.ПолучитьСтроку() = 1 Цикл 
	
	Если (ТабДокумента.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга) 
	 ИЛИ (ТабДокумента.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
	 	Продолжить;
	КонецЕсли;
	
	Если ТабДокумента.Количество > 0 Тогда
		
		КоллекцияОбъектов.НоваяСтрока();
		КоллекцияОбъектов.Номенклатура        = ТабДокумента.Номенклатура;
		КоллекцияОбъектов.Количество          = ТабДокумента.Количество;
		КоллекцияОбъектов.Единица             = ТабДокумента.Единица;
		КоллекцияОбъектов.Коэффициент         = ТабДокумента.Коэффициент;
		КоллекцияОбъектов.Цена                = ТабДокумента.Цена;
		КоллекцияОбъектов.Сумма               = ТабДокумента.Сумма;
		КоллекцияОбъектов.СтавкаНДС           = ТабДокумента.СтавкаНДС;
		КоллекцияОбъектов.СуммаНДС            = ТабДокумента.СуммаНДС;
		КоллекцияОбъектов.НомерГТД            = "";
		КоллекцияОбъектов.СтранаПроисхождения = "";
		КоллекцияОбъектов.СтатусПартии        = Перечисление.СтатусыПартии.Т_Купленный;
		КоллекцияОбъектов.Себестоимость       = ТабДокумента.Себестоимость;
		
	КонецЕсли;
КонецЦикла;

КоллекцияОбъектов.Свернуть("Номенклатура, Единица, Коэффициент, Цена, СтавкаНДС, НомерГТД, СтранаПроисхождения, СтатусПартии",
								"Количество, Сумма, СуммаНДС, Себестоимость");
Показать





Но при выгрузке из 7.7 ругается :


Выгрузка объекта выборки: Реализация 0000000510 (02.07.19) (Документ)
Конвертация объекта или получение ссылки: Реализация 0000000510 (02.07.19) (Документ)
Конвертация объекта или получение ссылки: Пакет с замком 20*30см (уп=100шт) (Справочник)
Конвертация объекта или получение ссылки: 05. Пакеты с замком (Справочник)
Конвертация объекта или получение ссылки: 20% (Перечисление)
Конвертация объекта или получение ссылки: упак (Справочник)
Конвертация объекта или получение ссылки: 20% (Перечисление)
Ошибка получения свойства из объекта коллекции. Свойство: Себестоимость
....
6. AndKovalchuk 195 26.07.19 14:10 Сейчас в теме
Разобрался. Нужно еще и поменять функцию
ПКГС_ПередОбработкойВыгрузки_РеализацияТоваровУслуг_Товары_Т­абличнаяЧасть1()
Обработки XMLВыгрузкаДанныхВБП30
чтобы она соответствовала исправлениям обработчика.
Оставьте свое сообщение

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