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