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

Обработка создание ППИ из заявок на расходование средств

Автор ColonelAp4u, 19 июн 2015, 15:03

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

ColonelAp4u

Добрый день подскажите пожалуйста есть обработка которая создает платежное поручение из заявок на расходование средств, иногда попадаются заявки в кооторых некоторые документы расчета с контрагентом уже оплачены и я не хочу их переносить в Таб часть платежки,
Вот код обработки

Сч = 0;
    Пока Сч < НайденныеСтроки.Количество() Цикл
    Стр = НайденныеСтроки.Получить(Сч);

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

                        КонецЕсли;


Проблема в том что как только программа увидела что док оплачен она удаляет строку и на этом моменте меня кидает в исключение!
НайденныеСтроки.Удалить(Стр);

ColonelAp4u


vitasw

Для начала переписать запрос так, чтобы не нужно было выполнять запрос в цикле.

Теги:

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

Рейтинг@Mail.ru

Поиск