Изменение цен при выгрузке из УНФ в БП

Клиенту нужно было, чтобы при выгрузке из УНФ в БП подменялись цены реализации на цены из заказа.

Мне была предоставлена копия баз УТ и БП.

Но мне не хотелось настраивать синхронизацию УТ и БП. К тому же в БП были не совсем полные права, там не было прав на настройку синхронизации.

Поэтому я решил делать разработку на выгрузке в Enterprise Data. Я сделал настройку на выгрузку одного документа и сохранил эту настройку, чтобы быстро восстанавливать при перезапусках:

Расширил модуль МенеджерОбменаЧерезУниверсальныйФормат, код получился несложным:

&После("ПКО_Документ_РасходнаяНакладная_Отправка_ПриОтправкеДанных")
Процедура доробм_ПКО_Документ_РасходнаяНакладная_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
	Если ЗначениеЗаполнено(ДанныеИБ.Заказ) Тогда                                                                                 
		СуммаВключаетНДС = ДанныеИб.СуммаВключаетНДС;

		ТоварыЗаказа = ДанныеИБ.Заказ.Запасы;
		Для Каждого Строка ИЗ ДанныеXDTO.Товары Цикл
			СтруктураПоиска = Новый Структура("Номенклатура, Характеристика", Строка.Номенклатура, Строка.Характеристика);
			ИскСтрокиЗаказа = ТоварыЗаказа.НайтиСтроки(СтруктураПоиска);
			Если ИскСтрокиЗаказа.Количество() > 0 Тогда
				ИскСтрокаЗаказа = ИскСтрокиЗаказа[0];
				ЦенаЗаказа = ИскСтрокаЗаказа.Цена;
				СтараяЦена = Строка.Цена;
				Строка.Цена = ЦенаЗаказа;
				Строка.Сумма = Строка.Цена * Строка.Количество;
				Если Строка.СтавкаНДС = "БезНДС" Тогда
					К = 0;
				ИначеЕсли Строка.СтавкаНДС = "НДС20" Тогда
					К = 20;
				ИначеЕсли Строка.СтавкаНДС = "НДС22" Тогда
					К = 22;
				ИначеЕсли Строка.СтавкаНДС = "НДС18" Тогда
					К = 18;
				ИначеЕсли Строка.СтавкаНДС = "НДС10" Тогда
					К = 10;
				ИначеЕсли Строка.СтавкаНДС = "НДС5" Тогда
					К = 5;
				ИначеЕсли Строка.СтавкаНДС = "НДС7" Тогда
					К = 7;
				КонецЕсли;                         
				Если СуммаВключаетНДС Тогда
					Строка.СуммаНДС = Строка.Сумма * К /  (100 + К);
					Строка.Всего = Строка.Сумма;
				Иначе
					Строка.СуммаНДС = Строка.Сумма * К /  100;
					Строка.Всего = Строка.Сумма + Строка.СуммаНДС;
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;                                 
	КонецЕсли;
КонецПроцедуры

Выгрузил документ в ED, поменяв цены в первой и третьей строке:

Для очистки совести подгрузил выгруженный документ в БП, цены подставились из заказа:

UPD: странное дело, но при выгрузке через план обмена ставка НДС попадает не строкой, а структурой, пришлось написать отдельный код под это дело:

К = 0;
Если ТипЗнч(Строка.СтавкаНДС) = Тип("Структура") 
	И  ТипЗнч(Строка.СтавкаНДС.Значение) = Тип("СправочникСсылка.СтавкиНДС") 
	Тогда
	К = Строка.СтавкаНДС.Значение.Ставка;
КонецЕсли;                         

Среда: УНФ 3.0.12.261, 1С 8.5.1.1302.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментариев 6

  1. Виталий:

    Идея рабочая, но хрупкая: сопоставление по номенклатуре и характеристике сломается на дублях, разных ценах, скидках, упаковках, округлениях. Правильнее закрывать это на уровне правил обмена или настроек пересчёта — а не вручную пересобирать «Цена», «Сумма», «СуммаНДС» и «Всего» прямо в обработчике выгрузки.

    • rzd:

      Там еще с новой ставкой НДС надо будет отдельно изменения вносить

    • Правильнее, но дороже. Вы опять пытаетесь частную задачу решить универсально.
      Клиенту не нужен швейцарский нож, ему нужен перочинный.

      • Виталий:

        Согласен, клиенту не всегда нужен швейцарский нож. Но перочинный нож должен резать предсказуемо — а не только если держишь его строго определённо. Я не за универсализацию ради универсализации. Я за минимальную устойчивость к очевидным кейсам: дубли строк, разные цены, скидки, упаковки, округления. Без этого — это не «частное решение», а решение, которое держится, пока данные не шалят.

        • Вы Виталий, возможно работаете не в том low-budget секторе. У клиента есть определенный тип задач и переплачивать за то, что ему НИКОГДА не понадобится не стоит.
          Я не Баба Ванга, чтобы знать, что у него появится, в такой модели проще решать проблемы по мере роста клиента. Вырастет — тогда и будем работать.
          Но возможно тогда эта модель с передачей на лету и не понадобится.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *