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