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