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

1. lsd_777 10.03.16 12:55 Сейчас в теме
Доброго дня! 1с внедрили, и потом только увидели счет на оплату http://joxi.ru/8An6JOxsqnBWeA, как можно поменять на старую форму?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1536 10.03.16 12:56 Сейчас в теме
(1) lsd_777, вставить код старой или добавить ВПФ.
3. lsd_777 10.03.16 12:58 Сейчас в теме
(2) Xershi, а будет ли код старой работать?
4. Xershi 1536 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 1536 10.03.16 13:03 Сейчас в теме
(5) lsd_777, ну так в коде смотреть нужно. Код макет может изменить до неузнаваемости.
7. lsd_777 10.03.16 13:07 Сейчас в теме
(6) Xershi, Да я в коде не разбираюсь, думал может кто делал уже, подскажут. Я же не первый на 2.3 перешел) Да и такой счет думаю никого не устроил, без реквизитов.
8. Xershi 1536 10.03.16 13:20 Сейчас в теме
(7) lsd_777, так а что там разбираться нужно просто скопировать и все. Или перенести ВПФ если она там такой была.
9. lsd_777 10.03.16 13:25 Сейчас в теме
10. Xershi 1536 10.03.16 13:28 Сейчас в теме
(9) lsd_777, макет печатной формы и код, который ее вызывает и заполняет.
11. lsd_777 10.03.16 13:36 Сейчас в теме
(10) Xershi, макет понятно, откуда код брать непонятно.
12. Xershi 1536 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 1536 10.03.16 23:09 Сейчас в теме
(15) lsd_777, код выложи, тогда будет о чем говорить. А так только кэш почистить можно.
18. lsd_777 11.03.16 18:47 Сейчас в теме
(17) Xershi, Код модуля документа "счет на оплату"?
19. Xershi 1536 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].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Если ВыборкаШапка.Следующий() Тогда
            
            МассивДопустимыхСтатусов = Неопределено;
            ТипОснования = ТипЗнч(ДокументОснование);
            
            Если ТипОснования = Тип("ДокументСсылка.ЗаказКлиента") Тогда
                
                Документы.ЗаказКлиента.ПроверитьВозможностьВводаНаОсновании(
                    ВыборкаШапка.ДокументОснование,
                    ВыборкаШапка.Статус,
                    ВыборкаШапка.ЕстьОшибкиПроведен,
                    Истина);

            ИначеЕсли ТипОснования = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
                
                Документы.ЗаявкаНаВозвратТоваровОтКлиента.ПроверитьВозможностьВводаНаОсновании(
                    ВыборкаШапка.ДокументОснование,
                    ВыборкаШапка.Статус,
                    ВыборкаШапка.ЕстьОшибкиПроведен,
                    Истина);
                    
            КонецЕсли;
            
            Если ТекстЗапросаДокумент <> "Документ.ОтчетКомиссионера" Тогда
                
                Документы.СчетНаОплатуКлиенту.ПроверитьКорректностьХозяйственнойОперацииДокументаОснования<wbr(
                    ВыборкаШапка.ЕстьОшибкиХозяйственнаяОперация,
                    ВыборкаШапка.ХозяйственнаяОперация);
                
            КонецЕсли;
            
            ЗаполнитьЗначенияСвойств(ШапкаОснование, ВыборкаШапка);
            Валюта = ВыборкаШапка.Валюта;
            
        КонецЕсли;
        
        Если ВыборкаДокументовЭтапы.Количество() = 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='Таблица этапов оплаты будет заполнена по основанию. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
            Возврат;
        КонецЕсли;
        ЗаполнитьЭтапыОплатыПоОснованиюСервер();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

    //

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

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

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

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

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

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

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

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

    //

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

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

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

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

    //

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

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

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

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

    //

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

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

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

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

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

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

    //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьСуммуДокументаПоРасчетамСКлиентами(ВыборкаПоДокументу, ВыборкаПоРасчетам, ДанныеЗаполнения)
    
    Если ВыборкаПоРасчетам.Следующий() И ВыборкаПоРасчетам.СуммаОплаты > 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].ДатаОтгрузки;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЕсли;
        
        ДатаОтгрузки = НоваяДатаОтгрузки;
    Иначе
        ОбеспечениеСервер.ЗаполнитьДатыОтгрузкиВТаблице(ДатаОтгрузки, Товары, "ДатаОтгрузки");
    КонецЕсли;
    
    ДокументСогласован = Согласован;
    
    ОбщегоНазначенияУТ.ИзменитьПризнакСогласованностиДокумента(
        ЭтотОбъект,
        РежимЗаписи,
        Перечисления.СтатусыЗаказовКлиентов.НеСогласован);
    
    // Установим дату согласования, если документ согласован
    Если Не ДокументСогласован И Согласован Тогда
        ДатаСогласования = ТекущаяДатаСеанса();
    КонецЕсли;
    
    // Очистим реквизиты документа не используемые для хозяйственной операции.
    МассивВсехРеквизитов = Новый Массив;
    МассивРеквизитовОперации = Новый Массив;
    Документы.ЗаказКлиента.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(
        ХозяйственнаяОперация,
        МассивВсехРеквизитов,
        МассивРеквизитовОперации);
    ДенежныеСредстваСервер.ОчиститьНеиспользуемыеРеквизиты(
        ЭтотОбъект,
        МассивВсехРеквизитов,
        МассивРеквизитовОперации);
        
    МассивРеквизитов = Новый Массив;
    Если ФормаОплаты <> Перечисления.ФормыОплаты.Наличная Тогда
        МассивРеквизитов.Добавить("Касса");
    КонецЕсли;
    
    ДенежныеСредстваСервер.ОчиститьНеиспользуемыеРеквизиты(ЭтотОбъект, МассивРеквизитов, Новый Массив);
    
    НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект, НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЗаказКлиента));
    
    Если Не ЗначениеЗаполнено(Назначение) Тогда

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

Показать

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

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

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

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

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