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

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

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


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

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

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

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



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

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

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

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



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

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


5. AndKovalchuk 185 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 185 26.07.19 14:10 Сейчас в теме
Разобрался. Нужно еще и поменять функцию
ПКГС_ПередОбработкойВыгрузки_РеализацияТоваровУслуг_Товары_Т­абличнаяЧасть1()
Обработки XMLВыгрузкаДанныхВБП30
чтобы она соответствовала исправлениям обработчика.
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день