Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программное заполнение Платежки и ПКО заказами по ФИФО/ЛИФО
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Наши статьи > 1С Предприятие 8
vbi
В стандартной конфигурации УТП для Украины, в таких документах, как "Платежное поручение входящее" и "Приходный кассовый ордер" есть пункт меню "Заполнить" табличной части "Расшифровка платежа". Этот пункт запускает стандартную обработку, открывает ее форму, а она в свою очередь подбирает неоплаченные заказы.

Иногда бывает необходимо в цикле программно заполнить платежные документы сделками по ФИФО или ЛИФО. Многие пишут все вручную, либо пытаются вытащить алгоритм из той обработки заполнения, мотивируя "там же диалоговое окно открывается, как ее использовать программно?"

На самом деле все просто. Вот код заполнения неоплаченными сделками в цикле по ФИФО Платежных поручений входящих и Приходных кассовых ордеров. Может кому пригодится:

Платежное поручение входящее:
 Для Каждого Платежка Из ТаблицаПлатежек Цикл
             ОбрОб=Обработки.ПодборПараметровРасшифровкиПлатежа.Создать();

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


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

             Для Каждого Строка Из ДокОб.РасшифровкаПлатежа Цикл
                 ДокОб.ОпределитьСчетаУчетаРасчетовСКонтрагентом(Строка);
                 УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(Строка);    
             КонецЦикла;
            
             Попытка
                 ДокОб.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
             Исключение
                 Сообщить(ОписаниеОшибки());
             КонецПопытки;
КонецЦикла;
feb
У кого-нибудь работал этот код?
andr_andrey
Цитата(feb @ 05.11.15, 10:02) необходимо зарегистрироваться для просмотра ссылки
У кого-нибудь работал этот код?

Рассматривайте любой код в интернете как направление поиска, а не как кусок для копи-паста.
feb
Цитата(andr_andrey @ 05.11.15, 11:12) необходимо зарегистрироваться для просмотра ссылки
Рассматривайте любой код в интернете как направление поиска, а не как кусок для копи-паста.

В данном случае меня интересует не столько этот код, сколько варианты решения этой задачи: Программное заполнение Платежки заказами по ФИФО.

Может еще какие-то варианты есть? Например, с использованием типового функционала...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.