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