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

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 Сейчас в теме
Все парни, я разобрался, все работает, всем спасибо большое!
Оставьте свое сообщение

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