Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 23:11

Проверка заказов при создании нового документа

Автор spapin, 19 авг 2013, 14:33

0 Пользователей и 1 гость просматривают эту тему.

spapin

Добрый день. Подскажите как лучше организовать проверку по заказам в новом документе корректировка заказа. Т.е. у меня есть документ Поступления, у которого есть доп колонкуа СкКол(проставляется при приходе товара из файла СФ). Если колонки количество и СкКол не равны мне надо сделать документы: Возврат поставщику и Корректировка заказа покупателя.
Но проблема в том, что приход может быть по нескольким заказам и по каждому заказу надо создать свой документ корректировки с позициями, количество у которых не равны. Как лучше сделать?
ТекПользователь = глЗначениеПеременной("глТекущийПользователь");
    ТЗТоварыПеремещения = новый ТаблицаЗначений;
    ТЗТоварыПеремещения.Колонки.Добавить("Номенклатура");
    ТЗТоварыПеремещения.Колонки.Добавить("Количество");
    ТЗТоварыПеремещения.Колонки.Добавить("ЗаказанноеКоличество");
    ТЗТоварыПеремещения.Колонки.Добавить("ДокументРезерва");
    ТЗТоварыПеремещения.Колонки.Добавить("Коэффициент");
    ТЗТоварыПеремещения.Колонки.Добавить("ЕдиницаИзмерения");
    ТЗТоварыПеремещения.Колонки.Добавить("ЕдиницаИзмеренияМест");
    ТЗТоварыПеремещения.Колонки.Добавить("Качество");
    ТЗТоварыПеремещения.Колонки.Добавить("ВалютаДокумента");
    ТЗТоварыПеремещения.Колонки.Добавить("СтавкаНДС");
    ТЗТоварыПеремещения.Колонки.Добавить("Цена");
    ТЗТоварыПеремещения.Колонки.Добавить("СкладОрдер");
    ТЗТоварыПеремещения.Колонки.Добавить("Заказ");
    ТЗТоварыПеремещения.Колонки.Добавить("ЗаказПоставщику");
    ТЗТоварыПеремещения.Колонки.Добавить("ФлагНовогоЗаказа");
   
    РазличноеКоличество = товары.Итог("Количество") - товары.Итог("СкКол");
    Если РазличноеКоличество > 0 Тогда
        ТекДокументПоступления = ЭтотОбъект.Ссылка;
       
        Для Каждого строка Из ТекДокументПоступления.Товары Цикл
            Если строка.СкКол < строка.Количество Тогда
                ОстатокОтПоступления = строка.Количество - Строка.СкКол;
                СтрокаТЗ = ТЗТоварыПеремещения.Добавить();
                СтрокаТЗ.Номенклатура                  = строка.Номенклатура;
                СтрокаТЗ.Количество                  = ОстатокОтПоступления;
                СтрокаТЗ.ЗаказанноеКоличество         = строка.Количество;
                СтрокаТЗ.Коэффициент                 = 1;
                СтрокаТЗ.ЕдиницаИзмерения            = строка.Номенклатура.ЕдиницаХраненияОстатков;
                СтрокаТЗ.ЕдиницаИзмеренияМест        = строка.Номенклатура.ЕдиницаИзмеренияМест;
                СтрокаТЗ.Качество                      = Справочники.Качество.Новый;
                СтрокаТЗ.СтавкаНДС                   = строка.СтавкаНДС;
                СтрокаТЗ.Цена                         = строка.Цена;
                СтрокаТЗ.СкладОрдер                  = СкладОрдер;
                СтрокаТЗ.Заказ                        = строка.Заказ;
                СтрокаТз.ЗаказПоставщику            = строка.ЗаказПоставщику;
            КонецЕсли;
        КонецЦикла;
        //Создадим документ возврата поставщику

        Если ТЗТоварыПеремещения.Количество() > 0 Тогда
            ДокументВозврата = Документы.ВозвратТоваровПоставщику.СоздатьДокумент();
            ДокументВозврата.Дата = ТекущаяДата();
            ДокументВозврата.Организация = ТекДокументПоступления.Организация;
            ДокументВозврата.Контрагент = Контрагент;
            ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокументВозврата, глЗначениеПеременной("глТекущийПользователь"), глЗначениеПеременной("ВалютаРегламентированногоУчета"), "Закупка", ,);
            Если ДокументВозврата.Организация = Справочники.Организации.ПустаяСсылка() тогда
                нашаглавнаяорганизация =УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекПользователь, "ОсновнаяОрганизация");
                ДокументВозврата.Организация = нашаглавнаяорганизация;
                Док = ТекДокументПоступления.получитьобъект();
                Док.организация = нашаглавнаяорганизация;
                Док.Записать();
            КонецЕсли;
            ДокументВозврата.Товары.Загрузить(ТЗТоварыПеремещения);
            ДокументВозврата.Записать();
            ДокументВозврата.ЗаполнитьПоСериям();
            ДокументВозврата.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Создан документ:" + ДокументВозврата);
        КонецЕсли;
       
        //Создадим документ корректировки заказа покупателя

        Если ТЗТоварыПеремещения.Количество() > 0 Тогда
            ТЗЗаказов = ТЗТоварыПеремещения.Скопировать();
           
            Для каждого стТЗЗаказов из ТЗЗаказов цикл
                ДокКорректировки = Документы.КорректировкаЗаказаПокупателя.СоздатьДокумент();
               
                ДокКорректировки.Дата = ТекущаяДата();           
                ДокКорректировки.ЗаказПокупателя = стТЗЗаказов.Заказ;
               
                Для каждого стрТЗТоварыПеремещения из ТЗТоварыПеремещения цикл
                    Если стрТЗТоварыПеремещения.Заказ =  стТЗЗаказов.Заказ тогда
                        стрДокументКорректировки = ДокКорректировки.Товары.Добавить();
                        стрДокументКорректировки.Номенклатура        = стрТЗТоварыПеремещения.Номенклатура;
                        стрДокументКорректировки.Количество         = -1*стрТЗТоварыПеремещения.Количество;
                        стрДокументКорректировки.Коэффициент         = 1;
                        стрДокументКорректировки.ЕдиницаИзмерения     = стрТЗТоварыПеремещения.ЕдиницаИзмерения;
                        стрДокументКорректировки.Цена               = стрТЗТоварыПеремещения.Цена;
                        СуммаВКорректировку                           = стрТЗТоварыПеремещения.Цена * стрТЗТоварыПеремещения.Количество;
                        стрДокументКорректировки.Сумма              = -СуммаВКорректировку;
                        СуммаНДСВКорректировку                        = (СуммаВКорректировку/118*18)* стрТЗТоварыПеремещения.Количество;
                        стрДокументКорректировки.СуммаНДС           = -СуммаНДСВКорректировку;
                        стрДокументКорректировки.Размещение         = стрТЗТоварыПеремещения.СкладОрдер;

                        КонецЕсли;   
                КонецЦикла;
            КонецЦикла;
            ДокКорректировки.Записать(РежимЗаписиДокумента.Запись);
            Сообщить("Создан документ " + ДокКорректировки);
        КонецЕсли;     
    КонецЕсли;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск