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