Имя: Пароль:
1C
 
УТ 11.4 Программное создание заказа поставщику
0 hawk1
 
03.10.20
15:33
При проведении ПКО создаю заказ поставщику
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
    Если ТипЗнч(ТекущийОбъект.ДокументОснование) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("ВариантОплаты", Перечисления.ВариантыОплатыКлиентом.АвансДоОбеспечения);
        
        СтрокаАванса = ТекущийОбъект.ДокументОснование.ЭтапыГрафикаОплаты.НайтиСтроки(Отбор);
        
        Если ТекущийОбъект.СуммаДокумента >= СтрокаАванса[0].СуммаПлатежа Тогда
            ЗаказПоставщику = Документы.ЗаказПоставщику.СоздатьДокумент();
            ЗаказПоставщику.Дата = ТекущаяДата();
            ЗаказПоставщику.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
            ЗаказПоставщику.Организация = Объект.ДокументОснование.Организация;
            ЗаказПоставщику.Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(ЗаказПоставщику.Склад, ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки"));
            ЗаказПоставщику.Приоритет = Справочники.Приоритеты.ПолучитьПриоритетПоУмолчанию(ЗаказПоставщику.Приоритет);
            ЗаказПоставщику.Партнер = Справочники.Партнеры.НайтиПоНаименованию(ТекущийОбъект.ДокументОснование.Товары[0].Номенклатура.Производитель.Наименование);
            ЗаказПоставщику.Статус = Перечисления.СтатусыЗаказовПоставщикам.Согласован;
            
            Для Каждого СтрокаЗаказа Из ТекущийОбъект.ДокументОснование.Товары Цикл
                Если Справочники.Партнеры.НайтиПоНаименованию(СтрокаЗаказа.Номенклатура.Производитель.Наименование) <> ЗаказПоставщику.Партнер Тогда
                    ЗаказПоставщику.СуммаДокумента = ЗаказПоставщику.Товары.Итог("Сумма");
                    ЗаказПоставщику.Записать(РежимЗаписиДокумента.Проведение);
                                                                                      
                    ЗаказПоставщику = Документы.ЗаказПоставщику.СоздатьДокумент();
                    ЗаказПоставщику.Дата = ТекущаяДата();
                    ЗаказПоставщику.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
                    ЗаказПоставщику.Организация = Объект.ДокументОснование.Организация;
                    ЗаказПоставщику.Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(ЗаказПоставщику.Склад, ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки"));
                    ЗаказПоставщику.Приоритет = Справочники.Приоритеты.ПолучитьПриоритетПоУмолчанию(ЗаказПоставщику.Приоритет);
                    ЗаказПоставщику.Партнер = Справочники.Партнеры.НайтиПоНаименованию(СтрокаЗаказа.Номенклатура.Производитель.Наименование);
                    ЗаказПоставщику.Статус = Перечисления.СтатусыЗаказовПоставщикам.Согласован;
                КонецЕсли;
                
                СтрокаТЧ = ЗаказПоставщику.Товары.Добавить();
                СтрокаТЧ.Номенклатура = СтрокаЗаказа.Номенклатура;
                СтрокаТЧ.Характеристика = СтрокаЗаказа.Характеристика;
                СтрокаТЧ.Количество = СтрокаЗаказа.Количество;
                СтрокаТЧ.СтавкаНДС = СтрокаЗаказа.СтавкаНДС;
                СтрокаТЧ.ВидЦеныПоставщика = Справочники.ВидыЦенПоставщиков.НайтиПоНаименованию("Закупочная");
                
                Отбор = Новый Структура;
                Отбор.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
                Отбор.Вставить("Партнер", ЗаказПоставщику.Партнер);
                Отбор.Вставить("ВидЦеныПоставщика", Справочники.ВидыЦенПоставщиков.НайтиПоНаименованию("Закупочная"));
                
                ВыборкаЦены = РегистрыСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(ТекущаяДата(), Отбор);
                Если ВыборкаЦены.Количество() > 0 Тогда
                    Цена = ВыборкаЦены[0].Цена;
                Иначе
                    Цена = 0;
                КонецЕсли;
                    
                СтрокаТЧ.Цена = Цена;
                СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
                СтрокаТЧ.СуммаСНДС = СтрокаТЧ.Сумма;
            КонецЦикла;
            
            ЗаказПоставщику.СуммаДокумента = ЗаказПоставщику.Товары.Итог("Сумма");
            ЗаказПоставщику.Записать(РежимЗаписиДокумента.Проведение);
        КонецЕсли;
    КонецЕсли;
    КонецЕсли;
Но при попытке проведения выдается сообщение о том что склад не заполнен. Если же не заполнять склад и приоритет, документ проводится, но поле количество в табличной части Товары остается пустым. Что не так?
1 hhhh
 
03.10.20
16:05
(0) а где

СтрокаТЧ.КоличествоУпаковок =  

???

это же поле Количество. Забыли?

И строкаТЧ.Склад  тоже нет.
2 breezee
 
03.10.20
17:42
Почему нельзя сделать процедуру в которой сначала сделать проверки типо
Если ТипЗнч(ТекущийОбъект.ДокументОснование) <> Тип("ДокументСсылка.ЗаказКлиента") Тогда
возврат;
КонецЕсли;

Если ТекущийОбъект.СуммаДокумента < СтрокаАванса[0].СуммаПлатежа Тогда
возврат;
КонецЕсли;

А не писать 10 вложенных если?

Почему обраащение к СтрокаАванса[0] без контрля что есть строки?
3 PuhUfa
 
03.10.20
18:02
(0) >>Если ТипЗнч(ТекущийОбъект.ДокументОснование) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Я правильно понимаю что заказ поставщику вводится на основании ЗаказКлиента?
Тогда зачем вообще это все если в МО документа ЗаказПоставщику есть типовой:

    ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаказКлиента") Тогда
        ЗаполнитьДокументНаОснованииЗаказа(ДанныеЗаполнения);
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн