Документ на основании ПКО

1. _7445_ 03.04.19 14:50 Сейчас в теме
Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Есть три документа реализация товаров услуг (РТУ). Контрагент для них одиноко с названием - "Покупатель". Сумма документов разные. Пользователь выбирает один из них и на основании этого документа создает документ приходный кассовый ордер (ПКО). В документа ПКО в поле сумма документа для всех трех документов реализации.
Пример -
РТУ номер 1, Сумма документа - 500, Контрагент - Покупатель,
РТУ номер 2, Сумма документа - 550, Контрагент - Покупатель,
РТУ номер 3, Сумма документа - 600, Контрагент - Покупатель,
ПКО номер 1, Сумма документа - 1650 ??
Как решить эту проблему?
Проблема в процедуре ОбработкаЗаполнение(Основание) ?
Спасибо всем за ранее
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. arsen_botashev 03.04.19 14:55 Сейчас в теме
(1) Похоже у тебя создается документ ПКО на основании всех трех документов РТУ. /Покажи процедуру ОбработкаЗаполнение(Основание)
3. _7445_ 03.04.19 15:04 Сейчас в теме
(2)
Процедура ОбработкаЗаполнения(Основание) Экспорт
Если Основание = Неопределено ИЛИ НЕ Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Основание)) Тогда
		возврат;
	КонецЕсли;
	
	//ДокументОснование = Выборка.Основание;
	// Заполним реквизиты из стандартного набора по документу основанию.
	ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);
	
	Если НЕ ЗначениеЗаполнено(Касса) Тогда
		оснКасса = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяКасса");
		
		Если оснКасса.Владелец <> Организация Тогда
			//ВвестиЗначение(оснКасса, "Укажите кассу поступления денежных средств", "СправочникСсылка.Кассы");
			оснКасса = Справочники.Кассы.ПустаяСсылка();
			
			#Если Клиент Тогда
				
				формаВыбораКассы = ПолучитьФорму("ФормаВыбораКассы");
				формаВыбораКассы.Организация = Организация;
				
				Если формаВыбораКассы.ОткрытьМодально() = Истина Тогда
					оснКасса = формаВыбораКассы.Касса;
				КонецЕсли;
				
			#КонецЕсли
			
		КонецЕсли;
		
		Касса = оснКасса;
	КонецЕсли;
	
	ВалютаДокумента         = ?(НЕ Касса.ВалютаДенежныхСредств.Пустая(),Касса.ВалютаДенежныхСредств,мВалютаРегламентированногоУчета);
	
	СтруктураКурсаДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента, Дата);
	КурсДокумента           = СтруктураКурсаДокумента.Курс;
	КратностьДокумента      = СтруктураКурсаДокумента.Кратность;
	
	ДокументОснование = Основание.Ссылка;
	стрСпособЗаполнения  = "Не заполнять";
	
	Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя") 
		ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда
		
		УправлениеДенежнымиСредствами.ЗаполнитьПриходПоОснованию(
		ЭтотОбъект, Основание, 
		УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(
		глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный"));
		
	ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.РеализацияТоваровУслуг")
		или ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетКомиссионераОПродажах") Тогда
		
		СтрокаПлатеж = РасшифровкаПлатежа.Добавить();
		ВидОперации  = Перечисления.ВидыОперацийПКО.ОплатаПокупателя;
		Контрагент   = Основание.Контрагент;
		
		СтрокаПлатеж.ДоговорКонтрагента      = Основание.ДоговорКонтрагента;
		СтрокаПлатеж.СтатьяДвиженияДенежныхСредств = СтрокаПлатеж.ДоговорКонтрагента.ОсновнаяСтатьяДвиженияДенежныхСредств;
		СтруктураКурсаВзаиморасчетов         = МодульВалютногоУчета.ПолучитьКурсВалюты(СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов, Дата);
		СтрокаПлатеж.КурсВзаиморасчетов      = СтруктураКурсаВзаиморасчетов.Курс;
		СтрокаПлатеж.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность;
		СтрокаПлатеж.Проект                  = Основание.Проект;
		
		СтрокаПлатеж.Сделка = Основание.Сделка;
		
		Если ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом Тогда
			СтрокаПлатеж.ДокументРасчетовСКонтрагентом = Основание;
			Если Основание.Проведен Тогда
				стрСпособЗаполнения = "По взаиморасчетам";
			Иначе
				стрСпособЗаполнения = "По сумме документа";
			КонецЕсли;
		Иначе
			Если Основание.Проведен Тогда
				стрСпособЗаполнения = "По взаиморасчетам";
			Иначе
				стрСпособЗаполнения = "По сумме документа";
			КонецЕсли;
		КонецЕсли;
		
		СтрокаПлатеж.СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");
		
	ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ВозвратТоваровПоставщику") Тогда
		
		СтрокаПлатеж = РасшифровкаПлатежа.Добавить();
		ВидОперации  = Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПоставщиком;
		Контрагент   = Основание.Контрагент;
		
		СтрокаПлатеж.ДоговорКонтрагента      = Основание.ДоговорКонтрагента;
		СтрокаПлатеж.СтатьяДвиженияДенежныхСредств = СтрокаПлатеж.ДоговорКонтрагента.ОсновнаяСтатьяДвиженияДенежныхСредств;
		СтруктураКурсаВзаиморасчетов         = МодульВалютногоУчета.ПолучитьКурсВалюты(СтрокаПлатеж.ДоговорКонтрагента.ВалютаВзаиморасчетов, Дата);
		СтрокаПлатеж.КурсВзаиморасчетов      = СтруктураКурсаВзаиморасчетов.Курс;
		СтрокаПлатеж.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность;
		СтрокаПлатеж.Проект                  = Основание.Проект;
		
		СтрокаПлатеж.Сделка = Основание.Сделка;
		
		Если ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом Тогда
			
			СтрокаПлатеж.ДокументРасчетовСКонтрагентом = Основание;
			
			Если Основание.Проведен Тогда
				стрСпособЗаполнения = "По взаиморасчетам";
			КонецЕсли;
		Иначе
			Если Основание.Проведен Тогда
				стрСпособЗаполнения = "По сумме документа";
			КонецЕсли;
		КонецЕсли;
		
		СтрокаПлатеж.СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");
		
	ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.РасходныйКассовыйОрдер") Тогда
		
		ЗаполнитьПоРКОУпр();
		
	ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
		
		СтрокаПлатеж = РасшифровкаПлатежа.Добавить();
		ВидОперации  = Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствРозничнаяВыручка;
		
		Если Основание.ВидОперации=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах Тогда
			ВидПриемаРозничнойВыручки=Перечисления.ВидПриемаРозничнойВыручки.ИзКассы; 	
			Контрагент   = Основание.КассаККМ;
		ИначеЕсли Основание.ВидОперации=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетНТТОПродажах Тогда
			ВидПриемаРозничнойВыручки=Перечисления.ВидПриемаРозничнойВыручки.ИзНТТ; 	
			Контрагент   = Основание.Склад;
		КонецЕсли;
		
		стрСпособЗаполнения = "По розничной выручке";
		
		СтрокаПлатеж.СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");
		
	ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ДенежныйЧек") Тогда
		
		СтрокаПлатеж      = РасшифровкаПлатежа.Добавить();
		
		ВалютаДокумента = Основание.ВалютаДокумента;
		Касса           = Основание.Касса;
		СчетОрганизации = Основание.СчетОрганизации;
		Организация     = Основание.Организация;
		СуммаДокумента  = Основание.СуммаДокумента;
		ВидОперации     = Перечисления.ВидыОперацийПКО.ПолучениеНаличныхДенежныхСредствВБанке;
		
		ДенежныйЧек=Основание.Ссылка;
		
		СтрокаПлатеж.СуммаПлатежа=СуммаДокумента;
		СтрокаПлатеж.СтатьяДвиженияДенежныхСредств=Основание.СтатьяДвиженияДенежныхСредств;
		
	ИначеЕсли ТипЗнч(Основание)=Тип("ДокументСсылка.ПланируемоеПоступлениеДенежныхСредств") Тогда
		
		Если Основание.ФормаОплаты=Перечисления.ВидыДенежныхСредств.Безналичные Тогда
			Сообщить("Sənədlə nağd olmayan pul vəsaitlərin mədaxili planlaşdırılmışdır.");
			Возврат;
		КонецЕсли;
		
		ВидОперацииПоступление = Основание.ВидОперации;
		
		СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнаяСтавкаНДС");
		
		УправлениеДенежнымиСредствами.ОпределитьОперациюПоОснованиюУпр(ВидОперации,ВидОперацииПоступление);
		
		Организация = Основание.Организация;
		ВалютаДокумента = Основание.ВалютаДокумента;
		
		Если ЗначениеЗаполнено(Основание.БанковскийСчетКасса) Тогда
			Касса = Основание.БанковскийСчетКасса;
		КонецЕсли;
		
		Если ВалютаДокумента.Пустая() Тогда
			ВалютаДокумента = мВалютаРегламентированногоУчета;
		КонецЕсли;
		
		СтруктураКурсаДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента,);
		КурсДокумента      = СтруктураКурсаДокумента.Курс;
		КратностьДокумента = СтруктураКурсаДокумента.Кратность;
		
		Если ВидОперации=Перечисления.ВидыОперацийПКО.ПриходДенежныхСредствРозничнаяВыручка Тогда
			
			ВидПриемаРозничнойВыручки=Основание.ВидПриемаРозничнойВыручки;
			Контрагент=Основание.КассаККМ;
			
		КонецЕсли;
		
		УправлениеДенежнымиСредствами.ЗаполнитьПоПланируемомуПоступлениюУпр(РасшифровкаПлатежа,
		Основание,
		СтавкаНДС, 
		ВалютаДокумента,
		КурсДокумента,
		КратностьДокумента,
		ВидОперации);
		
		СуммаДокумента=РасшифровкаПлатежа.Итог("СуммаПлатежа");
		
	КонецЕсли;
	
	ПроверкаКурсовВалют(СтрокаПлатеж);
	
	Если стрСпособЗаполнения = "По взаиморасчетам" Тогда
		
		УправлениеДенежнымиСредствами.ЗаполнитьПоВзаиморасчетамУпр(ВалютаДокумента,КурсДокумента,КратностьДокумента,СтрокаПлатеж,1);
		СуммаДокумента=СтрокаПлатеж.СуммаПлатежа;
		УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);
		
	ИначеЕсли стрСпособЗаполнения = "По взаиморасчетам с подотчетным лицом" Тогда
		ЗаполнитьПоВзаиморасчетамСПодотчетнымЛицомУпр(СтрокаПлатеж);
		
	ИначеЕсли стрСпособЗаполнения = "По розничной выручке" Тогда
		ЗаполнитьПоРозничнойВыручкеУпр(СтрокаПлатеж);
		УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);
		
	ИначеЕсли стрСпособЗаполнения = "По сумме документа" Тогда
		ЗаполнитьПоСуммеДокументаУпр(СтрокаПлатеж);
		УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(СтрокаПлатеж);
		
	КонецЕсли;
	
	ЕстьРасчетыСКонтрагентами=УправлениеДенежнымиСредствами.ЕстьРасчетыСКонтрагентами(ВидОперации);
	ЕстьРасчетыПоКредитам=УправлениеДенежнымиСредствами.ЕстьРасчетыПоКредитам(ВидОперации);
	
	ОтраженоВОперУчете=Истина;
	Оплачено=Истина;
	ОтражатьВУправленческомУчете=Истина;
	
	Если (ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником ) И
		НЕ ВалютаВзаиморасчетовРаботника = ВалютаДокумента Тогда
		
		ОтражатьВБухгалтерскомУчете=Ложь;
		ОтражатьВНалоговомУчете=Ложь;
		
	Иначе
		
		ОтражатьВБухгалтерскомУчете=Истина;
		
	КонецЕсли;
	
	Если ПринятоОт="" И ЗначениеЗаполнено(Контрагент) Тогда
		
		Если ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам Тогда
			
			ПринятоОт =?(Контрагент.НаименованиеПолное="",Контрагент.Наименование, Контрагент.НаименованиеПолное);
			
		ИначеЕсли ВидОперации=Перечисления.ВидыОперацийПКО.ВозвратДенежныхСредствПодотчетником Тогда
			
			Запрос=Новый Запрос;
			Запрос.Текст="ВЫБРАТЬ
			|	ФИОФизЛицСрезПоследних.Фамилия КАК Фамилия,
			|	ФИОФизЛицСрезПоследних.Имя КАК Имя,
			|	ФИОФизЛицСрезПоследних.Отчество КАК Отчество
			|ИЗ
			|	РегистрСведений.ФИОФизЛиц.СрезПоследних(&Дата, ФизЛицо=&ФизЛицо) КАК ФИОФизЛицСрезПоследних";
			Запрос.УстановитьПараметр("Дата",Дата);
			Запрос.УстановитьПараметр("ФизЛицо",Контрагент);
			
			Результат=Запрос.Выполнить().Выбрать();
			Если Результат.Следующий() Тогда
				
				ПринятоОт = ?(НЕ ПустаяСтрока(Результат.Фамилия), 
				Результат.Фамилия + ?(НЕ ПустаяСтрока(Результат.Имя)," " + Результат.Имя + " " + ?(НЕ ПустаяСтрока(Результат.Отчество),Результат.Отчество, ""), ""),"");
				
			КонецЕсли;
			
			Если ЗначениеЗаполнено(РасчетныйДокумент) Тогда
				
				ЭтотОбъект.Основание=Лев(Строка(РасчетныйДокумент),Найти(Строка(РасчетныйДокумент),Строка(РасчетныйДокумент.Дата))-1)+Формат(РасчетныйДокумент.Дата,"ДФ=dd.MM.yyyy");
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Ответственный = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
	
	ЗаполнитьРеквизитыПоУмолчаниюУпр();
	
КонецПроцедуры // ОбработкаЗаполнения()
Показать
4. _7445_ 03.04.19 15:04 Сейчас в теме
(2)
Спасибо за вниманию
Да именно так.
Но проблема где не знаю
5. YannikAlx 27 03.04.19 15:10 Сейчас в теме
(4) Он не на основании 3 документов заполняет, а сумму ставит а на основании долга Покупатель, который и есть 1650.
Долг берется из регистра накопления ...
Сумму то вы можете указать любую, которую клиент платит...
6. _7445_ 03.04.19 15:12 Сейчас в теме
(5)Как решить эту проблему?
Что документ выбрал только текущий документ
9. YannikAlx 27 03.04.19 15:24 Сейчас в теме
(6) Он выбрал текущий документ.
С чего вы взяли что он выбрал, что-то другое?

(8) Долг не в коде а в регистре накопления "накапливается" и никуда не девается пока его не оплатят различными способами...
10. _7445_ 03.04.19 15:27 Сейчас в теме
(9)
А Можете говорить как сделать что документа ПКО было только то сумма который и есть в реализация
Я создаю ПКО и в документа сумма 1650 но в документа реализациях сумма 600.
12. YannikAlx 27 03.04.19 15:41 Сейчас в теме
В УТ 11 документ ПКО создается вообще без суммы, что в общем-то тоже правильно, ибо мало ли сколько человек хочет внести....
Так что в вашем случае - вбивайте вручную ту сумму, которую вносит Покупатель в кассу
7. _7445_ 03.04.19 15:14 Сейчас в теме
(5)
Надо написать запрос, проверят контрагент если он является покупателям тогда убирать строку долг иначе долг останется?
8. _7445_ 03.04.19 15:16 Сейчас в теме
(5)Все понятно. Но где это строка долг в коде?
11. YannikAlx 27 03.04.19 15:32 Сейчас в теме
(8) При создании документа ПКО , на основании РТУ заполняется реквизиты плательщика , а сумма берется НЕ из РТУ а из РН Взаиморасчеты с контрагентами по договору с этим покупателем.
13. andrey7617 57 24.06.19 21:10 Сейчас в теме
Проблема в этом коде

		Если ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом Тогда
			СтрокаПлатеж.ДокументРасчетовСКонтрагентом = Основание;
			Если Основание.Проведен Тогда
				стрСпособЗаполнения = "По взаиморасчетам";
			Иначе
				стрСпособЗаполнения = "По сумме документа";
			КонецЕсли;
		Иначе
			Если Основание.Проведен Тогда
				стрСпособЗаполнения = "По взаиморасчетам";
			Иначе
				стрСпособЗаполнения = "По сумме документа";
			КонецЕсли;
		КонецЕсли;

Показать


подставьте после

		//++
		стрСпособЗаполнения = "По сумме документа";
		//--



и будет вам счастье ...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот