Имя: Пароль:
1C
1С v8
Обработка создание ППИ из заявок на расходование средств
0 ColonelAp4u
 
19.06.15
12:33
Добрый день подскажите пожалуйста есть обработка которая создает платежное поручение из заявок на расходование средств, иногда попадаются заявки в кооторых некоторые документы расчета с контрагентом уже оплачены и я не хочу их переносить в Таб часть платежки,
Вот код обработки
Сч = 0;
    Пока Сч < НайденныеСтроки.Количество() Цикл
    Стр = НайденныеСтроки.Получить(Сч);

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

                        КонецЕсли;
1 ColonelAp4u
 
19.06.15
12:39
Проблема в том что как только программа увидела что док оплачен она удаляет строку и на этом моменте меня кидает в исключение!
2 ColonelAp4u
 
19.06.15
12:40
НайденныеСтроки.Удалить(Стр);
3 ColonelAp4u
 
19.06.15
12:53
Еще проверял на тестовом серваке создал 3 заявки 1 полностью оплачена 2 такая же но без оплаты и 3 другая тоже без оплаты, в список заявок попали всего 2 которые типа нужно оплатить. При нажатии на оплату создается док ППИ в котором есть только доки из заявки 3 в отладчике все строки из заявки 2 удалились. Перекинул обработку на главный серв и сразу такая фигня кидает на исключение как только доходит до строки (2)
4 ColonelAp4u
 
19.06.15
13:08
Подскажите плиз в какую сторону копать нужно?
5 ColonelAp4u
 
19.06.15
14:51
АП подскажите в чем может быть косяк?