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