УТ 11.2.3 печатная форма счет на оплату, хм

1. lsd_777 10.03.16 12:55 Сейчас в теме
Доброго дня! 1с внедрили, и потом только увидели счет на оплату http://joxi.ru/8An6JOxsqnBWeA, как можно поменять на старую форму?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1533 10.03.16 12:56 Сейчас в теме
(1) lsd_777, вставить код старой или добавить ВПФ.
3. lsd_777 10.03.16 12:58 Сейчас в теме
(2) Xershi, а будет ли код старой работать?
4. Xershi 1533 10.03.16 13:00 Сейчас в теме
(3) lsd_777, напишешь посмотришь. Дело 5 минут. Проблема возникнет только если изменились процедуры или реквизиты. Тогда и это нужно будет исправить.
5. lsd_777 10.03.16 13:02 Сейчас в теме
Открыл сейчас на редактирование печатную форму http://joxi.ru/52akaE5iGv6xgr , там присутствует "Образец заполнения платежного поручения", но при выводе на печать, подставляется какая то ерунда "Банковские реквизиты / BANK INFORMATION"
6. Xershi 1533 10.03.16 13:03 Сейчас в теме
(5) lsd_777, ну так в коде смотреть нужно. Код макет может изменить до неузнаваемости.
7. lsd_777 10.03.16 13:07 Сейчас в теме
(6) Xershi, Да я в коде не разбираюсь, думал может кто делал уже, подскажут. Я же не первый на 2.3 перешел) Да и такой счет думаю никого не устроил, без реквизитов.
8. Xershi 1533 10.03.16 13:20 Сейчас в теме
(7) lsd_777, так а что там разбираться нужно просто скопировать и все. Или перенести ВПФ если она там такой была.
9. lsd_777 10.03.16 13:25 Сейчас в теме
10. Xershi 1533 10.03.16 13:28 Сейчас в теме
(9) lsd_777, макет печатной формы и код, который ее вызывает и заполняет.
11. lsd_777 10.03.16 13:36 Сейчас в теме
(10) Xershi, макет понятно, откуда код брать непонятно.
12. Xershi 1533 10.03.16 13:39 Сейчас в теме
(11) lsd_777, в модуле документа по идее.
13. lsd_777 10.03.16 19:29 Сейчас в теме
(12) Xershi, В общем я не знаю что делать(
14. lsd_777 10.03.16 20:08 Сейчас в теме
Проверил сейчас в демо базе, там все нормально! Не понимаю, что за мистика такая...
15. lsd_777 10.03.16 21:06 Сейчас в теме
Окончательно ничего не понимаю, если убираю расчетный счет в реквизитах для печати http://joxi.ru/nAyq0onsXVge0A, то печатная форма выводится нормальная, но не заполнены банковские реквизиты http://joxi.ru/eAO7XGLH4Q9oVA, а если выбираю банковский счет, то получаю вот эту хрень http://joxi.ru/ZrJXaGQf1Rwo42 . Помогите пожалуйста, а то у меня крыша щас поедет. Это явно какой то глюк конфигурации или платформы. Управление торговлей, редакция 11.2 (11.2.3.101) 1С:Предприятие 8.3 (8.3.7.1917)
17. Xershi 1533 10.03.16 23:09 Сейчас в теме
(15) lsd_777, код выложи, тогда будет о чем говорить. А так только кэш почистить можно.
18. lsd_777 11.03.16 18:47 Сейчас в теме
(17) Xershi, Код модуля документа "счет на оплату"?
19. Xershi 1533 11.03.16 19:36 Сейчас в теме
(18) lsd_777, обычно там его пишут.
20. lsd_777 11.03.16 20:15 Сейчас в теме
(19) Xershi, ФормаСозданияСчетовНаОплату
#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ДокументОснование = Параметры.ДокументОснование;
	
	Если НЕ ПроверитьВозможностьСозданияСчетовНаОплату(ДокументОснование) Тогда
		Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не требуется вводить счет на оплату на основании документа %1. Расчеты ведутся по накладным.'"),
			ДокументОснование);
		ВызватьИсключение Текст;
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ДокументОснование", ДокументОснование, ВидСравненияКомпоновкиДанных.Равно,, Истина);
	
	Если ДокументОснование <> Неопределено Тогда
		
		Если ЗначениеЗаполнено(ДокументОснование) Тогда
			
			Заголовок = Заголовок + ": " + ДокументОснование;
			
		Иначе
			
			ТекстДокумент = НСтр("ru='%ТипДокумента% (новый)'");
			ТекстДокумент = СтрЗаменить(ТекстДокумент, "%ТипДокумента%", ДокументОснование.Метаданные().Синоним);
			Заголовок = Заголовок + ": " + ТекстДокумент;
			
		КонецЕсли;
		
	КонецЕсли;
	
	ШапкаОснование = Новый Структура("
		|Партнер,
		|Контрагент,
		|Договор,
		|Организация,
		|Валюта,
		|ДокументОснование,
		|СуммаДокумента,
		|НомерДокумента,
		|БанковскийСчет,
		|Префикс,
		|Касса,
		|ФормаОплаты, 
		|КонтактноеЛицо
		|");
		
	УстановитьВидимость();
		
	ОбновитьСервер();
	
	Если ЗначениеЗаполнено(Валюта) Тогда
		
		Элементы.ТаблицаЭтаповСуммаПлатежа.Заголовок = СформироватьЗаголовокКолонкиСВалютой(Элементы.ТаблицаЭтаповСуммаПлатежа.Заголовок, Валюта);
		Элементы.ТаблицаЭтаповСуммаКОплате.Заголовок = СформироватьЗаголовокКолонкиСВалютой(Элементы.ТаблицаЭтаповСуммаКОплате.Заголовок, Валюта);
		Элементы.ТаблицаЭтаповСуммаОплаты.Заголовок  = СформироватьЗаголовокКолонкиСВалютой(Элементы.ТаблицаЭтаповСуммаОплаты.Заголовок, Валюта);
		
	КонецЕсли;
	
	Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
	КонецЕсли;
	
	// СтандартныеПодсистемы.Печать
	УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ПодменюПечать);
	// Конец СтандартныеПодсистемы.Печать

	// КомандыЭДО
	ОбменСКонтрагентами.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ПодменюЭДО);
	// Конец КомандыЭДО

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Обновить(Команда)
	
	ОбновитьСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьСчет(Команда)
	
	СформироватьСчет();
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьРаспечататьСчет(Команда)
	
	СформироватьСчет(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура Аннулировать(Команда)
	
	Если Не РаботаСДиалогамиКлиент.ПроверитьНаличиеВыделенныхВСпискеСтрок(Элементы.Список) Тогда
		Возврат;
	КонецЕсли;
	
	ТекстВопроса = НСтр("ru='Выделенные в списке счетов на оплату будут аннулированы. Продолжить?'");
	Ответ = Неопределено;

	ПоказатьВопрос(Новый ОписаниеОповещения("АннулироватьЗавершение", ЭтотОбъект), ТекстВопроса,РежимДиалогаВопрос.ДаНет);
	
КонецПроцедуры

&НаКлиенте
Процедура АннулироватьЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    Ответ = РезультатВопроса;
    
    Если Ответ = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;
    
    КоличествоОбработанных = УстановитьПризнакАннулироваСервер(Элементы.Список.ВыделенныеСтроки);
    
    Если КоличествоОбработанных > 0 Тогда
        
        Элементы.Список.Обновить();
        
        ТекстСообщения = НСтр("ru='%КоличествоОбработанных% из %КоличествоВсего% выделенных в списке счетов на оплату аннулированы.'");
        ТекстСообщения = СтрЗаменить(ТекстСообщения,"%КоличествоОбработанных%", КоличествоОбработанных);
        ТекстСообщения = СтрЗаменить(ТекстСообщения,"%КоличествоВсего%",        Элементы.Список.ВыделенныеСтроки.Количество());
        ПоказатьОповещениеПользователя(НСтр("ru='Счета на оплату аннулированы'"),, ТекстСообщения, БиблиотекаКартинок.Информация32);
        
    Иначе
        
        ТекстСообщения = НСтр("ru='Не аннулирован ни один счет на оплату.'");
        ПоказатьОповещениеПользователя(НСтр("ru='Счета на оплату не аннулированы'"),, ТекстСообщения, БиблиотекаКартинок.Информация32);
        
    КонецЕсли;

КонецПроцедуры

// СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
	
	УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Элементы.Список);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.Печать

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
	
	ЭлектронноеВзаимодействиеСлужебныйКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтаФорма, Элементы.Список);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЭтапов.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЭтапов.ДатаПлатежа");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ОтборЭлемента.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЭтапов.Оплачен");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЭтапов.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЭтапов.Оплачен");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.MediumGray);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЭтаповВыбран.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЭтапов.Оплачен");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЭтаповПроцентПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЭтапов.ЭтоЗалогЗаТару");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<залог за тару>'"));

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаЭтаповПроцентПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЭтапов.ЭтапСверхЗаказа");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<сверх заказа>'"));

КонецПроцедуры

#Область Прочее

&НаСервереБезКонтекста
Функция УстановитьПризнакАннулироваСервер (Знач СчетаНаОплату)
	
	Возврат Документы.СчетНаОплатуКлиенту.УстановитьПризнакАннулирован(СчетаНаОплату);
	
КонецФункции

&НаСервере
Процедура УстановитьВидимость()
	
	Если ТипЗнч(ДокументОснование) <> Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
	
		СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
			ДокументОснование, 
			Новый Структура("ПорядокРасчетов", "Договор.ПорядокРасчетов"));
		ОтображатьОплату = СтруктураРеквизитов.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов;
		
	Иначе
		
		ОтображатьОплату = Истина;
		
	КонецЕсли;
	
	Элементы.ТаблицаЭтаповСуммаПлатежа.Видимость = ОтображатьОплату;
	Элементы.ТаблицаЭтаповСуммаОплаты.Видимость  = ОтображатьОплату;
	Элементы.ИтогоСуммаПлатежа.Видимость         = ОтображатьОплату;
	Элементы.ИтогоСуммаОплаты.Видимость          = ОтображатьОплату;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьСервер()
	
	Если ТипЗнч(ДокументОснование) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
		
		Запрос = Новый Запрос("
		|ВЫБРАТЬ
		|	ДанныеДокумента.Ссылка                    КАК Договор,
		|	ДанныеДокумента.Партнер                   КАК Партнер,
		|	ДанныеДокумента.Контрагент                КАК Контрагент,
		|	ДанныеДокумента.Организация               КАК Организация,
		|	ДанныеДокумента.ВалютаВзаиморасчетов      КАК Валюта,
		|	ДанныеДокумента.Ссылка                    КАК ДокументОснование,
		|	0                                         КАК СуммаДокумента,
		|	ДанныеДокумента.Номер                     КАК НомерДокумента,
		|	ДанныеДокумента.БанковскийСчет            КАК БанковскийСчет,
		|	ДанныеДокумента.Организация.Префикс       КАК Префикс,
		|	Неопределено                              КАК Касса,
		|	Неопределено                              КАК ФормаОплаты,
		|	ДанныеДокумента.Ссылка                    КАК Документ,
		|	ДанныеДокумента.ХозяйственнаяОперация     КАК ХозяйственнаяОперация,
		|	ДанныеДокумента.Статус                    КАК Статус,
		|	ДанныеДокумента.КонтактноеЛицо            КАК КонтактноеЛицо,
		|
		|	ВЫБОР КОГДА ДанныеДокумента.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДоговоровКонтрагентов.НеСогласован) ТОГДА
		|		ИСТИНА
		|	ИНАЧЕ
		|		ЛОЖЬ
		|	КОНЕЦ                                     КАК ЕстьОшибкиСтатус
		|
		|ИЗ
		|	Справочник.ДоговорыКонтрагентов КАК ДанныеДокумента
		|ГДЕ
		|	ДанныеДокумента.Ссылка = &Договор
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	НАЧАЛОПЕРИОДА(РасчетыСКлиентами.Период, ДЕНЬ) КАК Период,
		|	СУММА(РасчетыСКлиентами.КОплате) КАК КОплате
		|ПОМЕСТИТЬ ТаблицаРасчеты
		|ИЗ
		|	РегистрНакопления.РасчетыСКлиентами КАК РасчетыСКлиентами
		|ГДЕ
		|	РасчетыСКлиентами.ЗаказКлиента = &Договор
		|	И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|	И РасчетыСКлиентами.КОплате > 0
		|
		|СГРУППИРОВАТЬ ПО
		|	РасчетыСКлиентами.Период
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ЛОЖЬ                                                КАК Выбран,
		|	ЛОЖЬ                                                КАК Оплачена,
		|	1                                                   КАК ИндексКартинки,
		|	МАКСИМУМ(ТаблицаПериодов.КОплате)                   КАК СуммаПлатежа,
		|
		|	ВЫБОР КОГДА МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|			>= СУММА(ТаблицаКОплате.КОплате) ТОГДА
		|		МАКСИМУМ(ТаблицаПериодов.КОплате)
		|	ИНАЧЕ
		|		МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|			- (СУММА(ТаблицаКОплате.КОплате) - МАКСИМУМ(ТаблицаПериодов.КОплате))
		|	КОНЕЦ                                               КАК СуммаКОплате,
		|
		|	ТаблицаПериодов.Период                              КАК ДатаПлатежа,
		|
		|	ВЫБОР КОГДА МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|			>= СУММА(ТаблицаКОплате.КОплате) ТОГДА
		|		МАКСИМУМ(ТаблицаПериодов.КОплате)
		|	ИНАЧЕ
		|		МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|			- (СУММА(ТаблицаКОплате.КОплате) - МАКСИМУМ(ТаблицаПериодов.КОплате))
		|	КОНЕЦ / МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|	* 100                                               КАК ПроцентПлатежа,
		|
		|	МАКСИМУМ(ТаблицаПериодов.КОплате) - ВЫБОР КОГДА МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток
		|			- РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток) >= СУММА(ТаблицаКОплате.КОплате) ТОГДА
		|		МАКСИМУМ(ТаблицаПериодов.КОплате)
		|	ИНАЧЕ
		|		МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|			- (СУММА(ТаблицаКОплате.КОплате) - МАКСИМУМ(ТаблицаПериодов.КОплате))
		|	КОНЕЦ                                               КАК СуммаОплаты
		|
		|ИЗ
		|	ТаблицаРасчеты КАК ТаблицаПериодов
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаРасчеты КАК ТаблицаКОплате
		|		ПО ТаблицаПериодов.Период <= ТаблицаКОплате.Период
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКлиентами.Остатки(, ЗаказКлиента = &Договор) КАК РасчетыСКлиентамиОстатки
		|		ПО ИСТИНА
		|
		|СГРУППИРОВАТЬ ПО
		|	ТаблицаПериодов.Период
		|
		|ИМЕЮЩИЕ
		|	МАКСИМУМ(РасчетыСКлиентамиОстатки.КОплатеОстаток - РасчетыСКлиентамиОстатки.ОплачиваетсяОстаток)
		|		> СУММА(ТаблицаКОплате.КОплате) - МАКСИМУМ(ТаблицаПериодов.КОплате)
		|
		|УПОРЯДОЧИТЬ ПО
		|	ТаблицаПериодов.Период
		|");
		Запрос.УстановитьПараметр("Договор", ДокументОснование);
		
		МассивРезультатов       = Запрос.ВыполнитьПакет();
		
		Если МассивРезультатов[2].Пустой() Тогда
			
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не требуется вводить счета на оплату. Остаток задолженности по договору %1 равен 0.'"),
				ДокументОснование);
			ВызватьИсключение ТекстОшибки;
			
		КонецЕсли;
		
		ВыборкаШапка            = МассивРезультатов[0].Выбрать();
		// МассивРезультатов[1] - ТаблицаРасчеты
		ВыборкаЭтаповОплаты     = МассивРезультатов[2].Выбрать();
		
		Если ВыборкаШапка.Следующий() Тогда
			
			ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
				ВыборкаШапка.ДокументОснование,
				ВыборкаШапка.Статус,
				, // ЕстьОшибкиПроведен
				ВыборкаШапка.ЕстьОшибкиСтатус);
			
			ЗаполнитьЗначенияСвойств(ШапкаОснование, ВыборкаШапка);
			Валюта = ВыборкаШапка.Валюта;
			
		КонецЕсли;
		
		ТаблицаЭтапов.Очистить();
		
		Пока ВыборкаЭтаповОплаты.Следующий() Цикл
			
			НоваяСтрокаЭтап = ТаблицаЭтапов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрокаЭтап, ВыборкаЭтаповОплаты);
			
		КонецЦикла;
			
		ИтогоСуммаКОплате    = ТаблицаЭтапов.Итог("СуммаКОплате");
		ИтогоСуммаОплаты     = ТаблицаЭтапов.Итог("СуммаОплаты");
		ИтогоСуммаПлатежа    = ТаблицаЭтапов.Итог("СуммаПлатежа");
		ИтогоПроцентПлатежа  = ТаблицаЭтапов.Итог("ПроцентПлатежа");
		
		ТекущаяДата = НачалоДня(ТекущаяДата());
		
		ИтогоОтмеченоКОплате = 0;
		
		Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
			
			Если Не ТекущийЭтап.Оплачен Тогда
				Если ТекущийЭтап.ДатаПлатежа <= ТекущаяДата Тогда
					ТекущийЭтап.Выбран = Истина;
					ИтогоОтмеченоКОплате = ИтогоОтмеченоКОплате + ТекущийЭтап.СуммаКОплате;
				КонецЕсли;
				
				Если ТекущийЭтап.ДатаПлатежа > ТекущаяДата Тогда
					ТекущийЭтап.Выбран = Истина;
					ИтогоОтмеченоКОплате = ИтогоОтмеченоКОплате + ТекущийЭтап.СуммаКОплате;
					Прервать;
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
	Иначе
		
		ТекстЗапросаДокумент = ДокументОснование.Метаданные().ПолноеИмя();
		
		Запрос = Новый Запрос("
			|ВЫБРАТЬ
			|	1                                                   КАК Порядок,
			|	ЛОЖЬ                                                КАК Выбран,
			|	ЛОЖЬ                                                КАК Оплачена,
			|	1                                                   КАК ИндексКартинки,
			|	ЭтапыГрафикаОплаты.СуммаПлатежа                     КАК СуммаПлатежа,
			|	ЭтапыГрафикаОплаты.СуммаПлатежа                     КАК СуммаКОплате,
			|	ЭтапыГрафикаОплаты.ДатаПлатежа                      КАК ДатаПлатежа,
			|	ЭтапыГрафикаОплаты.ПроцентПлатежа                   КАК ПроцентПлатежа,
			|	ЛОЖЬ                                                КАК ЭтоЗалогЗаТару,
			|	ЛОЖЬ                                                КАК ЭтапСверхЗаказа
			|ИЗ
			|	" + ТекстЗапросаДокумент + ".ЭтапыГрафикаОплаты КАК ЭтапыГрафикаОплаты
			|ГДЕ
			|	ЭтапыГрафикаОплаты.Ссылка  = &ДокументОснование
			|	И ЭтапыГрафикаОплаты.СуммаПлатежа <> 0
			|" + ?(ТекстЗапросаДокумент = "Документ.ЗаказКлиента" ИЛИ ТекстЗапросаДокумент = "Документ.ЗаявкаНаВозвратТоваровОтКлиента", "
				|ОБЪЕДИНИТЬ ВСЕ
				|
				|ВЫБРАТЬ
				|	2                                                   КАК Порядок,
				|	ЛОЖЬ                                                КАК Выбран,
				|	ЛОЖЬ                                                КАК Оплачена,
				|	1                                                   КАК ИндексКартинки,
				|	ЭтапыГрафикаОплаты.СуммаЗалогаЗаТару                КАК СуммаПлатежа,
				|	ЭтапыГрафикаОплаты.СуммаЗалогаЗаТару                КАК СуммаКОплате,
				|	ЭтапыГрафикаОплаты.ДатаПлатежа                      КАК ДатаПлатежа,
				|	ЭтапыГрафикаОплаты.ПроцентЗалогаЗаТару              КАК ПроцентПлатежа,
				|	ИСТИНА                                              КАК ЭтоЗалогЗаТару,
				|	ЛОЖЬ                                                КАК ЭтапСверхЗаказа
				|ИЗ
				|	" + ТекстЗапросаДокумент + ".ЭтапыГрафикаОплаты КАК ЭтапыГрафикаОплаты
				|ГДЕ
				|	ЭтапыГрафикаОплаты.Ссылка  = &ДокументОснование
				|	И ЭтапыГрафикаОплаты.Ссылка.ТребуетсяЗалогЗаТару
				|	И ЭтапыГрафикаОплаты.СуммаЗалогаЗаТару <> 0
				|
				|ОБЪЕДИНИТЬ ВСЕ
				|
				|ВЫБРАТЬ
				|	3 КАК Порядок,
				|	ЛОЖЬ КАК Выбран,
				|	ЛОЖЬ КАК Оплачена,
				|	1 КАК ИндексКартинки,
				|	ЕСТЬNULL(РасчетыСКлиентамиОстаткиИОбороты.КОплатеПриход, 0) КАК СуммаПлатежа,
				|	ЕСТЬNULL(РасчетыСКлиентамиОстаткиИОбороты.КОплатеПриход, 0) КАК СуммаКОплате,
				|	РасчетыСКлиентамиОстаткиИОбороты.Период КАК ДатаПлатежа,
				|	0 КАК ПроцентПлатежа,
				|	ЛОЖЬ КАК ЭтоЗалогЗаТару,
				|	ИСТИНА КАК ЭтапСверхЗаказа
				|ИЗ
				|	РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(, , РЕГИСТРАТОР, , ЗаказКлиента = &ДокументОснование) КАК РасчетыСКлиентамиОстаткиИОбороты
				|ГДЕ
				|	РасчетыСКлиентамиОстаткиИОбороты.Регистратор <> РасчетыСКлиентамиОстаткиИОбороты.ЗаказКлиента
				|	И ЕСТЬNULL(РасчетыСКлиентамиОстаткиИОбороты.КОплатеПриход, 0) > 0
				|
			|","") + "
			|
			|УПОРЯДОЧИТЬ ПО
			|	ДатаПлатежа,
			|	Порядок
			|;
			|ВЫБРАТЬ
			|	ЕСТЬNULL(РасчетыСКлиентамиОбороты.КОплатеРасход, 0)
			|		+ ЕСТЬNULL(РасчетыСКлиентамиОбороты.ОплачиваетсяОборот, 0) КАК СуммаОплаты
			|ИЗ
			|	РегистрНакопления.РасчетыСКлиентами.Обороты(, , Период, ЗаказКлиента = &ДокументОснование) КАК РасчетыСКлиентамиОбороты
			|;
			|ВЫБРАТЬ
			|	ДанныеДокумента.Партнер                   КАК Партнер,
			|	ДанныеДокумента.Контрагент                КАК Контрагент,
			|	ДанныеДокумента.Договор		              КАК Договор,
			|	ДанныеДокумента.Организация               КАК Организация,
			|	ДанныеДокумента.Валюта                    КАК Валюта,
			|	ДанныеДокумента.Ссылка                    КАК ДокументОснование,
			|" + ?(ТекстЗапросаДокумент = "Документ.ЗаявкаНаВозвратТоваровОтКлиента", "
			|	ВЫБОР КОГДА ДанныеДокумента.ТребуетсяЗалогЗаТару ТОГДА
			|		ДанныеДокумента.СуммаЗамены + ДанныеДокумента.СуммаВозвратнойТары
			|	ИНАЧЕ
			|		ДанныеДокумента.СуммаЗамены
			|	КОНЕЦ КАК СуммаДокумента,
			|", ?(ТекстЗапросаДокумент = "Документ.ЗаказКлиента", "
			|	ВЫБОР КОГДА ДанныеДокумента.ТребуетсяЗалогЗаТару ТОГДА
			|		ДанныеДокумента.СуммаДокумента + ДанныеДокумента.СуммаВозвратнойТары
			|	ИНАЧЕ
			|		ДанныеДокумента.СуммаДокумента
			|	КОНЕЦ КАК СуммаДокумента,
			|", "
			|	ДанныеДокумента.СуммаДокумента КАК СуммаДокумента,
			|")) + "
			|	ДанныеДокумента.Номер                     КАК НомерДокумента,
			|	ДанныеДокумента.БанковскийСчет            КАК БанковскийСчет,
			|	ДанныеДокумента.Организация.Префикс       КАК Префикс,
			|	ДанныеДокумента.Касса                     КАК Касса,
			|	//ДанныеДокументаКонтактноеЛицо
			|	ДанныеДокумента.ФормаОплаты               КАК ФормаОплаты,
			|	ДанныеДокумента.Ссылка                    КАК Документ,
			|" + ?(ТекстЗапросаДокумент <> "Документ.ОтчетКомиссионера", "
			|	ДанныеДокумента.Статус                    КАК Статус,
			|	ВЫБОР
			|		КОГДА
			|			ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию)
			|			ИЛИ ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтКомиссионера)
			|		ТОГДА
			|			ИСТИНА
			|		ИНАЧЕ
			|			ЛОЖЬ
			|	КОНЕЦ                                     КАК ЕстьОшибкиХозяйственнаяОперация,
			|	ДанныеДокумента.ХозяйственнаяОперация     КАК ХозяйственнаяОперация,
			|","
			|	НЕОПРЕДЕЛЕНО                              КАК Статус,
			|	ЛОЖЬ                                      КАК ЕстьОшибкиХозяйственнаяОперация,
			|	НЕОПРЕДЕЛЕНО                              КАК ХозяйственаяОперация,
			|") + "
			|	НЕ ДанныеДокумента.Проведен               КАК ЕстьОшибкиПроведен
			|ИЗ
			|	" + ТекстЗапросаДокумент + " КАК ДанныеДокумента
			|ГДЕ
			|	ДанныеДокумента.Ссылка = &ДокументОснование
			|");
			
		Если ТекстЗапросаДокумент = "Документ.ЗаказКлиента" Тогда
		
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "//ДанныеДокументаКонтактноеЛицо","ДанныеДокумента.КонтактноеЛицо КАК КонтактноеЛицо,");
		
		КонецЕсли;
		
		Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
		МассивРезультатов       = Запрос.ВыполнитьПакет();
		ВыборкаДокументовЭтапы  = МассивРезультатов[0].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		ВыборкаДокументовОплата = МассивРезультатов[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		ВыборкаШапка            = МассивРезультатов[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если ВыборкаШапка.Следующий() Тогда
			
			МассивДопустимыхСтатусов = Неопределено;
			ТипОснования = ТипЗнч(ДокументОснование);
			
			Если ТипОснования = Тип("ДокументСсылка.ЗаказКлиента") Тогда
				
				Документы.ЗаказКлиента.ПроверитьВозможностьВводаНаОсновании(
					ВыборкаШапка.ДокументОснование,
					ВыборкаШапка.Статус,
					ВыборкаШапка.ЕстьОшибкиПроведен,
					Истина);

			ИначеЕсли ТипОснования = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
				
				Документы.ЗаявкаНаВозвратТоваровОтКлиента.ПроверитьВозможностьВводаНаОсновании(
					ВыборкаШапка.ДокументОснование,
					ВыборкаШапка.Статус,
					ВыборкаШапка.ЕстьОшибкиПроведен,
					Истина);
					
			КонецЕсли;
			
			Если ТекстЗапросаДокумент <> "Документ.ОтчетКомиссионера" Тогда
				
				Документы.СчетНаОплатуКлиенту.ПроверитьКорректностьХозяйственнойОперацииДокументаОснования­(
					ВыборкаШапка.ЕстьОшибкиХозяйственнаяОперация,
					ВыборкаШапка.ХозяйственнаяОперация);
				
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(ШапкаОснование, ВыборкаШапка);
			Валюта = ВыборкаШапка.Валюта;
			
		КонецЕсли;
		
		Если ВыборкаДокументовЭтапы.Количество() = 0 Тогда
			
			ТекстОшибки = НСтр("ru='В документе %Документ% не заполнены этапы графика оплаты'");
			ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ДокументОснование);
			ВызватьИсключение ТекстОшибки;
			
		КонецЕсли;
		
		ТаблицаЭтапов.Очистить();
		
		Пока ВыборкаДокументовЭтапы.Следующий() Цикл
			
			НоваяСтрокаЭтап = ТаблицаЭтапов.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрокаЭтап, ВыборкаДокументовЭтапы);
			
		КонецЦикла;
		
		Если ТаблицаЭтапов.Итог("СуммаПлатежа") = 0 Тогда
			
			ТекстОшибки = НСтр("ru='Не требуется вводить счета на оплату. Сумма платежа по документу %Документ% равна 0.'");
			ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ДокументОснование);
			ВызватьИсключение ТекстОшибки;
			
		КонецЕсли;
		
		Если ВыборкаДокументовОплата.Следующий() Тогда
			
			СуммаОстатокОплаты = 0;
			СуммаОстатокОплаты = ВыборкаДокументовОплата.СуммаОплаты;
			
			Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
				
				Если СуммаОстатокОплаты < ТекущийЭтап.СуммаПлатежа Тогда
					ТекущийЭтап.СуммаОплаты = СуммаОстатокОплаты;
					ТекущийЭтап.СуммаКОплате = ТекущийЭтап.СуммаПлатежа - ТекущийЭтап.СуммаОплаты;
					Прервать;
				КонецЕсли;
					
				ТекущийЭтап.СуммаОплаты  = ТекущийЭтап.СуммаПлатежа;
				ТекущийЭтап.СуммаКОплате = 0;
				ТекущийЭтап.Оплачен      = Истина;
				СуммаОстатокОплаты       = СуммаОстатокОплаты - ТекущийЭтап.СуммаПлатежа;
				
			КонецЦикла;
				
		КонецЕсли;
		
		ИтогоСуммаКОплате    = ТаблицаЭтапов.Итог("СуммаКОплате");
		ИтогоСуммаОплаты     = ТаблицаЭтапов.Итог("СуммаОплаты");
		ИтогоСуммаПлатежа    = ТаблицаЭтапов.Итог("СуммаПлатежа");
		ИтогоПроцентПлатежа  = ТаблицаЭтапов.Итог("ПроцентПлатежа");
		
		ТекущаяДата = НачалоДня(ТекущаяДата());
		
		ИтогоОтмеченоКОплате = 0;
		
		Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
			
			Если Не ТекущийЭтап.Оплачен Тогда
				Если ТекущийЭтап.ДатаПлатежа <= ТекущаяДата Тогда
					ТекущийЭтап.Выбран = Истина;
					ИтогоОтмеченоКОплате = ИтогоОтмеченоКОплате + ТекущийЭтап.СуммаКОплате;
				КонецЕсли;
				
				Если ТекущийЭтап.ДатаПлатежа > ТекущаяДата Тогда
					ТекущийЭтап.Выбран = Истина;
					ИтогоОтмеченоКОплате = ИтогоОтмеченоКОплате + ТекущийЭтап.СуммаКОплате;
					Прервать;
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция СформироватьЗаголовокКолонкиСВалютой(ЗаголовокКолонки, Валюта)
	
	 Возврат ЗаголовокКолонки + " (" + Валюта + ")";
	
КонецФункции

&НаКлиенте
Процедура СформироватьСчет(ВыводитьСчетНаПечать = Ложь)
	
	ЕстьВыбранные = Ложь;
	
	Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
		
		Если ТекущийЭтап.Выбран Тогда
			ЕстьВыбранные = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Если Не ЕстьВыбранные Тогда
		
		ТекстПредупреждения = НСтр("ru='Не выбраны этапы оплаты'");
		ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
		Возврат;
		
	КонецЕсли;
	
	СчетНаОплатуКлиенту =  СоздатьСчетНаОплатуСервер();
	
	Если СчетНаОплатуКлиенту <> Неопределено Тогда
		
		ПоказатьОповещениеПользователя(НСтр("ru = 'Создание:'"),
		                               ПолучитьНавигационнуюСсылку(СчетНаОплатуКлиенту),
		                               СчетНаОплатуКлиенту,
		                               БиблиотекаКартинок.Информация32);
	
		ОповеститьОбИзменении(СчетНаОплатуКлиенту);
		Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСчетаНаОплату;
		Элементы.Список.ТекущаяСтрока = СчетНаОплатуКлиенту;
		
		Если ВыводитьСчетНаПечать Тогда
			СформироватьПечатнуюФорму(СчетНаОплатуКлиенту);
		КонецЕсли;
	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СформироватьПечатнуюФорму(СчетНаОплатуКлиенту)

	МассивДокументов = Новый Массив;
	МассивДокументов.Добавить(СчетНаОплатуКлиенту);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьПроведенностьДокументовЗавершение", ЭтотОбъект);
	
	УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов(ОписаниеОповещения, МассивДокументов);
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьПроведенностьДокументовЗавершение(МассивДокументов, ДополнительныеПараметры) Экспорт
	
	УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
		"Обработка.ПечатьСчетовНаОплату",
		"СчетНаОплату",
		МассивДокументов,
		Неопределено,
		Неопределено);
	
КонецПроцедуры


&НаКлиенте
Процедура ТаблицаЭтаповВыбранПриИзменении(Элемент)
	
	ТекущийЭтап = Элементы.ТаблицаЭтапов.ТекущиеДанные;
	
	Если ТекущийЭтап <> Неопределено Тогда
		
		РедактируемаяСтрока = ТаблицаЭтапов.НайтиПоИдентификатору(ТекущийЭтап.ПолучитьИдентификатор());
		
		Если Не РедактируемаяСтрока.Выбран Тогда
			
			СброситьФлаг = Ложь;
			
			Для Каждого ТекСтрока Из ТаблицаЭтапов Цикл
				
				Если РедактируемаяСтрока = ТекСтрока Тогда
					СброситьФлаг = Истина;
				КонецЕсли;
				
				Если СброситьФлаг И ТекСтрока.Выбран Тогда
					ТекСтрока.Выбран = Ложь;
				КонецЕсли;
				
			КонецЦикла;
			
		Иначе
			
			УстановитьФлаг = Истина;
			
			Для Каждого ТекСтрока Из ТаблицаЭтапов Цикл
				
				Если РедактируемаяСтрока = ТекСтрока Тогда
					УстановитьФлаг = Ложь;
				КонецЕсли;
				
				Если УстановитьФлаг И Не ТекСтрока.Выбран И Не ТекСтрока.Оплачен Тогда
					ТекСтрока.Выбран = Истина;
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЕсли;
	
	ИтогоОтмеченоКОплате = 0;
	
	Для Каждого ТекущийЭтап Из ТаблицаЭтапов Цикл
		
		Если ТекущийЭтап.Выбран Тогда
			ИтогоОтмеченоКОплате = ИтогоОтмеченоКОплате + ТекущийЭтап.СуммаКОплате;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция ПроверитьВозможностьСозданияСчетовНаОплату(ДокументОснование)
	
	ПорядокРасчетов = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОснование, "ПорядокРасчетов");
	Возврат ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным;
	
КонецФункции

#КонецОбласти

#КонецОбласти
Показать
16. alljoke 10.03.16 21:46 Сейчас в теме
ну а как помочь?
Вы бы хоть приложили сюда вашу ВПФ.
Мы бы и глянули.
Смотреть отладчиком - предлагали?
21. lsd_777 11.03.16 20:15 Сейчас в теме
ФормаДокумента
&НаКлиенте
Перем ОтветПередЗаписью;

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборот.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ИнтеграцияС1СДокументооборотом

	// КомандыЭДО
	ОбменСКонтрагентами.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ПодменюЭДО);
	// Конец КомандыЭДО
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
	КонецЕсли;

	// ВводНаОсновании
	ВводНаОсновании.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ПодменюСоздатьНаОсновании);
	// Конец ВводНаОсновании

	// МенюОтчеты
	МенюОтчеты.ПриСозданииНаСервере(ЭтотОбъект, Элементы.ПодменюОтчеты);
	// Конец МенюОтчеты

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если ТребуетсяОткрытиеПечатнойФормы Тогда
		
		МассивСсылок = Новый Массив;
		МассивСсылок.Добавить(Объект.Ссылка);
		
		Отказ = Истина;
		СамообслуживаниеКлиент.ПечатьСчетНаОплату(МассивСсылок);
		Возврат;
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ФинансыКлиент.ПроверитьЗаполнениеДокументаНаОсновании(
			Объект,
			Основание);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	Если ОбщегоНазначенияУТКлиентСервер.АвторизованВнешнийПользователь() Тогда
		ТребуетсяОткрытиеПечатнойФормы = Истина;
		Возврат;
	КонецЕсли;
	
	ПриЧтенииСозданииНаСервере();

	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);

КонецПроцедуры

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

&НаКлиенте
Процедура ПередЗаписьюЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	ОтветНаВопрос = РезультатВопроса;
	
	Если ОтветНаВопрос = КодВозвратаДиалога.Да Тогда
		ОтветПередЗаписью = Истина;
		ЭтапыОплатыКлиентСервер.РаспределитьСуммуПоЭтапамГрафикаОплаты(Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
		Записать();
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	Элементы.ГруппаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
	
	// Подсистема "ЭлектронныеДокументы"
	УстановитьТекстСостоянияЭДНаСервере();

	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// Подсистема "ЭлектронныеДокументы"
	Если ИмяСобытия = "ОбновитьСостояниеЭД" Тогда
		УстановитьТекстСостоянияЭДНаСервере();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПерезаполнитьНазначениеПлатежа(Команда)
	ЗаполнитьНазначениеПлатежа();
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ФормаОплатыПриИзменении(Элемент)

	ПриИзмененииФормыОплатыСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ЧастичнаяОплатаПриИзменении(Элемент)
	
	Если Не Объект.ЧастичнаяОплата И ЗначениеЗаполнено(ОБъект.ДокументОснование) Тогда
		Если Объект.ЭтапыГрафикаОплаты.Количество() > 0 Тогда
			ОтветНаВопрос = Неопределено;

			ПоказатьВопрос(Новый ОписаниеОповещения("ЧастичнаяОплатаПриИзмененииЗавершение", ЭтотОбъект), НСтр("ru='Таблица этапов оплаты будет заполнена по основанию. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
            Возврат;
		КонецЕсли;
		ЗаполнитьЭтапыОплатыПоОснованиюСервер();

	Иначе
		УстановитьДоступностьЭлементовПоЧастичнойОплате();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЧастичнаяОплатаПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    ОтветНаВопрос = РезультатВопроса;
    Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
        Объект.ЧастичнаяОплата = Истина;
        Возврат;
    КонецЕсли;
    
    ЗаполнитьЭтапыОплатыПоОснованиюСервер();

КонецПроцедуры

&НаКлиенте
Процедура СуммаДокументаПриИзменении(Элемент)
	
	ЭтапыОплатыКлиентСервер.РаспределитьСуммуПоЭтапамГрафикаОплаты(Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
	
КонецПроцедуры

&НаКлиенте
Процедура СостояниеЭДНажатие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОбменСКонтрагентамиКлиент.ОткрытьДеревоЭД(Объект.Ссылка);
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ДатаПриИзмененииСервер();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыЭтапыГрафикаОплаты

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПослеУдаления(Элемент)
	
	РассчитатьИтоговыеПоказателиСчетаНаОплатуКлиенту(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	РассчитатьИтоговыеПоказателиСчетаНаОплатуКлиенту(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПроцентПлатежаПриИзменении(Элемент)
	
	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыПроцентПлатежаПриИзменении(Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные, Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыСуммаПлатежаПриИзменении(Элемент)

	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСуммаПлатежаПриИзменении(Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные, Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

// ВводНаОсновании
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуСоздатьНаОсновании(Команда)
	
	ВводНаОснованииКлиент.ВыполнитьПодключаемуюКомандуСоздатьНаОсновании(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец ВводНаОсновании

// МенюОтчеты
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуОтчет(Команда)
	
	МенюОтчетыКлиент.ВыполнитьПодключаемуюКомандуОтчет(Команда, ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец МенюОтчеты


// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки

&НаКлиенте
Процедура Подключаемый_ВыполнитьНазначаемуюКоманду(Команда)
	
	Если НЕ ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(ЭтаФорма, Команда.Имя) Тогда
		РезультатВыполнения = Неопределено;
		ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаС­ервере(Команда.Имя, РезультатВыполнения);
		ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтаФорма, РезультатВыполнения);
	КонецЕсли;
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры
//Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура НастроитьПодпискуНаОповещения(Команда)
	
	ТипыСобытий = Новый Массив();
	ТипыСобытий.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСобытийОповещений.ВыпискаСчета"));
	ТипыСобытий.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСобытийОповещений.АннулированиеСчета"));
	ТипыСобытий.Добавить(ПредопределенноеЗначение("Перечисление.ТипыСобытийОповещений.ИзменениеСчета"));
	
	РассылкиИОповещенияКлиентамКлиент.НастроитьПодпискуНаОповещенияИзОбъекта(
		Объект.Партнер,
		ТипыСобытий);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
	
	УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.Печать

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
	
	ЭлектронноеВзаимодействиеСлужебныйКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплаты.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыНомерСтроки.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыДатаПлатежа.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыПроцентПлатежа.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыСуммаПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЧастичнаяОплата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыДатаПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.ДатаЗаполненаНеВерно");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыПроцентПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.ПроцентЗаполненНеВерно");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыПроцентПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.ПроцентЗаполненНеВерно");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.НомерСтроки");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиПолнойОплаты");

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиПолнойОплаты");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Seagreen);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыПроцентПлатежа.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЭтапыГрафикаОплаты.ЭтоЗалогЗаТару");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<залог за тару>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

КонецПроцедуры

// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки

&НаСервере
Процедура ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаС­ервере(ИмяЭлемента, РезультатВыполнения)
	
	ДополнительныеОтчетыИОбработки.ВыполнитьНазначаемуюКомандуНаСервере(ЭтаФорма, ИмяЭлемента, РезультатВыполнения);
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки

#Область ПодсистемаЭлектронныедокументы

&НаСервере
Процедура УстановитьТекстСостоянияЭДНаСервере()
	
	ТекстСостоянияЭД = ОбменСКонтрагентамиКлиентСервер.ПолучитьТекстСостоянияЭД(Объект.Ссылка, ЭтаФорма);
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
	
	УправлениеЭлементамиФормы();
	УстановитьДоступностьЭлементовПоЧастичнойОплате();
	РассчитатьИтоговыеПоказателиСчетаНаОплатуКлиенту(ЭтаФорма);
	Элементы.ГруппаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
	Элементы.ЧастичнаяОплата.Видимость = ТипЗнч(Объект.ДокументОснование) <> Тип("СправочникСсылка.ДоговорыКонтрагентов");
	
	ТипыСобытий = Новый Массив();
	ТипыСобытий.Добавить(Перечисления.ТипыСобытийОповещений.ВыпискаСчета);
	ТипыСобытий.Добавить(Перечисления.ТипыСобытийОповещений.АннулированиеСчета);
	ТипыСобытий.Добавить(Перечисления.ТипыСобытийОповещений.ИзменениеСчета);
	
	РассылкиИОповещенияКлиентам.УстановитьВидимостьПодпискиНаОповещенияВОбъекте(
		Элементы.ГруппаПодпискаНаОповещения,
		Объект.Партнер,
		ТипыСобытий);
	
КонецПроцедуры

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

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

&НаСервере
Процедура ПриИзмененииФормыОплатыСервер()
	
	УправлениеЭлементамиФормы();
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация    		= Объект.Организация;
	СтруктураПараметров.БанковскийСчет		= Объект.БанковскийСчет;
	Объект.БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьЭлементовПоЧастичнойОплате()
	
	МассивЭлементов = Новый Массив();
	
	МассивЭлементов.Добавить("ЭтапыГрафикаОплаты");
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ТолькоПросмотр", Не Объект.ЧастичнаяОплата);
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СуммаДокумента", "ТолькоПросмотр", Не Объект.ЧастичнаяОплата);
	
КонецПроцедуры

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

&НаСервере
Процедура ЗаполнитьНазначениеПлатежа()
	
	ДокументОснование = Объект.ДокументОснование;
	
	Если НЕ ПустаяСтрока(ДокументОснование) Тогда
		Объект.НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
			ДокументОснование.Номер,
			ДокументОснование);
	Иначе
		НазначениеПлатежа = НСтр("ru='По счету № %НомерСчета% от %ДатаСчета%'");
		НазначениеПлатежа = СтрЗаменить(НазначениеПлатежа, 
			"%НомерСчета%", 
		ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Объект.Номер));
		НазначениеПлатежа = СтрЗаменить(НазначениеПлатежа, "%ДатаСчета%", Формат(Объект.Дата, "ДФ=dd.MM.yyyy"));
		Объект.НазначениеПлатежа = НазначениеПлатежа;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ДатаПриИзмененииСервер()
	
	ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

ОтветПередЗаписью = Ложь;
Показать


ЗаказКлиента РеквизитыПечати
#Область ОбработчикиСобытийФормы

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

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
	
	Если Не ЗакрытьФормуПринудительно
		И (Модифицированность И Не СохранитьПараметры) Тогда
		
		СписокКнопок = Новый СписокЗначений();
		СписокКнопок.Добавить("Закрыть", НСтр("ru = 'Закрыть'"));
		СписокКнопок.Добавить("НеЗакрывать", НСтр("ru = 'Не закрывать'"));
		
		Отказ = Истина;
		
		ДополнительныеПараметры = Новый Структура;
		ПоказатьВопрос(
			Новый ОписаниеОповещения("ПоказатьВопросПередЗакрытиемЗавершение", ЭтотОбъект, ДополнительныеПараметры),
			НСтр("ru = 'Реквизиты печати были изменены. Закрыть форму без сохранения реквизитов?'"),
			СписокКнопок);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьВопросПередЗакрытиемЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
	
	Если ОтветНаВопрос = "Закрыть" Тогда
		ЗакрытьФормуПринудительно = Истина;
		Закрыть(Неопределено);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
	
	Если СохранитьПараметры Тогда
		
		СтруктураПараметров = ИзменяемыеРеквизиты(ЭтаФорма);
		ОповеститьОВыборе(СтруктураПараметров);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ГрузоотправительПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Грузоотправитель) Тогда
		БанковскийСчетГрузоотправителя = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Грузоотправитель);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ГрузополучательПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Грузополучатель) Тогда
		БанковскийСчетГрузополучателя = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Грузополучатель);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОК(Команда)
	
	Если Не ТолькоПросмотр Тогда
		СохранитьПараметры = Истина;
	КонецЕсли;
	
	Закрыть();

КонецПроцедуры

&НаКлиенте
Процедура ПерезаполнитьНазначениеПлатежа(Команда)
	ЗаполнитьНазначениеПлатежа();
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область Прочее

&НаСервереБезКонтекста
Функция ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Контрагент)
	
	Возврат ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИзменяемыеРеквизиты(Источник)
	
	СтруктураПараметров = Новый Структура();
	СтруктураПараметров.Вставить("АдресДоставки",                  Источник.АдресДоставки);
	СтруктураПараметров.Вставить("БанковскийСчет",                 Источник.БанковскийСчет);
	СтруктураПараметров.Вставить("БанковскийСчетГрузоотправителя", Источник.БанковскийСчетГрузоотправителя);
	СтруктураПараметров.Вставить("БанковскийСчетГрузополучателя",  Источник.БанковскийСчетГрузополучателя);
	СтруктураПараметров.Вставить("БанковскийСчетКонтрагента",      Источник.БанковскийСчетКонтрагента);
	СтруктураПараметров.Вставить("Грузоотправитель",               Источник.Грузоотправитель);
	СтруктураПараметров.Вставить("Грузополучатель",                Источник.Грузополучатель);
	СтруктураПараметров.Вставить("Руководитель",                   Источник.Руководитель);
	СтруктураПараметров.Вставить("ГлавныйБухгалтер",               Источник.ГлавныйБухгалтер);
	СтруктураПараметров.Вставить("НазначениеПлатежа",              Источник.НазначениеПлатежа);
	СтруктураПараметров.Вставить("НомерЗаказа",			           Источник.НомерЗаказа);
	СтруктураПараметров.Вставить("ДатаЗаказа",			           Источник.ДатаЗаказа);
	
	Возврат СтруктураПараметров;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьНазначениеПлатежа()
	НазначениеПлатежа = НСтр("ru='По счету №%НомерЗаказа% от %ДатаЗаказа%'");
	НазначениеПлатежа = СтрЗаменить(НазначениеПлатежа,"%НомерЗаказа%",НомерЗаказа);
	НазначениеПлатежа = СтрЗаменить(НазначениеПлатежа,"%ДатаЗаказа%",ДатаЗаказа);
КонецПроцедуры

#КонецОбласти

#КонецОбласти
Показать


Вообще, предыстория следующая: Была УТ 11.1, ее собирали из УТ 10 и Розници 2.0, путем переноса данных с помощью конвертации, в итоге в процессе работы выяснилось, что ничего ни с чем не сходится, продаешь товар, он не списывается, ДС тоже жили произвольно. Было решено перейти на чистую УТ 11 с последующим обновлением, для этого было сделано: перенесены (номенклатура+присоединенные файлы+регистр сведений "присодиненные файлы", организации, физ.лица, контрагенты, партнеры, банковские счета, кассы, карты лояльности, скидки и регистр сведений "цены номенклатуры") , далее, по цепочке накатили обновления до 2.3.101. Что первое попалось, это счет, он явно так не должен выглядеть. Пробую во вновь созданной базе 2.3.101, создать организацию, контрагента, банковский счет и т.д., все так же как в боевой, счет получается нормальный. Подозрения, либо при переносе обработкой, какие то косяки перенеслись, либо при обновлении конфигурации, что-то криво накатилось!
22. Xershi 1533 11.03.16 20:37 Сейчас в теме
(21) lsd_777, модуль документа. А ты форму засунул. Ну так проверь просто что лишнее в организации.
23. lsd_777 11.03.16 20:47 Сейчас в теме
(22) Xershi,
Счетна оплату
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПриКопировании(ОбъектКопирования)
	ИдентификаторПлатежа   = Неопределено;
КонецПроцедуры

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
	
	Если ТипДанныхЗаполнения = Тип("Структура") Тогда
		
		ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
		
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
		ЗаполнитьПоРеализацииТоваров(
			ДанныеЗаполнения,
			ДанныеЗаполнения);
		
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ВыкупВозвратнойТарыКлиентом") Тогда
		ЗаполнитьПоВыкупуВозвратнойТарыКлиентом(
			ДанныеЗаполнения,
			ДанныеЗаполнения);
		
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.АктВыполненныхРабот") Тогда
		ЗаполнитьПоАктуВыполненныхРабот(
			ДанныеЗаполнения,
			ДанныеЗаполнения);
		
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ОтчетКомитенту") Тогда
		ЗаполнитьПоОтчетуКомитенту(
			ДанныеЗаполнения,
			ДанныеЗаполнения);
		
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ОтчетКомиссионераОСписании") Тогда
		ЗаполнитьПоОтчетуКомиссионераОСписании(
			ДанныеЗаполнения,
			ДанныеЗаполнения);
		
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
		ЗаполнитьПоДоговору(
			ДанныеЗаполнения,
			ДанныеЗаполнения);
		
	КонецЕсли;
	
	ИнициализироватьДокумент(ДанныеЗаполнения);
    ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияКассыПриФОИспользоватьНесколькоКассЛ­ожь", Ложь);
    ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияСчетаПриФОИспользоватьНесколькоСчето­вЛожь", Ложь);
	
КонецПроцедуры

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	СуммаПроцентов = 0;
	Для Каждого ЭтапГрафика Из ЭтапыГрафикаОплаты Цикл
		Если Не ЭтапГрафика.ЭтоЗалогЗаТару Тогда
			СуммаПроцентов = СуммаПроцентов + ЭтапГрафика.ПроцентПлатежа;
		КонецЕсли;
	КонецЦикла;
	
	// Процент платежа по всем этапам должен быть 100%
	Если СуммаПроцентов <> 100 Тогда
		
		ТекстОшибки = НСтр("ru='Процент платежей по всем этапам должен быть равен 100%'");
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			ТекстОшибки,
			ЭтотОбъект,
			"ЭтапыГрафикаОплаты",
			,
			Отказ);
		
	КонецЕсли;
	
	СуммаЭтаповОплаты = ЭтапыГрафикаОплаты.Итог("СуммаПлатежа");
	Если СуммаЭтаповОплаты > 0 И СуммаДокумента <> СуммаЭтаповОплаты Тогда
		
		ТекстОшибки = НСтр("ru='Сумма документа не должна отличаться от суммы этапов оплаты'");
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			ТекстОшибки,
			ЭтотОбъект,
			"СуммаДокумента",
			,
			Отказ);
		
	КонецЕсли;
	
	Если ТипЗнч(ДокументОснование) <> Тип("СправочникСсылка.ДоговорыКонтрагентов") И НЕ Аннулирован Тогда
		
		СуммаОснования = Документы.СчетНаОплатуКлиенту.ПолучитьСуммуДокументаОснования(ДокументОснование);
		
		Если СуммаДокумента > СуммаОснования Тогда
			
			ТекстОшибки = НСтр("ru='Сумма документа не может быть больше суммы основания ""%СуммаОснования%""'");
			ТекстОшибки = СтрЗаменить(ТекстОшибки,"%СуммаОснования%",СуммаОснования);
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				ТекстОшибки,
				ЭтотОбъект,
				"СуммаДокумента",
				,
				Отказ);
			
		КонецЕсли;
		
	КонецЕсли;
	
	МассивНепроверяемыхРеквизитов.Добавить("ЭтапыГрафикаОплаты.ПроцентПлатежа");
	Для Каждого ЭтапГрафика Из ЭтапыГрафикаОплаты Цикл
		
		Если Не ЗначениеЗаполнено(ЭтапГрафика.ПроцентПлатежа) И Не ЭтапГрафика.ЭтоЗалогЗаТару Тогда
			
			ТекстОшибки = НСтр("ru='Не заполнена колонка ""Процент платежа"" в строке %НомерСтроки% списка ""Этапы графика оплаты""'");
			ТекстОшибки = СтрЗаменить(ТекстОшибки,"%НомерСтроки%",ЭтапГрафика.НомерСтроки);
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				ТекстОшибки,
				ЭтотОбъект,
				ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ЭтапыГрафикаОплаты", ЭтапГрафика.НомерСтроки, "ПроцентПлатежа"),
				,
				Отказ);
			
		КонецЕсли;
		
	КонецЦикла;
	
	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
	
КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ИнициализацияИЗаполнение

Процедура ЗаполнитьДокументПоОтбору(ДанныеЗаполнения)
	
	Если ДанныеЗаполнения.Свойство("ДокументОснование") Тогда
		
		ДокументОснование = ДанныеЗаполнения.ДокументОснование;
		
		Если ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
			ЗаполнитьПоРеализацииТоваров(
				ДокументОснование,
				ДанныеЗаполнения);
		ИначеЕсли ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.ОтчетКомитенту") Тогда
			ЗаполнитьПоОтчетуКомитенту(
				ДокументОснование,
				ДанныеЗаполнения);
		ИначеЕсли ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.ОтчетКомиссионераОСписании") Тогда
			ЗаполнитьПоОтчетуКомиссионераОСписании(
				ДокументОснование,
				ДанныеЗаполнения);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьПоРеализацииТоваров(Знач Основание, ДанныеЗаполнения)

	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	ДанныеДокумента.Дата КАК ДатаПредоплаты,
	|	ДанныеДокумента.Партнер КАК Партнер,
	|	ДанныеДокумента.Контрагент КАК Контрагент,
	|	ДанныеДокумента.КонтактноеЛицо КАК КонтактноеЛицо,
	|	ДанныеДокумента.Договор КАК Договор,
	|	ДанныеДокумента.Организация КАК Организация,
	|	ДанныеДокумента.Номер КАК Номер,
	|	ДанныеДокумента.Организация.Префикс КАК Префикс,
	|	ДанныеДокумента.ФормаОплаты КАК ФормаОплаты,
	|	ДанныеДокумента.ДатаПлатежа КАК ДатаПлатежа,
	|	ДанныеДокумента.ВалютаВзаиморасчетов КАК Валюта,
	|	ДанныеДокумента.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
	|	ДанныеДокумента.Ссылка КАК ДокументОснование,
	|	ДанныеДокумента.Соглашение КАК Соглашение,
	|	ДанныеДокумента.Соглашение.Номер КАК НомерСоглашения,
	|	ДанныеДокумента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
	|
	|	ВЫБОР КОГДА ДанныеДокумента.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоДоговорамКонтрагентов) ТОГДА
	|		ИСТИНА
	|	ИНАЧЕ
	|		ЛОЖЬ
	|	КОНЕЦ КАК РасчетыПоДоговору,
	|
	|	NULL КАК Статус,
	|	ДанныеДокумента.БанковскийСчетОрганизации КАК БанковскийСчет,
	|	ДанныеДокумента.Руководитель КАК Руководитель,
	|	ДанныеДокумента.ГлавныйБухгалтер КАК ГлавныйБухгалтер,
	|	ДанныеДокумента.Касса КАК Касса,
	|	НЕ ДанныеДокумента.Проведен КАК ЕстьОшибкиПроведен,
	|	ЛОЖЬ КАК ЕстьОшибкиСтатус,
	|	ВЫБОР
	|		КОГДА
	|			ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию)
	|		ТОГДА
	|			ИСТИНА
	|		ИНАЧЕ
	|			ЛОЖЬ
	|	КОНЕЦ КАК ЕстьОшибкиХозяйственнаяОперация
	|
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК ДанныеДокумента
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|	И (ДанныеДокумента.ЗаказКлиента = НЕОПРЕДЕЛЕНО
	|		ИЛИ ДанныеДокумента.ЗаказКлиента = ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
	|		ИЛИ ДанныеДокумента.ЗаказКлиента = ЗНАЧЕНИЕ(Документ.ЗаявкаНаВозвратТоваровОтКлиента.ПустаяСсылка)
	|		ИЛИ ДанныеДокумента.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоДоговорамКонтрагентов)
	|		ИЛИ ДанныеДокумента.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоНакладным)
	|	)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ДанныеДокумента.Ссылка КАК Ссылка,
	|	1 КАК НомерСтроки,
	|	ДанныеДокумента.Дата КАК ДатаПлатежа,
	|	0 КАК ПроцентПлатежа,
	|	
	|	ВЫБОР КОГДА СУММА(Тара.СуммаВзаиморасчетов) > ДанныеДокумента.СуммаПредоплаты ТОГДА
	|		ДанныеДокумента.СуммаПредоплаты
	|	ИНАЧЕ
	|		СУММА(Тара.СуммаВзаиморасчетов)
	|	КОНЕЦ КАК СуммаПлатежа,
	|	
	|	ИСТИНА КАК ЭтоЗалогЗаТару
	|
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК ДанныеДокумента
	|
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Документ.РеализацияТоваровУслуг.Товары КАК Тара
	|	ПО
	|		Тара.Ссылка = ДанныеДокумента.Ссылка
	|		И ДанныеДокумента.ТребуетсяЗалогЗаТару
	|		И Тара.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
	|
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|	И ДанныеДокумента.СуммаПредоплаты > 0
	|
	|СГРУППИРОВАТЬ ПО
	|	ДанныеДокумента.Ссылка
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.Ссылка КАК Ссылка,
	|	2 КАК НомерСтроки,
	|	ДанныеДокумента.Дата КАК ДатаПлатежа,
	|	
	|	(ДанныеДокумента.СуммаПредоплаты - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0))
	|		/ (ДанныеДокумента.СуммаВзаиморасчетов - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0)) * 100 КАК ПроцентПлатежа,
	|	
	|	ДанныеДокумента.СуммаПредоплаты - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0) КАК СуммаПлатежа,
	|	ЛОЖЬ КАК ЭтоЗалогЗаТару
	|
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК ДанныеДокумента
	|
	|	ЛЕВОЕ СОЕДИНЕНИЕ
	|		Документ.РеализацияТоваровУслуг.Товары КАК Тара
	|	ПО
	|		Тара.Ссылка = ДанныеДокумента.Ссылка
	|		И ДанныеДокумента.ТребуетсяЗалогЗаТару
	|		И Тара.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
	|
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|	И ДанныеДокумента.СуммаПредоплаты > 0
	|
	|СГРУППИРОВАТЬ ПО
	|	ДанныеДокумента.Ссылка
	|
	|ИМЕЮЩИЕ
	|	ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0) < ДанныеДокумента.СуммаПредоплаты
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.Ссылка КАК Ссылка,
	|	3 КАК НомерСтроки,
	|	ДанныеДокумента.ДатаПлатежа КАК ДатаПлатежа,
	|	0 КАК ПроцентПлатежа,
	|	
	|	СУММА(Тара.СуммаВзаиморасчетов) - ДанныеДокумента.СуммаПредоплаты КАК СуммаПлатежа,
	|	
	|	ИСТИНА КАК ЭтоЗалогЗаТару
	|
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК ДанныеДокумента
	|
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|		Документ.РеализацияТоваровУслуг.Товары КАК Тара
	|	ПО
	|		Тара.Ссылка = ДанныеДокумента.Ссылка
	|		И ДанныеДокумента.ТребуетсяЗалогЗаТару
	|		И Тара.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
	|
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|	И ДанныеДокумента.СуммаВзаиморасчетов - ДанныеДокумента.СуммаПредоплаты > 0
	|
	|СГРУППИРОВАТЬ ПО
	|	ДанныеДокумента.Ссылка
	|
	|ИМЕЮЩИЕ
	|	СУММА(Тара.СуммаВзаиморасчетов) > ДанныеДокумента.СуммаПредоплаты
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДанныеДокумента.Ссылка КАК Ссылка,
	|	4 КАК НомерСтроки,
	|	ДанныеДокумента.ДатаПлатежа КАК ДатаПлатежа,
	|	
	|	ВЫБОР КОГДА ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0) < ДанныеДокумента.СуммаПредоплаты ТОГДА
	|		ДанныеДокумента.СуммаВзаиморасчетов - ДанныеДокумента.СуммаПредоплаты
	|	ИНАЧЕ
	|		ДанныеДокумента.СуммаВзаиморасчетов - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0)
	|	КОНЕЦ
	|		/ (ДанныеДокумента.СуммаВзаиморасчетов - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0)) * 100 КАК ПроцентПлатежа,
	|	
	|	ВЫБОР КОГДА ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0) < ДанныеДокумента.СуммаПредоплаты ТОГДА
	|		ДанныеДокумента.СуммаВзаиморасчетов - ДанныеДокумента.СуммаПредоплаты
	|	ИНАЧЕ
	|		ДанныеДокумента.СуммаВзаиморасчетов - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0)
	|	КОНЕЦ КАК СуммаПлатежа,
	|	
	|	ЛОЖЬ КАК ЭтоЗалогЗаТару
	|
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК ДанныеДокумента
	|
	|	ЛЕВОЕ СОЕДИНЕНИЕ
	|		Документ.РеализацияТоваровУслуг.Товары КАК Тара
	|	ПО
	|		Тара.Ссылка = ДанныеДокумента.Ссылка
	|		И ДанныеДокумента.ТребуетсяЗалогЗаТару
	|		И Тара.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
	|
	|ГДЕ
	|	ДанныеДокумента.Ссылка = &Ссылка
	|
	|СГРУППИРОВАТЬ ПО
	|	ДанныеДокумента.Ссылка
	|
	|ИМЕЮЩИЕ
	|	ВЫБОР КОГДА ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0) < ДанныеДокумента.СуммаПредоплаты ТОГДА
	|		ДанныеДокумента.СуммаВзаиморасчетов - ДанныеДокумента.СуммаПредоплаты
	|	ИНАЧЕ
	|		ДанныеДокумента.СуммаВзаиморасчетов - ЕСТЬNULL(СУММА(Тара.СуммаВзаиморасчетов), 0)
	|	КОНЕЦ > 0
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	НомерСтроки УБЫВ
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЕСТЬNULL(РасчетыСКлиентами.КОплатеОстаток,0) КАК СуммаОплаты
	|ИЗ
	|	РегистрНакопления.РасчетыСКлиентами.Остатки(, ЗаказКлиента=&Ссылка) КАК РасчетыСКлиентами
	|");
	Запрос.УстановитьПараметр("Ссылка", Основание);
	
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	ДанныеЗаполнения = Новый Структура;
	Для Каждого Колонка Из РезультатЗапроса[0].Колонки Цикл
		ДанныеЗаполнения.Вставить(Колонка.Имя);
	КонецЦикла;
	
	СуммаОснования = 0;
	ВыборкаПоДокументу = РезультатЗапроса[0].Выбрать();
	ВыборкаПоЭтапам    = РезультатЗапроса[1].Выбрать();
	ВыборкаПоРасчетам  = РезультатЗапроса[2].Выбрать();
	
	Если ВыборкаПоДокументу.Следующий() Тогда
		
		МассивДопустимыхСтатусов = Новый Массив();
		МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовКлиентов.КОбеспечению);
		МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовКлиентов.КОтгрузке);
		МассивДопустимыхСтатусов.Добавить(Перечисления.СтатусыЗаказовКлиентов.Закрыт);
		
		Документы.СчетНаОплатуКлиенту.ПроверитьКорректностьХозяйственнойОперацииДокументаОснования­(
			ВыборкаПоДокументу.ЕстьОшибкиХозяйственнаяОперация,
			ВыборкаПоДокументу.ХозяйственнаяОперация);
		
		ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
			ВыборкаПоДокументу.ДокументОснование,
			ВыборкаПоДокументу.Статус,
			ВыборкаПоДокументу.ЕстьОшибкиПроведен,
			ВыборкаПоДокументу.ЕстьОшибкиСтатус,
			МассивДопустимыхСтатусов);
		
		ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, ВыборкаПоДокументу);
		
		НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
			ВыборкаПоДокументу.Номер,
			Основание);
		
		Если ВыборкаПоДокументу.РасчетыПоДоговору Тогда
			
			ДобавитьЭтапОплаты(ВыборкаПоДокументу.СуммаВзаиморасчетов, ВыборкаПоДокументу.ДатаПлатежа);
			ДанныеЗаполнения.Вставить("СуммаДокумента",  ВыборкаПоДокументу.СуммаВзаиморасчетов);
			ДанныеЗаполнения.Вставить("ЧастичнаяОплата", Ложь);
			
		Иначе
			
			Если ВыборкаПоРасчетам.Следующий() Тогда
				
				СуммаОплаты = ВыборкаПоРасчетам.СуммаОплаты;
				Пока СуммаОплаты > 0 И ВыборкаПоЭтапам.Следующий() Цикл
					
					ЭтапОплаты = ЭтапыГрафикаОплаты.Добавить();
					ЗаполнитьЗначенияСвойств(ЭтапОплаты, ВыборкаПоЭтапам);
					Если СуммаОплаты < ВыборкаПоЭтапам.СуммаПлатежа Тогда
						ЭтапОплаты.СуммаПлатежа = СуммаОплаты;
					КонецЕсли;
					
					СуммаОплаты = СуммаОплаты - ВыборкаПоЭтапам.СуммаПлатежа;
					
				КонецЦикла;
				
				ЭтапыГрафикаОплаты.Сортировать("ДатаПлатежа");
				
			КонецЕсли;
			
			ДанныеЗаполнения.Вставить("СуммаДокумента",  ЭтапыГрафикаОплаты.Итог("СуммаПлатежа"));
			ДанныеЗаполнения.Вставить("ЧастичнаяОплата", ВыборкаПоДокументу.СуммаВзаиморасчетов <> ЭтапыГрафикаОплаты.Итог("СуммаПлатежа"));
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьПоВыкупуВозвратнойТарыКлиентом(Знач Основание, ДанныеЗаполнения)

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

Процедура ЗаполнитьПоАктуВыполненныхРабот(Знач Основание, ДанныеЗаполнения)

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

Процедура ЗаполнитьСуммуДокументаПоРасчетамСКлиентами(ВыборкаПоДокументу, ВыборкаПоРасчетам, ДанныеЗаполнения)
	
	Если ВыборкаПоРасчетам.Следующий() И ВыборкаПоРасчетам.СуммаОплаты > 0 Тогда
		
		ДобавитьЭтапОплаты(ВыборкаПоРасчетам.СуммаОплаты, ВыборкаПоДокументу.ДатаПлатежа);
		ДанныеЗаполнения.Вставить("СуммаДокумента",  ВыборкаПоРасчетам.СуммаОплаты);
		ДанныеЗаполнения.Вставить("ЧастичнаяОплата", ВыборкаПоРасчетам.СуммаОплаты <> ВыборкаПоДокументу.СуммаВзаиморасчетов);
		
	Иначе
		
		ДанныеЗаполнения.Вставить("СуммаДокумента",  0);
		ДанныеЗаполнения.Вставить("ЧастичнаяОплата", Истина);
		
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьПоОтчетуКомитенту(Знач Основание, ДанныеЗаполнения)

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

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

Процедура ЗаполнитьПоОтчетуКомиссионераОСписании(Знач Основание, ДанныеЗаполнения)

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

Процедура ЗаполнитьПоДоговору(Знач Основание, ДанныеЗаполнения)

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

	БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация    		= ДанныеЗаполнения.Организация;
	Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров); // Касса
	
КонецПроцедуры


Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
	
	Организация    = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
	Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Или НЕ ДанныеЗаполнения.Свойство("Валюта") Тогда
		Валюта = ЗначениеНастроекПовтИсп.ПолучитьВалютуРегламентированногоУчета(Валюта);
	КонецЕсли;
	Менеджер       = Пользователи.ТекущийПользователь();
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация    		= Организация;
	СтруктураПараметров.БанковскийСчет		= БанковскийСчет;
	БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
	
	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация    	= Организация;
	СтруктураПараметров.ФормаОплаты		= ФормаОплаты;
	СтруктураПараметров.Касса			= Касса;
	Касса          = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

Процедура ДобавитьЭтапОплаты(СуммаОплаты, ДатаПлатежа)
	
	ЭтапОплаты = ЭтапыГрафикаОплаты.Добавить();
	ЭтапОплаты.ПроцентПлатежа = 100;
	ЭтапОплаты.СуммаПлатежа   = СуммаОплаты;
	ЭтапОплаты.ДатаПлатежа    = ?(ЗначениеЗаполнено(ДатаПлатежа), ДатаПлатежа, ТекущаяДата());
	
КонецПроцедуры

Процедура ПроверитьВозможностьВводаНаОснованииДоговора(ЕстьОшибкиТипДоговора)
	
	Если ЕстьОшибкиТипДоговора Тогда
		
		ТекстОшибки = НСтр("ru='Ввод на основании договора с поставщиком запрещен.'");
	
		ВызватьИсключение ТекстОшибки;
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#КонецЕсли
Показать
24. lsd_777 11.03.16 20:49 Сейчас в теме
заказ клиента
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

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

Функция ПолучитьСуммуВозвратнойТары()
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.СуммаСНДС КАК СуммаСНДС,
	|	Товары.Отменено КАК Отменено
	|ПОМЕСТИТЬ
	|	Товары
	|ИЗ
	|	&Товары КАК Товары
	|;
	|ВЫБРАТЬ
	|	ЕСТЬNULL(СУММА(Товары.СуммаСНДС),0) КАК СуммаСНДС
	|ИЗ
	|	Товары КАК Товары
	|ГДЕ
	|	НЕ Товары.Отменено
	|	И Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
	|	И &ВернутьМногооборотнуюТару
	|	И НЕ &ТребуетсяЗалогЗаТару
	|");
	
	Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Номенклатура,СуммаСНДС,Отменено"));
	Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару", ВернутьМногооборотнуюТару);
	Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", ТребуетсяЗалогЗаТару);
	
	Выгрузка = Запрос.Выполнить().Выгрузить();
	СуммаВозвратнойТарыЗаказанныхСтрок = Выгрузка[0].СуммаСНДС;
	Возврат СуммаВозвратнойТарыЗаказанныхСтрок;
	
КонецФункции

// Рассчитывает количество заказанных строк заказа
//
Функция ПолучитьКоличествоЗаказанныхСтрок() Экспорт
	
	НайденныеСтроки = Товары.НайтиСтроки(Новый Структура("Отменено", Ложь));
	Возврат НайденныеСтроки.Количество();
	
КонецФункции

// Заполняет табличную часть ЭтапыГрафикаОплаты
//
Процедура ЗаполнитьЭтапыГрафикаОплаты() Экспорт
	
	ЭтапыГрафикаОплаты.Очистить();
	
	СуммаЗаказано       = ПолучитьСуммуЗаказанныхСтрок();
	СуммаЗалогаЗаТару   = ПолучитьСуммуЗаказанныхСтрок(Истина);
	
	Если СуммаЗаказано = 0 И СуммаЗалогаЗаТару = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ГрафикСоглашенияЗаполнен = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами")
		И ПродажиВызовСервера.ГрафикСоглашенияЗаполнен(Соглашение);
	ГрафикЗаполнен = ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты")
		И ЗначениеЗаполнено(ГрафикОплаты);
	
	ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыДокументаПродажи(
		ЭтотОбъект,
		ГрафикСоглашенияЗаполнен,
		ГрафикЗаполнен,
		СуммаЗаказано,
		СуммаЗалогаЗаТару);
	
	Если ЭтапыГрафикаОплаты.Количество() = 0 Тогда
		
		ЭтапыОплатыКлиентСервер.ДобавитьЭтапОплатыПоУмолчанию(
			ЭтотОбъект,
			Перечисления.ВариантыОплатыКлиентом.КредитПослеОтгрузки,
			ЖелаемаяДатаОтгрузки,
			СуммаЗаказано,
			СуммаЗалогаЗаТару);
		
	КонецЕсли;
	
КонецПроцедуры

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

		Касса  = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
		
	КонецЕсли;
	
	Если Не УсловияПродаж.Типовое Тогда
		Если ЗначениеЗаполнено(УсловияПродаж.Контрагент) Тогда
			Контрагент = УсловияПродаж.Контрагент;
		КонецЕсли;
	КонецЕсли;
	
	ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Партнер, Контрагент);
	
	Если Не УсловияПродаж.Типовое Тогда
		Если ЗначениеЗаполнено(УсловияПродаж.КонтактноеЛицо) 
			И НЕ ЗначениеЗаполнено(КонтактноеЛицо) Тогда
			КонтактноеЛицо = УсловияПродаж.КонтактноеЛицо;
		КонецЕсли;
	КонецЕсли;
	
	ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(Партнер, КонтактноеЛицо);
	
	Если УсловияПродаж.ИспользуютсяДоговорыКонтрагентов <> Неопределено И УсловияПродаж.ИспользуютсяДоговорыКонтрагентов Тогда

		Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(ЭтотОбъект, ХозяйственнаяОперация, Валюта);
		
		ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Договор, БанковскийСчет, БанковскийСчетКонтрагента);
		
		Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности") Тогда
			НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(НаправлениеДеятельности, Соглашение, Договор);
		КонецЕсли;
		
	КонецЕсли;

	Если ЗначениеЗаполнено(УсловияПродаж.Склад) Тогда
		Склад = УсловияПродаж.Склад;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(УсловияПродаж.ГруппаФинансовогоУчета) Тогда
		ГруппаФинансовогоУчета = УсловияПродаж.ГруппаФинансовогоУчета;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(УсловияПродаж.СрокПоставки) И ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента") Тогда
		ДатаНачала = ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДата());
		ЖелаемаяДатаОтгрузки = ОбщегоНазначенияУТКлиентСервер.РассчитатьДатуОкончанияПериода(ДатаНачала,Перечисления.Периодичность.День, УсловияПродаж.СрокПоставки) + 1;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#КонецОбласти

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);

	ПроведениеСервер.УстановитьРежимПроведения(ЭтотОбъект, РежимЗаписи, РежимПроведения);

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

		Обособленно          = Перечисления.ВариантыОбеспечения.Обособленно;
		ОтгрузитьОбособленно = Перечисления.ВариантыОбеспечения.ОтгрузитьОбособленно;
		ТребуетсяНазначение = Ложь;

		Для Каждого Строка Из Товары Цикл
			Если Строка.ВариантОбеспечения = Обособленно Или Строка.ВариантОбеспечения = ОтгрузитьОбособленно Тогда
				ТребуетсяНазначение = Истина;
			КонецЕсли;
		КонецЦикла;

		Если ТребуетсяНазначение Тогда
			Назначение = Справочники.Назначения.ПолучитьСсылкуДляНовогоЗаказа(НаправлениеДеятельности);
		КонецЕсли;

	КонецЕсли;
	
	Если ЭтоНовый() И НЕ ЗначениеЗаполнено(Номер) Тогда
		УстановитьНовыйНомер();
	КонецЕсли;

	Если ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным Тогда
		ИдентификаторПлатежа = ОбщегоНазначенияУТ.ПолучитьУникальныйИдентификаторПлатежа(ЭтотОбъект);
	Иначе
		ИдентификаторПлатежа = Неопределено;
	КонецЕсли; 

КонецПроцедуры

Процедура ПриЗаписи(Отказ)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	Справочники.Назначения.СоздатьОбновитьНазначение(Ссылка, Назначение, Партнер, Номер, Дата, ПометкаУдаления, НаправлениеДеятельности);

КонецПроцедуры

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
	
	Если ТипДанныхЗаполнения = Тип("Структура") Тогда
		ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.Партнеры") Тогда
		ЗаполнитьДокументНаОснованииПартнера(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СделкиСКлиентами") Тогда
		ЗаполнитьДокументНаОснованииСделкиПоПродаже(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.КоммерческоеПредложениеКлиенту") Тогда
		ЗаполнитьДокументНаОснованииКоммерческогоПредложенияКлиенту(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
		ЗаполнитьДокументНаОснованииИндивидуальногоСоглашенияСКлиент­ом(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаданиеТорговомуПредставителю") Тогда
		ЗаполнитьДокументНаОснованииЗаданияТорговомуПредставителю(ДанныеЗаполнения);
	КонецЕсли;
	
	ИнициализироватьУсловияПродаж();
	ИнициализироватьДокумент(ДанныеЗаполнения);
    ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияКассыПриФОИспользоватьНесколькоКассЛ­ожь", Ложь);
    ДополнительныеСвойства.Вставить("НеобходимостьЗаполненияСчетаПриФОИспользоватьНесколькоСчето­вЛожь", Ложь);
	
	ЗаполнениеСвойствПоСтатистикеСервер.ЗаполнитьСвойстваОбъекта(ЭтотОбъект, ДанныеЗаполнения);
		
	СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Склад);
	СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(Склад, СкладГруппа, Товары, Ложь);
	
	Если Не ЗначениеЗаполнено(НалогообложениеНДС) Или Не ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
		НалогообложениеНДС = ЗначениеНастроекПовтИсп.ПолучитьНалогообложениеНДС(Организация, Склад, Дата);
	КонецЕсли;
		
	Приоритет = Справочники.Приоритеты.ПолучитьПриоритетПоУмолчанию(Приоритет);
	
КонецПроцедуры

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	ОбщегоНазначенияУТ.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
	
	НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
	
	НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
												НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЗаказКлиента),
												Отказ,
												МассивНепроверяемыхРеквизитов);
	
	НоменклатураСервер.ПроверитьЗаполнениеСодержания(ЭтотОбъект,Отказ,"Товары");

	// Срок действия заказа должен быть не меньше даты документа
	Если Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован
		И ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента")
		И ЗначениеЗаполнено(ДатаСогласования) И ДатаСогласования < НачалоДня(Дата) Тогда
		
		ТекстОшибки = НСтр("ru='Дата согласования должна быть не меньше даты документа %Дата%'");
		ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Дата%", Формат(Дата, "ДЛФ=DD"));
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			ТекстОшибки,
			ЭтотОбъект,
			"ДатаСогласования",
			,
			Отказ);
		
	КонецЕсли;
	
	ВсеСтрокиОтменены = ОбщегоНазначенияУТ.ВсеСтрокиОтменены(ЭтотОбъект, "Товары", "Отменено");
	
	МассивНепроверяемыхРеквизитов.Добавить("ДатаОтгрузки");
	
	// Желаемая дата отгрузки в шапке должна быть не меньше даты документа
	Если ЗначениеЗаполнено(ЖелаемаяДатаОтгрузки) И ЖелаемаяДатаОтгрузки < НачалоДня(Дата) Тогда
		
		ТекстОшибки = НСтр("ru='Желаемая дата отгрузки должна быть не меньше даты документа %Дата%'");
		ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Дата%", Формат(Дата,"ДЛФ=DD"));
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			ТекстОшибки,
			ЭтотОбъект,
			"ЖелаемаяДатаОтгрузки",
			,
			Отказ);
		
	КонецЕсли;
	
	// Дата отгрузки в шапке должна быть не меньше даты документа
	Если НеОтгружатьЧастями И 
		ЗначениеЗаполнено(ДатаОтгрузки) И 
		ДатаОтгрузки < НачалоДня(Дата)
		И НЕ ВсеСтрокиОтменены Тогда
	
		ТекстОшибки = НСтр("ru='Дата отгрузки должна быть не меньше даты документа %Дата%'");
		ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Дата%", Формат(Дата,"ДЛФ=DD"));
		
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			ТекстОшибки,
			ЭтотОбъект,
			"ДатаОтгрузки",
			,
			Отказ);

	КонецЕсли;
	
	МассивНепроверяемыхРеквизитов.Добавить("Товары.ПричинаОтмены");
	МассивНепроверяемыхРеквизитов.Добавить("Товары.ДатаОтгрузки");
	
	ДатаОтгрузкиОбязательна = Ложь;
	ШаблонТекста = НСтр("ru='Не заполнена колонка ""Дата отгрузки"" в строке %НомерСтроки% списка ""Товары""'");
	ИзЗаказов = Перечисления.ВариантыОбеспечения.ИзЗаказов;
	СоСклада  = Перечисления.ВариантыОбеспечения.СоСклада;
	Отгрузить  = Перечисления.ВариантыОбеспечения.Отгрузить;
	ОтгрузитьОбособленно  = Перечисления.ВариантыОбеспечения.ОтгрузитьОбособленно;
	ВариантНеТребуется = Перечисления.ВариантыОбеспечения.НеТребуется;
	Для ТекИндекс = 0 По Товары.Количество()-1 Цикл
		
		АдресОшибки = НСтр("ru=' в строке %НомерСтроки% списка ""Товары""'");
		АдресОшибки = СтрЗаменить(АдресОшибки, "%НомерСтроки%", Товары[ТекИндекс].НомерСтроки);
		
		СтрокаТовары = Товары[ТекИндекс];
		ДатаОтгрузкиВСтрокеОбязательна = Не СтрокаТовары.Отменено
											И СтрокаТовары.ВариантОбеспечения <> ВариантНеТребуется
											И (Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению
												ИЛИ Статус = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке
												ИЛИ Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт
												ИЛИ (Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован
													И (СтрокаТовары.ВариантОбеспечения = ИзЗаказов
														ИЛИ СтрокаТовары.ВариантОбеспечения = СоСклада
														ИЛИ СтрокаТовары.ВариантОбеспечения = ОтгрузитьОбособленно
														ИЛИ СтрокаТовары.ВариантОбеспечения = Отгрузить)));
		
		Если ДатаОтгрузкиВСтрокеОбязательна И Не НеОтгружатьЧастями И Не ЗначениеЗаполнено(СтрокаТовары.ДатаОтгрузки) Тогда
			
			ТекстОшибки   = СтрЗаменить(ШаблонТекста, "%НомерСтроки%", СтрокаТовары.НомерСтроки);
			ПутьКТабЧасти = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", СтрокаТовары.НомерСтроки, "ДатаОтгрузки");
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, ПутьКТабЧасти,, Отказ);

		КонецЕсли;
		ДатаОтгрузкиОбязательна = ДатаОтгрузкиОбязательна Или ДатаОтгрузкиВСтрокеОбязательна;
		
		// Причина отмены обязательна для заполнения в строках без признака Отменено
		Если ПолучитьФункциональнуюОпцию("ИспользоватьПричиныОтменыЗаказовКлиентов")
			И Товары[ТекИндекс].Отменено И
			Не ЗначениеЗаполнено(Товары[ТекИндекс].ПричинаОтмены) Тогда
			
			ТекстОшибки = НСтр("ru='Необходимо указать причину отмены'");
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				ТекстОшибки + АдресОшибки,
				ЭтотОбъект,
				ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", Товары[ТекИндекс].НомерСтроки, "ПричинаОтмены"),
				,
				Отказ);
			
		КонецЕсли;
		
		// Дата отгрузки в тч Товары должна быть не меньше даты документа
		Если Не НеОтгружатьЧастями 
			И ЗначениеЗаполнено(Товары[ТекИндекс].ДатаОтгрузки) 
			И Товары[ТекИндекс].ДатаОтгрузки < НачалоДня(Дата) Тогда
			
			ТекстОшибки = НСтр("ru='Дата отгрузки должна быть не меньше даты документа ""%Дата%""'");
			ТекстОшибки = СтрЗаменить(ТекстОшибки,"%Дата%", Формат(Дата, "ДЛФ=DD"));
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				ТекстОшибки + АдресОшибки,
				ЭтотОбъект,
				ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", Товары[ТекИндекс].НомерСтроки, "ДатаОтгрузки"),
				,
				Отказ);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ДатаОтгрузкиОбязательна И НеОтгружатьЧастями И Не ЗначениеЗаполнено(ДатаОтгрузки) Тогда
		
		ТекстОшибки = НСтр("ru='Поле ""Дата отгрузки"" не заполнено'");
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, "ДатаОтгрузки", , Отказ);
		
	КонецЕсли;
	
	ПорядокРасчетовПоДокументу = ВзаиморасчетыСервер.ПорядокРасчетовПоДокументу(ЭтотОбъект);
	
	ГрафикИсполненияВДоговоре = Ложь;
	Если ПорядокРасчетовПоДокументу = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
		И ЗначениеЗаполнено(Договор) Тогда
		ГрафикИсполненияВДоговоре = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "ЗаданГрафикИсполнения");
	КонецЕСли;
	
	Если ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
		И ПорядокРасчетовПоДокументу <> Перечисления.ПорядокРасчетов.ПоНакладным
		И Не ГрафикИсполненияВДоговоре Тогда
		
		СуммаЗаказанныхСтрок = ПолучитьСуммуЗаказанныхСтрок();
		СуммаЗалоговойТары = ПолучитьСуммуЗаказанныхСтрок(Истина);
		
		ПродажиСервер.ПроверитьКорректностьЭтаповГрафикаОплаты(
			ЭтотОбъект,
			СуммаЗаказанныхСтрок,
			СуммаЗалоговойТары,
			Истина,
			Отказ,
			Истина);
		
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(Соглашение) ИЛИ НЕ ОбщегоНазначенияУТ.ЗначениеРеквизитаОбъектаТипаБулево(Соглашение, "ИспользуютсяДоговорыКонтрагентов") Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Договор");
	КонецЕсли;
	
	ДоставкаТоваров.ПроверитьЗаполнениеРеквизитовДоставки(ЭтотОбъект, МассивНепроверяемыхРеквизитов, Отказ);
	
	Если ЗначениеЗаполнено(НаправлениеДеятельности) 
		ИЛИ НЕ НаправленияДеятельностиСервер.УказаниеНаправленияДеятельностиОбязательно(ХозяйственнаяОперация) Тогда
		МассивНепроверяемыхРеквизитов.Добавить("НаправлениеДеятельности");
	КонецЕсли;
	
	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
	
	ПроверитьИзменениеХозяйственнойОперации(Отказ);
	
	Если Не Отказ И ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта(ЭтотОбъект, ПроверяемыеРеквизиты) Тогда
		Отказ = Истина;
	КонецЕсли;
	
	ПродажиСервер.ПроверитьКорректностьЗаполненияДокументаПродажи(ЭтотОбъект, Отказ);
	
	Если Статус <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован Тогда
		
		ПродажиСервер.ПроверитьЗапретОтгрузки(Партнер, Отказ);
		
	КонецЕсли;
																							
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
		
	// Инициализация дополнительных свойств для проведения документа
	ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
	
	// Инициализация данных документа
	Документы.ЗаказКлиента.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
	
	// Подготовка наборов записей
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	// Отражение в разделах учета
	ЗаказыСервер.ОтразитьЗаказыКлиентов(ДополнительныеСвойства, Движения, Отказ);
	
	ЗаказыСервер.ОтразитьГрафикОтгрузкиТоваров(ДополнительныеСвойства, Движения, Отказ);
	
	ЗапасыСервер.ОтразитьСвободныеОстатки(ДополнительныеСвойства, Движения, Отказ);
	
	ЗаказыСервер.ОтразитьТоварыКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
	
	ЗапасыСервер.ОтразитьОбеспечениеЗаказовРаботами(ДополнительныеСвойства, Движения, Отказ);
	
	ЗапасыСервер.ОтразитьОбеспечениеЗаказов(ДополнительныеСвойства, Движения, Отказ);

	ВзаиморасчетыСервер.ОтразитьРасчетыСКлиентами(ДополнительныеСвойства, Движения, Отказ);
	
	СформироватьСписокРегистровДляКонтроля();
	
	ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
	
	ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
	
	РегистрыСведений.СостоянияЗаказовКлиентов.ОтразитьСостояниеЗаказа(Ссылка, Отказ);
	
	ДоставкаТоваров.ОтразитьСостояниеДоставки(Ссылка, Отказ);
	
	ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);
	
	ПродажиСервер.ВыполнитьКонтрольЗаказаПослеПроведения(Ссылка, Отказ);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	// Инициализация дополнительных свойств для удаления проведения документа
	ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
	
	// Подготовка наборов записей
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	СформироватьСписокРегистровДляКонтроля();
	
	// Запись наборов записей
	ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
	
	ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ);
	
	РегистрыСведений.СостоянияЗаказовКлиентов.ОтразитьСостояниеЗаказа(Ссылка, Отказ, Истина);	
	
	ДоставкаТоваров.ОтразитьСостояниеДоставки(Ссылка, Отказ, Истина);
	
	ПроведениеСервер.ОчиститьДополнительныеСвойстваДляПроведения(ДополнительныеСвойства);

КонецПроцедуры

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

	Для Каждого СтрокаТЧ Из Товары Цикл
		
		СтрокаТЧ.КодСтроки      = 0;
		СтрокаТЧ.ДатаОтгрузки   = Дата(1,1,1);
		СтрокаТЧ.Отменено = Ложь;
		СтрокаТЧ.ПричинаОтмены = Справочники.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка();
		
	КонецЦикла;
	
	ЭтотОбъект.ЗаполнитьЭтапыГрафикаОплаты();
	
	СкидкиНаценкиСервер.ОтменитьСкидки(ЭтотОбъект, "Товары", Истина,,Истина);
	
	ИнициализироватьДокумент();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область ИнициализацияИЗаполнение

Процедура ЗаполнитьДокументНаОснованииПартнера(Знач Основание)
	
	Партнер = Основание;
	ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
	Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
		ЗаполнитьУсловияПродажПоУмолчанию();
	КонецЕсли;
	
КонецПроцедуры

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

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

КонецПроцедуры

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

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

КонецПроцедуры

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

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

Процедура ЗаполнитьДокументПоОтбору(Знач ДанныеЗаполнения)
	
	Если ДанныеЗаполнения.Свойство("Партнер") Тогда
		
		Партнер = ДанныеЗаполнения.Партнер;
		ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
		Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
			ЗаполнитьУсловияПродажПоУмолчанию();
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

КонецПроцедуры

Процедура ИнициализироватьУсловияПродаж()
	
	Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") И Не ЗначениеЗаполнено(ДокументОснование) Тогда
		ЗаполнитьУсловияПродажПоУмолчанию();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

Процедура СформироватьСписокРегистровДляКонтроля()

	Массив = Новый Массив;

	Массив.Добавить(Движения.ОбеспечениеЗаказов);

	Если Не ДополнительныеСвойства.ЭтоНовый Тогда
		Массив.Добавить(Движения.ЗаказыКлиентов);
		Массив.Добавить(Движения.ОбеспечениеЗаказовРаботами);
	КонецЕсли;
	
	// Контроль выполняется при перепроведении, отмене проведения или если используются серии, 
	// чтобы проверить возможность резервирования серий
	
	Если Не ДополнительныеСвойства.ЭтоНовый
		Или НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЗаказКлиента).ИспользоватьСерииНоменклатуры Тогда
		Массив.Добавить(Движения.ТоварыКОтгрузке);
	КонецЕсли;
	
	Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

		Массив.Добавить(Движения.СвободныеОстатки);
		Массив.Добавить(Движения.ГрафикОтгрузкиТоваров);
		Массив.Добавить(Движения.РасчетыСКлиентами);

	КонецЕсли;
	
	ДополнительныеСвойства.ДляПроведения.Вставить("РегистрыДляКонтроля", Массив);
	
КонецПроцедуры

Процедура ПроверитьИзменениеХозяйственнойОперации(Отказ)
	
	Если Не ЭтоНовый() И ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
	
		Запрос = Новый Запрос("
		|ВЫБРАТЬ
		|	РасчетыСКлиентами.СуммаРасход КАК СуммаОплаты
		|ИЗ
		|	РегистрНакопления.РасчетыСКлиентами.Обороты(,,Период,
		|		ЗаказКлиента = &Ссылка
		|	) КАК РасчетыСКлиентами
		|
		|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|		Документ.ЗаказКлиента КАК ДанныеДокумента
		|	ПО
		|		ДанныеДокумента.Ссылка = &Ссылка
		|		И ДанныеДокумента.ХозяйственнаяОперация <> &ХозяйственнаяОперация
		|ГДЕ
		|	РасчетыСКлиентами.СуммаРасход > 0
		|");
		Запрос.УстановитьПараметр("Ссылка", Ссылка);
		Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
		
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			
			Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Заказ клиента оплачен. Нельзя устанавливать операцию %1'"),
				ХозяйственнаяОперация);
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				Текст,
				ЭтотОбъект,
				"ХозяйственнаяОперация",
				,
				Отказ);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

#КонецЕсли
Показать

что именно посмотреть в организации, если посмотреть в НСИ, там все норм.
25. Xershi 1533 11.03.16 22:26 Сейчас в теме
(24) lsd_777, что ты вообще не то скидываешь. Посмотри какая процедура работает при нажатии на печать.

Анализировать нужно на различия.
А так по коду все можно понять.
26. lsd_777 12.03.16 07:36 Сейчас в теме
(25) Xershi, скинь скрин пожалуйста, как именно код надо
27. Xershi 1533 12.03.16 13:17 Сейчас в теме
(26) lsd_777, открой конфигуратор и показывай скрины с нужным документом.
Я тебе все назвал. У тебя с терминалогией проблемы.
28. lsd_777 12.03.16 13:22 Сейчас в теме
(27) Xershi, мой мозг сломался...
29. Xershi 1533 12.03.16 16:12 Сейчас в теме
(28) lsd_777, конфигуратор открывать умеешь?) Ты с него наверно копировал процедуры.
Вот стань мышкой на нужный документ и сделай скрин) А то с тобой тяжко общаться)
32. Xershi 1533 12.03.16 21:23 Сейчас в теме
(31) lsd_777, так о каком документе идет речь?
Правой кнопкой мыши кликни там модуль и меджер вот от туда код дай.
33. lsd_777 14.03.16 06:48 Сейчас в теме
34. Xershi 1533 14.03.16 09:47 Сейчас в теме
(33) lsd_777, в модуле менеджера у тебя печать прописана.
Обрати внимание на КомплектПечатныхФорм и затем на РегистрыСведений.НастройкиПечатиОбъектов
35. lsd_777 14.03.16 10:00 Сейчас в теме
(34) Xershi, Обратил, для меня это просто код! Что там не так, подскажи пожалуйста, а то водишь меня вокруг да около)
36. Xershi 1533 14.03.16 10:01 Сейчас в теме
(35) lsd_777, открой в базе регистр и посмотри чем он заполнен.
37. lsd_777 14.03.16 10:09 Сейчас в теме
38. Xershi 1533 14.03.16 11:58 Сейчас в теме
(37) lsd_777, покажи какую печатную форму ты выводишь (ее макет в конфигурации)?
39. lsd_777 14.03.16 12:53 Сейчас в теме
40. Xershi 1533 14.03.16 12:55 Сейчас в теме
(39) lsd_777, а название какое? Полностью скрин сделай. И имя ПФ скинь.
42. Xershi 1533 14.03.16 13:14 Сейчас в теме
(41) lsd_777, ты используешь внешнюю печатную форму?
43. lsd_777 14.03.16 13:16 Сейчас в теме
(42) Xershi, и внешнюю тоже пробовал, результат один!
44. lsd_777 14.03.16 13:19 Сейчас в теме
Я думаю, тут дело не в печатной форме, а что-то связанно с организацией или расчетными счетами.
46. Xershi 1533 14.03.16 13:32 Сейчас в теме
(44) lsd_777, ну у тебя в макете 2 области, которые выводятся.
ОбразецЗаполненияПП
ОбразецЗаполненияППСКодом

По коду пока не ясно как они меняются.
47. lsd_777 14.03.16 13:35 Сейчас в теме
(46) Xershi, с кодом ПП выводится при выставлении счета физ.лицу.
45. lsd_777 14.03.16 13:21 Сейчас в теме
Проверил сейчас цепочки обновлений, после перехода с 10.199 на 2.119 появился этот баг. Ни у кого такого не случалось?
48. Xershi 1533 14.03.16 13:38 Сейчас в теме
Да и вообще в модулях нет формирования табличного документа.

Скорее всего они в других модулях обрабатываются.

Так что ковырять вашу конфу нужно!
49. lsd_777 14.03.16 13:45 Сейчас в теме
(48) Xershi, Я наверное поступлю проще, перенесу все данные в чистую конфу.
50. Xershi 1533 14.03.16 13:49 Сейчас в теме
(49) lsd_777, если это глюк обновления, то можно и так иначе это работа алгоритма.
51. lsd_777 14.03.16 20:28 Сейчас в теме
В общем перенес всю инфу в чистую базу, пока косяков не обнаружил.
52. Xershi 1533 14.03.16 21:09 Сейчас в теме
Оставьте свое сообщение

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