Создание документа на основании в обработке

1. 5225688vd 23.12.22 08:08 Сейчас в теме
Коллеги добрый день, подскажите пожалуйста, пишу обработку в Рознице, необходимо создавать два документа Заказ на перемещение товаров и соответственно на основании заказа Перемещение товаров, как это сделать?
Вот код:
Пока ВыборкаОрганизация.Следующий() Цикл
		
		Заказ = Документы.ЗаказНаПеремещение.СоздатьДокумент();
		Заказ.Ответственный = Пользователи.ТекущийПользователь();
		Заказ.Организация = ВыборкаОрганизация.Организация;
		Заказ.ЖелаемаяДатаПоступления = ТекущаяДата();
		Заказ.Статус = Перечисления.СтатусыВнутреннихЗаказов.КВыполнению;
		Заказ.ЗакрытВручную = Ложь;
		Заказ.РеакторВСборке = Ложь;
		Заказ.РеакторСкладОтгрузкиТовара = Объект.СкладОтправитель;
		Заказ.РеакторСкладПолученияТовара = Объект.СкладПолучатель;
		Заказ.РеакторЭкстренныеПеремещения = Ложь;
		Заказ.РеакторОтправленНаПечать = Ложь;
		МагазинОтправитель  = Справочники.Магазины.НайтиПоРеквизиту("СкладПродажи", Объект.СкладОтправитель);
		Заказ.МагазинОтправитель = МагазинОтправитель;
		МагазинПолучатель = Справочники.Магазины.НайтиПоРеквизиту("СкладПродажи", Объект.СкладПолучатель);
		Заказ.МагазинПолучатель = МагазинПолучатель;
		
		Перемещение = Документы.ПеремещениеТоваров.СоздатьДокумент();
		  
		Перемещение.Организация = ВыборкаОрганизация.Организация;
		ОрганизацияПолучатель = Справочники.Организации.НайтиПоКоду(Объект.СкладПолучатель.Организация.Ссылка.Код);
		Перемещение.ОрганизацияПолучатель = ОрганизацияПолучатель;
		Перемещение.СкладОтправитель = Объект.СкладОтправитель;
		Перемещение.СкладПолучатель = Объект.СкладПолучатель;
		Перемещение.Ответственный = Пользователи.ТекущийПользователь();
		Перемещение.РеакторОтправленНаПечать = Ложь;
		Перемещение.НеСоздаватьСкладскиеОрдераДляВнутреннихПеремещений = Ложь;
		Перемещение.МагазинОтправитель = МагазинОтправитель;
		Перемещение.МагазинПолучатель = МагазинПолучатель;
		
		ВыборкаДетальныеЗаписи = ВыборкаОрганизация.Выбрать();
		
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Заказ.Дата = ТекущаяДата();
			
			Если Объект.ЗаказыНаПеремещения Тогда
				ЗаказТЧ = Заказ.Товары.Добавить();
				ЗаказТЧ.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
				ЗаказТЧ.Количество = ВыборкаДетальныеЗаписи.Количество;
				ЗаказТЧ.КоличествоУпаковок = ВыборкаДетальныеЗаписи.Количество;
				ЗаказТЧ.РеакторОтменено = Ложь;
				Попытка 
					Заказ.Записать(РежимЗаписиДокумента.Проведение);
				Исключение
					Заказ.Записать(РежимЗаписиДокумента.Запись);
				КонецПопытки;
							КонецЕсли;
			
					
		  Если Объект.Перемещения Тогда

		Перемещение.Дата = ТекущаяДата();
		Перемещение.ДокументОснование = Заказ.Ссылка;
		
			ПеремещениеТЧ = Перемещение.Товары.Добавить();
			ПеремещениеТЧ.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
			ПеремещениеТЧ.Количество = ВыборкаДетальныеЗаписи.Количество;
			ПеремещениеТЧ.КоличествоУпаковок = ВыборкаДетальныеЗаписи.Количество;
			ПеремещениеТЧ.НеобходимостьВводаАкцизнойМарки = Ложь;
			
			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
			|	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
			|	ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
			|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
			|ИЗ
			|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
			|ГДЕ
			|	ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
			|	И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены";
			ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Закупочные");
			Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
			Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата()));
			Запрос.УстановитьПараметр("Номенклатура", ПеремещениеТЧ.Номенклатура);
			
			РезультатЗапроса = Запрос.Выполнить();
			
			ВыборкаЦен = РезультатЗапроса.Выбрать();
			
			Пока ВыборкаЦен.Следующий() Цикл
				ПеремещениеТЧ.Цена = ВыборкаЦен.Цена;
				ПеремещениеТЧ.Сумма = ПеремещениеТЧ.Количество * ПеремещениеТЧ.Цена;
			КонецЦикла;
			
			
			Попытка
				Перемещение.Записать(РежимЗаписиДокумента.Проведение);
			Исключение
				Перемещение.Записать(РежимЗаписиДокумента.Запись);
			КонецПопытки;
					КонецЕсли;
				КонецЦикла;

Сообщить("Создан документ " + Перемещение);
Сообщить("Создан документ " + Заказ);

	КонецЦикла;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 119 23.12.22 08:11 Сейчас в теме
(1) По хорошему я бы пользовался обработкой заполнения. т.е. перемещение.создатьдокумент. Перемещение.Заполнить(заказ).
Ну и дальше менял уже поля, которые не заполняются штатной логикой/которые надо изменить.
3. 5225688vd 23.12.22 08:22 Сейчас в теме
(2)Да, надо попробовать, спасибо
4. 5225688vd 23.12.22 08:47 Сейчас в теме
Нет не заполняет, есть еще варианты?
5. glek 119 23.12.22 08:56 Сейчас в теме
(4) т.е. ввод не основании заказа перемещение не заполняет перемещение? нет создания на основании? Какая конфа, версия?
6. 5225688vd 23.12.22 09:12 Сейчас в теме
(5)
нет создания на основании? Какая конфа, версия?

Документы создаются, но связи между ними нет, Розница 2.3 (2.3.8.27)
7. glek 119 23.12.22 09:21 Сейчас в теме
(6) Значит заполняется. т.е. если вызвать Перемещение.Заполнить(СсылкаНаЗаказ) отработать должно корректно.
8. 5225688vd 23.12.22 09:55 Сейчас в теме
(7)Если делаю Перемещение.Заполнить(СсылкаНаЗказ), то создается абсолютно пустой документ перемещение, но тоже без привязки к заказу.
9. glek 119 23.12.22 10:01 Сейчас в теме
(8) Значит надо посмотреть отладчиком, что происходит в обработке заполнения (какие параметры туда попадают при интерактивном вводе на основании). Розницы у меня нет, посмотреть не могу.
10. spacecraft 23.12.22 10:20 Сейчас в теме
(8) СсылкаНаЗаказ... а этот документ (Заказ) уже записан? А то передаете пустую ссылку, вот и не заполняет.
11. 5225688vd 23.12.22 10:30 Сейчас в теме
(10) Если Объект.ЗаказыНаПеремещения Тогда
ЗаказТЧ = Заказ.Товары.Добавить();
ЗаказТЧ.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ЗаказТЧ.Количество = ВыборкаДетальныеЗаписи.Количество;
ЗаказТЧ.КоличествоУпаковок = ВыборкаДетальныеЗаписи.Количество;
ЗаказТЧ.РеакторОтменено = Ложь;
Попытка
Заказ.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Заказ.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
КонецЕсли;


Если Объект.Перемещения Тогда

Перемещение.Дата = ТекущаяДата();
Перемещение.ДокументОснование = Заказ.Ссылка;
Ну по идее должен быть записан, может я не правильно понимаю
12. lefthander 23.12.22 11:49 Сейчас в теме
(11)По идее он должен быть проведен. Иначе перемещение не будет создаваться. ;)
13. spacecraft 23.12.22 12:16 Сейчас в теме
(11) и в каком месте приведенного кода используется Перемещение.Заполнить(СсылкаНаЗказ)?
14. 5225688vd 23.12.22 12:23 Сейчас в теме
Все парни, я разобрался, все работает, всем спасибо большое!
Оставьте свое сообщение

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