Загрузка данных
Перем ФормаПрогресса;
Перем Элементы;
Перем НеобходимоОткрытиеМастераПервогоЗапуска;
Перем ЕстьОграниченияПоТарифу;
Перем ПредставлениеТиповДокументов, ТипыДокументовДляСопоставления;
Перем КонтекстСеансаКлиентСервер;
Перем ЯщикиНеТребующиеОплаты;
Перем ЭтоПервыйЗапуск;
Перем ЕстьСертификаты; // Булево - Истина, если хотя бы к одному ящику в контексте сеанса привязан сертификат
Перем ЕстьСистемаХранения; // Булево - Истина, если определена система хранения (СХ-1, СХ-1 в расширении или СХ-2)
Перем ЛендингНовыйГод; // Строка, Неопределено - Адрес страницы с новогодним поздравлением или "null"
Перем КлючТекущейСтроки;
// BSLLS:UnusedLocalVariable-off
Перем _МодульПлатформа; // хранит форму Модуль_Платформа
// BSLLS:UnusedLocalVariable-on
// { СЕРВИСНЫЕ МЕТОДЫ
Функция ОсновнаяФорма() Экспорт
Возврат ЭтаФорма;
КонецФункции
Функция Модуль_Платформа() Экспорт
Если _МодульПлатформа = Неопределено Тогда
_МодульПлатформа = ПолучитьФормуОбработки("Модуль_Платформа", ЭтаФорма);
ПараметрыФормы = Неопределено;
_МодульПлатформа.ИнициализироватьФорму(ПараметрыФормы);
КонецЕсли;
Возврат _МодульПлатформа;
КонецФункции
// Фиксирует Данные типов Структура, Соответствие, Массив с учетом вложенности.
//
// BSLLS:TooManyReturns-off
// BSLLS:CognitiveComplexity-off
// BSLLS:CyclomaticComplexity-off
// BSLLS:IfElseIfEndsWithElse-off
// BSLLS:IfConditionComplexity-off
// BSLLS:DuplicateStringLiteral-off
//
// Параметры:
// Данные - Структура
// - Соответствие
// - Массив - коллекции, значения которых являются примитивными типами,
// хранилищем значения или не могут быть изменены. Поддерживаются типы значений:
// Булево, Строка, Число, Дата, Неопределено, УникальныйИдентификатор, Null, Тип,
// ХранилищеЗначения, ОбщийМодуль, ОбъектМетаданных, ТипЗначенияXDTO, ТипОбъектаXDTO,
// ЛюбаяСсылка.
//
// Возвращаемое значение:
// ФиксированнаяСтруктура, ФиксированноеСоответствие, ФиксированныйМассив - фиксированные данные, аналогичные
// переданным в параметре Данные.
//
//&НаКлиентеНаСервереБезКонтекста
Функция ФиксированныеДанныеЛок(Данные)
Если ТипЗнч(Данные) = Тип("Массив")
Или ТипЗнч(Данные) = Тип("ФиксированныйМассив") Тогда
Массив = Новый Массив;
Для Каждого Значение Из Данные Цикл
Если ТипЗнч(Значение) = Тип("Структура")
Или ТипЗнч(Значение) = Тип("Соответствие")
Или ТипЗнч(Значение) = Тип("Массив")
Или ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда
Массив.Добавить(ФиксированныеДанныеЛок(Значение));
Иначе
Массив.Добавить(Значение);
КонецЕсли;
КонецЦикла;
Возврат Новый ФиксированныйМассив(Массив);
ИначеЕсли ТипЗнч(Данные) = Тип("Структура")
Или ТипЗнч(Данные) = Тип("Соответствие") Тогда
Если ТипЗнч(Данные) = Тип("Структура") Тогда
Коллекция = Новый Структура;
Иначе
Коллекция = Новый Соответствие;
КонецЕсли;
Для Каждого КлючИЗначение Из Данные Цикл
Значение = КлючИЗначение.Значение;
Если ТипЗнч(Значение) = Тип("Структура")
ИЛИ ТипЗнч(Значение) = Тип("Соответствие")
ИЛИ ТипЗнч(Значение) = Тип("Массив") Тогда
Коллекция.Вставить(
КлючИЗначение.Ключ, ФиксированныеДанныеЛок(Значение));
Иначе
Коллекция.Вставить(КлючИЗначение.Ключ, Значение);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(Данные) = Тип("Структура") Тогда
Возврат Новый ФиксированнаяСтруктура(Коллекция);
Иначе
Возврат Новый ФиксированноеСоответствие(Коллекция);
КонецЕсли;
КонецЕсли;
Возврат Данные;
// BSLLS:TooManyReturns-on
// BSLLS:CognitiveComplexity-on
// BSLLS:CyclomaticComplexity-on
// BSLLS:IfElseIfEndsWithElse-on
// BSLLS:IfConditionComplexity-on
// BSLLS:DuplicateStringLiteral-on
КонецФункции // ФиксированныеДанные
Функция ОбработкаОбъект()
Возврат ЭтотОбъект;
КонецФункции
Функция ИмяТекущейФормы() Экспорт
Возврат "Форма";
КонецФункции
Функция ИдентификаторОсновнойФормы() Экспорт
Возврат ИдентификаторФормы;
КонецФункции
// Служебный метод для передачи параметров формы.
//
Процедура ИнициализироватьФорму(ПараметрыФормы) Экспорт
ПараметрКонтекстСеанса = Неопределено;
ПараметрыФормы.Свойство("КонтекстСеанса", ПараметрКонтекстСеанса);
УстановитьКонтекстФормы(ЭтаФорма, ПараметрКонтекстСеанса);
УстановитьПредставлениеТекущегоПользователяДиадок(ЭтаФорма);
КонецПроцедуры
// } СЕРВИСНЫЕ МЕТОДЫ
//{ МЕТОДЫ ИНТЕРАКТИВНОЙ РАБОТЫ
Функция смв() Экспорт
Возврат ЭтаФорма;
КонецФункции
Процедура мОткрытьФорму(мИмяФормы,
ПараметрыФормы = Неопределено,
ОписаниеОповещения = Неопределено,
Владелец = Неопределено,
КлючФормы = Неопределено) Экспорт
Если ОписаниеОповещения <> Неопределено Тогда
ОткрытьФормуДиадокМодально(мИмяФормы, ЭтаФорма, ПараметрыФормы, ОписаниеОповещения);
Возврат;
КонецЕсли;
// BSLLS:GetFormMethod-off
Форма = ПолучитьФорму(мИмяФормы, ЭтаФорма, КлючФормы);
// BSLLS:GetFormMethod-on
Если Форма.Открыта() Тогда
Форма.Активизировать();
Иначе
Если ЗначениеЗаполнено(ПараметрыФормы) Тогда
Форма.ИнициализироватьФорму(ПараметрыФормы);
КонецЕсли;
Форма.Открыть();
КонецЕсли;
КонецПроцедуры
Процедура ОткрытьФормуДиадокМодально(мИмяФормы,
мВладелецФормы,
ПараметрыФормы = Неопределено,
ОписаниеОповещения = Неопределено,
РежимБлокирования = Неопределено) Экспорт
// BSLLS:GetFormMethod-off
Форма = ПолучитьФорму(мИмяФормы, мВладелецФормы);
// BSLLS:GetFormMethod-on
Если ЗначениеЗаполнено(ПараметрыФормы) Тогда
Форма.ИнициализироватьФорму(ПараметрыФормы);
КонецЕсли;
РезультатЗакрытия = Форма.ОткрытьМодально();
Если ОписаниеОповещения <> Неопределено Тогда
Выполнить("ОписаниеОповещения.Модуль." + ОписаниеОповещения.ИмяПроцедуры + "(РезультатЗакрытия, ОписаниеОповещения.ДополнительныеПараметры)");
КонецЕсли;
КонецПроцедуры
Процедура ОткрытьФормуВыбора(ИмяФормы, Параметры, Владелец) Экспорт
// BSLLS:GetFormMethod-off
Форма = ПолучитьФорму(ИмяФормы, Параметры, Владелец);
// BSLLS:GetFormMethod-on
Для Каждого Элемент Из Параметры.Отбор Цикл
ЭлементОтбора = Форма.Отбор.Найти(Элемент.Ключ);
ЗначениеОтбора = Элемент.Значение;
Если ЭлементОтбора <> Неопределено И ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Если ТипЗнч(ЗначениеОтбора) = Тип("Массив") Тогда
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
Для Каждого ТекЗначение Из ЗначениеОтбора Цикл
Если ЗначениеЗаполнено(ТекЗначение) Тогда
ЭлементОтбора.Значение.Добавить(ТекЗначение);
КонецЕсли;
КонецЦикла;
Иначе
ЭлементОтбора.Установить(ЗначениеОтбора);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗначениеРежимаВыбора = Новый Структура("РежимВыбора", Истина);
ЗаполнитьЗначенияСвойств(Форма, ЗначениеРежимаВыбора);
Форма.ОткрытьМодально();
КонецПроцедуры
Функция ПолучитьФормуОбработки(ИмяФормы, парамВладелецФормы = Неопределено, ПараметрыФормы = Неопределено) Экспорт
Если парамВладелецФормы = Неопределено Тогда
парамВладелецФормы = ЭтаФорма;
КонецЕсли;
// BSLLS:GetFormMethod-off
ПолучаемаяФорма = ПолучитьФорму(ИмяФормы, парамВладелецФормы);
// BSLLS:GetFormMethod-on
Возврат ПолучаемаяФорма;
КонецФункции
Функция НовыйОписаниеОповещения(ИмяПроцедуры,
Модуль,
ДополнительныеПараметры = Неопределено,
ИмяПроцедурыОбработкиОшибки = "",
МодульОбработкиОшибки = Неопределено) Экспорт
Возврат Новый Структура("ИмяПроцедуры, Модуль, ДополнительныеПараметры, ИмяПроцедурыОбработкиОшибки, МодульОбработкиОшибки",
ИмяПроцедуры, Модуль, ДополнительныеПараметры, ИмяПроцедурыОбработкиОшибки, МодульОбработкиОшибки);
КонецФункции
Процедура ПоказатьПредупреждениеПереопределенная(ОписаниеОповещения = Неопределено,
Текст = Неопределено,
Таймаут = 0,
Заголовок = "") Экспорт
Предупреждение(Текст, Таймаут, Заголовок);
Если ОписаниеОповещения <> Неопределено Тогда
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьВопросПереопределенная(ОписаниеОповещенияОЗавершении,
ТекстВопроса,
Кнопки,
Таймаут = 0,
КнопкаПоУмолчанию = Неопределено,
Заголовок = "",
КнопкаТаймаута = Неопределено) Экспорт
#Если ВебКлиент Тогда
ПоказатьВопрос(ОписаниеОповещенияОЗавершении, ТекстВопроса, Кнопки, Таймаут, КнопкаПоУмолчанию, Заголовок, КнопкаТаймаута);
#Иначе
Ответ = Вопрос(ТекстВопроса, Кнопки, Таймаут, КнопкаПоУмолчанию, Заголовок, КнопкаТаймаута);
Выполнить("ОписаниеОповещенияОЗавершении.Модуль." + ОписаниеОповещенияОЗавершении.ИмяПроцедуры + "(Ответ, ОписаниеОповещенияОЗавершении.ДополнительныеПараметры)");
#КонецЕсли
КонецПроцедуры
Процедура ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения,
Результат = Неопределено,
КоличествоПараметровОбработчика = 2) Экспорт
Если ОписаниеОповещения = Неопределено Тогда
Возврат;
КонецЕсли;
// Если модальность не запрещена, то в ОписаниеОповещения у нас будет Структура
Если КоличествоПараметровОбработчика = 2 Тогда
Выполнить("ОписаниеОповещения.Модуль." + ОписаниеОповещения.ИмяПроцедуры + "(Результат, ОписаниеОповещения.ДополнительныеПараметры)");
ИначеЕсли КоличествоПараметровОбработчика = 1 Тогда
Выполнить("ОписаниеОповещения.Модуль." + ОписаниеОповещения.ИмяПроцедуры + "(ОписаниеОповещения.ДополнительныеПараметры)");
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьВыборЭлемента(Список,
ОписаниеОповещенияОЗавершении = Неопределено,
Заголовок = "",
Элемент = Неопределено) Экспорт
ВыбранныйЭлемент = Список.ВыбратьЭлемент(Заголовок, Элемент);
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, ВыбранныйЭлемент);
КонецПроцедуры
Процедура ПоказатьЗначениеПереопределенная(Значение, ОписаниеОповещения = Неопределено) Экспорт
ОткрытьЗначение(Значение);
Если ОписаниеОповещения <> Неопределено Тогда
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьДиалогСохранение(ОписаниеОповещенияОЗавершении,
Знач Фильтр = Неопределено,
Заголовок = Неопределено,
Каталог = Неопределено,
ПолноеИмяФайла = Неопределено)
Результат = Неопределено;
Расширение = "";
Если НЕ ЗначениеЗаполнено(Фильтр) И ЗначениеЗаполнено(ПолноеИмяФайла) Тогда
Файл = Новый Файл(ПолноеИмяФайла);
Расширение = Файл.Расширение;
Если ЗначениеЗаполнено(Расширение) Тогда
Фильтр = "Документ (*" + Расширение + ")|*" + Расширение + "|Все документы (*.*)|*.*";
КонецЕсли;
КонецЕсли;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Фильтр = Фильтр;
Диалог.Каталог = Каталог;
Диалог.Заголовок = Заголовок;
Диалог.Расширение = Расширение;
Диалог.ПолноеИмяФайла = ПолноеИмяФайла;
Если Диалог.Выбрать() Тогда
Результат = Диалог.ВыбранныеФайлы;
КонецЕсли;
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, Результат);
КонецПроцедуры
Процедура ПоказатьДиалогВыбораКаталога(ОписаниеОповещенияОЗавершении,
Заголовок = Неопределено,
Каталог = Неопределено,
МножественныйВыбор = Ложь) Экспорт
Результат = Неопределено;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Диалог.Заголовок = Заголовок;
Диалог.Каталог = Каталог;
Диалог.МножественныйВыбор = МножественныйВыбор;
Если Диалог.Выбрать() Тогда
Результат = Новый Массив;
Результат.Добавить(Диалог.Каталог);
КонецЕсли;
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, Результат);
КонецПроцедуры
Процедура ПоказатьДиалогВыбораФайла(ОписаниеОповещенияОЗавершении, РежимРаботы, ПараметрыВыбора) Экспорт
Результат = Неопределено;
Диалог = Новый ДиалогВыбораФайла(РежимРаботы);
ЗаполнитьЗначенияСвойств(Диалог, ПараметрыВыбора);
Если Диалог.Выбрать() Тогда
Результат = Диалог.ВыбранныеФайлы;
КонецЕсли;
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, Результат);
КонецПроцедуры
Процедура ПоказатьВводДатыПереопределенная(ОписаниеОповещенияОЗавершении,
ВыбраннаяДата = "",
Подсказка = "",
ЧастьДаты = Неопределено) Экспорт
ВыбраноЗначение = ВвестиДату(ВыбраннаяДата, Подсказка, ЧастьДаты);
Если ВыбраноЗначение Тогда
Результат = ВыбраннаяДата;
Иначе
Результат = Неопределено;
КонецЕсли;
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, Результат);
КонецПроцедуры
Процедура ПоказатьДиалогВыбораИзСписка(СписокЗначений,
ОписаниеОповещенияОЗавершении,
Форма,
ЭлементФормы,
Значение = Неопределено) Экспорт
НачальноеЗначение = СписокЗначений.НайтиПоЗначению(Значение);
ВыбранноеЗначение = Форма.ВыбратьИзСписка(СписокЗначений, ЭлементФормы, НачальноеЗначение);
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, ВыбранноеЗначение);
КонецПроцедуры
Функция Форма_ПрогрессВыполнения()
Если ФормаПрогресса = Неопределено Тогда
ФормаПрогресса = ПолучитьФормуОбработки("ИндикацияПрогрессаОбработкиДанных", ЭтаФорма);
КонецЕсли;
Возврат ФормаПрогресса;
КонецФункции
Процедура Форма_ПоказатьВыборИзМеню(Форма,
ОписаниеОповещенияОЗавершении,
СписокЗначений,
ЭлементФормы = Неопределено,
НачальноеЗначение = Неопределено) Экспорт
ВыбранноеЗначение = Форма.ВыбратьИзМеню(СписокЗначений, ЭлементФормы);
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗавершении, ВыбранноеЗначение);
КонецПроцедуры
Процедура ВывестиСообщениеПользователю(Текст) Экспорт
Сообщить(Текст);
КонецПроцедуры
Процедура ПоказатьОтметкуЭлементов(СписокЗначений, ОписаниеОповещенияОЗакрытии, Заголовок) Экспорт
Результат = Неопределено;
Если СписокЗначений.ОтметитьЭлементы(Заголовок) Тогда
Результат = СписокЗначений;
КонецЕсли;
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОЗакрытии, Результат);
КонецПроцедуры
Функция ПараметрыФормыВвода() Экспорт
Результат = Новый Структура;
Результат.Вставить("Заголовок", "");
Результат.Вставить("ТекстСообщения", "");
Результат.Вставить("ТекстКнопкиВыполнить", "");
Результат.Вставить("ВозможноПустоеЗначение", Истина);
Результат.Вставить("ДлинаПоляВвода", Неопределено);
Результат.Вставить("РежимПароля", Ложь);
Результат.Вставить("ИдентификаторыДокумента", Неопределено);
Результат.Вставить("Действие", "");
Результат.Вставить("ИдентификаторЯщика", "");
Результат.Вставить("ГрупповоеДействие", Ложь);
Результат.Вставить("КатегорияМетрикиДокумента", "");
Результат.Вставить("КонтрагентПоддерживаетМЧД", Истина);
Возврат Результат;
КонецФункции
//} МЕТОДЫ ИНТЕРАКТИВНОЙ РАБОТЫ
//{ ОСНОВНЫЕ СОБЫТИЯ ФОРМЫ
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ИдентификаторФормы = Новый УникальныйИдентификатор;
КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор;
ЭлементыФормы.ПанельОкончанияОплаченногоПериода.Свертка = РежимСверткиЭлементаУправления.Верх;
ЭлементыФормы.ПанельБаннерЛогистики.Свертка = РежимСверткиЭлементаУправления.Верх;
ЭлементыФормы.ПанельОценкаРаботыСМодулем.Свертка = РежимСверткиЭлементаУправления.Верх;
ЭлементыФормы.РазделительПанелиОценки.Свертка = РежимСверткиЭлементаУправления.Верх;
ЭтоПервыйЗапуск = (СохраненныеНастройкиГлавнойФормы() = Неопределено);
КонецПроцедуры
Процедура ПриОткрытии()
ВключитьДекорациюДлительнойОперации();
УстановитьЗаголовокФормы();
ЗапуститьЗагрузкуМодуля();
КонецПроцедуры
Процедура ЗапуститьЗагрузкуМодуля()
Интервал = 0.1;
Однократно = Истина;
ПодключитьОбработчикОжидания(
"ОперацииЗапускаМодуля",
Интервал,
Однократно
);
КонецПроцедуры
Процедура ОперацииЗапускаМодуля() Экспорт
Отказ = Ложь;
ПоказатьИндикаторДлительнойОперации();
ОбновитьНадписьДекорацииДлительнойОперации();
ИнициализироватьОсновнойМодуль();
ВыполнитьОбновлениеМодуля(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ДлительныеОперации_ЗапуститьМиграциюПлагиновV3V4();
ДлительныеОперации_ЗапуститьЗаданиеОбновлениеПлагинов(Отказ);
ОбработатьЭкстренныеУведомления();
ОпределитьСистемуХранения(Отказ);
ЗапуститьОбновленнуюВерсиюМодуля();
УстановитьНастройкиФормы();
ОбновитьНадписьДекорацииДлительнойОперации();
МетрикиКонтур_ЗаписатьМетрику_Запуск();
ПроверитьСоединениеССерверомДиадок();
КонецПроцедуры
Процедура ИнициализироватьОсновнойМодуль()
Ядро = Модуль_Ядро();
СохраненнаяВерсияПриЗапуске = Ядро.ЗначениеНастройки_СохраненнаяВерсияМодуля();
ЕстьСистемаХранения = СистемаХраненияОпределена();
КонецПроцедуры
Процедура ВыполнитьОбновлениеМодуля(Отказ)
Ядро = Модуль_Ядро();
ДвоичныеДанныеКонфигурационногоФайла = ДвоичныеДанныеКонфигурационногоФайла();
Если ДвоичныеДанныеКонфигурационногоФайла <> Неопределено Тогда
Ядро.КонфигурационныйФайл_ЗагрузитьПараметры(ДвоичныеДанныеКонфигурационногоФайла);
КонецЕсли;
ПодготовитьДанныеДляОбновленияМодуля();
ДвоичныеДанные = ДвоичныеДанныеМодуля();
Ядро.ОбновлениеМодуля_ПроверитьУстановитьПризнакМодульДоработан(
ДвоичныеДанные,
ДанныеДляОбновленияМодуля.ОписаниеРасположенияМодуля.Местоположение);
ДополнитьДанныеДляОбновленияМодуля();
ОбновитьМодульАвтоматически(Отказ);
КонецПроцедуры
Процедура ОбработатьЭкстренныеУведомления()
ЕстьУведомления = ПроверитьНаличиеУведомленийНаСервере();
Если ЕстьУведомления Тогда
ПоказатьУведомленияПриЗапуске();
Иначе
ИнтервалОжидания = 0.1;
ВыполнитьОднократно = Истина;
ПодключитьОбработчикОжидания("ОбработчикПослеОткрытияФормы", ИнтервалОжидания, ВыполнитьОднократно);
КонецЕсли;
КонецПроцедуры
//&НаСервере
Функция ПроверитьНаличиеУведомленийНаСервере()
СостояниеУведомленийПользователя = ПолучитьСостояниеУведомлений();
ВозможныеСостоянияУведомлений = Перечисление_СостоянияУведомленийПользователя();
УстановитьОформлениеКнопкиУведомления(СостояниеУведомленийПользователя);
Результат = СостояниеУведомленийПользователя <> ВозможныеСостоянияУведомлений.НетУведомлений;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ПоказатьУведомленияПриЗапуске()
ОписаниеОповещения = НовыйОписаниеОповещения("ПослеЗакрытияФормыУведомленияПользователя", ЭтаФорма);
Платформа = Модуль_Платформа();
Платформа.Уведомления_ОсновнаяФорма(ЭтаФорма, ОписаниеОповещения);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьУведомления()
Платформа = Модуль_Платформа();
Платформа.Уведомления_ОсновнаяФорма(ЭтаФорма);
КонецПроцедуры
Процедура УстановитьОформлениеКнопкиУведомления(СостояниеУведомленийПользователя)
ВозможныеСостоянияУведомлений = Перечисление_СостоянияУведомленийПользователя();
Если СостояниеУведомленийПользователя = ВозможныеСостоянияУведомлений.ЕстьВажныеНеПрочитанные Тогда
ЦветФонаКнопки = ЦветКнопкиЕстьВажныеНепрочитанные();
ИначеЕсли СостояниеУведомленийПользователя = ВозможныеСостоянияУведомлений.ЕстьНеПрочитанные Тогда
ЦветФонаКнопки = ЦветКнопкиЕстьНепрочитанные();
Иначе
ЦветФонаКнопки = ЦветКнопкиПоУмолчанию();
КонецЕсли;
ЭлементыФормы.ОткрытьУведомления.ЦветФонаКнопки = ЦветФонаКнопки;
КнопкаУведомлений = ЭлементыФормы.ОткрытьУведомления;
КонецПроцедуры
Функция ЦветКнопкиПоУмолчанию()
Результат = Новый Цвет(243, 243, 243);
Возврат Результат;
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция ЦветКнопкиЕстьВажныеНепрочитанные()
Результат = Новый Цвет(237, 125, 125);
Возврат Результат;
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция ЦветКнопкиЕстьНепрочитанные()
Результат = Новый Цвет(250, 227, 143);
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ПослеЗакрытияФормыУведомленияПользователя(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
УстановитьОформлениеКнопкиУведомления(РезультатЗакрытия);
ИнтервалОжидания = 0.1;
ВыполнитьОднократно = Истина;
ПодключитьОбработчикОжидания("ОбработчикПослеОткрытияФормы", ИнтервалОжидания, ВыполнитьОднократно);
КонецПроцедуры
// Для ОФ не используется
//
Процедура ОбработчикПослеОткрытияФормы()
КонецПроцедуры
//&НаСервере
Функция ПолучитьСостояниеУведомлений()
Модуль_Ядро = Модуль_Ядро();
Результат = Модуль_Ядро.УведомленияОсновнойФормы_ТекущееСостояние();
Возврат Результат;
КонецФункции
//&НаСервере
Функция Перечисление_СостоянияУведомленийПользователя()
Модуль_Ядро = Модуль_Ядро();
Результат = Модуль_Ядро.Перечисление_СостоянияУведомленийПользователя();
Возврат Результат;
КонецФункции
Процедура ОткрытьУведомленияНажатие(Элемент)
Метрики_ЗаписатьНажатие_ОткрытьУведомления();
ПоказатьУведомленияПриЗапуске();
Метрики_ЗаписатьСтатистику_ОткрытьУведомления();
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьНажатие_ОткрытьУведомления()
КатегорияМетрики = Метрика_НазваниеКатегории().ЭкстренноеУведомление;
ДействиеМетрики = Метрика_ДействиеПоказатьУведомления();
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьСтатистику_ОткрытьУведомления()
КатегорияМетрики = Метрика_НазваниеКатегории().ЭкстренноеУведомление;
ДействиеМетрики = Метрика_ДействиеПоказатьУведомления();
Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Функция Метрика_ДействиеПоказатьУведомления()
Возврат "ПоказатьУведомленияОсновнойФормы";
КонецФункции
Процедура МетрикиКонтур_ЗаписатьМетрику_Запуск()
Если ЭтоПервыйЗапуск Тогда
Ядро = Модуль_Ядро();
Ядро.МетрикиКонтур_ЗаписатьСобытие_Запуск();
КонецЕсли;
КонецПроцедуры
Процедура ОпределитьСистемуХранения(Отказ)
Если ЕстьСистемаХранения Тогда
Возврат;
КонецЕсли;
ОткрытьФормуДиадокМодально("НастройкаХраненияДанных", ЭтаФорма);
Отказ = Истина;
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьСтатистику_СистемнаяИнформация();
КонецПроцедуры
Процедура ЗапуститьОбновленнуюВерсиюМодуля()
УстановитьНовуюВерсиюМодуля();
МодульБылОбновлен = ДанныеДляОбновленияМодуля.МодульБылОбновлен;
Если МодульБылОбновлен Тогда
УведомитьПользователяОбУспешномАвтообновлении();
КонецЕсли;
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьСтатистику_СистемнаяИнформация();
КонецПроцедуры
Процедура УстановитьНастройкиФормы()
Ядро = Модуль_Ядро();
ИспользуетсяПодсистемаДиадок = ОбщийКонтекстКлиентСервер.ИспользуетсяПодсистемаДиадок;
ЗаполнитьФормуИзСохраненныхНастроек();
ЗаполнитьНастройкиПериодаПриЗапуске();
УстановитьВидимостьКнопок();
НастроитьФорму();
ПроверитьУстановкуОграниченияТипаВОтборах();
УстановитьЗаголовокКнопкиПериода();
УстановитьПредставлениеТекущегоПользователяДиадок(ЭтаФорма);
ПрочитатьНастройкуИспользоватьСопоставлениеПодразделений();
ИнициализироватьНастройкуИВидимостьКнопкиЛентыКонтрагентов();
ИнициализироватьНастройку_НеПоказыватьОнбордингЛентыКонтрагентов();
Ядро.Метрика_ДобавитьПоведение_ДействиеСФормой(Метрика_НазваниеФормы(), "Инициализация модуля");
КонецПроцедуры
//&НаСервере
Процедура ИнициализироватьНастройку_НеПоказыватьОнбордингЛентыКонтрагентов()
ОбработкаОбъект = ОбработкаОбъект();
// BSLLS:UnusedLocalVariable-off
// BSLLS:Typo-off
ПоказыватьОнбордингЛентыКонтрагентов =
НЕ ОбработкаОбъект.НастройкиПользователяПрочитать_НеПоказыватьОнбордингЛентыКонтрагентов();
// BSLLS:Typo-on
// BSLLS:UnusedLocalVariable-on
КонецПроцедуры
Процедура ПриЗакрытии()
СохранитьНастройкиФормы();
Модуль_Ядро().Метрика_ДобавитьСтатистику_ИспользованиеПМ();
Модуль_Ядро().Метрика_ДобавитьПоведение_ДействиеСФормой(Метрика_НазваниеФормы(), "Инициализация модуля", Ложь);
Модуль_Ядро().ЗавершитьРаботуЯдра();
ЗавершитьРаботуМодуля();
// Чтобы обработка не "зависала" в кэше, необходимо почистить ссылки на все формы.
ФормаПрогресса = Неопределено;
КонецПроцедуры
Функция ДвоичныеДанныеМодуля()
Если НЕ ЕстьСистемаХранения Тогда
Возврат Неопределено;
КонецЕсли;
ОписаниеРасположенияМодуля = ЭтотОбъект.ОбщийКонтекстКлиентСервер.РасположениеМодуля;
Если НЕ ЗначениеЗаполнено(ОписаниеРасположенияМодуля) Тогда
Возврат Неопределено;
КонецЕсли;
Перечисление_МестоположенияМодуля = Модуль_Ядро().Перечисление_МестоположенияМодуля();
Если ОписаниеРасположенияМодуля.РасположениеМодуля = Перечисление_МестоположенияМодуля.ЭлементСправочника Тогда
Результат = ОписаниеРасположенияМодуля.ИмяФайлаМодуля;
ИначеЕсли ОписаниеРасположенияМодуля.РасположениеМодуля = Перечисление_МестоположенияМодуля.ФайлНаДиске Тогда
Результат = Модуль_Ядро().ДвоичныеДанныеФайла(ОписаниеРасположенияМодуля.ИмяФайлаМодуля);
Иначе
Результат = Неопределено;
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ДвоичныеДанныеКонфигурационногоФайла()
Результат = Неопределено;
Модуль_Ядро = Модуль_Ядро();
ПутьКФайлу = Модуль_Ядро.КонфигурационныйФайл_Путь(ПараметрЗапуска);
Если ЗначениеЗаполнено(ПутьКФайлу) Тогда
Результат = Модуль_Ядро.ДвоичныеДанныеФайла(ПутьКФайлу);
Если Результат = Неопределено Тогда
Ошибка = Модуль_Ядро.Общее_ПодставитьПараметрыВСтроку("Конфигурационный файл не найден (%1)!", ПутьКФайлу);
_ОбработатьОшибку("ЧтениеКонфигурационногоФайла", Ошибка);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура НастроитьФорму()
ТипПоляОрганизации = Модуль_Ядро().Справочники_ТипЗначенияОбъекта("Организации");
ТипПоляКонтрагенты = Модуль_Ядро().Справочники_ТипЗначенияОбъекта("Контрагенты");
ИмяСправочника = СтрЗаменить(ТипПоляОрганизации, "СправочникСсылка.", "");
Если Метаданные.Справочники.Найти(ИмяСправочника) <> Неопределено Тогда
Элементы.ОтборПоОрганизации.ОграничениеТипа = Новый ОписаниеТипов(ТипПоляОрганизации);
КонецЕсли;
ИмяСправочника = СтрЗаменить(ТипПоляКонтрагенты, "СправочникСсылка.", "");
Если Метаданные.Справочники.Найти(ИмяСправочника) <> Неопределено Тогда
Элементы.ОтборПоКонтрагенту.ОграничениеТипа = Новый ОписаниеТипов(ТипПоляКонтрагенты);
КонецЕсли;
ОтборПоОрганизации = Модуль_Ядро().Справочники_ПустаяСсылкаСправочника("Организации");
ОтборПоКонтрагенту = Модуль_Ядро().Справочники_ПустаяСсылкаСправочника("Контрагенты");
ИнициализироватьНастройкиТематическогоПоздравления();
СвернутьСписокСобытий();
Попытка
ПараметрыПМ = Новый Структура("Форма, ИмяФормы", ЭтаФорма, "ОсновнаяФорма");
Модуль_Ядро().ПодключаемыйМодуль_ОбработатьСобытие("ПриОткрытииФормы", ПараметрыПМ);
Исключение
Сообщить("Не удалось выполнить событие ПМ при открытии формы!", СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
Функция ДоступнаНастройкаПоказыватьЧерновики()
Возврат Ложь;
КонецФункции
Процедура ИнициализироватьНастройкиТематическогоПоздравления()
ЗначенияФО = ОбщийКонтекстКлиентСервер.ФункциональныеОпции;
ЛендингНовыйГод = ЗначенияФО.Получить("happy_new_year_link");
Если Не ЗначениеЗаполнено(ЛендингНовыйГод)
Или ЛендингНовыйГод = "null" Тогда
Возврат;
КонецЕсли;
Модуль = ОбработкаОбъект();
ВсеКартинки = Модуль.БиблиотекаКартинок();
Элементы.ТематическаяКартинка.Подсказка = НСтр("ru='Нажми на подарок'");
Элементы.ТематическаяКартинка.Картинка = ВсеКартинки.КартинкаПодарочек;
Элементы.ТематическаяКартинка.Видимость = Истина;
Элементы.ТематическаяКартинка.Доступность = Истина;
КонецПроцедуры
//&НаКлиентеНаСервереБезКонтекста
Функция СтатусПоддержкиКонфигурации_КонфигурацияПоддерживается()
Возврат "Поддерживается";
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция СтатусПоддержкиКонфигурации_КонфигурацияНеПоддерживается()
Возврат "НеПоддерживается";
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция СтатусПоддержкиКонфигурации_КонфигурацияУстарела()
Возврат "Устарела";
КонецФункции
Процедура ЗаполнитьФормуИзСохраненныхНастроек()
НастройкиГлавнойФормы = СохраненныеНастройкиГлавнойФормы();
Модуль_Ядро = Модуль_Ядро();
ИспользоватьВнутреннийДокументооборот = Модуль_Ядро.ЗначениеНастройки_ИспользоватьВнутреннийДокументооборот();
РежимОтображенияПриЗапуске = СвойствоСтруктуры(НастройкиГлавнойФормы, "РежимОтображенияПриЗапуске");
НастройкаВыбораПериода = СвойствоСтруктуры(НастройкиГлавнойФормы, "НастройкаВыбораПериода");
РазмерСтраницы = СвойствоСтруктуры(НастройкиГлавнойФормы, "РазмерСтраницы");
НомерСтраницы = СвойствоСтруктуры(НастройкиГлавнойФормы, "НомерСтраницы");
ПоказыватьЗавершенные = СвойствоСтруктуры(НастройкиГлавнойФормы, "ПоказыватьЗавершенные");
Если НЕ ЗначениеЗаполнено(РежимОтображенияПриЗапуске) Тогда
РежимОтображенияПриЗапуске = РежимыОтображения().ДляОтправки;
КонецЕсли;
Если НЕ ИспользоватьВнутреннийДокументооборот
И РежимОтображенияПриЗапуске = РежимыОтображения().Внутренние Тогда
РежимОтображенияПриЗапуске = РежимыОтображения().ДляОтправки;
РежимОтображенияДокументов = РежимОтображенияПриЗапуске;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(РазмерСтраницы) Тогда
РазмерСтраницы = 500;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НомерСтраницы) Тогда
НомерСтраницы = 1;
КонецЕсли;
КонецПроцедуры
Функция СохраненныеНастройкиГлавнойФормы()
Результат = ХранилищеОбщихНастроек_Загрузить("НастройкиГлавнойФормы");
Возврат Результат;
КонецФункции
//&НаСервере
Процедура ЗаполнитьНастройкиПериодаПриЗапуске()
НастройкаВыбораПериода = НовыйНастройкаВыбораПериода();
СохраненныеНастройки = ПользовательскиеНастройкиПериодаПрочитать();
НастройкаВыбораПериода.РежимОтбораПоПериоду = СохраненныеНастройки.РежимОтбораПоПериоду;
Интервал = Новый СтандартныйПериод(СохраненныеНастройки.ВариантВыбораПериода);
НастройкаВыбораПериода.ДатаНачала = Интервал.ДатаНачала;
НастройкаВыбораПериода.ДатаОкончания = Интервал.ДатаОкончания;
КонецПроцедуры
//&НаСервере
Процедура УстановитьРежимОтбораПоПериоду(РежимОтображения)
Если РежимОтображения = РежимыОтображения().Перевозочные Тогда
НастройкаВыбораПериода.РежимОтбораПоПериоду = "ПоДатеДокумента";
Иначе
СохраненныеНастройки = ПользовательскиеНастройкиПериодаПрочитать();
НастройкаВыбораПериода.РежимОтбораПоПериоду = СохраненныеНастройки.РежимОтбораПоПериоду;
КонецЕсли;
КонецПроцедуры
//&НаСервере
Функция НовыйНастройкаВыбораПериода()
Результат = Новый Структура;
Результат.Вставить("РежимОтбораПоПериоду", Неопределено);
Результат.Вставить("ДатаНачала", Неопределено);
Результат.Вставить("ДатаОкончания", Неопределено);
Возврат Результат;
КонецФункции
Процедура СохранитьНастройкиФормы()
НастройкиГлавнойФормы = Новый Структура;
НастройкиГлавнойФормы.Вставить("РазмерСтраницы", РазмерСтраницы);
НастройкиГлавнойФормы.Вставить("НомерСтраницы", НомерСтраницы);
НастройкиГлавнойФормы.Вставить("НастройкаВыбораПериода", НастройкаВыбораПериода);
НастройкиГлавнойФормы.Вставить("РежимОтображенияПриЗапуске", РежимОтображенияПриЗапуске);
НастройкиГлавнойФормы.Вставить("ПоказыватьЗавершенные", ПоказыватьЗавершенные);
ХранилищеОбщихНастроек_Сохранить("НастройкиГлавнойФормы", НастройкиГлавнойФормы);
СохранитьВидимостьКолонок(РежимОтображенияДокументов);
КонецПроцедуры
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
ИсточникОповещения = ИдентификаторОсновнойФормы();
Если Не ЭтаФорма.Открыта()
ИЛИ ИсточникОповещения <> Источник Тогда
Возврат;
КонецЕсли;
Если ИмяСобытия = "Диадок_ОбновитьГлавныйСписок" Тогда
НовыйРежимОтображенияДокументов = Неопределено;
УстановитьЗаголовокФормы();
ОбновитьСписок(
НовыйРежимОтображенияДокументов,
Параметр
);
ИначеЕсли ИмяСобытия = "Диадок_ЗакрытиеФормыСпискаКонтрагентов" Тогда
ОбновитьКэшСопоставленныхКонтрагентов();
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ПроверитьНеобходимостьПереходаСПлагинаСчетВПакете()
Ядро = Модуль_Ядро();
ТребуетсяВыполнитьПереходСПлагина = Ядро.КонтурПлагины_СчетВПакете_ТребуетсяВыполнитьПереходСПлагина();
Если ТребуетсяВыполнитьПереходСПлагина Тогда
ПредложитьПользователюПерейтиСПлагинаСчетВПакете();
Иначе
ОбработчикПослеАвторизации();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ПредложитьПользователюПерейтиСПлагинаСчетВПакете()
ЗаголовокСообщения = НСтр("ru = 'Плагин ""Первичные документы и счет на оплату""'");
ТекстСообщения = НСтр("ru = 'Плагин ""Первичные документы и счет на оплату"" больше не поддерживается. '") +
НСтр("ru = 'Объединение счета реализовано в самом модуле.
|Воспользуйтесь кнопкой ""Продолжить"" для перехода с плагина на коробочное решение.
|
|Если в плагине использовались отборы по контрагентам, выполните индивидуальную настройку счетов. '") +
НСтр("ru = 'Подробнее смотрите по кнопке ""Инструкция"".'");
КнопкаПоУмолчанию = КодВозвратаДиалога.ОК;
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить(КнопкаПоУмолчанию, "Продолжить");
СписокКнопок.Добавить(КодВозвратаДиалога.Пропустить, "Инструкция");
СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, "Закрыть");
ОповещениеОЗавершении = НовыйОписаниеОповещения("ПослеЗакрытияПредложенияПерейтиСПлагинаСчетВПакете", ЭтаФорма);
ПоказатьВопросПереопределенная(ОповещениеОЗавершении, ТекстСообщения, СписокКнопок, , КнопкаПоУмолчанию, ЗаголовокСообщения);
КонецПроцедуры
//&НаКлиенте
Процедура ПослеЗакрытияПредложенияПерейтиСПлагинаСчетВПакете(Результат, ДополнительныеПараметры = Неопределено) Экспорт
КатегорияМетрики = "КонвертацияНастроекПлагинаСчетВПакете";
Ядро = Модуль_Ядро();
Если Результат = КодВозвратаДиалога.ОК Тогда
ДействиеМетрики = "Продолжить";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
КонвертацияВыполнена = Ядро.КонтурПлагины_СчетВПакете_ВыполнитьПереходСПлагина();
Если КонвертацияВыполнена Тогда
Сообщить(НСтр("ru = 'Настройки плагина успешно перенесены.'"));
КонецЕсли;
Иначе
Если Результат = КодВозвратаДиалога.Пропустить Тогда
ДействиеМетрики = "Инструкция";
ЗапуститьПриложение("https://support.kontur.ru/diadoc-1s8x/41609-plagin_pervichnye_dokumenty_i_schet_na_oplatu#header_43830_1");
Иначе
ДействиеМетрики = "Закрыть";
КонецЕсли;
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
КонецЕсли;
Если Результат = КодВозвратаДиалога.Пропустить Тогда
ПредложитьПользователюПерейтиСПлагинаСчетВПакете();
Иначе
ОбработчикПослеАвторизации();
КонецЕсли;
КонецПроцедуры
Процедура УстановитьВидимостьКнопок()
Модуль_Ядро = Модуль_Ядро();
ИспользоватьВнутреннийДокументооборот = Модуль_Ядро.ЗначениеНастройки_ИспользоватьВнутреннийДокументооборот();
ЭлементыФормы.ВыполнитьОбмен.Видимость = ИспользуетсяПодсистемаДиадок;
ЭлементыФормы.ВыбратьРежимВнутренние.Видимость = ИспользоватьВнутреннийДокументооборот;
Если НЕ ИспользуетсяПодсистемаДиадок Тогда
КнопкиДополнительныхДействий = ЭлементыФормы.КоманднаяПанельВходящие.Кнопки.ДополнительныеДействия.Кнопки;
КнопкиДополнительныхДействий.Удалить(КнопкиДополнительныхДействий.ВыполнитьПометитьДокументыКакЗавершенные);
КнопкиДополнительныхДействий.Удалить(КнопкиДополнительныхДействий.ВыполнитьРасшифроватьДокументы);
КонецЕсли;
Если РежимОтображенияДокументов = РежимыОтображения().Внутренние Тогда
КнопкиДополнительныхДействий = ЭлементыФормы.КоманднаяПанельВнутренние.Кнопки.ДополнительныеДействия.Кнопки;
КнопкиДополнительныхДействий.Удалить(КнопкиДополнительныхДействий.ВыполнитьПометитьДокументыКакЗавершенные);
КнопкиДополнительныхДействий.Удалить(КнопкиДополнительныхДействий.ВыполнитьРасшифроватьДокументы);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ПроверитьУстановкуОграниченияТипаВОтборах()
ИменаОтсутствующихСправочников = Новый Массив;
Если Не ЗначениеЗаполнено(Элементы.ОтборПоОрганизации.ОграничениеТипа) Тогда
ИменаОтсутствующихСправочников.Добавить("Организации");
КонецЕсли;
Если Не ЗначениеЗаполнено(Элементы.ОтборПоКонтрагенту.ОграничениеТипа) Тогда
ИменаОтсутствующихСправочников.Добавить("Контрагенты");
КонецЕсли;
Если ИменаОтсутствующихСправочников.Количество() > 0 Тогда
// Типовой справочник в конфигурации не был найден - требуется переопределение имени справочника в ПМ.
ШаблонСообщения = НСтр("ru = 'В текущей конфигурации отсутствует справочник ""%1"". Необходимо переопределить имя данного справочника в событии ПМ ""ОпределитьТипЗначенияОбъекта""'");
Для Каждого ИмяСправочника Из ИменаОтсутствующихСправочников Цикл
ТекстСообщения = Модуль_Ядро().Общее_ПодставитьПараметрыВСтроку(ШаблонСообщения, ИмяСправочника);
ВывестиСообщениеПользователю(ТекстСообщения);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ПроверитьСоединениеССерверомДиадок()
Ядро = Модуль_Ядро();
СоединениеУстановлено = Ядро.АПИ_ПроверитьСоединениеDiadocAPI();
ОписаниеОповещения = НовыйОписаниеОповещения("ПроверитьСоединениеССерверомДиадокЗавершение", ЭтаФорма);
Если СоединениеУстановлено Тогда
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения, СоединениеУстановлено);
Иначе
ОткрытьФормуДиадокМодально("ОшибкаСоединенияССерверомДиадок", ЭтаФорма, , ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСоединениеССерверомДиадокЗавершение(Результат, ДополнительныеПараметры = Неопределено) Экспорт
Если Результат <> Истина Тогда
Возврат;
КонецЕсли;
ОбновитьНадписьДекорацииДлительнойОперации();
ПриНачалеСеанса = НовыйОписаниеОповещения(
"ПослеЗакрытияФормыАвторизации",
ЭтаФорма
);
Платформа = Модуль_Платформа();
Платформа.Сеанс_Начать(ПриНачалеСеанса);
КонецПроцедуры
//} ОСНОВНЫЕ СОБЫТИЯ ФОРМЫ
// { ОБРАБОТЧИКИ ПОСЛЕ АВТОРИЗАЦИИ
//&НаКлиенте
Процедура ПослеВыбораИнтеграционногоМодуля(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
ЗакрытьГлавнуюФорму();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуВыбораИнтеграционногоМодуляКонфигурацияНеПоддерживается()
ОповещениеОЗакрытииФормы = НовыйОписаниеОповещения("ПослеВыбораИнтеграционногоМодуля", ЭтаФорма);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Сценарий", "НеподдерживаемаяКонфигурация");
ОткрытьФормуДиадокМодально(
"ФормаВыбораИМ",
ЭтаФорма,
ДополнительныеПараметры,
ОповещениеОЗакрытииФормы,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуВыбораИнтеграционногоМодуляКонфигурацияУстарела()
ОповещениеОЗакрытииФормы = НовыйОписаниеОповещения("ПослеВыбораИнтеграционногоМодуля", ЭтаФорма);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Сценарий", "УстаревшаяКонфигурация");
ОткрытьФормуДиадокМодально(
"ФормаВыбораИМ",
ЭтаФорма,
ДополнительныеПараметры,
ОповещениеОЗакрытииФормы,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецПроцедуры
Процедура ОбработчикПослеАвторизации()
ОбновитьНадписьДекорацииДлительнойОперации();
Ядро = Модуль_Ядро();
ПроверитьОбновитьТипыДокументов(СохраненнаяВерсияПриЗапуске);
ТаблицаТипов = Ядро.ПредопределенныеСписки_ТипыДокументовAPI();
Для Каждого СтрокаТЗ Из ТаблицаТипов Цикл
ПредставлениеТиповДокументов.Вставить(СтрокаТЗ.TypeNamedId, СтрокаТЗ.Title);
КонецЦикла;
ОбновитьНадписьДекорацииДлительнойОперации();
НовыйРежимОтображенияДокументов = Неопределено;
ОтборПоПакету = Неопределено;
КоличествоДокументов = 0;
ОбновитьСписок(
НовыйРежимОтображенияДокументов,
ОтборПоПакету,
КоличествоДокументов
);
ОбновитьНадписьДекорацииДлительнойОперации();
УстановитьЗаголовокКнопкиПериода();
УстановитьПредставлениеТекущегоПользователяДиадок(ЭтаФорма);
ПоказатьКнопкуСкачатьОбновление();
НастроитьВидимостьКнопкиНастроекДоверенности();
ОбновитьНадписьДекорацииДлительнойОперации();
НачатьПроверкуОшибокКЭП();
НачатьПроверкуОшибкокМЧДПоУмолчанию();
ОтключитьДекорациюДлительнойОперацииОтложенно();
КонецПроцедуры
//&НаСервереБезКонтекста
Функция СинонимКонфигурации()
Возврат Метаданные.Синоним;
КонецФункции
Процедура ПоказатьКнопкуСкачатьОбновление()
ГруппаТехподдержка = Элементы.ГруппаТехподдержка;
Если ЕстьНоваяВерсияМодуля Тогда
ДобавитьКнопкуСкачатьОбновление(ГруппаТехподдержка);
Иначе
УдалитьКнопкуСкачатьОбновление(ГруппаТехподдержка);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьКнопкуСкачатьОбновление(ГруппаТехподдержка)
ПоложениеСправа = ГруппаТехподдержка.Лево + ГруппаТехподдержка.Ширина;
ШиринаКнопки = 140;
ГруппаТехподдержка.ЦветФонаКнопки = Новый Цвет(250, 227, 143);
ГруппаТехподдержка.Заголовок = "Обновите модуль";
ГруппаТехподдержка.Лево = ПоложениеСправа - ШиринаКнопки;
ГруппаТехподдержка.Ширина = ШиринаКнопки;
КнопкиГруппыНастроек = ГруппаТехподдержка.Кнопки;
КнопкаСкачатьОбновление = КнопкиГруппыНастроек.Найти("КнопкаСкачатьОбновление");
Если КнопкаСкачатьОбновление = Неопределено Тогда
КоллекцияКартинок = Модуль_Ядро().БиблиотекаКартинок();
ИмяКнопкиСкачатьОбновление = "КнопкаСкачатьОбновление";
ТипКнопкиСкачатьОбновление = ТипКнопкиКоманднойПанели.Действие;
СинонимКнопкиСкачатьОбновление = НСтр("ru = 'Скачать обновление модуля'");
ДействиеКнопкиСкачатьОбновление = Новый Действие("КнопкаСкачатьОбновлениеНажатие");
Элемент = КнопкиГруппыНастроек.Добавить(
ИмяКнопкиСкачатьОбновление,
ТипКнопкиСкачатьОбновление,
СинонимКнопкиСкачатьОбновление,
ДействиеКнопкиСкачатьОбновление
);
Элемент.Картинка = КоллекцияКартинок.КартинкаСкачатьЧерная;
КнопкиГруппыНастроек.Сдвинуть(Элемент, -13);
КонецЕсли;
КонецПроцедуры
Процедура УдалитьКнопкуСкачатьОбновление(ГруппаТехподдержка)
ПоложениеСправа = ГруппаТехподдержка.Лево + ГруппаТехподдержка.Ширина;
ШиринаКнопки = 40;
ГруппаТехподдержка.ЦветФонаКнопки = Новый Цвет(243, 243, 243);
ГруппаТехподдержка.Заголовок = "";
ГруппаТехподдержка.Ширина = ШиринаКнопки;
ГруппаТехподдержка.Лево = ПоложениеСправа - ШиринаКнопки;
КнопкиГруппыНастроек = ГруппаТехподдержка.Кнопки;
КнопкаСкачатьОбновление = КнопкиГруппыНастроек.Найти("КнопкаСкачатьОбновление");
Если КнопкаСкачатьОбновление <> Неопределено Тогда
КнопкиГруппыНастроек.Удалить(КнопкаСкачатьОбновление);
КонецЕсли;
КонецПроцедуры
Процедура НастроитьВидимостьКнопкиНастроекДоверенности()
ВидимостьКнопки = ЕстьЯщикДляДействийСДокументамиВКоторомНужнаМЧД();
Если ВидимостьКнопки Тогда
ДобавитьКнопкуДоверенностиВМенюНастроек();
Иначе
УдалитьКнопкуДоверенностиИзМенюНастроек();
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьКнопкуДоверенностиВМенюНастроек()
ИмяКнопки = "ОткрытьСписокДоверенностей";
КнопкиМенюНастроек = Элементы.ГруппаНастроек.Кнопки;
КнопкаДоверенности = КнопкиМенюНастроек.Найти(ИмяКнопки);
Если КнопкаДоверенности = Неопределено Тогда
КоллекцияКартинок = Модуль_Ядро().БиблиотекаКартинок();
КнопкаДоверенности = КнопкиМенюНастроек.Добавить(
ИмяКнопки,
ТипКнопкиКоманднойПанели.Действие,
"Доверенности",
Новый Действие("ОткрытьСписокДоверенностей"));
КнопкаДоверенности.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
КнопкаДоверенности.Картинка = КоллекцияКартинок.КартинкаДокументЧерная;
КнопкаКонтрагенты = КнопкиМенюНастроек.Найти("ОткрытьСписокКонтрагентов");
Если КнопкаКонтрагенты <> Неопределено Тогда
ИндексКнопкиКонтрагенты = КнопкиМенюНастроек.Индекс(КнопкаКонтрагенты);
ТекущийИндексКнопкиДоверенности = КнопкиМенюНастроек.Индекс(КнопкаДоверенности);
СмещениеКнопкиДоверенности = ИндексКнопкиКонтрагенты + 1 - ТекущийИндексКнопкиДоверенности;
КнопкиМенюНастроек.Сдвинуть(КнопкаДоверенности, СмещениеКнопкиДоверенности);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура УдалитьКнопкуДоверенностиИзМенюНастроек()
ИмяКнопки = "ОткрытьСписокДоверенностей";
КнопкиМенюНастроек = Элементы.ГруппаНастроек.Кнопки;
КнопкаДоверенности = КнопкиМенюНастроек.Найти(ИмяКнопки);
Если КнопкаДоверенности <> Неопределено Тогда
КнопкиМенюНастроек.Удалить(КнопкаДоверенности);
КонецЕсли;
КонецПроцедуры
// } ОБРАБОТЧИКИ ПОСЛЕ АВТОРИЗАЦИИ
// { БЫСТРЫЕ ОТБОРЫ
//&НаКлиенте
Процедура ВключитьОтборПоОрганизацииПриИзменении(Элемент)
ОбновитьСписок();
КонецПроцедуры
//&НаКлиенте
Процедура ВключитьОтборПоКонтрагентуПриИзменении(Элемент)
ОбновитьСписок();
КонецПроцедуры
//&НаКлиенте
Процедура ОтборПоОрганизацииПриИзменении(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Организация";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ВключитьОтборПоОрганизации = ЗначениеЗаполнено(ОтборПоОрганизации);
Переменные = Новый Соответствие;
Переменные.Вставить("ВключенОтбор", ВключитьОтборПоОрганизации);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , Переменные);
ОбновитьСписок();
КонецПроцедуры
Процедура ОтборПоОрганизацииОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОчиститьЗначениеПоляОтбора(ОтборПоОрганизации);
ОтборПоОрганизацииПриИзменении(Элемент);
КонецПроцедуры
//&НаКлиенте
Процедура ОтборПоКонтрагентуПриИзменении(Элемент)
КонтрагентСопоставлен = КонтрагентСопоставлен();
Если КонтрагентСопоставлен Тогда
ОбновитьОтборПоКонтрагенту();
Иначе
ПредложитьСопоставитьКонтрагента();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОбновитьОтборПоКонтрагенту()
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Контрагенты";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ВключитьОтборПоКонтрагенту = ЗначениеЗаполнено(ОтборПоКонтрагенту);
Переменные = Новый Соответствие;
Переменные.Вставить("ВключенОтбор", ВключитьОтборПоКонтрагенту);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , Переменные);
ОбновитьСписок();
КонецПроцедуры
Процедура ОтборПоКонтрагентуОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОчиститьЗначениеПоляОтбора(ОтборПоКонтрагенту);
ОтборПоКонтрагентуПриИзменении(Элемент);
КонецПроцедуры
//&НаКлиенте
Процедура ВключитьОтборПоСтатусуПриИзменении(Элемент)
ОбновитьСписок();
КонецПроцедуры
//&НаКлиенте
Процедура ВключитьОтборПоВидуПакетаПриИзменении(Элемент)
ОбновитьСписок();
КонецПроцедуры
//&НаКлиенте
Процедура ОтборПоСтатусуПриИзменении(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Статус";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ВключитьОтборПоСтатусу = ЗначениеЗаполнено(ОтборПоСтатусу);
Переменные = Новый Соответствие;
Переменные.Вставить("ВключенОтбор", ВключитьОтборПоСтатусу);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , Переменные);
ОбновитьСписок();
КонецПроцедуры
Процедура ОтборПоСтатусуОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтборПоСтатусу = "";
ОтборПоСтатусуПриИзменении(Элемент);
КонецПроцедуры
//&НаКлиенте
Процедура ОтборПоВидуПакетаПриИзменении(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Вид пакета";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ВключитьОтборПоВидуПакета = ЗначениеЗаполнено(ОтборПоВидуПакета);
Переменные = Новый Соответствие;
Переменные.Вставить("ВключенОтбор", ВключитьОтборПоВидуПакета);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , Переменные);
ОбновитьСписок();
КонецПроцедуры
Процедура ОтборПоВидуПакетаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтборПоВидуПакета = "";
ОтборПоВидуПакетаПриИзменении(Элемент);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказыватьЗавершенныеПриИзменении(Элемент)
ОбновитьСписок();
КонецПроцедуры
Процедура ОчиститьЗначениеПоляОтбора(ЗначениеОтбора)
ТипЗначения = ТипЗнч(ЗначениеОтбора);
КоллекцияТипов = Новый Массив;
КоллекцияТипов.Добавить(ТипЗначения);
ОписаниеТипов = Новый ОписаниеТипов(КоллекцияТипов);
ЗначениеОтбора = ОписаниеТипов.ПривестиЗначение();
КонецПроцедуры
// } БЫСТРЫЕ ОТБОРЫ
// { СОПОСТАВЛЕНИЕ КОНТРАГЕНТА
//&НаКлиенте
Функция КонтрагентСопоставлен()
Результат = Истина;
Если ЗначениеЗаполнено(ОтборПоКонтрагенту) Тогда
Результат = КонтрагентСопоставленНаСервере();
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаСервере
Функция КонтрагентСопоставленНаСервере()
Результат = Модуль_Ядро().Контрагенты_КонтрагентСопоставленСЯщикомДиадок(ОтборПоКонтрагенту);
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ПредложитьСопоставитьКонтрагента()
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "ПоказатьФормуКонтрагентНеСопоставлен";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ОписаниеЗакрытияФормы = НовыйОписаниеОповещения(
"ОбработатьРезультатПредложенияСопоставленияКонтрагента",
ЭтаФорма
);
ОткрытьФормуДиадокМодально(
"ФормаВыбранныйКонтрагентНеСопоставлен",
ЭтаФорма,
,
ОписаниеЗакрытияФормы
);
КонецПроцедуры
Процедура ОбработатьРезультатПредложенияСопоставленияКонтрагента(РезультатПредложения, ДополнительныеПараметры) Экспорт
Если РезультатПредложения = КодВозвратаДиалога.Да Тогда
ОписаниеЗакрытияФормы = НовыйОписаниеОповещения(
"ОбработатьРезультатСопоставленияКонтрагента",
ЭтаФорма
);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОрганизацияИБ", ОтборПоОрганизации);
ПараметрыФормы.Вставить("КонтрагентИБ", ОтборПоКонтрагенту);
мОткрытьФорму("Контрагенты_ФормаСопоставления", ПараметрыФормы, ОписаниеЗакрытияФормы, ЭтаФорма);
ИначеЕсли РезультатПредложения = КодВозвратаДиалога.Прервать Тогда
ОчиститьЗначениеПоляОтбора(ОтборПоКонтрагенту);
Иначе
ОбновитьОтборПоКонтрагенту();
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьРезультатСопоставленияКонтрагента(РезультатСопоставления, ДополнительныеПараметры) Экспорт
Если РезультатСопоставления = КодВозвратаДиалога.Да Тогда
ОбновитьОтборПоКонтрагенту();
ОбновитьКэшСопоставленныхКонтрагентов();
Иначе
ОчиститьЗначениеПоляОтбора(ОтборПоКонтрагенту);
Метрики_ЗаписатьПоведение_ЗакрытьСопоставление();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьПоведение_ЗакрытьСопоставление()
НазваниеФормы = "Упрощенная форма контрагентов";
КатегорияМетрики = Метрика_НазваниеКатегории().Закрытие;
ДействиеМетрики = "Закрыть";
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НазваниеФормы,
КатегорияМетрики,
ДействиеМетрики
);
КонецПроцедуры
// } СОПОСТАВЛЕНИЕ КОНТРАГЕНТА
// { НАСТРОЙКИ
//&НаКлиенте
Процедура НастройкиИсходящих(Кнопка)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "НастройкиИсходящих";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("НастройкиИсходящих");
КонецПроцедуры
//&НаКлиенте
Процедура НастройкиВходящих(Кнопка)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "НастройкиВходящих";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("НастройкиВходящих");
КонецПроцедуры
//&НаКлиенте
Процедура НастройкиПодключаемыйМодуль(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Подключаемый модуль";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("ПодключаемыйМодуль");
КонецПроцедуры
//&НаКлиенте
Процедура НастройкиСервисныеФункции(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Сервисные функции";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("СервисныеФункции");
КонецПроцедуры
//&НаКлиенте
Процедура НастройкиСкачиваниеДокументов(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Скачивание документов";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("СкачиваниеДокументов");
КонецПроцедуры
//&НаКлиенте
Процедура НастройкиСоединениеССервером(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Соединение с сервером";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("СоединениеССервером");
КонецПроцедуры
Процедура ОткрытьНастройки(РазделНастроек)
ДопПараметры = Новый Структура;
ДопПараметры.Вставить("РазделНастроек", РазделНастроек);
ОповещениеОЗакрытииНастроек = НовыйОписаниеОповещения("ОповещениеоЗакрытииФормыНастроек", ЭтаФорма, ДопПараметры);
ОткрытьФормуДиадокМодально("Настройки", ЭтаФорма, ДопПараметры, ОповещениеОЗакрытииНастроек);
КонецПроцедуры
Процедура ОповещениеоЗакрытииФормыНастроек(Параметры, ДополнительныеПараметры) Экспорт
Если НЕ ЗначениеЗаполнено(Параметры) Тогда
Возврат;
КонецЕсли;
Если Параметры.ПерезапуститьМодуль Тогда
ЗакрытьГлавнуюФорму();
Возврат;
КонецЕсли;
Если Параметры.НастройкиИзменены Тогда
ОбновитьЗначенияПараметровОбщегоКонтекста();
ОповещениеОЗакрытииФормыНастроекВызовСервера();
ОбновитьСписок();
КонецЕсли;
КонецПроцедуры
Процедура ОповещениеОЗакрытииФормыНастроекВызовСервера()
УстановитьЗаголовокФормы();
ПрочитатьНастройкуИспользоватьСопоставлениеПодразделений();
ПереключитьВидимостьКолонок(РежимОтображенияДокументов);
УправлениеПМ_ВыгрузитьВСервис();
КонецПроцедуры
//&НаСервере
Процедура ПрочитатьНастройкуИспользоватьСопоставлениеПодразделений()
Ядро = Модуль_Ядро();
ИспользоватьСопоставлениеПодразделений = Ядро.ЗначениеНастройки_ИспользоватьСопоставлениеПодразделений();
КонецПроцедуры
Процедура ЗакрытьГлавнуюФорму()
Закрыть();
КонецПроцедуры
Процедура ОткрытьСлужебныеСообщения(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Служебные сообщения";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьФормуСпискаОшибок();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьСписокОрганизаций(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Организации";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
мОткрытьФорму("Организации_ФормаСписка");
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьСписокКонтрагентов(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Контрагенты";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьСписокКонтрагентовЗавершение();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьПоискНовыхКонтрагентов(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = "Контрагенты";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьПоискНовыхКонтрагентовЗавершение();
КонецПроцедуры
Функция Организации_СписокОрганизацийДляВыбора(ДобавитьНеоплаченные = Ложь)
Модуль_Ядро = Модуль_Ядро();
Результат = Модуль_Ядро.Организации_СписокОрганизацийДляВыбора(ДобавитьНеоплаченные);
Возврат Результат;
КонецФункции
Функция Организации_ИдентификаторПоССылке(ОрганизацияИБ)
Модуль_Ядро = Модуль_Ядро();
Результат = Модуль_Ядро.Организации_ИдентификаторПоССылке(ОрганизацияИБ);
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ОткрытьФормуСпискаКонтрагентовМодально() Экспорт
ОткрытьСписокКонтрагентовЗавершение();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьСписокКонтрагентовЗавершение()
Организация = ПолучитьОрганизациюДляОткрытияСпискаКонтрагентов();
Если НЕ ЗначениеЗаполнено(Организация) Тогда
ТекстПредупреждения = НСтр("ru = 'Список организаций пуст!'");
ПоказатьПредупреждениеПереопределенная(Неопределено, ТекстПредупреждения);
Возврат;
КонецЕсли;
Платформа = Модуль_Платформа();
Платформа.Контрагенты_ПоказатьСписокКонтрагентов(Организация, Истина);
ПоказатьПлашкуОтзываПоРаботеСКонтрагентами();
КонецПроцедуры
//&НаКлиенте
Функция ПолучитьОрганизациюДляОткрытияСпискаКонтрагентов()
Результат = Неопределено;
Если ЗначениеЗаполнено(ОтборПоОрганизации) Тогда
ИДОрганизации = Организации_ИдентификаторПоССылке(ОтборПоОрганизации);
Если ЗначениеЗаполнено(ИДОрганизации) Тогда
Результат = ИДОрганизации;
Возврат Результат;
КонецЕсли;
КонецЕсли;
СписокОрганизаций = Организации_СписокОрганизацийДляВыбора();
Если СписокОрганизаций.Количество() > 0 Тогда
Результат = СписокОрганизаций[0].Значение;
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ОткрытьПоискНовыхКонтрагентовЗавершение()
Организация = ПолучитьОрганизациюДляОткрытияСпискаКонтрагентов();
Если НЕ ЗначениеЗаполнено(Организация) Тогда
ТекстПредупреждения = НСтр("ru = 'Список организаций пуст!'");
ПоказатьПредупреждениеПереопределенная(Неопределено, ТекстПредупреждения);
Возврат;
КонецЕсли;
Платформа = Модуль_Платформа();
Платформа.Контрагенты_ПоказатьФормуПоискаИПриглашения(Организация, Истина);
ПоказатьПлашкуОтзываПоРаботеСКонтрагентами();
КонецПроцедуры
// Открывает список контрагентов в режиме выбора значения
//
// Параметры:
// Организация - Строка - Идентификатор организации (BoxId)
// ПараметрВладелец - ФормаКлиентскогоПриложения - (Необязательный) форма-владелец
// ОповеститьОЗакрытии - Булево - (Необязательный) указывает нужно ли вызывать оповещение, при закрытии формы
// ОбработчикЗакрытия - ОписаниеОповещения - (Необязательный) описание оповещения о закрытии формы
//
Процедура Контрагенты_ВыбратьКонтрагента(Организация = Неопределено, Знач ПараметрВладелец = Неопределено,
ОповеститьОЗакрытии = Ложь, ОбработчикЗакрытия = Неопределено) Экспорт
РежимСпискаКА = "ВашиКонтрагенты";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОтборПоОрганизации", Организация);
ПараметрыФормы.Вставить("ТекущийРежимСписка", РежимСпискаКА);
ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ПараметрыФормы.Вставить("РежимВыбораИзСписка", Истина);
ПараметрыФормы.Вставить("ОповеститьОЗакрытии", ОповеститьОЗакрытии);
КлючУникальностиФормы = РежимСпискаКА;
ИмяФормыСпискаКА = "Контрагенты_ФормаСпискаV2";
Если ПараметрВладелец = Неопределено Тогда
ПараметрВладелец = ЭтаФорма;
КонецЕсли;
мОткрытьФорму(
ИмяФормыСпискаКА,
ПараметрыФормы,
ОбработчикЗакрытия,
ПараметрВладелец,
КлючУникальностиФормы
);
КонецПроцедуры
Процедура ПодключаемыйМодуль_НачатьВыборФайла(ОписаниеОповещения) Экспорт
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("Фильтр", "Внешняя обработка 1С:Предприятия 8 (*.epf)|*.epf");
ПараметрыВыбора.Вставить("Заголовок", "Выберите файл подключаемого модуля");
ПараметрыВыбора.Вставить("МножественныйВыбор", Ложь);
ПоказатьДиалогВыбораФайла(
ОписаниеОповещения,
РежимДиалогаВыбораФайла.Открытие,
ПараметрыВыбора
);
КонецПроцедуры
Процедура ПодключаемыйМодуль_НачатьВыборВстроеннойОбработки(ОписаниеОповещения, ТекущееЗначение = Неопределено) Экспорт
Список = ВстроенныеОбработки();
ПоказатьВыборЭлемента(
Список,
ОписаниеОповещения,
"Выберите встроенную обработку",
ТекущееЗначение
);
КонецПроцедуры
Функция ВстроенныеОбработки()
Список = Новый СписокЗначений;
Для Каждого Обработка Из Метаданные.Обработки Цикл
Список.Добавить(Обработка.Имя);
КонецЦикла;
Возврат Список;
КонецФункции
// Открывает форму предупреждения
//
// Параметры:
// ТекстПредупреждения - Строка - Текст предупреждения пользователя
// Комментарий - Строка - Дополнительный комментарий
// Заголовок - Строка - Заголовок формы предупреждения
// ОбработчикЗакрытия - ОписаниеОповещения - обработчик оповещения о закрытии
//
Процедура ОткрытьФормуПредупреждения(ТекстПредупреждения, Комментарий = Неопределено, Заголовок = Неопределено, ОбработчикЗакрытия = Неопределено) Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТекстПредупреждения", ТекстПредупреждения);
ПараметрыФормы.Вставить("Комментарий", Комментарий);
ПараметрыФормы.Вставить("Заголовок", Заголовок);
ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ИмяФормыПредупреждения = "ФормаПредупреждения";
ПараметрВладелец = ОсновнаяФорма();
мОткрытьФорму(
ИмяФормыПредупреждения,
ПараметрыФормы,
ОбработчикЗакрытия,
ПараметрВладелец
);
КонецПроцедуры
// Открывает форму списка плагинов (менеджер или библиотека КонтурПлагины по флагу)
//
// Параметры:
// Команда - КомандаФормы - команда формы (не используется, для совместимости).
//
//&НаКлиенте
Процедура ОткрытьСписокПлагинов(Команда)
КатегорияМетрики = Метрика_КатегорияНастройка();
ДействиеМетрики = Метрика_ДействиеОткрытьСписокПлагинов();
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Платформа = Модуль_Платформа();
Платформа.Плагины_ПоказатьСписок();
КонецПроцедуры
//&НаКлиенте
Процедура СброситьНастройкиОтборов()
ОбщийКонтекстКлиентСервер.АдресаСКД.Очистить();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьФормуАвторизации()
ПриИзмененииКонтекстаСеанса = НовыйОписаниеОповещения("ПослеЗакрытияФормыАвторизации", ЭтаФорма);
Платформа = Модуль_Платформа();
Платформа.Сеанс_РедактироватьКонтекст(ПриИзмененииКонтекстаСеанса);
КонецПроцедуры
//&НаКлиенте
Процедура ПослеЗакрытияФормыАвторизации(НовыйКонтекст, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(КонтекстСеансаКлиентСервер)
И Не ЗначениеЗаполнено(НовыйКонтекст) Тогда
ПоказатьКнопкуСкачатьОбновление();
ПоказатьИндикаторПредупреждения();
КонецЕсли;
Если Не ЗначениеЗаполнено(НовыйКонтекст) Тогда
ПоказатьПлашкуОтзываПоРаботеСАвторизацией();
Возврат;
КонецЕсли;
УстановитьКонтекстФормы(ЭтаФорма, НовыйКонтекст);
Модуль_Платформа().ПараметрыСеансаОбновитьКонтекст(НовыйКонтекст);
ВыполнитьДействияНаСервереПослеАвторизации();
ОбработчикПродолжения = НовыйОписаниеОповещения("АвторизацияЗавершение", ЭтаФорма);
Если ПоказатьПредупреждениеОПроблемахСПоддержкой() Тогда
Возврат;
КонецЕсли;
Если НеобходимоОткрытиеМастераПервогоЗапуска Тогда
Платформа = Модуль_Платформа();
Платформа.ПоказатьМастерПервогоЗапуска(ОбработчикПродолжения);
Иначе
ВыполнитьОбработкуОповещенияПереопределенная(
ОбработчикПродолжения,
НовыйКонтекст
);
КонецЕсли;
УстановитьПредставлениеТекущегоПользователяДиадок(ЭтаФорма);
Метрика_ОтображениеБаннераЛогистики();
КонецПроцедуры
Процедура УстановитьКонтекстФормы(Форма, Знач КонтекстСеанса)
Если Не ЗначениеЗаполнено(КонтекстСеанса) Тогда
КонтекстСеанса = Новый Соответствие;
КонецЕсли;
КонтекстСеансаКлиентСервер = ФиксированныеДанныеЛок(КонтекстСеанса);
ЕстьСертификаты = Ложь;
Буфер = Новый Соответствие;
Для Каждого ЭлементКоллекции Из КонтекстСеансаКлиентСервер Цикл
СтрокаКонтекста = ЭлементКоллекции.Значение;
Если НЕ СтрокаКонтекста.ТребуетсяОплатаСервиса Тогда
Буфер.Вставить(СтрокаКонтекста.Box.BoxIdGuid, СтрокаКонтекста.ОрганизацияНаименование);
КонецЕсли;
ЕстьСертификаты = ЕстьСертификаты Или ЗначениеЗаполнено(СтрокаКонтекста.ОтпечатокСертификата);
КонецЦикла;
ЯщикиНеТребующиеОплаты = ФиксированныеДанныеЛок(Буфер);
КонецПроцедуры
//&НаКлиенте
Процедура АвторизацияЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПроверитьНеобходимостьПереходаСПлагинаСчетВПакете();
Справка_ПоказатьПриПервомЗапуске();
УправлениеПМ_ВыгрузитьВСервис();
КонецПроцедуры
//&НаСервере
Процедура ВыполнитьДействияНаСервереПослеАвторизации()
МодульЯдро = Модуль_Ядро();
ЕстьОграниченияПоТарифу = МодульЯдро.ЕстьОграниченияПоТарифу();
ПодключенИМИлиПМ = МодульЯдро.ЕстьИнтеграционныйИлиПодключаемыйМодуль();
СтрокиКонтекста = МодульЯдро.КонтекстСеанса_СтрокиКонтекста();
НеобходимоОткрытиеМастераПервогоЗапуска = (СтрокиКонтекста.Количество() > 0);
Если МодульЯдро.КонфигурацияНеПоддерживается() Тогда
СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияНеПоддерживается();
ИначеЕсли МодульЯдро.КонфигурацияУстарела() Тогда
СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияУстарела();
Иначе
СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияПоддерживается();
КонецЕсли;
Для Каждого СтрокаКонтекста Из СтрокиКонтекста Цикл
КонтекстЯщика = СтрокаКонтекста.Значение;
Идентификаторы = МодульЯдро.Новый_ИдентификаторыСправочника( , КонтекстЯщика.BoxId);
Организация1С = МодульЯдро.ХранениеДанных_СопоставленнаяОрганизацияВ1С(Идентификаторы);
Если ЗначениеЗаполнено(Организация1С) Тогда
НеобходимоОткрытиеМастераПервогоЗапуска = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
МодульЯдро.ОблачныеНастройки_ДополнитьОбщийКонтекст();
МодульЯдро.ОблачныеНастройки_ОбработатьНастройки();
МодульЯдро.МетрикиКонтур_ЗаписатьСобытие_Авторизация();
ОбработатьНаличиеПредложенийДляПокупки();
УстановитьВидимостьЭлементовДляЛогистики();
ОбработатьНастройкуИспользованияПлагиновПослеАвторизации();
НастроитьИнтерфейсЛентыКонтрагентов();
КонецПроцедуры
//&НаКлиенте
Функция ПоказатьПредупреждениеОПроблемахСПоддержкой()
СтатусПоддержкиПроблема =
СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияНеПоддерживается()
ИЛИ СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияУстарела();
Если ЕстьОграниченияПоТарифу
И СтатусПоддержкиПроблема Тогда
ПоказатьПредупреждениеКонфигурацияНеДоступнаНаТарифеСтартовом();
Возврат Истина;
КонецЕсли;
Если НЕ ПодключенИМИлиПМ
И СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияНеПоддерживается() Тогда
ПоказатьФормуВыбораИнтеграционногоМодуляКонфигурацияНеПоддерживается();
Возврат Истина;
КонецЕсли;
Если НЕ ПодключенИМИлиПМ
И СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияУстарела() Тогда
ПоказатьФормуВыбораИнтеграционногоМодуляКонфигурацияУстарела();
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
//&НаКлиенте
Процедура ПоказатьПредупреждениеКонфигурацияНеДоступнаНаТарифеСтартовом()
Если СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияНеПоддерживается() Тогда
ПредставлениеКонфигурации = СинонимКонфигурации();
ТекстСообщения = НСтр(
"ru = 'Тариф ""Стартовый"" не предусматривает работу на конфигурации
|" + ПредставлениеКонфигурации + "
|Для продолжения работы перейдите на тариф ""Универсальный"".'");
КонецЕсли;
Если СтатусПоддержкиКонфигурации = СтатусПоддержкиКонфигурации_КонфигурацияУстарела() Тогда
ВерсияСовместимости = МинимальнаяВерсияПоддерживаемойКонфигурации();
ТекстСообщения = НСтр(
"ru = 'Тариф ""Стартовый"" не поддерживает работу на версиях
|конфигурации ниже " + ВерсияСовместимости + ". Для продолжения работы обновите
|конфигурацию до актуальной версии или перейдите на тариф
|""Универсальный"".'");
КонецЕсли;
Метрика_ПоказатьПредупреждениеОНеДоступностиКонфигурацииНаТарифе();
ПоказатьПредупреждениеОНеДоступнойКонфигурацииТарифа(ТекстСообщения);
КонецПроцедуры
//&НаСервере
Функция МинимальнаяВерсияПоддерживаемойКонфигурации()
МодульЯдро = Модуль_Ядро();
Результат = МодульЯдро.МинимальнаяВерсияПоддерживаемойКонфигурации();
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ПоказатьПредупреждениеОНеДоступнойКонфигурацииТарифа(ТекстСообщения) Экспорт
ЗаголовокСообщения = "";
КнопкаПоУмолчанию = КодВозвратаДиалога.Отмена;
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить(КодВозвратаДиалога.ОК, "Узнать подробнее");
СписокКнопок.Добавить(КнопкаПоУмолчанию, "Вернуться к выбору организаций");
ИмяОбработчикаПослеВызоваВопроса = "ПослеВызоваПредупрежденияОНеДоступнойКонфигурацииТарифа";
Таймаут = 0;
ОповещениеОЗавершении = НовыйОписаниеОповещения(
ИмяОбработчикаПослеВызоваВопроса,
ЭтаФорма
);
ПоказатьВопросПереопределенная(
ОповещениеОЗавершении,
ТекстСообщения,
СписокКнопок,
Таймаут,
КнопкаПоУмолчанию,
ЗаголовокСообщения);
КонецПроцедуры
//&НаКлиенте
Процедура ПослеВызоваПредупрежденияОНеДоступнойКонфигурацииТарифа(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.ОК Тогда
Метрика_УзнатьПодробнееОНеДоступностиКонфигурацииНаТарифе();
АдресСсылки = "https://promo.diadoc.ru/tariff-universal";
ПерейтиПоСсылке(АдресСсылки);
ПоказатьПредупреждениеКонфигурацияНеДоступнаНаТарифеСтартовом();
Иначе
Метрика_ЗаписатьВернутьсяКВыборуОрганизаций();
ОткрытьФормуАвторизации();
КонецЕсли;
КонецПроцедуры
Процедура ОткрытьФормуСпискаОшибок(ФормаВыполнения = Неопределено, ОписаниеОповещения = Неопределено) Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Режим", "СписокОшибок");
Если ФормаВыполнения = Неопределено Тогда
ФормаВыполнения = ЭтаФорма;
КонецЕсли;
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ФормаВыполнения,
ПараметрыФормы,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецПроцедуры
Процедура ОткрытьФормуHTMLСообщения(ТекстСообщения, ЗаголовокФормы, ДополнительныеПараметры = Неопределено, ФормаВыполнения = Неопределено, ОписаниеОповещения = Неопределено) Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТекстСообщения", ТекстСообщения);
ПараметрыФормы.Вставить("ЗаголовокФормы", ЗаголовокФормы);
мОткрытьФорму("ФормаHTMLСообщения", ПараметрыФормы, ОписаниеОповещения, ФормаВыполнения);
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьСписокДоверенностей(Команда) Экспорт
ОткрытьФормуСпискаДоверенностей();
КонецПроцедуры
Процедура ОткрытьФормуСпискаДоверенностей(ИдентификаторЯщика = Неопределено) Экспорт
ПараметрыФормы = Новый Структура;
Если ЗначениеЗаполнено(ИдентификаторЯщика) Тогда
ПараметрыФормы.Вставить("ИдентификаторЯщика", ИдентификаторЯщика);
ИначеЕсли ЗначениеЗаполнено(ОтборПоОрганизации) Тогда
ИдентификаторЯщика = Организации_ИдентификаторПоССылке(ОтборПоОрганизации);
Если ЗначениеЗаполнено(ИдентификаторЯщика) Тогда
ПараметрыФормы.Вставить("ИдентификаторЯщика", ИдентификаторЯщика);
КонецЕсли;
Иначе
ПараметрыФормы.Вставить("ИдентификаторЯщика", "");
КонецЕсли;
ОткрытьФормуДиадокМодально("МЧД_ФормаСписка",
ЭтаФорма, ПараметрыФормы, , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
// } НАСТРОЙКИ
// { ТЕХПОДДЕРЖКА
//&НаКлиенте
Процедура ОткрытьБыструюНастройку(Кнопка)
КатегорияМетрики = Метрика_НазваниеКатегории().БыстраяНастройка;
ДействиеМетрики = "Мастер первого запуска";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
Платформа = Модуль_Платформа();
Платформа.ЗапуститьНастройкуОрганизации();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьРуководствоПользователя(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Руководство пользователя";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ЗапуститьПриложение("https://support.kontur.ru/pages/viewpage.action?pageId=83865676");
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьИсториюОбновлений(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "История обновлений";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, "Открытие формы", ДействиеМетрики);
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстОбновлений = ИсторияОбновлений();
ТекстовыйДокумент.УстановитьТекст(ТекстОбновлений);
ТекстовыйДокумент.ТолькоПросмотр = Истина;
ТекстовыйДокумент.Показать("История обновлений");
КонецПроцедуры
//&НаКлиенте
Процедура ПровестиДиагностику(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Провести диагностику";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ЗапуститьПриложение("https://help.kontur.ru/diadoc");
КонецПроцедуры
//&НаКлиенте
Процедура ДистанционнаяПомощь(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Дистанционная помощь VNC";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ЗапуститьПриложение("https://help.kontur.ru/vnc");
КонецПроцедуры
//&НаКлиенте
Процедура ТелефонТехподдержки(Команда)
// BSLLS:DeprecatedMessage-off
Сообщить("Телефон поддержки 8-800-500-10-18");
// BSLLS:DeprecatedMessage-on
КонецПроцедуры
//&НаКлиенте
Процедура ЗаказатьОбратныйЗвонок(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Заказать обратный звонок";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ЗапуститьПриложение("https://www.diadoc.ru/support#callback");
КонецПроцедуры
// Открывает окно выбора ораганизации и затем - страницу Центра поддержки
//
// Параметры:
// КатегорияМетрики - Строка, Неопределено - категоря метрики
// НазваниеФормы - Строка, Неопределено - Название формы для записи TraceId
// РежимОткрытияЦП - Строка, Неопределено - см Ядро.ЦП_РежимыОткрытияЦП()
//
Процедура ЦентрПоддержки_Открыть(Знач КатегорияМетрики = Неопределено, Знач НазваниеФормы = Неопределено, РежимОткрытияЦП = Неопределено) Экспорт
Если НЕ ЗначениеЗаполнено(КатегорияМетрики) Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НазваниеФормы) Тогда
НазваниеФормы = Метрика_НазваниеФормы();
КонецЕсли;
ДействиеМетрики = Метрика_НазваниеДействий().ЗадатьВопросОнлайнКонсультанту;
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(НазваниеФормы, КатегорияМетрики, ДействиеМетрики);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("КатегорияМетрики" , КатегорияМетрики);
ДополнительныеПараметры.Вставить("РежимОткрытияЦП" , РежимОткрытияЦП);
ОбработкаВыбораОрганизации = НовыйОписаниеОповещения(
"ОткрытьЦентрПоддержкиПродолжение",
ЭтаФорма,
ДополнительныеПараметры
);
ПоказатьПредупреждениеПриПустомСписке = Ложь;
ВыбратьОрганизациюДляОбращения(
ОбработкаВыбораОрганизации,
ПоказатьПредупреждениеПриПустомСписке
);
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьЦентрПоддержки(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ЦентрПоддержки_Открыть(КатегорияМетрики);
КонецПроцедуры
Процедура НаписатьВТехподдержку(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Написать письмо в техподдержку";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Обработчик_ОтправитьEmail();
КонецПроцедуры
Процедура ОткрытьТехническуюИнформацию(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Техническая информация";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ПараметрыФормы = Новый Структура;
Если ЗначениеЗаполнено(ОтборПоОрганизации) Тогда
ИдентификаторЯщика = Организации_ИдентификаторПоССылке(ОтборПоОрганизации);
Если ЗначениеЗаполнено(ИдентификаторЯщика) Тогда
ПараметрыФормы.Вставить("ОтборПоОрганизации", ИдентификаторЯщика);
КонецЕсли;
КонецЕсли;
ОткрытьФормуДиадокМодально("ФормаТехническаяИнформация", ЭтаФорма, ПараметрыФормы);
КонецПроцедуры
//&НаКлиенте
Функция РежимПрокси(Настройки)
Если Настройки.РежимПрокси = "NoProxy" Тогда
Результат= "без прокси";
ИначеЕсли Настройки.РежимПрокси = "UseDefaultProxy" Тогда
Результат = "использовать системные настройки";
Иначе
Результат = "использовать настройки прокси";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ЛогинДляОбмена(Настройки)
Если ЗначениеЗаполнено(Настройки.СлужебнаяУчетнаяЗаписьЛогин) Тогда
Результат = Настройки.СлужебнаяУчетнаяЗаписьЛогин;
Иначе
Результат = "не заполнен";
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура Обработчик_ОтправитьEmail(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
ОбработкаВыбораОрганизации = НовыйОписаниеОповещения("ОтправитьEmailПродолжение", ЭтаФорма, ДополнительныеПараметры);
ВыбратьОрганизациюДляОбращения(ОбработкаВыбораОрганизации);
КонецПроцедуры
// Обработчик оповещения. Продолжает метод ЦентрПоддержки_Открыть()
//
// Параметры:
// ВыбранныйЭлемент - ЭлементСпискаЗначений, Неопределено - выбранная организация, см. ВыбратьОрганизациюДляОбращения()
// ДополнительныеПараметры - Структура
//
Функция ОткрытьЦентрПоддержкиПродолжение(ВыбранныйЭлемент = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
КатегорияМетрики = ДополнительныеПараметры.КатегорияМетрики;
РежимОткрытияЦП = ДополнительныеПараметры.РежимОткрытияЦП;
Если ВыбранныйЭлемент = Неопределено
ИЛИ НЕ ЗначениеЗаполнено(ВыбранныйЭлемент.Значение) Тогда
BoxId = "";
Иначе
BoxId = ВыбранныйЭлемент.Значение;
КонецЕсли;
ПараметрыИнициализации = ЦП_НовыйПараметрыОткрытияСессии(BoxId, РежимОткрытияЦП);
МодульЯдро = Модуль_Ядро();
РаботаСHTTP = МодульЯдро;
РаботаСJson = МодульЯдро;
Модуль_ЦП = МодульЯдро.Модуль_ЦентрПоддержки(ЭтаФорма);
Модуль_ЦП.Инит(
ПараметрыИнициализации.ИмяИнтеграции,
РаботаСHTTP,
РаботаСJson,
ПараметрыИнициализации.ТестовоеОкружение
);
ПараметрыСессии = Модуль_ЦП.МодельПараметрыСессии();
ПараметрыСессии.ИНН = ПараметрыИнициализации.ИНН;
ПараметрыСессии.КПП = ПараметрыИнициализации.КПП;
ПараметрыСессии.Организация = ПараметрыИнициализации.Организация;
ПараметрыСессии.Логин = ПараметрыИнициализации.Логин;
ПараметрыСессии.ИмяПользователя = ПараметрыИнициализации.ИмяПользователя;
ПараметрыСессии.ДополнительныеПараметры = ПараметрыИнициализации.ДополнительныеПараметры;
ОписаниеФайла = Модуль_ЦП.МодельФайла();
ОписаниеФайла.Данные = ПараметрыИнициализации.ВложениеДвоичныеДанные;
ОписаниеФайла.ИмяФайла = ПараметрыИнициализации.ВложениеИмяФайла;
ПараметрыСессии.Файлы.Добавить(ОписаниеФайла);
БраузерОткрылся = Ложь;
МодульПоддержки = "Главная";
Результат = Модуль_ЦП.ОткрытьЦентрПоддержки(
ПараметрыСессии,
МодульПоддержки,
БраузерОткрылся);
Если НЕ ЗначениеЗаполнено(КатегорияМетрики) Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
КонецЕсли;
ДействиеМетрики = Метрика_НазваниеДействий().ЗадатьВопросОнлайнКонсультанту;
ПеременныеМетрики = Новый Структура;
ПеременныеМетрики.Вставить("БраузерОткрылся", БраузерОткрылся);
МодульЯдро.Метрика_ДобавитьСтатистику_ДляОрганизации(
BoxId,
КатегорияМетрики,
ДействиеМетрики,
,
ПеременныеМетрики);
Возврат Результат;
КонецФункции
Функция ТекстовоеПредставлениеТехническойИнформации(BoxId)
Ядро = Модуль_Ядро();
ТехИнфо = Ядро.ТехническаяИнформацияV2(BoxId);
Результат = Ядро.ТехническаяИнформацияКакТекст(ТехИнфо);
Возврат Результат;
КонецФункции
Процедура ОтправитьEmailПродолжение(ВыбранныйЭлемент = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
Если ВыбранныйЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыбранныйЭлемент.Значение) Тогда
// вызов из формы экстренного уведомления - авторизация не пройдена, и из формы авторизации
BoxId = "";
РеквизитыОрганизации = Новый Структура;
РеквизитыОрганизации.Вставить("Наименование", "");
РеквизитыОрганизации.Вставить("ИНН", "");
РеквизитыОрганизации.Вставить("КПП", "");
Иначе
BoxId = ВыбранныйЭлемент.Значение; // BoxId
РеквизитыОрганизации = Модуль_Ядро().РеквизитыОрганизацииИзКонтекста(BoxId);
КонецЕсли;
ИнформацияДляТехПоддержки = Новый ТекстовыйДокумент;
ИнформацияДляТехподдержки.ДобавитьСтроку("Описание проблемы:");
ИнформацияДляТехподдержки.ДобавитьСтроку("");
ИнформацияДляТехподдержки.ДобавитьСтроку("");
ИнформацияДляТехПоддержки.ДобавитьСтроку("----------------------------");
ВывестиИнформациюОбОрганизацииВТекстовыйДокумент(ИнформацияДляТехПоддержки, РеквизитыОрганизации);
ИнформацияДляТехПоддержки.ДобавитьСтроку("----------------------------");
ТехИнфоТекст = ТекстовоеПредставлениеТехническойИнформации(BoxId);
ИнформацияДляТехподдержки.ДобавитьСтроку(ТехИнфоТекст);
ПереводСтроки = "%0A";
ТелоПисьма = ПереводСтроки;
КоличествоСтрок = ИнформацияДляТехПоддержки.КоличествоСтрок();
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ТекСтрока = ИнформацияДляТехПоддержки.ПолучитьСтроку(НомерСтроки);
ТекСтрока = СтрЗаменить(ТекСтрока, "\" , "%2F");
ТекСтрока = СтрЗаменить(ТекСтрока, """" , "%22");
ТелоПисьма = ТелоПисьма + ПереводСтроки + ТекСтрока;
КонецЦикла;
Гиперссылка = "mailto:[кому]?subject=[тема]&body=[тело]";
Гиперссылка = СтрЗаменить(Гиперссылка, "[кому]", "diadoc@skbkontur.ru");
Гиперссылка = СтрЗаменить(Гиперссылка, "[тема]", "Диадок. Модуль 1С");
Гиперссылка = СтрЗаменить(Гиперссылка, "[тело]", ТелоПисьма);
ЗапуститьПриложение(Гиперссылка);
КатегорияМетрики = Метрика_НазваниеКатегории().Техподдержка;
ДействиеМетрики = "Написать письмо в техподдержку";
Модуль_Ядро().Метрика_ДобавитьСтатистику_ДляОрганизации(BoxId, КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
Процедура ВыбратьОрганизациюДляОбращения(ОписаниеОповещения, ПоказатьПредупреждениеПриПустомСписке = Истина)
СписокВыбора = Модуль_Ядро().Организации_СписокОрганизацийДляВыбора(Истина);
СписокПустой = СписокВыбора.Количество() = 0;
Если СписокПустой
И ПоказатьПредупреждениеПриПустомСписке Тогда
ТекстПредупреждения = НСтр("ru = 'Список организаций пуст!'");
ПоказатьПредупреждениеПереопределенная(Неопределено, ТекстПредупреждения, 60);
ИначеЕсли СписокПустой Тогда
ВыбранныйЭлемент = Неопределено;
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения, ВыбранныйЭлемент);
ИначеЕсли СписокВыбора.Количество() = 1 Тогда
ВыбранныйЭлемент = СписокВыбора[0];
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения, ВыбранныйЭлемент);
Иначе
ЗаголовокВыбораОрганизации = НСтр("ru = 'Выберите организацию, от которой идет обращение'");
ПоказатьВыборЭлемента(СписокВыбора, ОписаниеОповещения, ЗаголовокВыбораОрганизации);
КонецЕсли;
КонецПроцедуры
// Добавляет в текстовый документ сведения об организации:
// Наименование, ИНН, КПП
//
// Параметры:
// ТекстовыйДокумент - ТекстовыйДокумент - заполняемый текстовый документ
Процедура ВывестиИнформациюОбОрганизацииВТекстовыйДокумент(ТекстовыйДокумент, РеквизитыОрганизации)
ТекстовыйДокумент.ДобавитьСтроку("Организация: " + РеквизитыОрганизации.Наименование);
ТекстовыйДокумент.ДобавитьСтроку("ИНН: " + РеквизитыОрганизации.ИНН);
ТекстовыйДокумент.ДобавитьСтроку("КПП: " + РеквизитыОрганизации.КПП);
КонецПроцедуры
// Обертка для формирования ключей параметров, передаваемых в URL
//&НаКлиенте
Функция ПродуктовыйПараметр(ИмяПараметра)
Возврат СтрЗаменить("scope/1CDiadoc/%ИмяПараметра%", "%ИмяПараметра%", ИмяПараметра);
КонецФункции
// Обертка для формирования ключей параметров, передаваемых в URL
//&НаКлиенте
Функция БазовыйПараметр(ИмяПараметра)
Возврат СтрЗаменить("base/%ИмяПараметра%", "%ИмяПараметра%", ИмяПараметра);
КонецФункции
// Преобразует коллекцию элементов КлючИЗначение в строку параметров URI
//
// Параметры:
// КоллекцияПараметров - Структура - коллекция элементов КлючИЗначение
//
// Возвращаемое значение:
// Строка - строка параметров в формате ?paramName1=paramValue1¶mName2=paramValue2&...¶mNameN=paramValueN
//&НаКлиентеНаСервереБезКонтекста
Функция СтруктуруВСтрокуПараметровURI(КоллекцияПараметров)
Результат = "";
Для Каждого Параметр Из КоллекцияПараметров Цикл
Если Не ЗначениеЗаполнено(Параметр.Значение) Тогда
Продолжить;
КонецЕсли;
Результат = Результат
+ "" + Параметр.Ключ
+ "=" + СокрЛП(Параметр.Значение)
+ "&";
КонецЦикла;
Если ЗначениеЗаполнено(Результат) Тогда
Результат = "?" + Лев(Результат, СтрДлина(Результат)-1);
КонецЕсли;
Возврат Результат;
КонецФункции
// Преобразует коллекцию элементов КлючИЗначение в строку, представляющую собой массив параметров URI
//
// Параметры:
// КоллекцияПараметров - Структура, Соответствие - коллекция элементов КлючИЗначение
//
// Возвращаемое значение:
// Строка - коллекция KeyValue в формате: {"key1":"value1","key2":"value2",...,"keyN":"valueN"}
//&НаКлиентеНаСервереБезКонтекста
Функция СтруктуруВКоллекциюПараметровURI(КоллекцияПараметров)
Результат = "";
Для Каждого Параметр Из КоллекцияПараметров Цикл
Если Не ЗначениеЗаполнено(Параметр.Значение) Тогда
Продолжить;
КонецЕсли;
Ключ = Параметр.Ключ;
Значение = СокрЛП(Параметр.Значение);
Значение = СтрЗаменить(Значение, "\" , "\\" ); // экранируем обратный слеш
Значение = СтрЗаменить(Значение, """", "\""" ); // экранируем кавычки
ПараметрСтрокой = """" + Ключ + """:""" + Значение + """";
Результат = Результат + ПараметрСтрокой + ",";
КонецЦикла;
Если ЗначениеЗаполнено(Результат) Тогда
Результат = Лев(Результат, СтрДлина(Результат)-1);
Результат = СтрЗаменить("{%Параметры%}", "%Параметры%", Результат);
КонецЕсли;
Возврат Результат;
КонецФункции
// } ТЕХПОДДЕРЖКА
// { ПОСТРАНИЧНЫЙ ПРОСМОТР СПИСКА
//&НаСервере
Процедура ОбновитьЗаголовокНомерСтраницы()
НовыйЗаголовок = Строка(НомерСтраницы) + " из " + Строка(КоличествоСтраниц);
Элементы.НомерСтраницы.Заголовок = НовыйЗаголовок;
КонецПроцедуры
//&НаСервере
Процедура ОбновитьКнопкиНавигацииПоСтраницам()
Элементы.ПерваяСтраница.Доступность = ?(НомерСтраницы > 1, Истина, Ложь);
Элементы.ПредыдущаяСтраница.Доступность = ?(НомерСтраницы > 1, Истина, Ложь);
Элементы.СледующаяСтраница.Доступность = ?(НомерСтраницы < КоличествоСтраниц, Истина, Ложь);
Элементы.ПоследняяСтраница.Доступность = ?(НомерСтраницы < КоличествоСтраниц, Истина, Ложь);
КонецПроцедуры
//&НаКлиенте
Процедура ПерваяСтраница(Команда)
НомерСтраницы = 1;
ОбновитьСтраницуСпискаДокументов();
КонецПроцедуры
//&НаКлиенте
Процедура ПредыдущаяСтраница(Команда)
НомерСтраницы = НомерСтраницы - 1;
ОбновитьСтраницуСпискаДокументов();
КонецПроцедуры
//&НаКлиенте
Процедура СледующаяСтраница(Команда)
НомерСтраницы = НомерСтраницы + 1;
ОбновитьСтраницуСпискаДокументов();
КонецПроцедуры
//&НаКлиенте
Процедура ПоследняяСтраница(Команда)
НомерСтраницы = КоличествоСтраниц;
ОбновитьСтраницуСпискаДокументов();
КонецПроцедуры
//&НаКлиенте
Процедура РазмерСтраницыПриИзменении(Элемент)
Если РазмерСтраницы = 0 Тогда
РазмерСтраницы = 1;
КонецЕсли;
КатегорияМетрики = Метрика_НазваниеКатегории().ПостраничныйПросмотр;
ДействиеМетрики = "Изменить показатель";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Переменные = Новый Соответствие;
Переменные.Вставить("Значение", РазмерСтраницы);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , Переменные);
ОбновитьСтраницуСпискаДокументов();
КонецПроцедуры
Процедура РазмерСтраницыНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СписокВыбора = СписокДокументов_СписокВыбораРазмераСтраницы();
ОписаниеОповещения = НовыйОписаниеОповещения("ОбработчикПослеВыбораИзМенюРазмераСтраницы", ЭтаФорма);
Форма_ПоказатьВыборИзМеню(ЭтаФорма, ОписаниеОповещения, СписокВыбора, Элемент);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработчикПослеВыбораИзМенюРазмераСтраницы(Результат, ДополнительныеПараметры = Неопределено) Экспорт
Если Результат <> Неопределено Тогда
РазмерСтраницы = Результат.Значение;
ОбновитьСтраницуСпискаДокументов();
КонецЕсли;
КонецПроцедуры
// } ПОСТРАНИЧНЫЙ ПРОСМОТР СПИСКА
// { ОСНОВНЫЕ ДЕЙСТВИЯ
//&НаКлиенте
Процедура ВыбратьРежимДляОтправки(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СменаВкладки;
ДействиеМетрики = "Для отправки";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ОбновитьКэшСопоставленныхКонтрагентов();
РежимОтображения = РежимыОтображения().ДляОтправки;
УстановитьРежимОтбораПоПериоду(РежимОтображения);
ОбновитьСписок(РежимОтображения);
КонецПроцедуры
Процедура ВыбратьРежимИсходящие(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СменаВкладки;
ДействиеМетрики = "Исходящие";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
Если НЕ ИспользуетсяПодсистемаДиадок Тогда
СформироватьИзвещенияОПолучении();
СформироватьОтменуФиксацииГИСМТ();
КонецЕсли;
РежимОтображения = РежимыОтображения().Исходящие;
УстановитьРежимОтбораПоПериоду(РежимОтображения);
ОбновитьСписок(РежимОтображения);
КонецПроцедуры
Процедура ВыбратьРежимВходящие(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СменаВкладки;
ДействиеМетрики = "Входящие";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
Если НЕ ИспользуетсяПодсистемаДиадок Тогда
СформироватьИзвещенияОПолучении();
КонецЕсли;
РежимОтображения = РежимыОтображения().Входящие;
УстановитьРежимОтбораПоПериоду(РежимОтображения);
ОбновитьСписок(РежимОтображения);
КонецПроцедуры
Процедура ВыбратьРежимВнутренние(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СменаВкладки;
ДействиеМетрики = "Внутренние";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
Если НЕ ИспользуетсяПодсистемаДиадок Тогда
СформироватьИзвещенияОПолучении();
СформироватьОтменуФиксацииГИСМТ();
КонецЕсли;
РежимОтображения = РежимыОтображения().Внутренние;
УстановитьРежимОтбораПоПериоду(РежимОтображения);
ОбновитьСписок(РежимОтображения);
КонецПроцедуры
Процедура УстановитьВидимостьОтбораПоСтатусу(РежимОтображения)
Если РежимОтображения <> РежимыОтображения().ДляОтправки Тогда
ЭлементыФормы.ВключитьОтборПоСтатусу.Видимость = Истина;
ЭлементыФормы.ОтборПоСтатусу.Видимость = Истина;
УстановитьОтборПоСтатусу(РежимОтображения);
ЭлементыФормы.ПанельОтборПоСтатусу.Свертка = РежимСверткиЭлементаУправления.Нет;
Иначе
ЭлементыФормы.ВключитьОтборПоСтатусу.Видимость = Ложь;
ЭлементыФормы.ОтборПоСтатусу.Видимость = Ложь;
ЭлементыФормы.ПанельОтборПоСтатусу.Свертка = РежимСверткиЭлементаУправления.Право;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьВидимостьОтбораПоКонтрагенту(РежимОтображения)
Если РежимОтображения <> РежимыОтображения().Внутренние Тогда
ЭлементыФормы.ВключитьОтборПоКонтрагенту.Видимость = Истина;
ЭлементыФормы.ОтборПоКонтрагенту.Видимость = Истина;
Иначе
ЭлементыФормы.ВключитьОтборПоКонтрагенту.Видимость = Ложь;
ЭлементыФормы.ОтборПоКонтрагенту.Видимость = Ложь;
ВключитьОтборПоКонтрагенту = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьВидимостьОтбораПоВидуПакета(РежимОтображения)
Если РежимОтображения = РежимыОтображения().ДляОтправки
ИЛИ РежимОтображения = РежимыОтображения().Перевозочные Тогда
ЭлементыФормы.ВключитьОтборПоВидуПакета.Видимость = Истина;
ЭлементыФормы.ОтборПоВидуПакета.Видимость = Истина;
УстановитьОтборПоВидуПакета(РежимОтображения);
Иначе
ЭлементыФормы.ВключитьОтборПоВидуПакета.Видимость = Ложь;
ЭлементыФормы.ОтборПоВидуПакета.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
//&НаСервере
Процедура УстановитьОтборПоСтатусу(РежимОтображения)
СписокВыбораСтатусов = Элементы.ОтборПоСтатусу.СписокВыбора;
Если ЗначениеЗаполнено(СписокВыбораСтатусов) Тогда
СписокВыбораСтатусов.Очистить();
КонецЕсли;
СписокЗначенийСтатусов = СписокЗначенийСтатусов(РежимОтображения);
Для Каждого Элемент Из СписокЗначенийСтатусов Цикл
СписокВыбораСтатусов.Добавить(Элемент.Значение);
КонецЦикла;
КонецПроцедуры
//&НаСервере
Процедура УстановитьОтборПоВидуПакета(РежимОтображения)
СписокВыбораВидовПакета = Элементы.ОтборПоВидуПакета.СписокВыбора;
Если ЗначениеЗаполнено(СписокВыбораВидовПакета) Тогда
СписокВыбораВидовПакета.Очистить();
КонецЕсли;
СписокЗначенийВидовПакета = СписокЗначенийВидовПакета(РежимОтображения);
Для Каждого Элемент Из СписокЗначенийВидовПакета Цикл
СписокВыбораВидовПакета.Добавить(Элемент.Значение, Элемент.Представление);
КонецЦикла;
КонецПроцедуры
//&НаКлиенте
Процедура ПредставлениеПользователяНажатие(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().ИнициализацияМодуля;
ДействиеМетрики = "Сменить пользователя";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ПоказатьИндикаторДлительнойОперации();
ОткрытьФормуАвторизации();
КонецПроцедуры
Процедура ВыделениеДокументов(Элемент)
УстановитьФлажки = ЕстьВыбранныеСтрокиСпискаДокументов();
ОбработатьВыделениеДокументов(УстановитьФлажки);
КонецПроцедуры
//&НаКлиенте
Функция ЕстьВыбранныеСтрокиСпискаДокументов()
Результат = Истина;
Для Каждого СтрокаСписка Из СписокДокументов Цикл
Если СтрокаСписка.Флажок Тогда
Результат = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ВыполнитьЗагрузкуНовогоПакета(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Создать отдельный пакет";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ОткрытьФормуНовогоПакета();
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьЗагрузкуДокументовСДискаВВыбранныеПакеты(Кнопка)
ДанныеВыделенныхСтрок = ДанныеВыделенныхСтрокТЧ(Ложь);
КоличествоСтрок = ДанныеВыделенныхСтрок.Количество();
Если КоличествоСтрок = 0 Тогда
ПоказатьПредупреждениеНеВыбраноНиОднойСтроки();
Иначе
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Добавить в выбранные пакеты";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ОткрытьФормуДобавленияДокументовСДискаВВыбранныеПакеты();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура НетНужногоДокумента(Команда)
Метрика_НетНужногоДокумента();
ПоказатьФормуНетНужногоДокумента();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуНетНужногоДокумента()
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "НетНужногоДокумента");
ОповещениеОЗакрытииФормы = НовыйОписаниеОповещения("ОповещениеОЗакрытииФормыНетНужногоДокумента", ЭтаФорма);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОповещениеОЗакрытииФормы
);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_НетНужногоДокумента()
КатегорияМетрики = Метрика_НазваниеКатегории().НетНужногоДокумента;
ДействиеМетрики = Метрика_НазваниеДействий().ОткрытиеПомощника;
Ядро = Модуль_Ядро();
ИдентификаторПользователя = Ядро.ИдентификаторТекущегоПользователяСервиса();
Если НЕ ЗначениеЗаполнено(ИдентификаторПользователя) Тогда
ИдентификаторПользователя = "Пользователь не авторизован";
КонецЕсли;
ДопПеременные = Новый Соответствие;
ДопПеременные.Вставить("UserID", ИдентификаторПользователя);
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Ядро.Метрика_ДобавитьСтатистику_СУчетомЗаполненияКонтекста(
КатегорияМетрики,
ДействиеМетрики,
Неопределено,
ДопПеременные
);
КонецПроцедуры
//&НаКлиенте
Процедура ОповещениеОЗакрытииФормыНетНужногоДокумента(ПараметрОповещения = Неопределено, ПараметрыОбработки = Неопределено) Экспорт
ОбновитьГлавныйСписок();
КонецПроцедуры
//&НаКлиенте
Процедура ОбновитьГлавныйСписок()
ИмяСобытия = "Диадок_ОбновитьГлавныйСписок";
ПараметрыОповещения = Неопределено;
ИсточникОповещения = ИдентификаторОсновнойФормы();
Оповестить(
ИмяСобытия,
ПараметрыОповещения,
ИсточникОповещения
);
КонецПроцедуры
//&НаКлиенте
Процедура Переотправка(Команда)
Метрика_Переотправка();
ПоказатьФормуПереотправка();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуПереотправка()
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "Переотправка");
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы
);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_Переотправка()
КатегорияМетрики = Метрика_НазваниеКатегории().Переотправка;
ДействиеМетрики = Метрика_НазваниеДействий().ОткрытиеПомощника;
Ядро = Модуль_Ядро();
ИдентификаторПользователя = Ядро.ИдентификаторТекущегоПользователяСервиса();
Если НЕ ЗначениеЗаполнено(ИдентификаторПользователя) Тогда
ИдентификаторПользователя = "Пользователь не авторизован";
КонецЕсли;
ДопПеременные = Новый Соответствие;
ДопПеременные.Вставить("UserID", ИдентификаторПользователя);
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Ядро.Метрика_ДобавитьСтатистику_СУчетомЗаполненияКонтекста(
КатегорияМетрики,
ДействиеМетрики,
Неопределено,
ДопПеременные
);
КонецПроцедуры
//&НаКлиенте
Процедура СписокДокументовПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
КлючТекущейСтроки = ТекущиеДанные.Ключ;
КонецЕсли;
КонецПроцедуры
Процедура СписокДокументовВыбор(Элемент, ВыбраннаяСтрокаЭлементФормы, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбраннаяСтрока = Элемент.ТекущиеДанные;
Если ВыбраннаяСтрока <> Неопределено Тогда
Если Поле.Имя = "Документ"
И ЗначениеЗаполнено(ВыбраннаяСтрока.Документ) Тогда
ПоказатьЗначениеПереопределенная(ВыбраннаяСтрока.Документ);
ИначеЕсли Поле.Имя = "СтатусЭПД"
И ЗначениеЗаполнено(ВыбраннаяСтрока.СтатусЭПД) Тогда
СписокДокументов_ПриВыбореСтатусаЭПД(ВыбраннаяСтрока);
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения().Перевозочные Тогда
ПеревозочныеДокументы_ОткрытьФормуТитула(ВыбраннаяСтрока);
Иначе
ОткрытьФормуПакета(ВыбраннаяСтрока);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОткрытьФормуПакета(ВыбраннаяСтрока)
СтрокаСписка = Новый_СтруктураДанныхСтрокиСписка(ВыбраннаяСтрока);
КлючПакетаДокументов = КлючПакетаДокументов(ВыбраннаяСтрока);
РежимФормы = РежимыФормыПакета().ОтображениеПакета;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ПараметрыФормы.Вставить("Ключ", КлючПакетаДокументов);
ПараметрыФормы.Вставить("СтрокаСписка", СтрокаСписка);
ПараметрыФормы.Вставить("ВыбранныеФайлы", Неопределено);
ПараметрыФормы.Вставить("РежимФормы", РежимФормы);
ПараметрыФормы.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
мОткрытьФорму("ФормаПакета", ПараметрыФормы, , ЭтаФорма, КлючПакетаДокументов);
КонецПроцедуры
Процедура ОткрытьФормуНовогоПакета()
ВыбранныеФайлы = ВыбратьФайлыДляДобавленияВПакет();
Если НЕ ЗначениеЗаполнено(ВыбранныеФайлы) Тогда
Возврат;
КонецЕсли;
КлючПакетаДокументов = КлючПакетаДокументов(Неопределено);
СтрокаСписка = Новый_СтруктураДанныхСтрокиСписка(Неопределено);
РежимФормы = РежимыФормыПакета().СозданиеНовогоПакета;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ПараметрыФормы.Вставить("Ключ", КлючПакетаДокументов);
ПараметрыФормы.Вставить("СтрокаСписка", СтрокаСписка);
ПараметрыФормы.Вставить("ВыбранныеФайлы", ВыбранныеФайлы);
ПараметрыФормы.Вставить("РежимФормы", РежимФормы);
ПараметрыФормы.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
ПараметрОрганизация = Неопределено;
ПараметрКонтрагент = Неопределено;
Если ВключитьОтборПоОрганизации
И ЗначениеЗаполнено(ОтборПоОрганизации) Тогда
ПараметрОрганизация = ОтборПоОрганизации;
КонецЕсли;
Если ВключитьОтборПоКонтрагенту
И ЗначениеЗаполнено(ОтборПоКонтрагенту) Тогда
ПараметрКонтрагент = ОтборПоКонтрагенту;
КонецЕсли;
ПараметрыФормы.Вставить("Организация", ПараметрОрганизация);
ПараметрыФормы.Вставить("Контрагент", ПараметрКонтрагент);
мОткрытьФорму("ФормаПакета", ПараметрыФормы, , ЭтаФорма, КлючПакетаДокументов);
КонецПроцедуры
Процедура ОткрытьФормуДобавленияДокументовСДискаВВыбранныеПакеты()
КлючФормыПакета = РежимыФормыПакета().ДобавлениеДокументовСДиска;
РежимФормы = РежимыФормыПакета().ДобавлениеДокументовСДиска;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ПараметрыФормы.Вставить("Ключ", КлючФормыПакета);
ПараметрыФормы.Вставить("СтрокаСписка", Неопределено);
ПараметрыФормы.Вставить("ВыбранныеФайлы", Неопределено);
ПараметрыФормы.Вставить("РежимФормы", РежимФормы);
ПараметрыФормы.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
ФормаПакетаДобавленияДокументовСДиска = ПолучитьФормуОбработки("ФормаПакета", ЭтаФорма, ПараметрыФормы);
Если ФормаПакетаДобавленияДокументовСДиска.Открыта() Тогда
ФормаПакетаДобавленияДокументовСДиска.Активизировать();
Иначе
ФормаПакетаДобавленияДокументовСДиска = "";
ВыбранныеФайлы = ВыбратьФайлыДляДобавленияВПакет();
Если НЕ ЗначениеЗаполнено(ВыбранныеФайлы) Тогда
Возврат;
КонецЕсли;
ПараметрыФормы.Вставить("ВыбранныеФайлы", ВыбранныеФайлы);
ОписаниеОповещения = НовыйОписаниеОповещения("ПослеДобавленияДокументовСДискаВВыбранныеПакеты", ЭтаФорма);
мОткрытьФорму("ФормаПакета", ПараметрыФормы, ОписаниеОповещения, ЭтаФорма, КлючФормыПакета);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура СписокДокументов_ПриВыбореСтатусаЭПД(ВыбраннаяСтрока)
Метрика_ПриНажатииНаГиперссылкуСтатусаЭПД();
Ядро = Модуль_Ядро();
ДанныеСтроки = Новый_СтруктураДанныхСтрокиСписка(ВыбраннаяСтрока);
РежимыОтображения = РежимыОтображения();
ДляРазделаОтправки = (РежимОтображенияДокументов = РежимыОтображения.ДляОтправки);
ДокументыУчета = Ядро.Пакеты_УчетныеДокументыСОснованиямиПоСтрокеСписка(
ДанныеСтроки,
ДляРазделаОтправки);
Ядро.КонтурЛогистика_ОткрытьПеревозочныеДокументы(ЭтаФорма, ДокументыУчета);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработчикОповеститьОВыполненииКоманды(Параметр1 = Неопределено, Параметр2 = Неопределено) Экспорт
ИспользуетсяМодульЛогистики = Модуль_Ядро().КонтурЛогистика_ИспользуетсяМодульЛогистики();
Если ИспользуетсяМодульЛогистики Тогда
СписокДокументов_ОбновитьСтатусЭПДвТекущейСтроке();
КонецЕсли;
КонецПроцедуры
Процедура ПослеДобавленияДокументовСДискаВВыбранныеПакеты(ДокументыСДиска, ДополнительныеПараметры = Неопределено) Экспорт
Если НЕ ЗначениеЗаполнено(ДокументыСДиска) Тогда
Возврат;
КонецЕсли;
Если НЕ РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
Возврат;
КонецЕсли;
КлючиВыбранныхПакетов = Новый Массив;
ДанныеВыделенныхСтрок = ДанныеВыделенныхСтрокТЧ(Ложь);
Для Каждого СтрокаСписка Из ДанныеВыделенныхСтрок Цикл
КлючиВыбранныхПакетов.Добавить(СтрокаСписка.Ключ);
КонецЦикла;
ПоместитьВКэшДобавленныеВВыбранныеВПакетыДокументыСДискаИОбновитьСписок(ДокументыСДиска, КлючиВыбранныхПакетов, СписокДокументов);
КонецПроцедуры
//&НаКлиенте
Функция ВыбратьФайлыДляДобавленияВПакет()
Результат = Новый Массив;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл";
Диалог.ПолноеИмяФайла = "";
Диалог.Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'");
Диалог.МножественныйВыбор = Истина;
Если Диалог.Выбрать() Тогда
Результат = Диалог.ВыбранныеФайлы;
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция КлючПакетаДокументов(ВыбраннаяСтрока)
Если ВыбраннаяСтрока = Неопределено Тогда
Результат = Новый УникальныйИдентификатор;
Иначе
Результат = РежимОтображенияДокументов + " " + ВыбраннаяСтрока.Ключ;
Если ЗначениеЗаполнено(ВыбраннаяСтрока.ВидПакетаID) Тогда
Результат = Результат + " " + ВыбраннаяСтрока.ВидПакетаID
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура СписокДокументовСортироватьПоВозрастанию(Команда)
СписокДокументовСортировать("Возр");
КонецПроцедуры
Процедура СписокДокументовСортироватьПоУбыванию(Команда)
СписокДокументовСортировать("Убыв");
КонецПроцедуры
Процедура СписокДокументовСортировать(НаправлениеСортировки)
ТекущаяКолонка = ЭлементыФормы.СписокДокументов.ТекущаяКолонка;
ИмяТекущейКолонки = ТекущаяКолонка.Имя;
Если ЗначениеЗаполнено(ТекущаяКолонка.Данные) Тогда
СписокДокументов.Сортировать(ИмяТекущейКолонки + " " + НаправлениеСортировки);
УбратьИконкиПакета();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура УбратьИконкиПакета()
Для Каждого СтрокаСписка Из СписокДокументов Цикл
СтрокаСписка.ИндексИконкиПакета = 0;
КонецЦикла;
КонецПроцедуры
Процедура ВыполнитьОбмен(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().ОбменССервером;
ДействиеМетрики = "Обмен с сервером";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ВыполнитьОбменССерверомСФормойПрогресса();
КонецПроцедуры
Функция ПроверитьАвторизациюСлужебногоПользователяНаСервере()
Ядро = Модуль_Ядро();
ЛогинДляОбмена = Ядро.ОбщиеНастройки_Прочитать("СлужебнаяУчетнаяЗаписьЛогин");
ПарольДляОбмена = Ядро.ОбщиеНастройки_Прочитать("СлужебнаяУчетнаяЗаписьПароль");
Результат = Ядро.Авторизация_ПроверкаАвторизации(Неопределено, ЛогинДляОбмена, ПарольДляОбмена);
Возврат Результат;
КонецФункции
Процедура ВыполнитьОбменССерверомСФормойПрогресса() Экспорт
СформироватьИзвещенияОПолучении();
СформироватьОтменуФиксацииГИСМТ();
Ядро = Модуль_Ядро();
Ядро.ВнешнееХранение_ВыполнитьОчисткуУстаревшихДокументов();
Если ОбщийКонтекстКлиентСервер.ИспользоватьСлужебнуюУчетнуюЗапись
И Не ПроверитьАвторизациюСлужебногоПользователяНаСервере() Тогда
ТекстОшибкиАвторизации = "В настройках введен неверный логин или пароль.
|Не удалось выполнить обмен с сервером.";
ПоказатьПредупреждениеОбОшибкеАвторизацииСлужебногоПользователя(ТекстОшибкиАвторизации);
Возврат;
КонецЕсли;
КоличествоОрганизаций = КонтекстСеансаКлиентСервер.Количество();
ОрганизацииСОшибкамиАвторизации = Новый Массив;
СчетчикОрганизаций = 0;
Для Каждого СтрокаКонтекста Из КонтекстСеансаКлиентСервер Цикл
Если НЕ СтрокаКонтекста.Значение.Свойство("ОрганизацияДиадок") Тогда
Продолжить;
КонецЕсли;
BoxId = СтрокаКонтекста.Ключ;
КатегорияМетрики = Метрика_НазваниеКатегории().ОбменССервером;
ДействиеМетрики = "Обмен с сервером";
Ядро.Метрика_ДобавитьСтатистику_ДляОрганизации(BoxId, КатегорияМетрики, ДействиеМетрики);
СчетчикОрганизаций = СчетчикОрганизаций + 1;
ОрганизацияДиадок = СтрокаКонтекста.Значение.ОрганизацияДиадок;
ФормаПрогресса = Форма_ПрогрессВыполнения();
ФормаПрогресса.МассоваяОбработка = Истина;
ФормаПрогресса.УстановитьЗаголовок("Синхронизация (" + СчетчикОрганизаций + " из " + КоличествоОрганизаций + "): " + ОрганизацияДиадок);
ФормаПрогресса.УстановитьЗначениеПрогресса(0);
ФормаПрогресса.СброситьНадписи();
Если СтрокаКонтекста.Значение.ПраваПользователя.DocumentAccessLevel <> "AllDocuments"
И Не ОбщийКонтекстКлиентСервер.ИспользоватьСлужебнуюУчетнуюЗапись Тогда
ОрганизацииСОшибкамиАвторизации.Добавить(ОрганизацияДиадок);
Продолжить;
КонецЕсли;
СчетчикЦикла = 0;
Пока Истина Цикл
ОбработкаПрерыванияПользователя();
СчетчикЦикла = СчетчикЦикла + 1;
ОписаниеОрганизации = Модуль_Ядро().Организации_ЗаполненныеРеквизиты(ОрганизацияДиадок);
ОсталосьСобытийВЯщике = Модуль_Ядро().Лента_ОбработатьНовыеСобытияДокументов(ОписаниеОрганизации, 1);
ВсегоИтерацийКОбработке = СчетчикЦикла + Цел(ОсталосьСобытийВЯщике / 100);
ФормаПрогресса.УстановитьМаксимальноеЗначение(ВсегоИтерацийКОбработке);
ФормаПрогресса.УвеличитьЗначениеПрогресса();
Если ОсталосьСобытийВЯщике = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ФормаПрогресса.Закрыть();
КонецЦикла;
ОбновитьГлавныйСписок();
Если ОрганизацииСОшибкамиАвторизации.Количество() > 0 Тогда
ТекстОшибкиАвторизации = "Не удалось выполнить обмен с сервером.
|Укажите служебную учетную запись с полным доступом ко всем подразделениям организаций: ";
ОрганизацииСтрокой = Общее_СоединитьСтроку(ОрганизацииСОшибкамиАвторизации, ", ");
ТекстОшибкиАвторизации = ТекстОшибкиАвторизации + ОрганизацииСтрокой;
ПоказатьПредупреждениеОбОшибкеАвторизацииСлужебногоПользователя(ТекстОшибкиАвторизации);
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьПредупреждениеОбОшибкеАвторизацииСлужебногоПользователя(ТекстОшибкиАвторизации)
Оповещение = НовыйОписаниеОповещения("ОбработчикОткрытьНастройкуСервисныеФункции", ЭтаФорма);
КнопкаПерейтиКНастройке = "Перейти к настройке";
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(КнопкаПерейтиКНастройке);
КнопкиВопроса.Добавить("Закрыть");
ПоказатьВопросПереопределенная(Оповещение, ТекстОшибкиАвторизации, КнопкиВопроса, , КнопкаПерейтиКНастройке);
КонецПроцедуры
Процедура ОбработчикОткрытьНастройкуСервисныеФункции(ПараметрОповещения = Неопределено, ПараметрыОбработки = Неопределено) Экспорт
Если ПараметрОповещения = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПараметрОповещения <> "Перейти к настройке" Тогда
Возврат;
КонецЕсли;
КатегорияМетрики = Метрика_НазваниеКатегории().ОбменССервером;
ДействиеМетрики = "Перейти к настройке";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ОткрытьНастройки("СервисныеФункции");
КонецПроцедуры
Процедура СформироватьИзвещенияОПолучении()
Перем ФормироватьУС;
Ядро = Модуль_Ядро();
СтрокиКонтекста = Ядро.КонтекстСеанса_СтрокиКонтекста();
Для Каждого СтрокаКонтекста Из СтрокиКонтекста Цикл
BoxId = СтрокаКонтекста.Значение.Ящик.Идентификатор;
Если ФормироватьУС = Истина Тогда
Прервать;
Иначе
ФормироватьУС = Ядро.УС_ДоступноФормированиеУниверсальныхСообщений(BoxId);
КонецЕсли;
КонецЦикла;
Если ФормироватьУС = Неопределено Тогда
СформироватьИзвещенияОПолученииУстаревшегоФормата();
Иначе
Если ФормироватьУС Тогда
СформироватьУниверсальныеСообщенияДляИзвещенийОПолучении();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СформироватьУниверсальныеСообщенияДляИзвещенийОПолучении()
Состояние("Формирование и отправка извещений о получении СФ...");
Ядро = Модуль_Ядро();
ПодготовленныеИзвещенияВсехОрганизаций = Ядро.ИоП_ПодготовитьИзвещенияОПолучении();
Ядро.ИоП_ОтправитьИзвещенияОПолучении(ПодготовленныеИзвещенияВсехОрганизаций);
КонецПроцедуры
Процедура СформироватьИзвещенияОПолученииУстаревшегоФормата()
ЕстьОтпечатокСертификата = Ложь;
Для Каждого СтрокаКонтекста Из КонтекстСеансаКлиентСервер Цикл
Если СтрокаКонтекста.Значение.Свойство("ОтпечатокСертификата")
И ЗначениеЗаполнено(СтрокаКонтекста.Значение.ОтпечатокСертификата) Тогда
ЕстьОтпечатокСертификата = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьОтпечатокСертификата Тогда
Состояние("Формирование и отправка извещений о получении СФ...");
Ядро = Модуль_Ядро();
ПодготовленныеИзвещенияВсехОрганизаций = Ядро.ИоП_ПодготовитьИзвещенияОПолучении();
Попытка
Ядро.ИоП_ПодписатьИзвещенияОПолучении(ПодготовленныеИзвещенияВсехОрганизаций);
Исключение
ВидОперации = НСтр("ru = 'Формирование извещений о получении'");
ТекстСообщения = НСтр("ru = 'Не удалось подписать извещения'");
Ошибка = ИнформацияОбОшибке();
_ОбработатьОшибку(
ВидОперации,
Ошибка,
ТекстСообщения
);
Возврат;
КонецПопытки;
Ядро.ИоП_ОтправитьИзвещенияОПолучении(ПодготовленныеИзвещенияВсехОрганизаций);
КонецЕсли;
КонецПроцедуры
Процедура СформироватьОтменуФиксацииГИСМТ()
Ядро = Модуль_Ядро();
ФормироватьКвитанцииОбОтменеФиксации =
Ядро.ФормироватьКвитанцииОбОтменеФиксации();
Если НЕ ФормироватьКвитанцииОбОтменеФиксации Тогда
Возврат;
КонецЕсли;
Состояние("Формирование и отправка отмены фиксации ГИСМТ...");
Для Каждого СтрокаКонтекста Из КонтекстСеансаКлиентСервер Цикл
СтрокаКонтекста = СтрокаКонтекста.Значение;
BoxId = СтрокаКонтекста.BoxId;
ИНН = СтрокаКонтекста.Ящик.Организация.ИНН;
ОтпечатокСертификата = Неопределено;
СтрокаКонтекста.Свойство(
"ОтпечатокСертификата",
ОтпечатокСертификата);
Если НЕ ЗначениеЗаполнено(BoxId)
ИЛИ НЕ ЗначениеЗаполнено(ОтпечатокСертификата) Тогда
Продолжить;
КонецЕсли;
Попытка
ДанныеОтменыФиксации = Ядро.ОтменаФиксации_ПолучитьДанные(BoxId, ИНН);
Если НЕ ЗначениеЗаполнено(ДанныеОтменыФиксации) Тогда
Продолжить;
КонецЕсли;
Ядро.ОтменаФиксации_Подписать(ОтпечатокСертификата, ДанныеОтменыФиксации);
Ядро.ОтменаФиксации_Отправить(BoxId, ДанныеОтменыФиксации);
Исключение
ВидОперации = НСтр("ru = 'Подписание и отправка документов отмена фиксации'");
ТекстСообщения = НСтр("ru = 'Не удалось подписать и отправить отмену фиксации'");
Ошибка = ИнформацияОбОшибке();
_ОбработатьОшибку(
ВидОперации,
Ошибка,
ТекстСообщения);
Возврат;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
//&НаКлиенте
Процедура ВыбратьПериод(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Период";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("НастройкаПериода", НастройкаВыбораПериода);
ПараметрыФормы.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
Оповещение = НовыйОписаниеОповещения("ОбработкаВыбораПериода", ЭтаФорма);
ОткрытьФормуДиадокМодально("НастройкаПериода", ЭтаФорма, ПараметрыФормы, Оповещение);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработкаВыбораПериода(РезультатВыбораПериода = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
Если РезультатВыбораПериода <> Неопределено Тогда
НастройкаВыбораПериода = РезультатВыбораПериода;
ОбновитьСписок();
УстановитьЗаголовокКнопкиПериода();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьФильтры(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Расширенные фильтры";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
ОткрытьФормуДиадокМодально("ФормаФильтров", ЭтаФорма, ПараметрыФормы);
КонецПроцедуры
Процедура ПрименитьФильтры(КомпоновщикНастроек) Экспорт
КатегорияМетрики = Метрика_НазваниеКатегории().Фильтры;
ДействиеМетрики = "Применить";
МассивФильтров = МассивУстановленныхФильтров();
Переменные = Новый Соответствие;
Переменные.Вставить("Массив фильтров", МассивФильтров);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , Переменные);
КомпоновщикНастроекОтбора = КомпоновщикНастроек;
УстановитьТекущиеОтборыНаСервере(КомпоновщикНастроек);
ДлительныеОперации_ПолучитьСтатусыЭПДвФоне();
КонецПроцедуры
Процедура УстановитьТекущиеОтборыНаСервере(КомпоновщикНастроек)
СохранитьНастройкуКомпановкиДанныхДляРежима(РежимОтображенияДокументов, КомпоновщикНастроек);
ТаблицаОтборов_УстановитьОтборыСпискаДокументов(РежимОтображенияДокументов);
ОбновитьСтраницуСпискаДокументовНаСервере();
КоличествоУстановленныхФильтров = КоличествоУстановленныхФильтров();
УстановитьЗаголовокКнопкиФильтров(КоличествоУстановленныхФильтров);
КонецПроцедуры
Функция КоличествоУстановленныхФильтров()
Результат = 0;
Для Каждого Отбор Из КомпоновщикНастроекОтбора.Настройки.Отбор.Элементы Цикл
Если Отбор.Использование Тогда
Результат = Результат + 1;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция МассивУстановленныхФильтров()
Результат = Новый Массив;
Для Каждого Отбор Из КомпоновщикНастроекОтбора.Настройки.Отбор.Элементы Цикл
Если Отбор.Использование Тогда
Результат.Добавить(Строка(Отбор.ЛевоеЗначение));
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура УстановитьЗаголовокКнопкиФильтров(КоличествоУстановленныхФильтров)
Если ЗначениеЗаполнено(КоличествоУстановленныхФильтров) Тогда
Если Элементы.ОткрытьФильтры.Заголовок <> Строка(КоличествоУстановленныхФильтров) Тогда
Элементы.ОткрытьФильтры.Картинка = Элементы.КартинкаФильтрыАктивныеСкрытая.Картинка;
Элементы.ОткрытьФильтры.Заголовок = КоличествоУстановленныхФильтров;
Элементы.ОткрытьФильтры.Подсказка = НСтр("ru='Открыть фильтры'");
КонецЕсли;
Иначе
СброситьЗаголовокКнопкиФильтров();
КонецЕсли;
КонецПроцедуры
Процедура СброситьЗаголовокКнопкиФильтров()
Элементы.ОткрытьФильтры.Картинка = Элементы.КартинкаФильтрыНеактивныеСкрытая.Картинка;
Элементы.ОткрытьФильтры.Заголовок = "";
Элементы.ОткрытьФильтры.Подсказка = НСтр("ru='Открыть фильтры'");
КонецПроцедуры
Процедура КнопкаОбновитьСписок(Команда = Неопределено)
КатегорияМетрики = Метрика_НазваниеКатегории().ОбменССервером;
ДействиеМетрики = "Обновить список";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Если НЕ ИспользуетсяПодсистемаДиадок
И ЗначениеЗаполнено(РежимОтображенияДокументов)
И РежимОтображенияДокументов <> РежимыОтображения().ДляОтправки Тогда
СформироватьИзвещенияОПолучении();
КонецЕсли;
Если НЕ ИспользуетсяПодсистемаДиадок
И ЗначениеЗаполнено(РежимОтображенияДокументов)
И (РежимОтображенияДокументов = РежимыОтображения().Исходящие
ИЛИ РежимОтображенияДокументов = РежимыОтображения().Внутренние) Тогда
СформироватьОтменуФиксацииГИСМТ();
КонецЕсли;
ОбновитьСписок();
Модуль_Ядро().Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура КнопкаСкачатьОбновлениеНажатие(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().СкачатьОбновление;
ДействиеМетрики = "Скачать обновление";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьФормуОбновления();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьФормуОбновления() Экспорт
ТекущаяВерсия = ВерсияОбработки();
НоваяВерсия = ДанныеДляОбновленияМодуля.ОписаниеОбновленияМодуля.Версия;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("НоваяВерсия", НоваяВерсия);
ПараметрыФормы.Вставить("ТекущаяВерсия", ТекущаяВерсия);
ПараметрыФормы.Вставить("ДанныеДляОбновленияМодуля", ДанныеДляОбновленияМодуля);
мОткрытьФорму("ФормаОбновления", ПараметрыФормы);
КонецПроцедуры
//&НаКлиенте
Процедура НадписьОкончанияОплаченногоПериодаНажатие(Элемент)
КатегорияМетрики = Метрика_НазваниеКатегории().ОнлайнСчета;
ДействиеМетрики = "Оплатить счет";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
ОткрытьФормуСпискаОнлайнСчетов();
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьФормуСпискаОнлайнСчетов()
Модуль_Ядро().ОнлайнСчета_ОткрытьФорму(ЭтаФорма);
КонецПроцедуры
Процедура УстановитьСтандартныеНастройкиНажатие(Кнопка)
УстановитьСтандартныеНастройки();
КонецПроцедуры
Процедура УстановитьСтандартныеНастройки()
ИмяСписка = ИмяСпискаХраненияКолонок(РежимОтображенияДокументов);
ХранилищеНастроекДанныхФорм.Удалить("Диадок", "Колонки" + ИмяСписка, Неопределено);
ПереключитьВидимостьКолонок(РежимОтображенияДокументов);
КонецПроцедуры
// } ОСНОВНЫЕ ДЕЙСТВИЯ
// { ДОПОЛНИТЕЛЬНЫЕ ДЕЙСТВИЯ
Процедура ЗаполнитьМенюДействий(РежимОтображенияДокументов)
РежимыОтображения = РежимыОтображения();
// BSLLS:UnusedLocalVariable-off
РежимДляОтправки = (РежимОтображенияДокументов = РежимыОтображения.ДляОтправки);
РежимИсходящие = (РежимОтображенияДокументов = РежимыОтображения.Исходящие);
РежимВходящие = (РежимОтображенияДокументов = РежимыОтображения.Входящие);
РежимВнутренние = (РежимОтображенияДокументов = РежимыОтображения.Внутренние);
РежимПеревозочные = (РежимОтображенияДокументов = РежимыОтображения.Перевозочные);
// BSLLS:UnusedLocalVariable-on
Если ИспользуетсяПодсистемаДиадок Тогда
ОтключитьАнализ = Модуль_Ядро().ОбщиеНастройки_Прочитать("ОтключитьАнализДляВходящихДокументов");
Если ОтключитьАнализ Тогда
УдалитьКнопкуКоманднойПанели("КоманднаяПанельВходящие", "ГруппаАнализИОбработка");
КонецЕсли;
Иначе
УдалитьКнопкуКоманднойПанели("КоманднаяПанельДляОтправки", "ВыполнитьПерезаполнениеПакета");
УдалитьКнопкуКоманднойПанели("КоманднаяПанельВходящие", "ВыполнитьПометитьДокументыКакЗавершенные");
УдалитьКнопкуКоманднойПанели("КоманднаяПанельВходящие", "ВыполнитьРасшифроватьДокументы");
УдалитьКнопкуКоманднойПанели("КоманднаяПанельВходящие", "ГруппаАнализИОбработка");
КонецЕсли;
УстановитьВидимостьОтбораПоСтатусу(РежимОтображенияДокументов);
ЭлементыФормы.ПоказыватьЗавершенные.Видимость = РежимВходящие И ИспользуетсяПодсистемаДиадок;
МенюДополнительныхДействий = МенюДополнительныхДействий();
ЗаполнитьДополнительныеКнопкиИзПодключаемогоМодуля(ЭтаФорма, РежимОтображенияДокументов, МенюДополнительныхДействий);
УдалитьПустоеМенюДополнительныхДействий(МенюДополнительныхДействий);
ПоказатьТекущуюПанельОсновныхДействий();
КонецПроцедуры
Функция МенюДополнительныхДействий()
ТекущаяКоманднаяПанель = ТекущаяКоманднаяПанель();
ИмяМеню = "ДополнительныеДействия";
Результат = ТекущаяКоманднаяПанель.Кнопки.Найти(ИмяМеню);
Если Результат = Неопределено Тогда
ТипКнопки = ТипКнопкиКоманднойПанели.Подменю;
Результат = ТекущаяКоманднаяПанель.Кнопки.Добавить(ИмяМеню, ТипКнопки, "Действия");
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура УдалитьПустоеМенюДополнительныхДействий(МенюДополнительныхДействий)
Если МенюДополнительныхДействий.Кнопки.Количество() = 0 Тогда
ТекущаяКоманднаяПанель().Кнопки.Удалить(МенюДополнительныхДействий);
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьТекущуюПанельОсновныхДействий()
РежимыОтображения = РежимыОтображения();
СтраницыДействий = ЭлементыФормы.ПанельОсновныхДействий.Страницы;
Если РежимОтображенияДокументов = РежимыОтображения.ДляОтправки Тогда
ЭлементыФормы.ПанельОсновныхДействий.ТекущаяСтраница = СтраницыДействий.СтраницаДляОтправки;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Исходящие Тогда
ЭлементыФормы.ПанельОсновныхДействий.ТекущаяСтраница = СтраницыДействий.СтраницаИсходящие;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Входящие Тогда
ЭлементыФормы.ПанельОсновныхДействий.ТекущаяСтраница = СтраницыДействий.СтраницаВходящие;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Внутренние Тогда
ЭлементыФормы.ПанельОсновныхДействий.ТекущаяСтраница = СтраницыДействий.СтраницаВнутренние;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Перевозочные Тогда
ЭлементыФормы.ПанельОсновныхДействий.ТекущаяСтраница = СтраницыДействий.СтраницаПеревозочные;
Иначе
ВызватьИсключение "Неизвестный режим отображения";
КонецЕсли;
КонецПроцедуры
Процедура УдалитьКнопкуКоманднойПанели(ИмяКоманднойПанели, ИмяКнопки)
Кнопка = ЭлементыФормы[ИмяКоманднойПанели].Кнопки.Найти(ИмяКнопки);
Если Кнопка <> Неопределено Тогда
ЭлементыФормы[ИмяКоманднойПанели].Кнопки.Удалить(Кнопка);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьОбработчикПроизвольнойКнопки(Команда)
ИмяКнопкиВПМ = СтрЗаменить(Команда.Имя, "НажатиеДополнительнойКнопки_", "");
ПараметрыПМ = Новый Структура;
ПараметрыПМ.Вставить("ИмяФормы", ИмяТекущейФормы());
ПараметрыПМ.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
ПараметрыПМ.Вставить("ИмяКнопки", ИмяКнопкиВПМ);
ПараметрыПМ.Вставить("ВыделенныеСтроки", ДанныеВыделенныхСтрокТЧ(Истина));
НажатиеДополнительнойКнопки(ПараметрыПМ);
ОбновитьСписок();
КонецПроцедуры
Процедура НажатиеДополнительнойКнопки(ПараметрыПМ) Экспорт
// для совместимости со старыми ПМ добавим в ПараметрыПМ РежимОтображенияДокументов и ВыделенныеСтроки
Если Не ПараметрыПМ.Свойство("РежимОтображенияДокументов") Тогда
ПараметрыПМ.Вставить("РежимОтображенияДокументов", РежимОтображенияДокументов);
КонецЕсли;
Если Не ПараметрыПМ.Свойство("ВыделенныеСтроки") Тогда
ПараметрыПМ.Вставить("ВыделенныеСтроки", ДанныеВыделенныхСтрокТЧ(Истина));
КонецЕсли;
ПараметрыПМ.Вставить("ДополнительныеПараметры", Неопределено);
Модуль_Ядро().ПодключаемыйМодуль_ОбработатьСобытие("НажатиеДополнительнойКнопки", ПараметрыПМ);
КонецПроцедуры
// } ДОПОЛНИТЕЛЬНЫЕ ДЕЙСТВИЯ
// { МАССОВАЯ ОБРАБОТКА ДОКУМЕНТОВ
// { Создание документов
//&НаКлиенте
Функция ИспользоватьФормуСозданияДокументов()
Ядро = Модуль_Ядро();
Результат = Ядро.ПодключаемыйМодуль_ИспользоватьФормуСозданияДокументов();
Возврат Результат;
КонецФункции
Процедура ВыполнитьСоздатьДокументы(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СозданиеДокументов;
ДействиеМетрики = "Создать";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ();
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().СоздатьДокумент, КатегорияМетрики, ДействиеМетрики);
ДополнительныеПараметры = Новый Структура;
ПараметрыОбработки.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);
Если ИспользоватьФормуСозданияДокументов() Тогда
ОбработчикСоздатьДокументы = "ПоказатьФормуСозданияДокументовУчета";
Иначе
ОбработчикСоздатьДокументы = "ОбработатьСоздатьДокументы";
КонецЕсли;
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок(ОбработчикСоздатьДокументы, ПараметрыОбработки);
КонецПроцедуры
Функция НесопоставленныеЭлектронныеДокументы(КоллекцияДокументов)
Результат = Новый Массив;
Для Каждого Документ Из КоллекцияДокументов Цикл
Если Не ЗначениеЗаполнено(Документ.ДокументУчета) Тогда
Результат.Добавить(Документ);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ПоказатьФормуСозданияДокументовУчета(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ВыбранныеДокументы = ПараметрыОбработки.ДанныеДляОбработки;
ДанныеДляОбработки = НесопоставленныеЭлектронныеДокументы(ВыбранныеДокументы);
Если Не ЗначениеЗаполнено(ДанныеДляОбработки) Тогда
ТекстПредупреждения = "Выбранные электронные документы уже сопоставлены с документами учета!";
ТаймаутПредупреждения = 60;
ЗаголовокПредупреждения = "Создание документов учета";
ПоказатьПредупреждениеПереопределенная(
Неопределено,
ТекстПредупреждения,
ТаймаутПредупреждения,
ЗаголовокПредупреждения
);
Возврат;
КонецЕсли;
ПараметрыСоздания = Новый Структура;
ПараметрыСоздания.Вставить("ДанныеДляОбработки", ДанныеДляОбработки);
ОписаниеОповещения = НовыйОписаниеОповещения(
"ПослеЗакрытияФормыСозданияДокументов",
ЭтаФорма,
ПараметрыОбработки
);
ОткрытьФормуДиадокМодально(
"СозданиеДокументовУчета",
ЭтаФорма,
ПараметрыСоздания,
ОписаниеОповещения
);
КонецПроцедуры
Процедура ОбработатьСоздатьДокументыВерсия2(ПараметрыОбработки) Экспорт
Перем ОбщиеПараметрыОбработки;
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ПараметрыОбработки.Свойство("ДополнительныеПараметры", ОбщиеПараметрыОбработки);
ПослеСозданияДокументов = НовыйОписаниеОповещения(
"ОбработчикЗавершенияСозданияДокументовВерсия2",
ЭтаФорма,
ПараметрыОбработки
);
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных(
"СоздатьДокументыПоПравилу",
ПакетыДокументов,
Действие,
ОбщиеПараметрыОбработки,
ПослеСозданияДокументов
);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура ПослеЗакрытияФормыСозданияДокументов(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(РезультатЗакрытия) Тогда
Возврат;
КонецЕсли;
Действие = ДействияЭДО().СоздатьДокумент;
КатегорияМетрики = Метрика_НазваниеКатегории().СозданиеДокументов;
ДействиеМетрики = Метрика_ДействиеСоздатьДокументы();
ФормаВыполнения = СвойствоСтруктуры(ДополнительныеПараметры, "ФормаВыполнения");
ОбщиеПараметрыОбработки = Новый Структура;
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(
РезультатЗакрытия,
Действие,
КатегорияМетрики,
ДействиеМетрики,
ФормаВыполнения
);
ПараметрыОбработки.Вставить("ДополнительныеПараметры", ОбщиеПараметрыОбработки);
ОбработатьСоздатьДокументыВерсия2(ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработчикЗавершенияСозданияДокументовВерсия2(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ФормаВыполнения = ПараметрыОбработки.ФормаВыполнения;
Действие = ДействияЭДО().СоздатьДокумент;
ЗавершениеОбработкиДокументов(Действие, ФормаВыполнения);
ВыполнениеИзФормыПакета = (Этаформа <> ФормаВыполнения);
Если ВыполнениеИзФормыПакета Тогда
ФормаВыполнения.ОбновитьФорму();
КонецЕсли;
КонецПроцедуры
Функция НовыйАдресТаблицыСопоставленияНоменклатуры()
Результат = ПоместитьВоВременноеХранилище(Неопределено);
Возврат Результат;
КонецФункции
Функция ДополнительныеПараметрыСозданияДокументов()
АдресВХ = НовыйАдресТаблицыСопоставленияНоменклатуры();
Результат = Новый Структура;
Результат.Вставить("АдресНоменклатурыДляСопоставления", АдресВХ);
Результат.Вставить("ИдентификаторОперации");
Результат.Вставить("ДополнительныеПараметры");
Возврат Результат;
КонецФункции
Процедура ОбработатьСоздатьДокументы(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Перем ДополнительныеПараметры;
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ПараметрыОбработки.Свойство("ДополнительныеПараметры", ДополнительныеПараметры);
Ядро = Модуль_Ядро();
Для Каждого Документ Из ДанныеДляОбработки Цикл
ХранилищеКонтента = Ядро.Документы_Расшифровать(Документ.Идентификаторы);
Документ.Документооборот.Вставить("ХранилищеКонтента", ХранилищеКонтента);
КонецЦикла;
ПараметрыСоздания = ДополнительныеПараметрыСозданияДокументов();
Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда
ЗаполнитьЗначенияСвойств(ПараметрыСоздания, ДополнительныеПараметры);
КонецЕсли;
ПараметрыОбработки.Вставить("АдресНоменклатурыДляСопоставления", ПараметрыСоздания.АдресНоменклатурыДляСопоставления);
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОбработчикЗавершенияСозданияДокументов",
ЭтаФорма,
ПараметрыОбработки
);
ВыполнитьМассовуюОбработкуДанных(
"СоздатьДокументы",
ДанныеДляОбработки,
Действие,
ПараметрыСоздания,
ОписаниеОповещения
);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура ОбработчикЗавершенияСозданияДокументов(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ФормаВыполнения = ПараметрыОбработки.ФормаВыполнения;
АдресВХ = ПараметрыОбработки.АдресНоменклатурыДляСопоставления;
ЕстьНесопоставленнаяНоменклатура = Модуль_Ядро().ЗначениеЗаполненоИзВременногоХранилища(АдресВХ);
Если ЕстьНесопоставленнаяНоменклатура Тогда
АдресСписокДокументов = ПоместитьВоВременноеХранилище(ПараметрыОбработки.ДанныеДляОбработки, Новый УникальныйИдентификатор);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗаголовокКнопкиОК", "Сопоставить номенклатуру и создать документы");
ПараметрыФормы.Вставить("АдресТаблицыНоменклатурыДляСопоставления" , АдресВХ);
ПараметрыФормы.Вставить("АдресСписокДокументов" , АдресСписокДокументов);
ОписаниеОповещения = НовыйОписаниеОповещения("ОбработчикЗавершенияСопоставленияНоменклатуры", ЭтаФорма, ПараметрыОбработки);
ОткрытьФормуДиадокМодально("СопоставлениеНоменклатуры", ФормаВыполнения, ПараметрыФормы, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ЗавершениеОбработкиДокументов(ПараметрыОбработки.Действие, ФормаВыполнения);
ВыполнениеИзФормыПакета = (Этаформа <> ФормаВыполнения);
Если ВыполнениеИзФормыПакета Тогда
ФормаВыполнения.ОбновитьФорму();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработчикЗавершенияСопоставленияНоменклатуры(ПовторитьОбработку, ПараметрыОбработки) Экспорт
Если ПовторитьОбработку = Истина Тогда
ОбработатьСоздатьДокументы(, ПараметрыОбработки);
Иначе
ЗавершениеОбработкиДокументов(ПараметрыОбработки.Действие, ПараметрыОбработки.ФормаВыполнения);
КонецЕсли;
КонецПроцедуры
Процедура СоздатьДокументы(КонтекстФункции)
ИмяМетода = "Документы_СоздатьДокументы";
ДокументыДляОбработки = КонтекстФункции.Данные;
ИдентификаторОперации = КонтекстФункции.Параметры.ИдентификаторОперации;
ДополнительныеПараметры = КонтекстФункции.Параметры.ДополнительныеПараметры;
АдресНоменклатурыДляСопоставления = КонтекстФункции.Параметры.АдресНоменклатурыДляСопоставления;
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(
ИмяМетода,
ДокументыДляОбработки,
ИдентификаторОперации,
ДополнительныеПараметры,
АдресНоменклатурыДляСопоставления);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
Процедура СоздатьДокументыПоПравилу(КонтекстФункции)
Пакеты = КонтекстФункции.Данные;
ИмяМетода = "Пакеты_СоздатьДокументыПоПравилу";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, Пакеты);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
Процедура ТематическаяКартинкаНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Метрика_ТематическаяКартинкаНажатие();
// BSLLS:UsingSynchronousCalls-off
ЗапуститьПриложение(ЛендингНовыйГод);
// BSLLS:UsingSynchronousCalls-on
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ТематическаяКартинкаНажатие()
Ядро = Модуль_Ядро();
Переменные = Новый Соответствие;
Категория = Ядро.Метрика_НазваниеКатегории().ПоздравлениеКлиентов;
Действие = Ядро.Метрика_НазваниеДействий().НажатиеКнопки;
Метка = Элементы.ТематическаяКартинка.Имя;
Ядро.Метрика_ДобавитьПоведение(Категория, Действие, Метка, Переменные, ИмяФормы);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьОнбордингСобытияЛентыКонтрагентов()
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "СобытияЛентыКонтрагентовОнбординг");
ОписаниеЗакрытияФормы = НовыйОписаниеОповещения(
"ЗакрытОнбордингЛентыКонтрагентов",
ЭтаФорма
);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОписаниеЗакрытияФормы
);
КонецПроцедуры
//&НаКлиенте
Процедура ЗакрытОнбордингЛентыКонтрагентов(Результат, ДополнительныеПараметры) Экспорт
ИнициализироватьНастройку_НеПоказыватьОнбордингЛентыКонтрагентов();
КонецПроцедуры
// } Создание документов
// { Сопоставление документов
//&НаКлиенте
Процедура ВыполнитьСопоставитьДокументы(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СопоставлениеДокументов;
ДействиеМетрики = "Сопоставить";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ();
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().СопоставитьДокумент, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьСопоставитьДокументы", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьСопоставитьДокументы(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ВыполнитьМассовуюОбработкуДанных("СопоставитьДокументы", ДанныеДляОбработки, Действие);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура СопоставитьДокументы(КонтекстФункции)
ИмяМетода = "Документы_СопоставитьДокументы";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, КонтекстФункции.Данные);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Сопоставление документов
// { Анализ документов
//&НаКлиенте
Процедура ВыполнитьАнализДокументов(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Выполнить анализ документов";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(
ДанныеДляОбработки,
ДействияЭДО().АнализДокумента,
КатегорияМетрики,
ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьАнализДокументов", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьАнализДокументов(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ВыполнитьМассовуюОбработкуДанных("АнализДокументов", ДанныеДляОбработки, Действие);
КонецПроцедуры
Процедура АнализДокументов(КонтекстФункции)
ИмяМетода = "Документы_ПровестиАнализВходящихДокументов";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, КонтекстФункции.Данные);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Анализ документов
// { Анализ пакетов
//&НаКлиенте
Процедура ВыполнитьАнализПакетов(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Выполнить анализ";
ДанныеВыделенныхСтрок = ДанныеВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеВыделенныхСтрок.Количество());
ВыбранныеПакеты = Новый Соответствие;
Для Каждого СтрокаСписка Из ДанныеВыделенныхСтрок Цикл
ВыбранныеПакеты.Вставить(СтрокаСписка.Пакет);
КонецЦикла;
ДанныеДляОбработки = Новый Массив;
Для Каждого КлючЗначение Из ВыбранныеПакеты Цикл
ДанныеДляОбработки.Добавить(КлючЗначение.Ключ);
КонецЦикла;
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().АнализПакета, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьАнализаПакетов", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьАнализаПакетов(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ВыполнитьМассовуюОбработкуДанных("АнализПакетов", ДанныеДляОбработки, Действие);
КонецПроцедуры
Процедура АнализПакетов(КонтекстФункции)
ИмяМетода = "Пакеты_ПровестиАнализВходящихПакетов";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, КонтекстФункции.Данные);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Анализ пакетов
// { Выполнить требуемые действия
//&НаКлиенте
Процедура ВыполнитьТребуемоеДействие(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Выполнить действие в 1С";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ();
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ВыполнитьДействие, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьТребуемоеДействие", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьТребуемоеДействие(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ВыполнитьМассовуюОбработкуДанных("ТребуемоеДействие", ДанныеДляОбработки, Действие);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура ТребуемоеДействие(КонтекстФункции)
ИмяМетода = "Документы_ВыполнитьТребуемоеДействиеПоВходящимДокументам";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, КонтекстФункции.Данные);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Выполнить требуемые действия
// { Пометка документов завершенными
//&НаКлиенте
Процедура ВыполнитьПометитьДокументыКакЗавершенные(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Пометить как завершенный";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ();
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ПометитьКакЗавершенный, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПометитьДокументыКакЗавершенные", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьПометитьДокументыКакЗавершенные(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ОбновляемыеРеквизиты = Новый Структура;
ОбновляемыеРеквизиты.Вставить("ТребуемоеДействиеВ1С", "");
ОбновляемыеРеквизиты.Вставить("ТребуемоеДействиеВДД", "");
ОбновляемыеРеквизиты.Вставить("АнализПроведен", Истина);
ВыполнитьМассовуюОбработкуДанных("ПометитьДокументыКакЗавершенные", ДанныеДляОбработки, Действие, ОбновляемыеРеквизиты);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура ПометитьДокументыКакЗавершенные(КонтекстФункции)
ИмяМетода = "ХранениеДанных_ОбновлениеРеквизитовДокументов";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(
ИмяМетода,
КонтекстФункции.Данные,
КонтекстФункции.Параметры);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Пометка документов завершенными
// { Расшифровка
//&НаКлиенте
Процедура ВыполнитьРасшифроватьДокументы(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Расшифровать";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ();
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
Действие = ДействияЭДО().Расшифровать;
ДействиеДоступно = ДействиеДоступно(Действие, КатегорияМетрики, ДействиеМетрики);
Если ДействиеДоступно Тогда
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, Действие, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьРасшифроватьДокументы", ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьРасшифроватьДокументы(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ВыполнитьМассовуюОбработкуДанных("РасшифроватьДокументы", ДанныеДляОбработки, Действие);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура РасшифроватьДокументы(КонтекстФункции)
ДокументыДляРасшифровки = КонтекстФункции.Данные;
Для каждого Документ Из ДокументыДляРасшифровки Цикл
ХранилищеКонтента = Модуль_Ядро().Документы_Расшифровать(Документ.Идентификаторы);
КонецЦикла;
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции);
КонецПроцедуры
// } Расшифровка
// { Сохранение документов на диск
Процедура ВыполнитьСохранитьДокумент(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СкачиваниеДокументов;
ДействиеМетрики = "Скачать документы";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ПакетыДокументов, ДействияЭДО().СохранитьДокумент, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьСохранитьДокумент", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьСохранитьДокумент(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ВыполнитьМассовуюОбработкуДанных("СохранитьДокументы", ДанныеДляОбработки, Действие);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
Процедура СохранитьДокументы(КонтекстФункции)
ИмяМетода = "Сохранение_СохранитьДокументы";
ДокументыДляОбработки = ОчередьЗадач_ВыгрузитьДокументыИзМассиваПакетов(КонтекстФункции.Данные);
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, ДокументыДляОбработки);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Сохранение документов на диск
// { Получение печатных форм
Процедура ВыполнитьПолучитьПечатнуюФорму(Команда)
КатегорияМетрики = Метрика_НазваниеКатегории().СкачиваниеДокументов;
ДействиеМетрики = "Получить печатную форму";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ПолучитьПечатнуюФорму, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПолучитьПечатнуюФорму", ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработатьПолучитьПечатнуюФорму(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
Для Каждого Документ Из ДанныеДляОбработки Цикл
ПолучитьПечатнуюФормуСервераДиадок(Документ); // Без прогресса обработки, т.к. используется ЗапуститьПриложение.
КонецЦикла;
КонецПроцедуры
Процедура ПолучитьПечатнуюФормуСервераДиадок(Документ) Экспорт
ДвоичныеДанныеПечатнойФормы = Модуль_Ядро().Документы_ПечатнаяФормаСервераДиадок(Документ.Идентификаторы);
Модуль_Ядро().Метрика_ДобавитьСтатистику_СкачиваниеДокументов("Получить печатную форму", Документ);
Если ТипЗнч(ДвоичныеДанныеПечатнойФормы) = Тип("ДвоичныеДанные") Тогда
ПредставлениеДокумента = Модуль_Ядро().Документы_ПредставлениеДокумента(Документ);
ИмяФайлаПечатнойФормы = ПредставлениеДокумента + " - " + Документ.Идентификаторы.DocumentId + ".pdf";
ИмяФайлаПечатнойФормы = ЗаменитьНедопустимыеСимволыИмениФайла(ИмяФайлаПечатнойФормы);
#Если ВебКлиент Тогда
АдресПечатнойФормы = ПоместитьВоВременноеХранилище(ДвоичныеДанныеПечатнойФормы, УникальныйИдентификатор);
ПолучитьФайл(АдресПечатнойФормы, ИмяФайлаПечатнойФормы, Истина);
#Иначе
ПутьКФайлуПечатнойФормы = КаталогВременныхФайлов() + ИмяФайлаПечатнойФормы;
ДвоичныеДанныеПечатнойФормы.Записать(ПутьКФайлуПечатнойФормы);
ЗапуститьПриложение(ПутьКФайлуПечатнойФормы);
#КонецЕсли
Иначе
ОчиститьСообщения();
Сообщить("Печатная форма не сформирована!", СтатусСообщения.Важное);
КонецЕсли;
КонецПроцедуры
// } Получение печатных форм
// { Передача в подразделение
//&НаКлиенте
Процедура ВыполнитьПередатьВПодразделение(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Передать в подразделение";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(Истина, Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ПередатьВПодразделение, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПередатьВПодразделение", ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработатьПередатьВПодразделение(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ВыбранныеBoxId = BoxIdИзДокументов(ДанныеДляОбработки);
BoxId = ОбщийBoxId(ВыбранныеBoxId);
Если НЕ ЗначениеЗаполнено(BoxId) Тогда
Возврат;
КонецЕсли;
ПараметрыОбработки.Вставить("BoxId", BoxId);
ПараметрыФормы = Новый Структура("BoxId, Действие", ПараметрыОбработки.BoxId, ПараметрыОбработки.Действие);
ОписаниеОповещения = НовыйОписаниеОповещения("ПередатьВПодразделениеОкончаниеВыбора", ЭтаФорма, ПараметрыОбработки);
ОткрытьФормуДиадокМодально("Согласование", ЭтаФорма, ПараметрыФормы, ОписаниеОповещения);
КонецПроцедуры
Процедура ПередатьВПодразделениеОкончаниеВыбора(ПараметрыПеремещения, ПараметрыОбработки) Экспорт
Если ПараметрыПеремещения <> Неопределено Тогда
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ОписаниеОповещения = СвойствоСтруктуры(ПараметрыОбработки, "ОписаниеОповещения");
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("BoxId", ПараметрыПеремещения.BoxId);
ДополнительныеПараметры.Вставить("DepartmentId", ПараметрыПеремещения.DepartmentId);
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ПередатьВПодразделение", ПакетыДокументов, Действие, ДополнительныеПараметры, ОписаниеОповещения);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецЕсли;
КонецПроцедуры
Процедура ПередатьВПодразделение(КонтекстФункции)
ИмяМетода = "Документы_ПереместитьМассивДокументовВПодразделение";
ДокументыДляОбработки = ОчередьЗадач_ВыгрузитьДокументыИзМассиваПакетов(КонтекстФункции.Данные);
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(
ИмяМетода,
КонтекстФункции.Параметры.BoxId,
КонтекстФункции.Параметры.DepartmentId,
ДокументыДляОбработки);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Передача в подразделение
// { Согласование
//&НаКлиенте
Процедура ВыполнитьПередатьНаСогласование(Команда)
ВыполнитьДействиеПоМаршрутизации(ДействияЭДО().ПередатьНаСогласование);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьПередатьНаПодпись(Команда)
ВыполнитьДействиеПоМаршрутизации(ДействияЭДО().ПередатьНаПодпись);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьПередатьПоМаршруту(Команда)
ВыполнитьДействиеПоМаршрутизации(ДействияЭДО().ПередатьПоМаршруту);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьСогласовать(Команда)
ВыполнитьДействиеПоМаршрутизации(ДействияЭДО().Согласование);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьОтказатьВСогласовании(Команда)
ВыполнитьДействиеПоМаршрутизации(ДействияЭДО().ОтказВСогласовании);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьДействиеПоМаршрутизации(Действие)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = Метрика_НазваниеДействияМаршрутизации(Действие);
Если РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
ДанныеДляОбработки = ДанныеВыделенныхСтрокТЧ(Ложь);
ДокументыОтправлены = Ложь;
Иначе
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(, Истина);
ДокументыОтправлены = Истина;
КонецЕсли;
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, Действие, КатегорияМетрики, ДействиеМетрики);
ПараметрыОбработки.Вставить("ДокументыОтправлены", ДокументыОтправлены);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьДействиеПоМаршрутизации", ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработатьДействиеПоМаршрутизации(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ДокументыОтправлены = ПараметрыОбработки.ДокументыОтправлены;
ФормаВыполнения = ПараметрыОбработки.ФормаВыполнения;
Если ДокументыОтправлены
ИЛИ ФормаВыполнения <> ОсновнаяФорма() Тогда
ВыбранныеBoxId = BoxIdИзДокументов(ДанныеДляОбработки);
Иначе
ВыбранныеBoxId = BoxIdИзСтрокСписка(ДанныеДляОбработки);
КонецЕсли;
BoxId = ОбщийBoxId(ВыбранныеBoxId);
Если НЕ ЗначениеЗаполнено(BoxId) Тогда
Возврат;
КонецЕсли;
ПараметрыОбработки.Вставить("BoxId", BoxId);
ОтправкаИзФормыНовогоПакета = НЕ ДокументыОтправлены И (ФормаВыполнения <> ОсновнаяФорма());
Если ОтправкаИзФормыНовогоПакета Тогда
ДокументыДляОбработки = ДокументыПакетов(ДанныеДляОбработки);
Иначе
ДокументыДляОбработки = ДанныеДляОбработки;
КонецЕсли;
Если РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
ДокументыДоступныеДляОбработки = ДокументыДляОбработки;
Иначе
ДокументыДоступныеДляОбработки = Модуль_Ядро().Документы_ДоступныеДляСогласованияДокументы(ДокументыДляОбработки, Действие);
КонецЕсли;
КоличествоВыбранныхДокументов = ДокументыДляОбработки.Количество();
КоличествоДоступныхДокументов = ДокументыДоступныеДляОбработки.Количество();
ДоступныНеВсеДокументы = (КоличествоВыбранныхДокументов <> КоличествоДоступныхДокументов);
Если КоличествоДоступныхДокументов = 0
Или ДоступныНеВсеДокументы И ОтправкаИзФормыНовогоПакета Тогда
ПоказатьПредупреждениеОНевозможностиВыполненияДействия(ПараметрыОбработки);
Иначе
Если ДоступныНеВсеДокументы Тогда
ПараметрыОбработки.ДанныеДляОбработки = ДокументыДоступныеДляОбработки;
ОписаниеОповещенияЗавершения = НовыйОписаниеОповещения("ПослеВопросаОЧастичномСогласовании", ЭтаФорма, ПараметрыОбработки);
ПоказатьВопросОЧастичномВыполненииДействия(ПараметрыОбработки, ОписаниеОповещенияЗавершения);
Иначе
ОткрытьФормуСогласования(ПараметрыОбработки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОткрытьФормуСогласования(ПараметрыОбработки)
ОписаниеОповещения = НовыйОписаниеОповещения("ФормаСогласованияПослеЗакрытия", ЭтаФорма, ПараметрыОбработки);
ПараметрыФормы = Новый Структура("BoxId, Действие", ПараметрыОбработки.BoxId, ПараметрыОбработки.Действие);
ОткрытьФормуДиадокМодально("Согласование", ЭтаФорма, ПараметрыФормы, ОписаниеОповещения);
КонецПроцедуры
Процедура ФормаСогласованияПослеЗакрытия(ПараметрыСогласования = Неопределено, ПараметрыОбработки) Экспорт
Если ПараметрыСогласования <> Неопределено Тогда
ВыполнениеИзФормыПакета = (ПараметрыОбработки.ФормаВыполнения <> ОсновнаяФорма());
Если ВыполнениеИзФормыПакета Тогда
ОбработатьДействиеПоМаршрутизацииДляФормыПакета(ПараметрыСогласования, ПараметрыОбработки);
Иначе
ОбработатьДействиеПоМаршрутизацииДляОсновнойФормы(ПараметрыСогласования, ПараметрыОбработки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьДействиеПоМаршрутизацииДляОсновнойФормы(ПараметрыСогласования, ПараметрыОбработки)
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ДокументыОтправлены = ПараметрыОбработки.ДокументыОтправлены;
Если ДокументыОтправлены Тогда
Для Каждого Документ Из ДанныеДляОбработки Цикл
Документ.СлужебнаяИнформация.Вставить("Маршрутизация", ПараметрыСогласования);
КонецЦикла;
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ОтправитьДокументыНаМаршрутизацию", ПакетыДокументов, Действие);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
Иначе
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().Отправить, КатегорияМетрики, ДействиеМетрики);
ПараметрыОбработки.Вставить("ПараметрыСогласования", ПараметрыСогласования);
ОбработатьПакетыНаОтправку(, ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
Процедура ОтправитьДокументыНаМаршрутизацию(КонтекстФункции)
ИмяМетода = "Пакеты_МаршрутизироватьДокументыПакетов";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, КонтекстФункции.Данные);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
Процедура ОбработатьДействиеПоМаршрутизацииДляФормыПакета(ПараметрыСогласования, ПараметрыОбработки)
Ядро = Модуль_Ядро();
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ДокументыОтправлены = ПараметрыОбработки.ДокументыОтправлены;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
Если ДокументыОтправлены Тогда
РезультатОбработки = МаршрутизироватьОтправленныеДокументыНаСервере(ДанныеДляОбработки, ПараметрыСогласования);
Иначе
РезультатОбработки = МаршрутизироватьИОтправитьДокументыНаСервере(ДанныеДляОбработки, ПараметрыСогласования);
КонецЕсли;
ФормаВыполнения = ПараметрыОбработки.ФормаВыполнения;
Если РезультатОбработки.Отказ Тогда
ЗавершениеОбработкиДокументов(Действие, ФормаВыполнения);
Иначе
ФормаВыполнения.ОбновитьФорму(РезультатОбработки.Пакет);
ФормаВыполнения.ОповеститьОбИзмененииПакета();
Если НЕ ДокументыОтправлены Тогда
ФормаВыполнения.Закрыть();
КонецЕсли;
Пакеты_ВыполнитьОчисткуУстаревшихПодготовленных(Действие);
Если ФормаВыполнения.РежимОтображенияДокументов = РежимОтображенияДокументов
И ПараметрыОбработки.ГрупповоеДействие Тогда
ОбновитьГлавныйСписок();
КонецЕсли;
УведомитьОбУспешномВыполненииОперации(ПараметрыОбработки);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецЕсли;
КонецПроцедуры
Функция МаршрутизироватьОтправленныеДокументыНаСервере(Знач ДанныеДляОбработки, Знач ПараметрыСогласования)
Результат = Новый Структура;
Результат.Вставить("Пакет", Неопределено);
Результат.Вставить("Отказ", Ложь);
Ядро = Модуль_Ядро();
Для Каждого Документ Из ДанныеДляОбработки Цикл
Документ.СлужебнаяИнформация.Вставить("Маршрутизация", ПараметрыСогласования);
КонецЦикла;
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
Для Каждого Пакет Из ПакетыДокументов Цикл
РезультатМаршрутизации = Ядро.Пакеты_МаршрутизироватьДокументы(Пакет);
КонецЦикла;
ЗаполнитьЗначенияСвойств(Результат, РезультатМаршрутизации);
Возврат Результат;
КонецФункции
Функция МаршрутизироватьИОтправитьДокументыНаСервере(Знач ДанныеДляОбработки, Знач ПараметрыСогласования)
Результат = Новый Структура;
Результат.Вставить("Пакет", Неопределено);
Результат.Вставить("Отказ", Ложь);
Ядро = Модуль_Ядро();
Для Каждого Пакет Из ДанныеДляОбработки Цикл
Для Каждого Документ Из Пакет.Документы Цикл
Документ.СлужебнаяИнформация.Вставить("Маршрутизация", ПараметрыСогласования);
КонецЦикла;
ЗашифрованныйПакет = Ядро.СвойствоСтруктуры(Пакет.СлужебнаяИнформация, "ЗашифрованныйПакет");
Если ЗашифрованныйПакет = Истина Тогда
Ядро.Пакеты_ЗашифроватьФайлыВПакете(Пакет);
КонецЕсли;
РезультатОтправки = Ядро.Пакеты_ОтправитьИСохранить(Пакет);
КонецЦикла;
Результат.Пакет = Пакет;
Если НЕ РезультатОтправки Тогда
Результат.Отказ = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура УведомитьОбУспешномВыполненииОперации(ПараметрыОбработки) Экспорт
Перем ДокументыОтправлены;
Действие = ПараметрыОбработки.Действие;
ДействияЭДО = ДействияЭДО();
Если Действие = ДействияЭДО.ПередатьНаСогласование Тогда
ТекстСообщения = "Документ передан на согласование";
ИначеЕсли Действие = ДействияЭДО.ПередатьНаПодпись Тогда
ТекстСообщения = "Документ передан на подпись";
ИначеЕсли Действие = ДействияЭДО.ПередатьПоМаршруту Тогда
ТекстСообщения = "Документ передан по маршруту";
ИначеЕсли Действие = ДействияЭДО.Согласование Тогда
ТекстСообщения = "Документ согласован";
ИначеЕсли Действие = ДействияЭДО.ОтказВСогласовании Тогда
ТекстСообщения = "Отказано в согласовании документа";
ИначеЕсли Действие = ДействияЭДО.Аннулировать Тогда
ТекстСообщения = "Документ аннулирован";
ИначеЕсли Действие = ДействияЭДО.ОтказатьВАннулировании Тогда
ТекстСообщения = "Отказано в аннулировании документа";
ИначеЕсли Действие = ДействияЭДО.ПодписатьВходящий Тогда
ТекстСообщения = "Документ подписан";
ИначеЕсли Действие = ДействияЭДО.ОтказатьВПодписи Тогда
ТекстСообщения = "Отказано в подписании документа";
ИначеЕсли Действие = ДействияЭДО.ОтказВЗапросеПодписи Тогда
ТекстСообщения = "Отказано в запросе подписи";
ИначеЕсли Действие = ДействияЭДО.ЗапроситьУточнение Тогда
ТекстСообщения = "Запрошено уточнение";
ИначеЕсли Действие = ДействияЭДО.ПередатьВПодразделение Тогда
ТекстСообщения = "Документ передан в подразделение";
ИначеЕсли Действие = ДействияЭДО.ПометитьКакЗавершенный Тогда
ТекстСообщения = "Документ помечен как завершенный";
КонецЕсли;
Если ЗначениеЗаполнено(ТекстСообщения) Тогда
Если ПараметрыОбработки.Свойство("ДокументыОтправлены", ДокументыОтправлены)
И ДокументыОтправлены = Ложь Тогда
ТекстСообщения = СтрЗаменить(НРег(ТекстСообщения), "документ", "пакет");
ТекстСообщения = Врег(Лев(ТекстСообщения, 1)) + Сред(ТекстСообщения, 2);
КонецЕсли;
Состояние(ТекстСообщения);
КонецЕсли;
КонецПроцедуры
Процедура ПослеВопросаОЧастичномСогласовании(ПараметрОповещения, ПараметрыОбработки) Экспорт
Если ПараметрОповещения = КодВозвратаДиалога.Да Тогда
ОткрытьФормуСогласования(ПараметрыОбработки);
ИначеЕсли ПараметрОповещения = КодВозвратаДиалога.Прервать Тогда
ОткрытьФормуСпискаОшибок();
КонецЕсли;
КонецПроцедуры
// } Согласование
// { Аннулирование
//&НаКлиенте
Процедура ВыполнитьАннулировать(Команда) Экспорт
ВыполнитьДействиеПоАннулированию(ДействияЭДО().Аннулировать);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьОтказатьВАннулировании(Команда) Экспорт
ВыполнитьДействиеПоАннулированию(ДействияЭДО().ОтказатьВАннулировании);
КонецПроцедуры
Процедура ВыполнитьДействиеПоАннулированию(Действие)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = Метрика_НазваниеДействияАннулирования(Действие);
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(, Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ДействияЭДО = ДействияЭДО();
Если Действие = ДействияЭДО.Аннулировать Тогда
ДействиеДоступно = ДействиеДоступно(Действие, КатегорияМетрики, ДействиеМетрики);
Иначе
ДействиеДоступно = ДействиеДоступноЧерезУниверсальноеСообщение(
Действие,
КатегорияМетрики,
ДействиеМетрики,
ДанныеДляОбработки);
КонецЕсли;
Если ДействиеДоступно Тогда
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, Действие, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьДействиеПоАннулированию", ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьДействиеПоАннулированию(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ОбработкаАннулирования(ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработкаАннулирования(ПараметрыОбработки) Экспорт
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
Действие = ПараметрыОбработки.Действие;
ФормаВыполнения = ПараметрыОбработки.ФормаВыполнения;
ПараметрыОбработки.Удалить("ФормаВыполнения");
ДоступныеДанныеДляОбработки = Модуль_Ядро().Документы_ДоступныеДляАннулированияДокументы(
ДанныеДляОбработки,
Действие
);
КоличествоВыбранныхДокументов = ДанныеДляОбработки.Количество();
КоличествоДоступныхДокументов = ДоступныеДанныеДляОбработки.Количество();
Если КоличествоДоступныхДокументов = 0 Тогда
ПоказатьПредупреждениеОНевозможностиВыполненияДействия(ПараметрыОбработки);
Иначе
ПараметрыОбработки.ДанныеДляОбработки = ДоступныеДанныеДляОбработки;
ПараметрыФормы = ПараметрыФормыАннулированияОтказаВАннулировании(
Действие,
КоличествоВыбранныхДокументов,
КоличествоДоступныхДокументов,
ПараметрыОбработки
);
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОбработчикЗавершенияАннулированияОтказаВАннулировании",
ЭтаФорма,
ПараметрыОбработки
);
ОткрытьФормуДиадокМодально(
"ФормаВвода",
ФормаВыполнения,
ПараметрыФормы,
ОписаниеОповещения
);
КонецЕсли;
КонецПроцедуры
Функция ПараметрыФормыАннулированияОтказаВАннулировании(Действие, КоличествоДокументов, КоличествоДоступныхДокументов, ПараметрыОбработки)
Результат = ПараметрыФормыВвода();
Результат.Заголовок = "";
Результат.ТекстСообщения = "";
Результат.ТекстКнопкиВыполнить = "";
Результат.РежимПароля = Ложь;
Результат.ВозможноПустоеЗначение = Истина;
Результат.Действие = "";
Результат.ИдентификаторЯщика = ПараметрыОбработки.ИдентификаторЯщика;
Результат.ГрупповоеДействие = ПараметрыОбработки.ГрупповоеДействие;
Результат.КатегорияМетрикиДокумента = ПараметрыОбработки.КатегорияМетрики;
Результат.КонтрагентПоддерживаетМЧД = ПараметрыОбработки.КонтрагентПоддерживаетМЧД;
Если НЕ Результат.ГрупповоеДействие
И КоличествоДоступныхДокументов = 1 Тогда
Документ = ПараметрыОбработки.ДанныеДляОбработки[0];
Результат.ИдентификаторыДокумента = Документ.Идентификаторы;
КонецЕсли;
Если КоличествоДокументов = КоличествоДоступныхДокументов Тогда
Если Действие = "Аннулировать" Тогда
Результат.Заголовок = "Аннулирование документа";
Результат.ТекстСообщения = "По каждому документу будет подписано соответствующее уведомление или соглашение об аннулировании";
Результат.ТекстКнопкиВыполнить = "Аннулировать";
Результат.ВозможноПустоеЗначение = Ложь;
Результат.Действие = "Аннулировать";
Если ПараметрыОбработки.Свойство("ДействиеАннулироватьВложение") Тогда
Результат.Заголовок = "Аннулирование приглашений с вложениями";
КонецЕсли;
Иначе
Результат.Заголовок = "Отказ в аннулировании";
Результат.ТекстСообщения = "Документ сохранит юридическую значимость после отказа в аннулировании";
Результат.ТекстКнопкиВыполнить = "Отказать";
Результат.Действие = "ОтказатьВАннулировании";
КонецЕсли;
ИначеЕсли КоличествоДокументов > КоличествоДоступныхДокументов
И Не КоличествоДоступныхДокументов = 0 Тогда
Если Действие = "Аннулировать" Тогда
Результат.Заголовок = "Аннулирование доступных документов";
Результат.ТекстСообщения = "Среди выбранных есть документы, которые уже аннулированы или недоступны для аннулирования. "
+ "Для аннулирования доступных документов оставьте комментарий в поле ниже";
Результат.ТекстКнопкиВыполнить = "Аннулировать доступные документы (" + Формат(КоличествоДоступныхДокументов, "ЧГ=0") + ")";
Результат.ВозможноПустоеЗначение = Ложь;
Результат.Действие = "Аннулировать";
Иначе
Результат.Заголовок = "Отказ в аннулировании";
Результат.ТекстСообщения = "Среди выбранных есть документы, которые уже аннулированы или недоступны для аннулирования";
Результат.ТекстКнопкиВыполнить = "Отказать в аннулировании доступных документов (" + Формат(КоличествоДоступныхДокументов, "ЧГ=0") + ")";
Результат.Действие = "ОтказатьВАннулировании";
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ОбработчикЗавершенияАннулированияОтказаВАннулировании(РезультатАннулирования, ПараметрыОбработки) Экспорт
Если НЕ ЗначениеЗаполнено(РезультатАннулирования) Тогда
Возврат;
КонецЕсли;
Комментарий = РезультатАннулирования.Комментарий;
КонтрактМЧД = РезультатАннулирования.КонтрактМЧД;
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ОписаниеОповещения = СвойствоСтруктуры(ПараметрыОбработки, "ОписаниеОповещения");
Для Каждого Документ Из ДанныеДляОбработки Цикл
Документ.СлужебнаяИнформация.Вставить("КонтентОтвета", Комментарий);
КонецЦикла;
Если НЕ ПараметрыОбработки.ГрупповоеДействие Тогда
// при групповом дейтсвии контракт уже заполнен в документе
ДополнитьДокументыСведениямиМЧДНаКлиенте(ДанныеДляОбработки, КонтрактМЧД);
КонецЕсли;
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ОбработатьДокументыСПодписанием", ПакетыДокументов, Действие, Действие, ОписаниеОповещения);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецПроцедуры
// } Аннулирование
// { Отправка пакетов
//&НаКлиенте
Процедура ВыполнитьПодписаниеИОтправку(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Подписать и отправить";
ДанныеДляОбработки = ДанныеВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
Действие = ДействияЭДО().ПодписатьИОтправить;
ДействиеДоступно = ДействиеДоступно(Действие, КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
Если ДействиеДоступно Тогда
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, Действие, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПакетыНаОтправку", ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Функция ДействиеДоступно(Действие, КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки = Неопределено)
Результат = Истина;
Если Не ЕстьСертификаты Тогда
ДействияЭДО = ДействияЭДО();
Если ЗначениеЗаполнено(ДанныеДляОбработки) Тогда
ТребуетсяСертификат = ТребуетсяПодписьДокументов(ДанныеДляОбработки);
Иначе
ТребуетсяСертификат = Истина;
КонецЕсли;
Если ТребуетсяСертификат Тогда
Если Действие = ДействияЭДО.ПодписатьИОтправить
ИЛИ Действие = ДействияЭДО.ПодписатьВходящий
ИЛИ Действие = ДействияЭДО.ОтказатьВПодписи Тогда
ТекстСообщения = "Подписание недоступно под логином.
|Авторизуйтесь с помощью сертификата или передайте документ на подпись сотруднику c сертификатом.";
ИначеЕсли Действие = ДействияЭДО.Аннулировать
ИЛИ Действие = ДействияЭДО.ОтказатьВАннулировании Тогда
ТекстСообщения = "Аннулирование недоступно под логином.
|Авторизуйтесь с помощью сертификата.";
ИначеЕсли Действие = ДействияЭДО.Расшифровать Тогда
ТекстСообщения = "Расшифровка документов недоступна под логином.
|Авторизуйтесь с помощью сертификата.";
КонецЕсли;
Если ЗначениеЗаполнено(ТекстСообщения) Тогда
Модуль_Ядро().Метрика_ДобавитьОшибку_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, ТекстСообщения);
Сообщить(ТекстСообщения, СтатусСообщения.Информация);
Результат = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ДействиеДоступноЧерезУниверсальноеСообщение(Действие, КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки)
Если НЕ ЗначениеЗаполнено(ДанныеДляОбработки) Тогда
Возврат Истина;
КонецЕсли;
ДействияЭДО = ДействияЭДО();
Если Действие <> ДействияЭДО.ОтказатьВПодписи
И Действие <> ДействияЭДО.ОтказатьВАннулировании Тогда
Возврат Ложь;
КонецЕсли;
Результат = Ложь;
Ядро = Модуль_Ядро();
ВыбранныеBoxId = BoxIdИзДокументов(ДанныеДляОбработки);
ЯщикиБезПраваНаФормированиеУС = Новый Массив;
Для Каждого BoxId Из ВыбранныеBoxId Цикл
ФормироватьУС = Ядро.УС_ДоступноФормированиеУниверсальныхСообщений(BoxId);
Если ФормироватьУС = Неопределено Тогда
Результат = ДействиеДоступно(Действие, КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
Возврат Результат;
Иначе
Результат = Результат ИЛИ ФормироватьУС;
Если НЕ ФормироватьУС Тогда
ЯщикиБезПраваНаФормированиеУС.Добавить(BoxId);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НЕ Результат Тогда
ПоказатьПредупреждениеОбОтсутствииПравНаФормированиеУС(ЯщикиБезПраваНаФормированиеУС);
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ПоказатьПредупреждениеОбОтсутствииПравНаФормированиеУС(ЯщикиБезПраваНаФормированиеУС)
ТекстHTML = HTML_ПредупреждениеОбОтсутствииПравНаФормированиеУС(ЯщикиБезПраваНаФормированиеУС);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ТекстСообщения", ТекстHTML);
ОповещениеОЗакрытииФормы = Неопределено;
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОповещениеОЗакрытииФормы,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецПроцедуры
//&НаКлиенте
Функция ТребуетсяПодписьДокументов(ВыбранныеДокументы)
Результат = Ложь;
Для Каждого ВыбранныйДокумент Из ВыбранныеДокументы Цикл
Если Не ВыбранныйДокумент.Шаблон Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ОбработатьПакетыНаОтправку(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
РежимыОтображения = РежимыОтображения();
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
Если РежимОтображенияДокументов = РежимыОтображения.Исходящие Тогда
ДанныеДляОбработки = Модуль_Ядро().Документы_ОтложенныеДокументыДляОтправкиКонтрагенту(ДанныеДляОбработки);
ОбрабатываемыеПакеты = Новый Массив;
ДоступныеДанныеДляОбработки = Новый Массив;
Для Каждого СтрокаСписка Из ДанныеДляОбработки Цикл
Если ОбрабатываемыеПакеты.Найти(СтрокаСписка.LetterId) = Неопределено Тогда
ОбрабатываемыеПакеты.Добавить(СтрокаСписка.LetterId);
ДоступныеДанныеДляОбработки.Добавить(СтрокаСписка);
КонецЕсли;
КонецЦикла;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Внутренние Тогда
ДанныеДляОбработки = Модуль_Ядро().Документы_ОтложенныеДокументыДляОтправкиВПодразделение(ДанныеДляОбработки);
ОбрабатываемыеПакеты = Новый Массив;
ДоступныеДанныеДляОбработки = Новый Массив;
Для Каждого СтрокаСписка Из ДанныеДляОбработки Цикл
Если ОбрабатываемыеПакеты.Найти(СтрокаСписка.LetterId) = Неопределено Тогда
ОбрабатываемыеПакеты.Добавить(СтрокаСписка.LetterId);
ДоступныеДанныеДляОбработки.Добавить(СтрокаСписка);
КонецЕсли;
КонецЦикла;
Иначе
ДоступныеДанныеДляОбработки = ДанныеДляОбработки;
КонецЕсли;
КоличествоВыбранныхДокументов = ДанныеДляОбработки.Количество();
КоличествоДоступныхДокументов = ДоступныеДанныеДляОбработки.Количество();
Если КоличествоДоступныхДокументов = 0 Тогда
ПоказатьПредупреждениеОНевозможностиВыполненияДействия(ПараметрыОбработки);
Иначе
ПараметрыСогласования = СвойствоСтруктуры(ПараметрыОбработки, "ПараметрыСогласования");
ВыполнитьМассовуюОбработкуДанных("ПакетДляОтправки", ДоступныеДанныеДляОбработки, Действие, ПараметрыСогласования);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДоступныеДанныеДляОбработки);
КонецЕсли;
КонецПроцедуры
Процедура ПакетДляОтправки(КонтекстФункции)
Пакеты = КонтекстФункции.Данные;
ПараметрыСогласования = КонтекстФункции.Параметры;
ТекущаяОперация = ДлительныеОперации_ПодготовитьПакетыДляОтправки(Пакеты);
КонтекстФункции.Очистить();
КонтекстФункции.Вставить("Обработчик", "ОтправитьПакет");
КонтекстФункции.Вставить("ТекущаяОперация", ТекущаяОперация);
КонтекстФункции.Вставить("ПараметрыСогласования", ПараметрыСогласования);
КонецПроцедуры
Функция ДлительныеОперации_ПодготовитьПакетыДляОтправки(Знач Пакеты)
ИмяМетода = "Пакеты_ПодготовитьПакетыДляОтправки";
ПроверятьXDTO = Ложь;
Результат = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, Пакеты, ПроверятьXDTO);
Возврат Результат;
КонецФункции
Процедура ОтправитьПакет(КонтекстФункции)
Ядро = Модуль_Ядро();
ТекущаяОперация = СвойствоСтруктуры(КонтекстФункции, "ТекущаяОперация");
Если ТекущаяОперация = Неопределено Тогда
Пакеты = КонтекстФункции.Данные;
Иначе
Пакеты = Модуль_Платформа().ДлительныеОперации_Результат(КонтекстФункции.ТекущаяОперация.АдресРезультата);
КонтекстФункции.Удалить("ТекущаяОперация");
КонецЕсли;
ПакетыДляОтправки = Новый Массив;
Для каждого Пакет Из Пакеты Цикл
ОшибкиОтправки = СвойствоСтруктуры(Пакет.СлужебнаяИнформация, "ОшибкиОтправки");
Если ЗначениеЗаполнено(ОшибкиОтправки) Тогда
Ядро.Пакеты_Сохранить(Пакет);
ИначеЕсли Пакет <> Неопределено Тогда
ПакетыДляОтправки.Добавить(Пакет);
КонецЕсли;
КонецЦикла;
ПараметрыСогласования = КонтекстФункции.ПараметрыСогласования;
Если ПараметрыСогласования = Неопределено Тогда
ПакетыДляОтправки = Модуль_Ядро().Пакеты_ПередПодписаниемПакетовНаОтправку(ПакетыДляОтправки);
Для каждого ПакетНаПодпись Из ПакетыДляОтправки Цикл
Если НЕ ПакетНаПодпись.Шаблон Тогда
Ядро.Пакеты_ДобавитьПодписиФайловПакета(ПакетНаПодпись, "");
КонецЕсли;
КонецЦикла;
Иначе
Для каждого Пакет Из ПакетыДляОтправки Цикл
Для Каждого ОписаниеДокумента Из Пакет.Документы Цикл
ОписаниеДокумента.СлужебнаяИнформация.Вставить("Маршрутизация", ПараметрыСогласования);
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(ПакетыДляОтправки) Тогда
Для каждого Пакет Из ПакетыДляОтправки Цикл
ЗашифрованныйПакет = СвойствоСтруктуры(Пакет.СлужебнаяИнформация, "ЗашифрованныйПакет");
Если ЗашифрованныйПакет = Истина Тогда
Ядро.Пакеты_ЗашифроватьФайлыВПакете(Пакет);
КонецЕсли;
КонецЦикла;
ИмяМетода = "Пакеты_ОтправитьИСохранитьПоСписку";
ТекущаяОперация = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, ПакетыДляОтправки);
КонецЕсли;
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ТекущаяОперация);
КонецПроцедуры
// } Отправка пакетов
// { Отправка готовых ответов
//&НаКлиенте
Процедура ВыполнитьОтправитьГотовыеОтветы(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Ответить контрагенту";
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(, Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ОтправитьОтвет, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьОтправкуГотовыхОтветов", ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработатьОтправкуГотовыхОтветов(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ДоступныеДанныеДляОбработки = Новый Массив;
Для Каждого Документ Из ДанныеДляОбработки Цикл
Если ЗначениеЗаполнено(Документ.РезультатАнализа.ТребуемоеДействиеВДД) Тогда
ДоступныеДанныеДляОбработки.Добавить(Документ);
КонецЕсли;
КонецЦикла;
КоличествоВыбранныхДокументов = ДанныеДляОбработки.Количество();
КоличествоДоступныхДокументов = ДоступныеДанныеДляОбработки.Количество();
Если КоличествоДоступныхДокументов = 0 Тогда
ПоказатьПредупреждениеОНевозможностиВыполненияДействия(ПараметрыОбработки);
Иначе
Ядро = Модуль_Ядро();
Если КоличествоВыбранныхДокументов > КоличествоДоступныхДокументов Тогда
ПараметрыОбработки.ДанныеДляОбработки = ДоступныеДанныеДляОбработки;
ОписаниеОповещенияЗавершения = НовыйОписаниеОповещения(
"ОбработатьСогласиеОЧастичнойОтправкеГотовыхОтветов",
ЭтаФорма,
ПараметрыОбработки
);
ПоказатьВопросОЧастичномВыполненииДействия(ПараметрыОбработки, ОписаниеОповещенияЗавершения);
Иначе
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДоступныеДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ОбработатьДокументыСПодписанием", ПакетыДокументов, Действие);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(
КатегорияМетрики,
ДействиеМетрики,
ДоступныеДанныеДляОбработки
);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьСогласиеОЧастичнойОтправкеГотовыхОтветов(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Если ПараметрОповещения = КодВозвратаДиалога.Да Тогда
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ОбработатьДокументыСПодписанием", ПакетыДокументов, Действие);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
ИначеЕсли ПараметрОповещения = КодВозвратаДиалога.Прервать Тогда
ОткрытьФормуСпискаОшибок();
КонецЕсли;
КонецПроцедуры
// } Отправка готовых ответов
// { Подписать входящие
//&НаКлиенте
Процедура ВыполнитьПодписатьВходящие(Команда)
ВыполнитьПодписатьИлиОтказатьВходящие(ДействияЭДО().ПодписатьВходящий);
КонецПроцедуры
//&НаКлиенте
Процедура ВыполнитьПодписатьИлиОтказатьВходящие(Действие)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = Метрика_НазваниеДействияПодписание(Действие);
ДанныеДляОбработки = ДанныеДокументовВыделенныхСтрокТЧ(, Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ДействияЭДО = ДействияЭДО();
Если Действие = ДействияЭДО.ПодписатьВходящий Тогда
ДействиеДоступно = ДействиеДоступно(Действие, КатегорияМетрики, ДействиеМетрики);
Иначе
ДействиеДоступно = ДействиеДоступноЧерезУниверсальноеСообщение(
Действие,
КатегорияМетрики,
ДействиеМетрики,
ДанныеДляОбработки);
КонецЕсли;
Если ДействиеДоступно Тогда
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, Действие, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПодписатьВходящие", ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьПодписатьВходящие(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ДоступныеДанныеДляОбработки = Модуль_Ядро().Документы_ДоступныеДляПодписанияВходящие(ДанныеДляОбработки, Действие);
КоличествоВыбранныхДокументов = ДанныеДляОбработки.Количество();
КоличествоДоступныхДокументов = ДоступныеДанныеДляОбработки.Количество();
Если КоличествоДоступныхДокументов = 0 Тогда
ПоказатьПредупреждениеОНевозможностиВыполненияДействия(ПараметрыОбработки);
Иначе
Если КоличествоВыбранныхДокументов > КоличествоДоступныхДокументов Тогда
ПараметрыОбработки.ДанныеДляОбработки = ДоступныеДанныеДляОбработки;
ОписаниеОповещенияЗавершения = НовыйОписаниеОповещения("ОбработатьСогласиеОЧастичномПодписанииВходящих", ЭтаФорма, ПараметрыОбработки);
ПоказатьВопросОЧастичномВыполненииДействия(ПараметрыОбработки, ОписаниеОповещенияЗавершения);
Иначе
Если Действие = ДействияЭДО().ПодписатьВходящий Тогда
ЗапроситьДанныеДляОтветныхТитулов(, ПараметрыОбработки);
Иначе
ЗапроситьКомментарийДляОтказаВПодписи(, ПараметрыОбработки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьСогласиеОЧастичномПодписанииВходящих(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Если ПараметрОповещения = КодВозвратаДиалога.Да Тогда
Действие = ПараметрыОбработки.Действие;
Если Действие = ДействияЭДО().ПодписатьВходящий Тогда
ЗапроситьДанныеДляОтветныхТитулов(, ПараметрыОбработки);
Иначе
ЗапроситьКомментарийДляОтказаВПодписи(, ПараметрыОбработки);
КонецЕсли;
ИначеЕсли ПараметрОповещения = КодВозвратаДиалога.Прервать Тогда
ОткрытьФормуСпискаОшибок();
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ЗапроситьДанныеДляОтветныхТитулов(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Ядро = Модуль_Ядро();
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ДанныеДляПодписания = Ядро.Документы_ВидыДокументовДляПодписания(ДанныеДляОбработки);
ПараметрыОбработки.Вставить("ДанныеДляПодписания", ДанныеДляПодписания);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДатаДокумента", ТекущаяДата());
ПараметрыФормы.Вставить("ГрупповоеДействие", ПараметрыОбработки.ГрупповоеДействие);
Для Каждого КлючЗначение Из ДанныеДляПодписания Цикл
ВидДокумента = КлючЗначение.Значение;
ТипКонтента = ВидДокумента.ТипКонтента;
ТолькоАктыСРазногласиями = ВыбраныТолькоФормализованныеАктыСверокСРазногласиями(ДанныеДляОбработки, ТипКонтента);
Если ТолькоАктыСРазногласиями Тогда
Продолжить;
КонецЕсли;
ПараметрыФормы.Вставить("ИдентификаторЯщика", ВидДокумента.BoxId);
ПараметрыФормы.Вставить("ТипДокумента", ВидДокумента.ТипДокумента);
ПараметрыФормы.Вставить("ТипКонтента", ТипКонтента);
ПараметрыФормы.Вставить("КонтрагентПоддерживаетМЧД" , ПараметрыОбработки.КонтрагентПоддерживаетМЧД);
ОписаниеОповещения = НовыйОписаниеОповещения("ЗапросДанныхДляОтветныхТитуловПослеЗакрытия", ЭтаФорма, ПараметрыОбработки);
ОткрытьФормуДиадокМодально("ТитулПокупателя", ЭтаФорма, ПараметрыФормы, ОписаниеОповещения);
КонецЦикла;
КонецПроцедуры
// Для ОФ не используется
//
Функция ВыбраныТолькоФормализованныеАктыСверокСРазногласиями(ДанныеДляОбработки, ТипКонтента)
Результат = Ложь;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ЗапросДанныхДляОтветныхТитуловПослеЗакрытия(ДанныеОтвета, ПараметрыОбработки) Экспорт
Если ДанныеОтвета <> Неопределено Тогда
ДанныеДляПодписания = ПараметрыОбработки.ДанныеДляПодписания;
ДопПараметры = ДанныеОтвета.ДополнительныеПараметры;
BoxId = ДопПараметры.BoxId;
ТипДокумента = ДопПараметры.ТипДокумента;
ТипКонтента = ДопПараметры.ТипКонтента;
КлючШаблонаОтветногоТитула = КлючШаблонаОтветногоТитула(BoxId, ТипДокумента, ТипКонтента);
ДанныеДляПодписания[КлючШаблонаОтветногоТитула].ДанныеОтвета = ДанныеОтвета;
ВсеВидыТитуловЗаполнены = Истина;
Для Каждого КлючЗначение Из ДанныеДляПодписания Цикл
ОтветДляДокумента = КлючЗначение.Значение;
Если НЕ ЗначениеЗаполнено(ОтветДляДокумента.ДанныеОтвета) Тогда
ВсеВидыТитуловЗаполнены = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ВсеВидыТитуловЗаполнены Тогда
ЗаполнитьКонтентОтвета(ПараметрыОбработки);
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ДополнитьАктыСверкиДаннымиОтправителяАктаСверки(ДанныеДляОбработки, ПараметрыОбработки.Действие);
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ОбработатьДокументыСПодписанием", ПакетыДокументов, ДействияЭДО().ОтправитьОтвет);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ЗаполнитьКонтентОтвета(ПараметрыОбработки)
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ДанныеДляПодписания = ПараметрыОбработки.ДанныеДляПодписания;
ОтветЭДО = ОтветыЭДО()[Действие];
Модуль_Ядро = Модуль_Ядро();
Для Каждого Документ Из ДанныеДляОбработки Цикл
BoxId = Документ.Идентификаторы.BoxId;
ТипДокумента = Документ.Тип.ТипДокумента;
ТипКонтента = Документ.Тип.ТипКонтента;
Если Не Модуль_Ядро.Документы_ФормироватьОтветныйТитул(Документ) Тогда
ТипКонтента = "";
КонецЕсли;
КлючШаблонаОтветногоТитула = КлючШаблонаОтветногоТитула(BoxId, ТипДокумента, ТипКонтента);
ДанныеОтвета = ДанныеДляПодписания[КлючШаблонаОтветногоТитула].ДанныеОтвета;
Если ЭтоФормализованныйАктСверки405(ТипКонтента) Тогда
ДанныеОтвета = Модуль_Ядро.КопияКоллекцииЗначений(ДанныеОтвета);
КонецЕсли;
Документ.СлужебнаяИнформация.Вставить("КонтентОтвета", ДанныеОтвета);
Документ.СлужебнаяИнформация.Вставить("КонтрактМЧД", ДанныеОтвета.ДополнительныеПараметры.КонтрактМЧД);
Документ.РезультатАнализа.ТребуемоеДействиеВДД = ОтветЭДО;
КонецЦикла;
КонецПроцедуры
//&НаКлиенте
Функция КлючШаблонаОтветногоТитула(BoxId, ТипДокумента, ТипКонтента)
Возврат BoxId + "_" + ТипДокумента + "_" + ТипКонтента;
КонецФункции
//&НаКлиенте
Процедура ДополнитьАктыСверкиДаннымиОтправителяАктаСверки(ДанныеДляОбработки, Действие)
Если Действие <> ДействияЭДО().ПодписатьВходящий Тогда
Возврат;
КонецЕсли;
Для Каждого Документ Из ДанныеДляОбработки Цикл
ТипКонтента = Документ.Тип.ТипКонтента;
Если НЕ ЭтоФормализованныйАктСверки405(ТипКонтента) Тогда
Продолжить;
КонецЕсли;
КонтентОтвета = Документ.СлужебнаяИнформация.КонтентОтвета;
IdentityInfoSender = КонтентОтвета.ReconciliationAct.IdentityInfoSender;
Модуль_Ядро().Документы_ЗаполнитьХранилищеКонтента(Документ);
IdentityInfoSender.BaseIdFile = СтрЗаменить(Документ.Метаданные.FileName, ".xml", "");
IdentityInfoSender.DateFileInfoSender = Документ.СлужебнаяИнформация.Контент.DateCreateFile;
IdentityInfoSender.TimeFileInfoSender = Документ.СлужебнаяИнформация.Контент.TimeCreateFile;
IdentityInfoSender.SignSender = Документ.Документооборот.ХранилищеКонтента.Подпись.ДанныеПодписи;
КонецЦикла;
КонецПроцедуры
// } Подписать входящие
// { Отказ в подписи входящих
//&НаКлиенте
Процедура ВыполнитьОтказатьВПодписиВходящих(Команда)
ВыполнитьПодписатьИлиОтказатьВходящие(ДействияЭДО().ОтказатьВПодписи);
КонецПроцедуры
Процедура ЗапроситьКомментарийДляОтказаВПодписи(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Ядро = Модуль_Ядро();
ВыбранныеBoxId = BoxIdИзДокументов(ПараметрыОбработки.ДанныеДляОбработки);
Если ВыбранныеBoxId.Количество() = 1 Тогда
BoxId = ВыбранныеBoxId[0];
ФормироватьУС = Ядро.УС_ДоступноФормированиеУниверсальныхСообщений(BoxId);
Если ФормироватьУС = Неопределено Тогда
ПредставлениеПодписанта = Ядро.Подписант_ПредставлениеПодписанта(BoxId);
КонецЕсли;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПредставлениеПодписанта" , ПредставлениеПодписанта);
ПараметрыФормы.Вставить("АдресЯщика" , BoxId);
ПараметрыФормы.Вставить("ГрупповоеДействие" , ПараметрыОбработки.ГрупповоеДействие);
ПараметрыФормы.Вставить("КонтрагентПоддерживаетМЧД" , ПараметрыОбработки.КонтрагентПоддерживаетМЧД);
ОписаниеОповещения = НовыйОписаниеОповещения("ЗапросКомментарияДляОтказаВПодписиПослеЗакрытия", ЭтаФорма, ПараметрыОбработки);
ОткрытьФормуДиадокМодально("ФормаОтветаПоДокументу", ЭтаФорма, ПараметрыФормы, ОписаниеОповещения);
КонецПроцедуры
//&НаКлиенте
Процедура ЗапросКомментарияДляОтказаВПодписиПослеЗакрытия(ДанныеОтвета, ПараметрыОбработки) Экспорт
Если ДанныеОтвета <> Неопределено Тогда
ЗаполнитьОтветДляОтказаВПодписи(ПараметрыОбработки, ДанныеОтвета);
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
Ядро = Модуль_Ядро();
ПакетыДокументов = Ядро.СгруппироватьДокументыПоПакетам(ДанныеДляОбработки);
ВыполнитьМассовуюОбработкуДанных("ОбработатьДокументыСПодписанием", ПакетыДокументов, ДействияЭДО().ОтправитьОтвет);
Ядро.Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ЗаполнитьОтветДляОтказаВПодписи(ПараметрыОбработки, ДанныеОтвета)
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
ОтветЭДО = ОтветыЭДО()[Действие];
Для Каждого Документ Из ДанныеДляОбработки Цикл
Документ.СлужебнаяИнформация.Вставить("КонтентОтвета", ДанныеОтвета);
Документ.РезультатАнализа.ТребуемоеДействиеВДД = ОтветЭДО;
КонецЦикла;
КонтрактМЧД = СвойствоСтруктуры(ДанныеОтвета.ДополнительныеПараметры, "КонтрактМЧД");
ДополнитьДокументыСведениямиМЧДНаКлиенте(ДанныеДляОбработки, КонтрактМЧД);
КонецПроцедуры
// } Отказ в подписи входящих
// { Перезаполнение
//&НаКлиенте
Процедура ВыполнитьПерезаполнениеПакета(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Перезаполнить";
ДанныеДляОбработки = ДанныеВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ПерезаполнитьПакет, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПерезаполнениеПакетов", ПараметрыОбработки);
КонецПроцедуры
Процедура ОбработатьПерезаполнениеПакетов(ПараметрОповещения = Неопределено, ПараметрыОбработки = Неопределено) Экспорт
Отказ = Ложь;
Действие = ПараметрыОбработки.Действие;
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
БылоПредыдущееДействие = ПараметрыОбработки.Свойство("ПредыдущееДействие");
Если БылоПредыдущееДействие Тогда
СписокОшибок = Модуль_Ядро().СписокОшибок();
Если ЗначениеЗаполнено(СписокОшибок) Тогда
ПоказатьОшибкиОбработкиДанных(Действие, ЭтаФорма);
ОбновитьСписок();
Отказ = Истина;
КонецЕсли;
КонецЕсли;
Если НЕ Отказ Тогда
ДанныеДляПерезаполнения = Новый Массив;
Пакеты = Новый Массив;
Для Каждого СтрокаСписка Из ДанныеДляОбработки Цикл
Если ЗначениеЗаполнено(СтрокаСписка.Пакет) Тогда
Ключ = СтрокаСписка.Пакет;
Иначе
Ключ = СтрокаСписка.LetterId;
КонецЕсли;
Если ЗначениеЗаполнено(Ключ) Тогда
Если Пакеты.Найти(Ключ) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Пакеты.Добавить(Ключ);
КонецЕсли;
ДанныеДляПерезаполнения.Добавить(СтрокаСписка);
КонецЦикла;
ВыполнитьМассовуюОбработкуДанных("ПерезаполнитьПакет", ДанныеДляПерезаполнения, Действие);
Модуль_Ядро().Метрика_ДобавитьСтатистику_МассовоеДействиеПоДокументам(КатегорияМетрики, ДействиеМетрики, ДанныеДляПерезаполнения);
КонецЕсли;
КонецПроцедуры
Процедура ПерезаполнитьПакет(КонтекстФункции)
ИмяМетода = "Пакеты_ПерезаполнитьПакетыПоСтрокамСписка";
СтрокиСписка = КонтекстФункции.Данные;
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, СтрокиСписка);
КонтекстФункции.Вставить("Обработчик", "ЗаполнитьПараметрыПереотправки");
КонтекстФункции.Вставить("ТекущаяОперация", ОписаниеЗадачи);
КонецПроцедуры
Процедура ЗаполнитьПараметрыПереотправки(КонтекстФункции)
ОписаниеПакетов = Модуль_Платформа().ДлительныеОперации_Результат(КонтекстФункции.ТекущаяОперация.АдресРезультата);
ПакетыДляОтправки = Новый Массив;
ПакетыДляСохранения = Новый Массив;
Для каждого ОписаниеПакета Из ОписаниеПакетов Цикл
ПерезаполненныйПакет = ОписаниеПакета.ПерезаполненныйПакет;
СтрокаСписка = ОписаниеПакета.СтрокаСписка;
ПерезаполняемыйПакет = ОписаниеПакета.ПерезаполняемыйПакет;
ПакетОтправлен = ОписаниеПакета.ПакетОтправлен;
Если ПерезаполненныйПакет = Неопределено Тогда
ЕстьОшибкиВалидации = ВыполнитьВалидациюПереотправляемогоПакета(СтрокаСписка);
Если НЕ ЕстьОшибкиВалидации Тогда
ТекстСообщения = "Не удалось переотправить пакет документов: " + ПерезаполняемыйПакет.ПакетЭДО;
_ОбработатьОшибку(
"Не удалось переотправить пакет документов",
ТекстСообщения
);
КонецЕсли;
Иначе
ПараметрыПереотправки = ПерезаполненныйПакет.СлужебнаяИнформация.ПараметрыПереотправки;
Если ПакетОтправлен Тогда
ПараметрыПереотправки.ПереотправляемыйПакет = ПерезаполняемыйПакет;
Если Не ЗначениеЗаполнено(ПерезаполняемыйПакет.ПакетЭДО) Тогда
ПараметрыПереотправки.ВыполнитьУдалениеНеактуальныхДокументовПакета = Истина;
КонецЕсли;
ПакетыДляОтправки.Добавить(ПерезаполненныйПакет);
Иначе
Если ПерезаполняемыйПакет <> Неопределено Тогда
ПараметрыПереотправки.ВыполнитьУдалениеНеактуальныхДокументовПакета = Истина;
ПерезаполненныйПакет.Идентификаторы.ПакетЭДО = ПерезаполняемыйПакет.ПакетЭДО;
СтрокаСписка.Пакет = ПерезаполняемыйПакет.ПакетЭДО;
КонецЕсли;
ПакетыДляСохранения.Добавить(ПерезаполненныйПакет);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ПакетыДляСохранения.Количество() Тогда
Модуль_Ядро().Пакеты_СохранитьПоСписку(ПакетыДляСохранения);
КонецЕсли;
Если ПакетыДляОтправки.Количество() Тогда
КонтекстФункции.Удалить("ТекущаяОперация");
КонтекстФункции.Вставить("Данные" , ПакетыДляОтправки);
КонтекстФункции.Вставить("Обработчик" , "ОтправитьПакет");
КонтекстФункции.Вставить("ПараметрыСогласования", Неопределено);
Иначе
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции);
КонецЕсли;
КонецПроцедуры
Функция ВыполнитьВалидациюПереотправляемогоПакета(СтрокаСписка)
Ядро = Модуль_Ядро();
Результат = Ядро.СписокДокументов_ВалидацияПереотправляемогоПакета(СтрокаСписка);
Возврат Результат;
КонецФункции
// } Перезаполнение
// { Перезаполнение и отправка
//&НаКлиенте
Процедура ВыполнитьПерезаполнитьИОтправить(Команда)
КатегорияМетрики = Метрика_НазваниеКатегорииРежимаОтображения();
ДействиеМетрики = "Перезаполнить и отправить";
ДанныеДляОбработки = ДанныеВыделенныхСтрокТЧ(Истина);
Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, ДанныеДляОбработки.Количество());
Если Не ЕстьСертификаты Тогда
ТекстОшибки = "Подписание недоступно под логином. Авторизуйтесь с помощью сертификата.";
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьОшибку_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, ТекстОшибки);
Сообщить(ТекстОшибки, СтатусСообщения.Информация);
Возврат;
КонецЕсли;
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки, ДействияЭДО().ПереотправитьПакет, КатегорияМетрики, ДействиеМетрики);
ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок("ОбработатьПерезаполнитьИОтправитьПакеты", ПараметрыОбработки);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьПерезаполнитьИОтправитьПакеты(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
ОписаниеОповещения = НовыйОписаниеОповещения("ОбработчикЗапросаАннулированияПереотправляемыхПакетов", ЭтаФорма, ПараметрыОбработки);
ТекстВопроса = "Запросить аннулирование ранее отправленных документов?";
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(КодВозвратаДиалога.Да);
КнопкиВопроса.Добавить(КодВозвратаДиалога.Нет);
КнопкаПоУмолчанию = КодВозвратаДиалога.Да;
ПоказатьВопросПереопределенная(ОписаниеОповещения, ТекстВопроса, КнопкиВопроса, , КнопкаПоУмолчанию);
КонецПроцедуры
Процедура ОбработчикЗапросаАннулированияПереотправляемыхПакетов(АннулироватьПредыдущийДокумент = Неопределено, ПараметрыОбработки) Экспорт
Если АннулироватьПредыдущийДокумент = Неопределено Тогда
Возврат;
КонецЕсли;
ЗапроситьАннулирование = (АннулироватьПредыдущийДокумент = КодВозвратаДиалога.Да);
ПараметрыОбработки.Вставить("ЗапроситьАннулирование", ЗапроситьАннулирование);
ВыделенныеСтроки = ДанныеВыделенныхСтрокТЧ(Истина);
ДоступныеДляОбработкиСтроки = Модуль_Ядро().Документы_ДоступныеДляПерезаполненияИОтправки(ВыделенныеСтроки);
КоличествоВыбранныхДокументов = ВыделенныеСтроки.Количество();
КоличествоДоступныхДокументов = ДоступныеДляОбработкиСтроки.Количество();
Если КоличествоДоступныхДокументов = 0 Тогда
ПоказатьОшибкиОбработкиДанных("ПереотправитьПакет", ЭтаФорма);
ИначеЕсли КоличествоВыбранныхДокументов > КоличествоДоступныхДокументов Тогда
ПараметрыОбработки.ДанныеДляОбработки = ДоступныеДляОбработкиСтроки;
ОписаниеОповещенияЗавершения = НовыйОписаниеОповещения("ОбработатьСогласиеОЧастичномПерезаполненииИОтправке", ЭтаФорма, ПараметрыОбработки);
ПоказатьВопросОЧастичномВыполненииДействия(ПараметрыОбработки, ОписаниеОповещенияЗавершения);
Иначе
ОбработатьПерезаполнениеИОтправкуПакетов(ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьСогласиеОЧастичномПерезаполненииИОтправке(ПараметрОповещения = Неопределено, ПараметрыОбработки) Экспорт
Если ПараметрОповещения = КодВозвратаДиалога.Да Тогда
ОбработатьПерезаполнениеИОтправкуПакетов(ПараметрыОбработки);
ИначеЕсли ПараметрОповещения = КодВозвратаДиалога.Прервать Тогда
ОткрытьФормуСпискаОшибок();
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьПерезаполнениеИОтправкуПакетов(ПараметрыОбработки)
КатегорияМетрики = ПараметрыОбработки.КатегорияМетрики;
ДействиеМетрики = ПараметрыОбработки.ДействиеМетрики;
ДействияЭДО = ДействияЭДО();
ПараметрыДляПереотправки = Новый_ПараметрыГрупповойОбработки(
ПараметрыОбработки.ДанныеДляОбработки,
ДействияЭДО.ПереотправитьПакет,
КатегорияМетрики,
ДействиеМетрики);
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОбработатьПерезаполнениеПакетов",
ЭтаФорма,
ПараметрыДляПереотправки);
Если ПараметрыОбработки.ЗапроситьАннулирование Тогда
ДанныеДляОбработки = ДокументыПакетовСтрокСписка(ПараметрыОбработки.ДанныеДляОбработки);
ЗаполнитьИПроверитьМЧДпоУмолчаниюПередОтправкойДокументов(ДанныеДляОбработки);
ПараметрыОбработки = Новый_ПараметрыГрупповойОбработки(
ДанныеДляОбработки,
ДействияЭДО.Аннулировать,
КатегорияМетрики,
"Аннулировать");
ПараметрыОбработки.Вставить("ОписаниеОповещения", ОписаниеОповещения);
ОбработатьДействиеПоАннулированию( , ПараметрыОбработки);
Иначе
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
// } Перезаполнение и отправка
// { Обработка документов для действий с подписанием
Процедура ОбработатьДокументыСПодписанием(КонтекстФункции)
ИмяМетода = "Документы_ДанныеДляMessagePatchToPost";
ДокументыДляОбработки = ОчередьЗадач_ВыгрузитьДокументыИзМассиваПакетов(КонтекстФункции.Данные);
Действие = КонтекстФункции.Параметры;
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, ДокументыДляОбработки, Действие);
КонтекстФункции.Очистить();
КонтекстФункции.Вставить("Обработчик", "ЗавершитьОбработкуДокументовСПодписанием");
КонтекстФункции.Вставить("ТекущаяОперация", ОписаниеЗадачи);
КонецПроцедуры
Процедура ЗавершитьОбработкуДокументовСПодписанием(КонтекстФункции)
ПодготовленныеДанные = Модуль_Платформа().ДлительныеОперации_Результат(
КонтекстФункции.ТекущаяОперация.АдресРезультата);
КонтекстФункции.Удалить("ТекущаяОперация");
Модуль_Ядро = Модуль_Ядро();
Модуль_Ядро.Документы_ПодписатьДанныеДляMessagePatchToPost(ПодготовленныеДанные);
ИмяМетода = "Документы_ОтправитьДанныеДляMessagePatchToPost";
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, ПодготовленныеДанные);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Обработка документов для действий с подписанием
// { Обработка документов для действий без подписания
Процедура ОбработатьДокументыБезПодписания(КонтекстФункции)
ИмяМетода = "Документы_ВыполнитьДействиеСДокументами";
ДокументыДляОбработки = ОчередьЗадач_ВыгрузитьДокументыИзМассиваПакетов(КонтекстФункции.Данные);
Действие = КонтекстФункции.Параметры;
ОписаниеЗадачи = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, ДокументыДляОбработки, Действие);
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ОписаниеЗадачи);
КонецПроцедуры
// } Обработка документов для действий без подписания
// { Обработка очереди задач
Функция Новый_ПараметрыГрупповойОбработки(ДанныеДляОбработки
, Действие
, КатегорияМетрики
, ДействиеМетрики
, ФормаВыполнения = Неопределено
, ИдентификаторЯщика = Неопределено
, КонтрагентПоддерживаетМЧД = Истина
) Экспорт
Если ФормаВыполнения = Неопределено Тогда
ФормаВыполнения = ЭтаФорма;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ДанныеДляОбработки", ДанныеДляОбработки);
Результат.Вставить("Действие", Действие);
Результат.Вставить("КатегорияМетрики", КатегорияМетрики);
Результат.Вставить("ДействиеМетрики", ДействиеМетрики);
Результат.Вставить("ФормаВыполнения", ФормаВыполнения);
Результат.Вставить("ГрупповоеДействие", Ложь);
Результат.Вставить("ИдентификаторЯщика" , ИдентификаторЯщика);
Результат.Вставить("КонтрагентПоддерживаетМЧД" , КонтрагентПоддерживаетМЧД);
Возврат Результат;
КонецФункции
Функция Новый_ОчередьАсинхронныхЗадач()
Результат = Новый Структура;
Результат.Вставить("ПулЗадач", Новый Массив);
Результат.Вставить("КоличествоПотоков", 10);
Результат.Вставить("ЗаголовокФормыПрогресса");
Результат.Вставить("ЗаголовокВыполненнойОчереди");
Возврат Результат;
КонецФункции
Процедура ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок(ИмяОбработчика, ПараметрыОбработки = Неопределено)
ДанныеДляОбработки = ПараметрыОбработки.ДанныеДляОбработки;
КоличествоСтрок = ДанныеДляОбработки.Количество();
Если КоличествоСтрок = 0 Тогда
ПоказатьПредупреждениеНеВыбраноНиОднойСтроки();
ИначеЕсли КоличествоСтрок = 1 Тогда
ПараметрыОбработки.ГрупповоеДействие = Истина;
ОписаниеГрупповойОперации = Новый_ОписаниеГрупповойОперации(
ИмяОбработчика,
ПараметрыОбработки);
ОбработчикСогласияНаГрупповуюОбработкуВыделенныхСтрок(
КодВозвратаДиалога.Да,
ОписаниеГрупповойОперации);
Иначе
Модуль_Ядро = Модуль_Ядро();
ОбрабатываемаяСущность = ОбрабатываемаяСущность();
ШаблонВопроса = "Вы собираетесь выполнить групповые действия. %1ов к обработке %2. Продолжить?";
ТекстВопроса = Модуль_Ядро.Общее_ПодставитьПараметрыВСтроку(
ШаблонВопроса,
ОбрабатываемаяСущность,
КоличествоСтрок);
ПараметрыОбработки.ГрупповоеДействие = Истина;
ОписаниеГрупповойОперации = Новый_ОписаниеГрупповойОперации(ИмяОбработчика, ПараметрыОбработки);
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОбработчикСогласияНаГрупповуюОбработкуВыделенныхСтрок",
ЭтаФорма,
ОписаниеГрупповойОперации);
ПоказатьВопросПереопределенная(
ОписаниеОповещения,
ТекстВопроса,
РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьПредупреждениеНеВыбраноНиОднойСтроки()
ОбрабатываемаяСущность = ОбрабатываемаяСущность();
ТекстПредупреждения = "Выберите хотя бы один " + НРег(ОбрабатываемаяСущность);
ПоказатьПредупреждениеПереопределенная(, ТекстПредупреждения);
КонецПроцедуры
// Обработчик согласия на групповое действие
//
// Параметры:
// Ответ - КодВозвратаДиалога - выбор пользователя в методе ПолучитьСогласиеНаГрупповуюОбработкуВыделенныхСтрок
// ОписаниеГрупповойОперации - Структура - См. Новый_ОписаниеГрупповойОперации()
//
//&НаКлиенте
Процедура ОбработчикСогласияНаГрупповуюОбработкуВыделенныхСтрок(Ответ, ОписаниеГрупповойОперации) Экспорт
Если Ответ <> КодВозвратаДиалога.Нет Тогда
ПроверитьПараметрыГрупповойОперацииИВыполнитьОбработчик(ОписаниеГрупповойОперации);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Функция Новый_ОписаниеГрупповойОперации(ИмяОбработчика, ПараметрыОбработки) Экспорт
Результат = Новый Структура;
Результат.Вставить("ИмяОбработчикаГрупповойОперации" , ИмяОбработчика);
Результат.Вставить("ПараметрыГрупповойОбработки" , ПараметрыОбработки);
Возврат Результат;
КонецФункции
// Проверяет данные перед выполнением групповой операции
// 1. Проверяет сертификаты на КЭП
// 2. Проверяет данные МЧД
// 3. Выполняет обработчик групповой операции
//
// Параметры:
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
//&НаКлиенте
Процедура ПроверитьПараметрыГрупповойОперацииИВыполнитьОбработчик(ОписаниеГрупповойОперации)
КЭП_НачатьПроверкуДанныхГрупповойОперации(ОписаниеГрупповойОперации);
КонецПроцедуры
// Непосредственно выполняет обработчик групповой операции после выполнения проверок и всех интерактивных действий
//
// Параметры:
// Результат - Произвольный - Не используется
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
//&НаКлиенте
Процедура Обработчик_ВыполнитьГрупповуюОперациюПослеЗавершенияПроверок(Результат, ОписаниеГрупповойОперации) Экспорт
ОписаниеОповещенияОбработчика = НовыйОписаниеОповещения(
ОписаниеГрупповойОперации.ИмяОбработчикаГрупповойОперации,
ЭтаФорма,
ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки
);
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещенияОбработчика, Истина);
КонецПроцедуры
Процедура ПоказатьПредупреждениеОНевозможностиВыполненияДействия(ПараметрыОбработки)
Действие = ПараметрыОбработки.Действие;
ДействияЭДО = ДействияЭДО();
ЗаголовокПредупреждения = "";
ТекстПредупреждения = "";
Если Действие = ДействияЭДО.ПередатьНаСогласование Тогда
ЗаголовокПредупреждения = "Невозможно передать документы на согласование";
ТекстПредупреждения = "Выбранные документы нельзя передать на согласование.";
ИначеЕсли Действие = ДействияЭДО.ПередатьНаПодпись Тогда
ЗаголовокПредупреждения = "Невозможно передать документы на подпись";
ТекстПредупреждения = "Выбранные документы нельзя передать на подпись.";
ИначеЕсли Действие = ДействияЭДО.ПередатьПоМаршруту Тогда
ЗаголовокПредупреждения = "Невозможно передать документы по маршруту";
ТекстПредупреждения = "Выбранные документы нельзя передать по маршруту";
ИначеЕсли Действие = ДействияЭДО.Согласование Тогда
ЗаголовокПредупреждения = "Не удалось согласовать документы.";
ТекстПредупреждения = "Возможно, документы уже согласованы.";
ИначеЕсли Действие = ДействияЭДО.ОтказВСогласовании Тогда
ЗаголовокПредупреждения = "Не удалось отказать в согласовании по документам.";
ТекстПредупреждения = "Возможно, по документам уже отказано в согласовании.";
ИначеЕсли Действие = ДействияЭДО.Аннулировать Тогда
ЗаголовокПредупреждения = "Невозможно аннулировать документы по одной из причин:";
ТекстПредупреждения = " - Документы уже аннулированы
| - Документы недоступны для аннулирования";
ИначеЕсли Действие = ДействияЭДО.ОтказатьВАннулировании Тогда
ЗаголовокПредупреждения = "Невозможно отказать в аннулировании по одной из причин:";
ТекстПредупреждения = " - Документы уже аннулированы
| - Документы не требуют аннулирования";
ИначеЕсли Действие = ДействияЭДО.ПодписатьИОтправить Тогда
ЗаголовокПредупреждения = "Невозможно отправить документы";
ТекстПредупреждения = "Выбранные документы должны быть в статусе ""Требуется подписать и отправить"" и не быть на согласовании.";
ИначеЕсли Действие = ДействияЭДО.ОтправитьОтвет Тогда
ЗаголовокПредупреждения = "Невозможно отправить готовые ответы";
ТекстПредупреждения = "Не найдены подготовленные ответы для выбранных документов";
ИначеЕсли Действие = ДействияЭДО.ПодписатьВходящий Тогда
ЗаголовокПредупреждения = "Невозможно подписать документы";
ТекстПредупреждения = "Выбранные документы нельзя подписать по причине:
|статус документа не позволяет осуществить действие.";
ИначеЕсли Действие = ДействияЭДО.ОтказатьВПодписи Тогда
ЗаголовокПредупреждения = "Невозможно отказать в подписи по документам";
ТекстПредупреждения = "Выбранные документы нельзя отказать в подписи по причине:
|статус документа не позволяет осуществить действие.";
ИначеЕсли Действие = ДействияЭДО.ПереотправитьПакет Тогда
ЗаголовокПредупреждения = "Переотправка документов";
ТекстПредупреждения = "Выбранные документы недоступны для переотправки";
Иначе
ВызватьИсключение "Попытка выполнить неизвестное действие!";
КонецЕсли;
ПоказатьПредупреждениеПереопределенная(Неопределено, ТекстПредупреждения, , ЗаголовокПредупреждения);
КонецПроцедуры
Процедура ПоказатьВопросОЧастичномВыполненииДействия(ПараметрыОбработки, ОписаниеОповещенияЗавершения)
ТекстВопроса = "";
КнопкиВопроса = Новый СписокЗначений;
КнопкаПоУмолчанию = КодВозвратаДиалога.Да;
ЗаголовокВопроса = "";
Действие = ПараметрыОбработки.Действие;
ДействияЭДО = ДействияЭДО();
Если Действие = ДействияЭДО.ПередатьНаСогласование Тогда
ЗаголовокВопроса = "Невозможно передать на согласование все документы";
ТекстВопроса = "Среди выбранных есть документы, которые невозможно передать на согласование.";
ТекстКнопки = "Передать на согласование доступные документы";
ИначеЕсли Действие = ДействияЭДО.ПередатьНаПодпись Тогда
ЗаголовокВопроса = "Невозможно передать на подпись все документы";
ТекстВопроса = "Среди выбранных есть документы, которые невозможно передать на подпись.";
ТекстКнопки = "Передать на подпись доступные документы";
ИначеЕсли Действие = ДействияЭДО.ПередатьПоМаршруту Тогда
ЗаголовокВопроса = "Невозможно передать по маршруту все документы";
ТекстВопроса = "Среди выбранных есть документы, которые невозможно передать по маршруту.";
ТекстКнопки = "Передать по маршруту доступные документы";
ИначеЕсли Действие = ДействияЭДО.Согласование Тогда
ЗаголовокВопроса = "Невозможно согласовать все документы";
ТекстВопроса = "Среди выбранных есть документы, которые невозможно согласовать.";
ТекстКнопки = "Согласовать доступные документы";
ИначеЕсли Действие = ДействияЭДО.ОтказВСогласовании Тогда
ЗаголовокВопроса = "Невозможно отказать в согласовании всех документов";
ТекстВопроса = "Среди выбранных есть документы, по которым невозможно отказать в согласовании.";
ТекстКнопки = "Отказать в согласовании доступных документов";
ИначеЕсли Действие = ДействияЭДО.ОтказВЗапросеПодписи Тогда
ЗаголовокВопроса = "Невозможно отказать в запросе сотруднику всех документов";
ТекстВопроса = "Среди выбранных есть документы, по которым невозможно отказать в запросе сотруднику.";
ТекстКнопки = "Отказать в запросе сотруднику доступных документов";
ИначеЕсли Действие = ДействияЭДО.ПодписатьВходящий Тогда
ЗаголовокВопроса = "Невозможно подписать все документы";
ТекстВопроса = "Среди выбранных есть документы, которые нельзя подписать.";
ТекстКнопки = "Подписать доступные документы";
ИначеЕсли Действие = ДействияЭДО.ОтказатьВПодписи Тогда
ЗаголовокВопроса = "Невозможно отказать в подписи по всем документам";
ТекстВопроса = "Среди выбранных есть документы, по которым нельзя отказать в подписи.";
ТекстКнопки = "Отказать в подписи по доступным документам";
ИначеЕсли Действие = ДействияЭДО.ОтправитьОтвет Тогда
ЗаголовокВопроса = "Невозможно отправить готовые ответы для всех документов";
ТекстВопроса = "Среди выбранных есть документы, по которым не подготовлены ответы.";
ТекстКнопки = "Отправить подготовленные ответы";
ИначеЕсли Действие = ДействияЭДО.ПереотправитьПакет Тогда
ЗаголовокВопроса = "Невозможно переотправить все документы";
ТекстВопроса = "Среди выбранных есть документы, для которых нельзя выполнить действие ""Переотправить""";
ТекстКнопки = "Переотправить";
КонецЕсли;
КоличествоДоступныхПрописью = Формат(ПараметрыОбработки.ДанныеДляОбработки.Количество(), "ЧГ=0");
КнопкиВопроса.Добавить(КодВозвратаДиалога.Да, ТекстКнопки + " (" + КоличествоДоступныхПрописью + ")");
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена);
КнопкиВопроса.Добавить(КодВозвратаДиалога.Прервать, "Подробнее...");
ПоказатьВопросПереопределенная(ОписаниеОповещенияЗавершения, ТекстВопроса, КнопкиВопроса, , КнопкаПоУмолчанию, ЗаголовокВопроса);
КонецПроцедуры
Процедура ВыполнитьМассовуюОбработкуДанных(ИмяОбработчика,
ДанныеДляОбработки,
Действие,
ДополнительныеПараметры = Неопределено,
ОписаниеОповещения = Неопределено
)
Модуль_Ядро = Модуль_Ядро();
ОчередьЗадач = Новый_ОчередьАсинхронныхЗадач();
ОчередьЗадач.ЗаголовокФормыПрогресса = ЗаголовокФормыПрогресса();
ОчередьЗадач.ЗаголовокВыполненнойОчереди = ПредставлениеДействияЭДО(Действие);
КатегорияМетрики = Метрика_НазваниеКатегорийМассовыхДействий(Действие);
Если ЗначениеЗаполнено(КатегорияМетрики) Тогда
Модуль_Ядро.Метрика_ДобавитьЗамер_СУчетомЗаполненияКонтекста(КатегорияМетрики);
КонецЕсли;
КоличествоПакетовВПорции = Модуль_Ядро.КоличествоПакетовВГрупповойОперации();
ПорцииДанных = Модуль_Ядро.ПорцииДанныхМассива(ДанныеДляОбработки, КоличествоПакетовВПорции);
Для Каждого ПорцияДанных Из ПорцииДанных Цикл
КонтекстФункции = Новый Структура;
КонтекстФункции.Вставить("Обработчик", ИмяОбработчика);
КонтекстФункции.Вставить("Данные", ПорцияДанных);
КонтекстФункции.Вставить("Параметры", ДополнительныеПараметры);
ОчередьЗадач.ПулЗадач.Добавить(КонтекстФункции);
КонецЦикла;
Модуль_Ядро.СписокОшибок_Очистить();
ОбработатьОчередьЗадач(ОчередьЗадач);
Если ЗначениеЗаполнено(КатегорияМетрики) Тогда
КоличествоДокументов = ДанныеДляОбработки.Количество();
ДопПеременные = Новый Соответствие;
ДопПеременные.Вставить("Количество документов", КоличествоДокументов);
Модуль_Ядро.Метрика_ДобавитьЗамер_СУчетомЗаполненияКонтекста(КатегорияМетрики, Ложь, ДопПеременные);
КонецЕсли;
Если ОписаниеОповещения = Неопределено Тогда
ФормаВыполнения = СвойствоСтруктуры(ДополнительныеПараметры, "ФормаВыполнения");
ЗавершениеОбработкиДокументов(Действие, ФормаВыполнения);
Иначе
ОписаниеОповещения.ДополнительныеПараметры.Вставить("ПредыдущееДействие", Истина);
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
Процедура ЗавершениеОбработкиДокументов(Действие, ФормаВыполнения)
Пакеты_ВыполнитьОчисткуУстаревшихПодготовленных(Действие);
СписокОшибок = Модуль_Ядро().СписокОшибок();
Если ЗначениеЗаполнено(СписокОшибок) Тогда
ПоказатьОшибкиОбработкиДанных(Действие, ФормаВыполнения);
КонецЕсли;
Если ФормаВыполнения = Неопределено
ИЛИ ФормаВыполнения.РежимОтображенияДокументов = ЭтаФорма.РежимОтображенияДокументов Тогда
ОбновитьСписок();
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьОчередьЗадач(ОчередьЗадач)
КоличествоПотоков = ОчередьЗадач.КоличествоПотоков;
НовыеЗадачи = ОчередьЗадач.ПулЗадач;
ВсегоЗадач = НовыеЗадачи.Количество();
ВыполненоЗадач = 0;
КоличествоДокументовДляОбработки = ОчередьЗадач_КоличествоДокументовВЗадачах(НовыеЗадачи);
Если КоличествоДокументовДляОбработки > 1 Тогда
ФормаПрогресса = Форма_ПрогрессВыполнения();
ФормаПрогресса.МассоваяОбработка = Истина;
ФормаПрогресса.УстановитьМаксимальноеЗначение(КоличествоДокументовДляОбработки);
ФормаПрогресса.УстановитьЗаголовок(СтрЗаменить(ОчередьЗадач.ЗаголовокФормыПрогресса, "%количество%", КоличествоДокументовДляОбработки));
ФормаПрогресса.УстановитьЗаголовокВыполненнойОчереди(ОчередьЗадач.ЗаголовокВыполненнойОчереди);
ФормаПрогресса.УстановитьНадписиПриОтправкеПакетов(КоличествоДокументовДляОбработки, 0);
ФормаПрогресса.УстановитьЗначениеПрогресса(0);
КонецЕсли;
ТекущиеЗадачи = Новый Массив;
НачалоОбработки = Истина;
Пока ВсегоЗадач > ВыполненоЗадач Цикл
ЕстьСвободныеПотоки = ТекущиеЗадачи.Количество() < КоличествоПотоков;
МожноДобавитьЗадачиДляВыполнения = ЕстьСвободныеПотоки И ЗначениеЗаполнено(НовыеЗадачи);
Если Не НачалоОбработки И Не МожноДобавитьЗадачиДляВыполнения Тогда
ОчередьЗадач_ПодождатьЗавершенияЛюбойОперации(ТекущиеЗадачи);
КонецЕсли;
Если МожноДобавитьЗадачиДляВыполнения Тогда
ОчередьЗадач_ДобавитьЗадачиДляВыполнения(ТекущиеЗадачи, НовыеЗадачи, КоличествоПотоков);
КонецЕсли;
ВыполненоЗадачДо = ВыполненоЗадач;
ОчередьЗадач_ВыполнитьЗадачи(ТекущиеЗадачи);
ВыполненоЗадач = ВсегоЗадач - НовыеЗадачи.Количество() - ТекущиеЗадачи.Количество();
ОсталосьОбработатьДокументов = ОчередьЗадач_КоличествоДокументовВЗадачах(НовыеЗадачи);
Если ФормаПрогресса <> Неопределено
И ОсталосьОбработатьДокументов > 0 Тогда
УжеОбработаноДокументов = КоличествоДокументовДляОбработки - ОсталосьОбработатьДокументов;
ФормаПрогресса.УстановитьЗначениеПрогресса(УжеОбработаноДокументов);
ФормаПрогресса.УстановитьНадписиПриОтправкеПакетов(КоличествоДокументовДляОбработки, УжеОбработаноДокументов);
КонецЕсли;
НачалоОбработки = Ложь;
КонецЦикла;
Если ФормаПрогресса <> Неопределено Тогда
ФормаПрогресса.фЗакрытьФорму();
КонецЕсли;
КонецПроцедуры
Функция ОчередьЗадач_КоличествоДокументовВЗадачах(Задачи)
Результат = 0;
Для каждого Задача Из Задачи Цикл
Результат = Результат + Задача.Данные.Количество();
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОчередьЗадач_ВыгрузитьДокументыИзМассиваПакетов(Пакеты)
Результат = Новый Массив;
Модуль_Ядро = Модуль_Ядро();
Для каждого Пакет Из Пакеты Цикл
Модуль_Ядро.ДополнитьМассив(Результат, Пакет.Документы, Ложь);
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ОчередьЗадач_ДобавитьЗадачиДляВыполнения(ТекущиеЗадачи, НовыеЗадачи, МаксимальноеКоличествоЗадач)
Для Сч = -НовыеЗадачи.ВГраница() По 0 Цикл
Если ТекущиеЗадачи.Количество() >= МаксимальноеКоличествоЗадач Тогда
Прервать;
КонецЕсли;
КонтекстФункции = НовыеЗадачи[-Сч];
НовыеЗадачи.Удалить(-Сч);
ТекущиеЗадачи.Вставить(0, КонтекстФункции);
КонецЦикла;
КонецПроцедуры
Процедура ОчередьЗадач_ВыполнитьЗадачи(ТекущиеЗадачи)
Для Сч = -ТекущиеЗадачи.ВГраница() По 0 Цикл
ИндексЗадачи = -Сч;
КонтекстФункции = ТекущиеЗадачи[ИндексЗадачи];
Если КонтекстФункции.Свойство("ТекущаяОперация")
И НЕ КонтекстФункции.ТекущаяОперация.Завершено Тогда
ОчередьЗадач_ПроверитьРезультат(КонтекстФункции.ТекущаяОперация);
Если КонтекстФункции.ТекущаяОперация.Завершено Тогда
Если ЗначениеЗаполнено(КонтекстФункции.ТекущаяОперация.ТекстОшибки) Тогда
ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции);
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Если КонтекстФункции.Свойство("ЗавершитьЗадачу") Тогда
ТекущиеЗадачи.Удалить(ИндексЗадачи);
Продолжить;
КонецЕсли;
Попытка
ОчередьЗадач_ВыполнитьЗадачуБезопасно(КонтекстФункции);
Исключение
Ошибка = ИнформацияОбОшибке();
ТекстСообщения = КраткоеПредставлениеОшибки(Ошибка);
_ОбработатьОшибку(
КонтекстФункции.Обработчик,
Ошибка,
ТекстСообщения
);
ТекущиеЗадачи.Удалить(ИндексЗадачи);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Процедура ОчередьЗадач_ЗавершитьЗадачу(КонтекстФункции, ТекущаяОперация = Неопределено)
КонтекстФункции.Очистить();
КонтекстФункции.Вставить("ЗавершитьЗадачу");
Если ТекущаяОперация <> Неопределено Тогда
КонтекстФункции.Вставить("ТекущаяОперация", ТекущаяОперация);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Функция ОчередьЗадач_ПричинаОшибки(ИнформацияОбОшибке)
Результат = ИнформацияОбОшибке;
ПричинаОшибки = ИнформацияОбОшибке;
Пока ПричинаОшибки <> Неопределено Цикл
ПричинаОшибки = ПричинаОшибки.Причина;
Если ПричинаОшибки <> Неопределено И ПричинаОшибки.НомерСтроки > 0 Тогда
Результат = ПричинаОшибки;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ОчередьЗадач_ВыполнитьЗадачуБезопасно(КонтекстФункции)
Обработчик = КонтекстФункции.Обработчик;
Если Обработчик = "ПакетДляОтправки" Тогда
ПакетДляОтправки(КонтекстФункции);
ИначеЕсли Обработчик = "ОтправитьПакет" Тогда
ОтправитьПакет(КонтекстФункции);
ИначеЕсли Обработчик = "ПерезаполнитьПакет" Тогда
ПерезаполнитьПакет(КонтекстФункции);
ИначеЕсли Обработчик = "ЗаполнитьПараметрыПереотправки" Тогда
ЗаполнитьПараметрыПереотправки(КонтекстФункции);
ИначеЕсли Обработчик = "ОтправитьДокументыНаМаршрутизацию" Тогда
ОтправитьДокументыНаМаршрутизацию(КонтекстФункции);
ИначеЕсли Обработчик = "ПередатьВПодразделение" Тогда
ПередатьВПодразделение(КонтекстФункции);
ИначеЕсли Обработчик = "СохранитьДокументы" Тогда
СохранитьДокументы(КонтекстФункции);
ИначеЕсли Обработчик = "РасшифроватьДокументы" Тогда
РасшифроватьДокументы(КонтекстФункции);
ИначеЕсли Обработчик = "ПометитьДокументыКакЗавершенные" Тогда
ПометитьДокументыКакЗавершенные(КонтекстФункции);
ИначеЕсли Обработчик = "ТребуемоеДействие" Тогда
ТребуемоеДействие(КонтекстФункции);
ИначеЕсли Обработчик = "АнализДокументов" Тогда
АнализДокументов(КонтекстФункции);
ИначеЕсли Обработчик = "АнализПакетов" Тогда
АнализПакетов(КонтекстФункции);
ИначеЕсли Обработчик = "СопоставитьДокументы" Тогда
СопоставитьДокументы(КонтекстФункции);
ИначеЕсли Обработчик = "СоздатьДокументы" Тогда
СоздатьДокументы(КонтекстФункции);
ИначеЕсли Обработчик = "СоздатьДокументыПоПравилу" Тогда
СоздатьДокументыПоПравилу(КонтекстФункции);
ИначеЕсли Обработчик = "ОбработатьДокументыСПодписанием" Тогда
ОбработатьДокументыСПодписанием(КонтекстФункции);
ИначеЕсли Обработчик = "ЗавершитьОбработкуДокументовСПодписанием" Тогда
ЗавершитьОбработкуДокументовСПодписанием(КонтекстФункции);
ИначеЕсли Обработчик = "ОбработатьДокументыБезПодписания" Тогда
ОбработатьДокументыБезПодписания(КонтекстФункции);
Иначе
ТекстОшибки = Модуль_Ядро().Общее_ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неизвестный обработчик асинхронной задачи %1'"), Обработчик);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецПроцедуры
Процедура ОчередьЗадач_ПодождатьЗавершенияЛюбойОперации(ОчередьЗадач)
ОписанияЗаданий = Новый Массив;
Для Каждого КонтекстФункции Из ОчередьЗадач Цикл
ОписаниеЗадания = СвойствоСтруктуры(КонтекстФункции, "ТекущаяОперация");
Если ЗначениеЗаполнено(ОписаниеЗадания)
И НЕ ОписаниеЗадания.Завершено Тогда
ОписанияЗаданий.Добавить(ОписаниеЗадания);
КонецЕсли;
КонецЦикла;
Модуль_Ядро().ДлительныеОперации_ПодождатьЗавершениеЛюбогоЗадания(ОписанияЗаданий);
КонецПроцедуры
Процедура ОчередьЗадач_ПроверитьРезультат(ОписаниеЗадания)
Модуль_Ядро = Модуль_Ядро();
Модуль_Ядро.ДлительныеОперации_ПроверитьСостояние(ОписаниеЗадания);
Если ОписаниеЗадания.Завершено Тогда
Модуль_Ядро.ДлительныеОперации_ОбработатьОшибки(ОписаниеЗадания);
КонецЕсли;
КонецПроцедуры
Функция ЗаголовокФормыПрогресса()
ОбрабатываемаяСущность = НРег(ОбрабатываемаяСущность());
Результат = "Обработка %количество% " + ОбрабатываемаяСущность + "ов";
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ПредставлениеДействияЭДО(Действие)
Ядро = Модуль_Ядро();
ПредставленияДействийЭДО = Ядро.Перечисление_ПредставленияДействийЭДО();
Результат = ПредставленияДействийЭДО[Действие];
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = "Обработка";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ОбрабатываемаяСущность()
РежимыОтображения = РежимыОтображения();
Если РежимОтображенияДокументов = РежимыОтображения.ДляОтправки Тогда
Результат = "Пакет";
Иначе
Результат = "Документ";
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ПоказатьОшибкиОбработкиДанных(Действие, ФормаВыполнения) Экспорт
ТекстВопроса = "";
КнопкиВопроса = Новый СписокЗначений;
КнопкаПоУмолчанию = КодВозвратаДиалога.ОК;
ПредставлениеДействия = ПредставлениеДействияЭДО(Действие);
ЭтоМассоваяОбработка = (ФормаВыполнения = Неопределено ИЛИ ФормаВыполнения = ЭтаФорма);
Если ЭтоМассоваяОбработка Тогда
ТекстСообщения = "Не для всех выделенных документов удалось выполнить операцию";
Иначе
ТекстСообщения = "Не удалось выполнить операцию";
КонецЕсли;
ТекстСообщения = ТекстСообщения + ": " + ПредставлениеДействия;
КнопкиВопроса.Добавить(КодВозвратаДиалога.ОК);
КнопкиВопроса.Добавить(КодВозвратаДиалога.Прервать, НСтр("ru = 'Посмотреть причины'"));
ОписаниеОповещенияЗавершения = НовыйОписаниеОповещения("ПослеСообщенияОНеполномВыполненииДействия", ЭтаФорма, ФормаВыполнения);
ПоказатьВопросПереопределенная(ОписаниеОповещенияЗавершения, ТекстСообщения, КнопкиВопроса, , КнопкаПоУмолчанию);
КонецПроцедуры
Процедура ПослеСообщенияОНеполномВыполненииДействия(ПараметрОповещения, ФормаВыполнения) Экспорт
Если ПараметрОповещения = КодВозвратаДиалога.Прервать Тогда
ОткрытьФормуСпискаОшибок(ФормаВыполнения);
КонецЕсли;
КонецПроцедуры
Процедура Пакеты_ВыполнитьОчисткуУстаревшихПодготовленных(ДействиеЭДО) Экспорт
Если ИспользуетсяПодсистемаДиадок Тогда
ДействияЭДО = ДействияЭДО();
Если ДействиеЭДО = ДействияЭДО.ПодписатьИОтправить
ИЛИ ДействиеЭДО = ДействияЭДО.ПередатьНаСогласование
ИЛИ ДействиеЭДО = ДействияЭДО.ПередатьНаПодпись
ИЛИ ДействиеЭДО = ДействияЭДО.ПередатьПоМаршруту Тогда
Модуль_Ядро().Пакеты_ВыполнитьОчисткуУстаревшихПодготовленных();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// } Обработка очереди задач
// } МАССОВАЯ ОБРАБОТКА ДОКУМЕНТОВ
// { ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ФОРМЫ
Процедура УстановитьВидГруппыКнопокПодписать()
// для устранения расхождения в коде
Возврат;
КонецПроцедуры
Процедура УстановитьЗаголовокФормы()
НомерРелиза = ПолнаяВерсияОбработки();
РежимОтладкиВключен = РежимОтладкиВключен();
РежимЛогированияВключен = Модуль_Ядро().РежимЛогированияВключен();
СтрокаИмяМодуля = "Контур.Диадок / ";
СтрокаНомерРелиза = Строка(НомерРелиза);
СтрокаРежимОтладки = ?(РежимОтладкиВключен, " (РЕЖИМ ОТЛАДКИ)", "");
СтрокаРежимЛогирования = ?(РежимЛогированияВключен, " (РЕЖИМ ЛОГИРОВАНИЯ)", "");
НовыйЗаголовок = СтрокаИмяМодуля
+ СтрокаНомерРелиза
+ СтрокаРежимОтладки
+ СтрокаРежимЛогирования;
ЭтаФорма.Заголовок = НовыйЗаголовок;
КонецПроцедуры
Процедура УстановитьЗаголовокКнопкиПериода()
Элементы.ВыбратьПериод.Заголовок = ЗаголовокКнопкиВыбораПериода();
Элементы.ВыбратьПериод.Подсказка = НСтр("ru='Выбрать период'");
КонецПроцедуры
Функция ЗаголовокКнопкиВыбораПериода()
РежимыОтображения = РежимыОтображения();
Если РежимОтображенияДокументов = РежимыОтображения.ДляОтправки Тогда
ТекстРежимОтбораПоПериоду = "документа";
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Исходящие
ИЛИ РежимОтображенияДокументов = РежимыОтображения.Перевозочные Тогда
ТекстРежимОтбораПоПериоду = ?(НастройкаВыбораПериода.РежимОтбораПоПериоду = "ПоДатеДокумента", "документа", "отправки");
Иначе
ТекстРежимОтбораПоПериоду = ?(НастройкаВыбораПериода.РежимОтбораПоПериоду = "ПоДатеДокумента", "документа", "получения");
КонецЕсли;
ТекстРежимОтбораПоПериоду = "по дате " + ТекстРежимОтбораПоПериоду;
Результат = СтруктураПериода().Представление + " " + "(" + ТекстРежимОтбораПоПериоду + ")";
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция СтруктураПериода()
ДатаНачала = НастройкаВыбораПериода.ДатаНачала;
ДатаОкончания = НастройкаВыбораПериода.ДатаОкончания;
Если ДатаОкончания < ДатаНачала Тогда
ДатаОкончания = '00010101';
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончания) Тогда
ДатаОкончания = КонецДня(ДатаОкончания);
КонецЕсли;
Представление = ПредставлениеПериода(ДатаНачала, ДатаОкончания);
Если НЕ ЗначениеЗаполнено(Представление) Тогда
Представление = "<период не установлен>";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
ДатаОкончания = КонецДня('39990101');
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ДатаНачала", ДатаНачала);
Результат.Вставить("ДатаОкончания", ДатаОкончания);
Результат.Вставить("Представление", Представление);
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ОбновитьСписок(НовыйРежимОтображенияДокументов = Неопределено, ОтборПоПакету = Неопределено, КоличествоДокументов = 0) Экспорт
Состояние("Обновление списка документов...");
ФормаПрогресса = Форма_ПрогрессВыполнения();
Если ФормаПрогресса.Открыта() И ФормаПрогресса.ПрогрессВыполнен() Тогда
ФормаПрогресса.Закрыть();
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НовыйРежимОтображенияДокументов)
И НЕ ЗначениеЗаполнено(РежимОтображенияДокументов) Тогда
Если ЗначениеЗаполнено(РежимОтображенияПриЗапуске) Тогда
НовыйРежимОтображенияДокументов = РежимОтображенияПриЗапуске;
Иначе
НовыйРежимОтображенияДокументов = РежимыОтображения().ДляОтправки;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(НовыйРежимОтображенияДокументов)
И НовыйРежимОтображенияДокументов <> РежимОтображенияДокументов Тогда
ОчиститьОтборПоСтатусуИВидуПакета();
КонецЕсли;
Если Не ЗначениеЗаполнено(ОтборПоПакету) Тогда
СписокДокументов.Очистить();
КонецЕсли;
КатегорияМетрики = Метрика_НазваниеКатегорийПостроенияСписка(НовыйРежимОтображенияДокументов);
Ядро = Модуль_Ядро();
Ядро.Метрика_НачатьЗамер_СУчетомЗаполненияКонтекстаПоКонтекстуОднойЗаписью(КатегорияМетрики);
Отказ = Ложь;
Попытка
ПараметрыОбновленияСписка = ПараметрыОбновленияСпискаДокументов(НовыйРежимОтображенияДокументов, ОтборПоПакету);
ОбновитьСписокНаСервере(ПараметрыОбновленияСписка);
Исключение
Отказ = Истина;
Ошибка = ИнформацияОбОшибке();
ТекстОшибкиРасширенный = "";
Если Ошибка.Причина <> Неопределено Тогда
Если Найти(Ошибка.Причина.Описание, "недостаточно прав") > 0 Тогда
ТекстОшибкиРасширенный = Символы.ПС + "У пользователя недостаточно прав на исполнение операции над базой данных.";
ИначеЕсли Ошибка.Причина.Причина <> Неопределено
И Найти(Ошибка.Причина.Причина.Описание, "недостаточно прав") > 0 Тогда
ТекстОшибкиРасширенный = Символы.ПС + "У пользователя недостаточно прав на исполнение операции над базой данных.";
КонецЕсли;
КонецЕсли;
ТекстПредупреждения = НСтр("ru = 'При заполнении списка документов возникли ошибки."
+ ТекстОшибкиРасширенный
+ "
|Для просмотра подробной информации об ошибке перейдите в журнал регистрации 1С или обратитесь к техническому специалисту'");
ПоказатьПредупреждениеПереопределенная(, ТекстПредупреждения);
КонецПопытки;
ДлительныеОперации_ПолучитьСтатусыЭПДвФоне();
Метрика_ЗавершитьЗамер_ОбновлениеСпискаДокументов(КатегорияМетрики, ОтборПоПакету, НовыйРежимОтображенияДокументов,
Отказ);
УстановитьЗаголовокКнопкиПериода();
УстановитьВидГруппыКнопокПодписать();
УстановитьТекущуюСтрокуСпискаДокументов();
ДействиеМетрики = РежимОтображенияДокументов;
Если НЕ ЗначениеЗаполнено(ДействиеМетрики) Тогда
ДействиеМетрики = РежимыОтображения().ДляОтправки;
КонецЕсли;
Если Отказ Тогда
ВидОперации = НСтр("ru = 'Обновление списка документов'");
ТекстСообщения = НСтр("ru = 'Не удалось обновить список документов'");
ТекстОшибки = КраткоеПредставлениеОшибки(Ошибка);
_ОбработатьОшибку(
ВидОперации,
Ошибка,
ТекстСообщения
);
Ядро.Метрика_ДобавитьОшибку_СУчетомЗаполненияКонтекста(КатегорияМетрики, ДействиеМетрики, ТекстОшибки);
КонецЕсли;
Метрика_ДобавитьСтатистику_ОбновлениеСпискаДокументов(КатегорияМетрики, ДействиеМетрики, ОтборПоПакету,
НовыйРежимОтображенияДокументов);
КонецПроцедуры
//&НаКлиенте
Процедура ОчиститьОтборПоСтатусуИВидуПакета()
ВключитьОтборПоСтатусу = Ложь;
ОтборПоСтатусу = "";
ВключитьОтборПоВидуПакета = Ложь;
ОтборПоВидуПакета = "";
КонецПроцедуры
//&НаКлиенте
Процедура ДлительныеОперации_ПолучитьСтатусыЭПДвФоне()
Если НЕ Модуль_Ядро().КонтурЛогистика_ИспользуетсяМодульЛогистики() Тогда
Возврат;
КонецЕсли;
СтрокиСпискаДокументов = Новый Массив;
Для Каждого СтрокаСписка Из СписокДокументов Цикл
Если ЗначениеЗаполнено(СтрокаСписка.Документ) Тогда
ДанныеСтроки = Новый_СтруктураДанныхСтрокиСписка(СтрокаСписка);
СтрокиСпискаДокументов.Добавить(ДанныеСтроки);
КонецЕсли;
КонецЦикла;
ИмяМетода = "КонтурЛогистика_ПолучитьДляСпискаДокументовСтатусыЭПД";
МодульПлатформа = Модуль_Платформа();
ОписаниеЗадания = МодульПлатформа.ДлительныеОперации_ВыполнитьВФоне(ИмяМетода, СтрокиСпискаДокументов);
КатегорияМетрики = Метрика_КатегорияИнтеграцияСЛогистикой();
МодульПлатформа.ДлительныеОперации_НачатьЗамер(ОписаниеЗадания.Ключ, ИмяМетода, КатегорияМетрики);
ОписаниеОповещения = НовыйОписаниеОповещения("ДлительныеОперации_ОбновитьСтатусыЭПД", ЭтаФорма);
МодульПлатформа.ДлительныеОперации_ОжидатьЗавершение(ОписаниеЗадания, ОписаниеОповещения);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ЗавершитьЗамер_ОбновлениеСпискаДокументов(КатегорияМетрики, ОтборПоПакету, РежимСписка, Отказ)
Ядро = Модуль_Ядро();
ТекущийРежимСписка = РежимСпискаДокументовДляОбновления(РежимСписка);
ДопПеременные = ПеременныеЗамераКоличествоДокументов(ОтборПоПакету, ТекущийРежимСписка);
ДопПеременные.Вставить("Отказ", Отказ);
Ядро.Метрика_ЗавершитьЗамер_СУчетомЗаполненияКонтекстаПоКонтекстуОднойЗаписью(КатегорияМетрики, ДопПеременные);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ДобавитьСтатистику_ОбновлениеСпискаДокументов(
КатегорияМетрики,
ДействиеМетрики,
ОтборПоПакету,
РежимСписка)
Ядро = Модуль_Ядро();
ТекущийРежимСписка = РежимСпискаДокументовДляОбновления(РежимСписка);
ДопПеременные = ПеременныеЗамераКоличествоДокументов(ОтборПоПакету, ТекущийРежимСписка);
ДопПеременные.Вставить("Наименование колонок", Метрика_КолонкиФормыСписка());
ПредставлениеМетрики = Метрика_НазваниеФормы();
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики, , ДопПеременные,
ПредставлениеМетрики);
КонецПроцедуры
Функция ПеременныеЗамераКоличествоДокументов(ОтборПоПакету, РежимСписка)
Результат = Новый Соответствие;
Результат.Вставить("Количество документов", 1);
Если Не ЗначениеЗаполнено(ОтборПоПакету) Тогда
АдресСпискаДокументов = ОбщийКонтекстКлиентСервер.АдресКэшаСпискаДокументов;
ЗаполнитьПеременныеМетрикиПоДаннымКэшаДокументов(АдресСпискаДокументов, РежимСписка, Результат);
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ЗаполнитьПеременныеМетрикиПоДаннымКэшаДокументов(АдресСпискаДокументов, РежимСписка, ДопПеременные)
// BSLLS:MissingTempStorageDeletion-off
КэшСпискаДокументовЛокальный = ПолучитьИзВременногоХранилища(АдресСпискаДокументов);
// BSLLS:MissingTempStorageDeletion-on
Если ЗначениеЗаполнено(КэшСпискаДокументовЛокальный) Тогда
ДопПеременные.Вставить("Количество документов", КэшСпискаДокументовЛокальный.Количество());
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Функция ПараметрыОбновленияСпискаДокументов(НовыйРежимОтображенияДокументов, ОтборПоПакету = Неопределено)
Результат = Модуль_Ядро().Контракт_ПараметрыПолученияСпискаДокументов();
СтруктураПериода = СтруктураПериода();
РежимДляОбновления = РежимСпискаДокументовДляОбновления(НовыйРежимОтображенияДокументов);
ВыбранныеВидыДокументов = ВыбранныеВидыДокументовНаСервере(РежимДляОбновления);
Результат.Режим = РежимДляОбновления;
Результат.НачалоПериода = СтруктураПериода.ДатаНачала;
Результат.КонецПериода = СтруктураПериода.ДатаОкончания;
Результат.МассивВыбранныхВидов = ВыбранныеВидыДокументов;
Результат.ПоказыватьЗавершенные = ПоказыватьЗавершенные;
Результат.РежимОтбораПоПериоду = НастройкаВыбораПериода.РежимОтбораПоПериоду;
Результат.ВключитьОтборПоОрганизации = ВключитьОтборПоОрганизации;
Результат.ВключитьОтборПоКонтрагенту = ВключитьОтборПоКонтрагенту;
Результат.ВключитьОтборПоСтатусу = ВключитьОтборПоСтатусу;
Результат.ОтборПоПакету = ОтборПоПакету;
Результат.ОтборПоСтатусу = ?(ВключитьОтборПоСтатусу, ОтборПоСтатусу, Неопределено);
Если ВключитьОтборПоКонтрагенту Тогда
Результат.ОтборПоКонтрагенту = ?(ЗначениеЗаполнено(ОтборПоКонтрагенту), ОтборПоКонтрагенту, Неопределено);
КонецЕсли;
Если ВключитьОтборПоОрганизации Тогда
Результат.ОтборПоОрганизации = ?(ЗначениеЗаполнено(ОтборПоОрганизации), ОтборПоОрганизации, Неопределено);
КонецЕсли;
Если ДоступнаНастройкаПоказыватьЧерновики() Тогда
Результат.ПоказыватьЧерновики = ПоказыватьЧерновики;
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция РежимСпискаДокументовДляОбновления(НовыйРежимОтображенияДокументов)
Результат = РежимОтображенияДокументов;
Если ЗначениеЗаполнено(НовыйРежимОтображенияДокументов) Тогда
Результат = НовыйРежимОтображенияДокументов;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ВыбранныеВидыДокументовНаСервере(РежимДляОбновления)
Результат = Новый Массив;
Если РежимДляОбновления = РежимыОтображения().ДляОтправки
ИЛИ РежимДляОбновления = РежимыОтображения().Перевозочные Тогда
Если ВключитьОтборПоВидуПакета Тогда
Результат.Добавить(ОтборПоВидуПакета);
Иначе
МассивВидовПакетов = Модуль_Ядро().МассивВидовПакетов();
Для Каждого ВидПакета Из МассивВидовПакетов Цикл
Результат.Добавить(ВидПакета.Идентификатор);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ОбновитьСписокНаСервере(Знач ПараметрыОбновленияСписка)
СтарыйРежимОтображенияДокументов = РежимОтображенияДокументов;
РежимОтображенияДокументов = ПараметрыОбновленияСписка.Режим;
РежимОтображенияПриЗапуске = РежимОтображенияДокументов;
Если СтарыйРежимОтображенияДокументов <> РежимОтображенияДокументов Тогда
СохранитьВидимостьКолонок(СтарыйРежимОтображенияДокументов);
ПереключитьВидимостьКолонок(РежимОтображенияДокументов);
КонецЕсли;
УстановитьВидимостьОтбораПоСтатусу(РежимОтображенияДокументов);
УстановитьВидимостьОтбораПоВидуПакета(РежимОтображенияДокументов);
ЗаполнитьМенюДействий(РежимОтображенияДокументов);
УстановитьЦветКнопокПереключенияРежимов();
НастроитьДополнительныеКолонки();
НастроитьФормуПриСменеРежима();
СписокДокументов_ОбновитьКэш(
ПараметрыОбновленияСписка,
СписокДокументов,
СопоставленныеКонтрагенты1С
);
ТаблицаОтборов_УстановитьОтборыСпискаДокументов(РежимОтображенияДокументов);
ОбновитьСтраницуСпискаДокументовНаСервере();
КоличествоУстановленныхФильтров = КоличествоУстановленныхФильтров();
УстановитьЗаголовокКнопкиФильтров(КоличествоУстановленныхФильтров);
ПроверитьСобытияЛентыКонтрагентов();
КонецПроцедуры
//&НаКлиенте
Процедура СписокДокументов_ОбновитьСтатусЭПДвТекущейСтроке()
ТекущиеДанные = Элементы.СписокДокументов.ТекущиеДанные;
Если ТекущиеДанные = Неопределено
Или Не ЗначениеЗаполнено(ТекущиеДанные.Документ) Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = Новый_СтруктураДанныхСтрокиСписка(ТекущиеДанные);
Ядро = Модуль_Ядро();
ДанныеЭПД = Ядро.КонтурЛогистика_ПолучитьДляСтрокиСпискаДокументовСтатусЭПД(ДанныеСтроки);
Если ЗначениеЗаполнено(ДанныеЭПД) Тогда
СтатусПоУмолчанию = "";
ТекущиеДанные.СтатусЭПД = Ядро.ЗначениеСоответствия(ДанныеЭПД, ТекущиеДанные.Ключ, СтатусПоУмолчанию);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ДлительныеОперации_ОбновитьСтатусыЭПД(АдресВХранилище, ДопПараметр = Неопределено) Экспорт
ДанныеЭПД = Модуль_Платформа().ДлительныеОперации_Результат(АдресВХранилище);
Если НЕ ЗначениеЗаполнено(ДанныеЭПД) Тогда
Возврат;
КонецЕсли;
Ядро = Модуль_Ядро();
СтатусПоУмолчанию = "";
Для Каждого СтрокаСписка Из СписокДокументов Цикл
Если ЗначениеЗаполнено(СтрокаСписка.Документ) Тогда
СтрокаСписка.СтатусЭПД = Ядро.ЗначениеСоответствия(ДанныеЭПД, СтрокаСписка.Ключ, СтатусПоУмолчанию);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура НастроитьФормуПриСменеРежима()
Если РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
ЗаголовокКолонкиОшибок = "Ошибки";
РазворачиватьПакетыНаОтправкуПоДокументам = Модуль_Ядро().ОбщиеНастройки_Прочитать("РазворачиватьПакетыНаОтправкуПоДокументам");
Если РазворачиватьПакетыНаОтправкуПоДокументам Тогда
ЗаголовокКолонкиСодержимоеПакета = "Документ";
Иначе
ЗаголовокКолонкиСодержимоеПакета = "Пакет документов";
КонецЕсли;
Элементы.СписокДокументов.Колонки.СодержимоеПакета.ТекстШапки = ЗаголовокКолонкиСодержимоеПакета;
Иначе
ЗаголовокКолонкиОшибок = "Ошибки проверки";
КонецЕсли;
Элементы.СписокДокументов.Колонки.ОшибкиПроверкиТекст.ТекстШапки = ЗаголовокКолонкиОшибок;
КонецПроцедуры
Процедура СохранитьВидимостьКолонок(РежимОтображенияДокументов)
ВидимостьКолонокСпискаДокументов = Новый Соответствие;
Для Каждого КолонкаФормы Из ЭлементыФормы.СписокДокументов.Колонки Цикл
СтруктураВидимости = Новый Структура;
СтруктураВидимости.Вставить("Видимость", КолонкаФормы.Видимость);
СтруктураВидимости.Вставить("ИзменятьВидимость", КолонкаФормы.ИзменятьВидимость);
ВидимостьКолонокСпискаДокументов.Вставить(КолонкаФормы.Имя, СтруктураВидимости);
КонецЦикла;
ИмяСписка = ИмяСпискаХраненияКолонок(РежимОтображенияДокументов);
ХранилищеНастроекДанныхФорм.Сохранить("Диадок", "Колонки" + ИмяСписка, ВидимостьКолонокСпискаДокументов);
КонецПроцедуры
Функция ИмяСпискаХраненияКолонок(РежимОтображенияДокументов)
Результат = РежимОтображенияДокументов;
Если РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
РазворачиватьПоДокументам = Модуль_Ядро().ОбщиеНастройки_Прочитать("РазворачиватьПакетыНаОтправкуПоДокументам");
ПоказыватьКоличествоДокументовВСписке = Модуль_Ядро().ОбщиеНастройки_Прочитать("ПоказыватьКоличествоДокументовВСписке");
Если РазворачиватьПоДокументам Тогда
Результат = Результат + "_РазворачиватьПоДокументам";
ИначеЕсли ПоказыватьКоличествоДокументовВСписке Тогда
Результат = Результат + "_ПоказыватьКоличествоДокументовВСписке";
КонецЕсли;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения().Входящие Тогда
ОтключитьАнализ = Модуль_Ядро().ОбщиеНастройки_Прочитать("ОтключитьАнализДляВходящихДокументов");
Если ОтключитьАнализ Тогда
Результат = Результат + "_ОтключитьАнализ";
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ПереключитьВидимостьКолонок(РежимОтображенияДокументов)
ОтключитьВидимостьКолонок();
ИмяСписка = ИмяСпискаХраненияКолонок(РежимОтображенияДокументов);
ПереключаемыеКолонки = МассивПереключаемыхКолонокСписка(РежимОтображенияДокументов);
ДоступныеСкрытыеКолонкиСписка = ДоступныеСкрытыеКолонкиСписка();
ЗаменаДанныхКолонокСписка = СтруктураЗаменыДанныхКолонокСписка(РежимОтображенияДокументов);
Для Каждого КолонкаФормы Из ЭлементыФормы.СписокДокументов.Колонки Цикл
ИмяКолонкиФормы = КолонкаФормы.Имя;
ИмяДанныхДляЗамены = "";
Если ЗаменаДанныхКолонокСписка.Свойство(ИмяКолонкиФормы, ИмяДанныхДляЗамены) Тогда
КолонкаФормы.Данные = ИмяДанныхДляЗамены;
КонецЕсли;
Если ПереключаемыеКолонки.Найти(ИмяКолонкиФормы) <> Неопределено Тогда
КолонкаФормы.ИзменятьВидимость = Истина;
Если ДоступныеСкрытыеКолонкиСписка.Найти(ИмяКолонкиФормы) = Неопределено Тогда
КолонкаФормы.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
СохраненныеНастройкиКолонок = ХранилищеНастроекДанныхФорм.Загрузить("Диадок", "Колонки" + ИмяСписка);
Если СохраненныеНастройкиКолонок <> Неопределено Тогда
Для Каждого КолонкаФормы Из ЭлементыФормы.СписокДокументов.Колонки Цикл
СтруктураВидимости = СохраненныеНастройкиКолонок[КолонкаФормы.Имя];
Если СтруктураВидимости <> Неопределено Тогда
КолонкаФормы.Видимость = СтруктураВидимости.Видимость;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Возвращает структуру для подмены у колонки источника данных
//
// Параметры:
// РежимОтображенияДокументов - Строка - см. РежимыОтображения()
//
// Возвращаемое значение:
// Структура - Структура для подмены данных:
// * Ключ - Строка - имя колонки табличного поля СписокДокументов, в котором необходимо заменить Данные
// * Значение - Строка - значение для замены в поле Данные
//
Функция СтруктураЗаменыДанныхКолонокСписка(РежимОтображенияДокументов)
Результат = Новый Структура();
// BSLLS:DuplicateStringLiteral-off
Если РежимОтображенияДокументов = РежимыОтображения().Перевозочные Тогда
Результат.Вставить("Контрагент", "Контрагент_");
Результат.Вставить("Организация", "Организация_");
Результат.Вставить("ПромежуточныйПолучатель", "ПромежуточныйПолучатель_");
Результат.Вставить("ВнешнийСтатус", "ВнешнийСтатус_");
Результат.Вставить("Грузоотправитель", "Организация");
Результат.Вставить("Перевозчик", "Контрагент");
Результат.Вставить("Грузополучатель", "ПромежуточныйПолучатель");
Результат.Вставить("ВнешнийСтатусЭПД", "ВнешнийСтатус");
Иначе
Результат.Вставить("Грузоотправитель", "Грузоотправитель");
Результат.Вставить("Перевозчик", "Перевозчик");
Результат.Вставить("Грузополучатель", "Грузополучатель");
Результат.Вставить("ВнешнийСтатусЭПД", "ВнешнийСтатусЭПД");
Результат.Вставить("Контрагент", "Контрагент");
Результат.Вставить("Организация", "Организация");
Результат.Вставить("ПромежуточныйПолучатель", "ПромежуточныйПолучатель");
Результат.Вставить("ВнешнийСтатус", "ВнешнийСтатус");
КонецЕсли;
// BSLLS:DuplicateStringLiteral-on
Возврат Результат;
КонецФункции
Процедура ОтключитьВидимостьКолонок()
МассивНеизменныхКолонок = МассивНеизменныхКолонок();
Для Каждого КолонкаФормы Из ЭлементыФормы.СписокДокументов.Колонки Цикл
Если МассивНеизменныхКолонок.Найти(КолонкаФормы.Имя) = Неопределено Тогда
КолонкаФормы.Видимость = Ложь;
КолонкаФормы.ИзменятьВидимость = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьНастройкуИспользованияПлагиновПослеАвторизации()
ТекущаяНастройкаИспользованияПлагинов = ОбщийКонтекстКлиентСервер.ИспользоватьПлагины;
ИмяКнопки = "ОткрытьСписокПлагинов";
КнопкиРасширенныеНастройки = ЭлементыФормы.ГруппаНастроек.Кнопки.ГруппаРасширенныеНастройки.Кнопки;
ЕстьКнопкаСпискаПлагинов = (КнопкиРасширенныеНастройки.Найти(ИмяКнопки) <> Неопределено);
Если ТекущаяНастройкаИспользованияПлагинов Тогда
Если НЕ ЕстьКнопкаСпискаПлагинов Тогда
ПредставлениеКнопки = "Плагины";
ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
ДействиеКнопки = Новый Действие("ОткрытьСписокПлагинов");
КнопкиРасширенныеНастройки.Добавить(ИмяКнопки, ТипКнопки, ПредставлениеКнопки, ДействиеКнопки);
КонецЕсли;
Иначе
Если ЕстьКнопкаСпискаПлагинов Тогда
КнопкаОткрытьСписокПлагинов = КнопкиРасширенныеНастройки.ОткрытьСписокПлагинов;
КнопкиРасширенныеНастройки.Удалить(КнопкаОткрытьСписокПлагинов);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ДоступныеСкрытыеКолонкиСписка()
Результат = Новый Массив;
РежимыОтображения = РежимыОтображения();
Если РежимОтображенияДокументов = РежимыОтображения.ДляОтправки Тогда
Результат.Добавить("СтатусПакета");
Результат.Добавить("ЭтоЧерновик");
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Исходящие Тогда
Результат.Добавить("ВидПакета");
Результат.Добавить("ВидЭлДокумента");
Результат.Добавить("Пакет");
Результат.Добавить("ДокументЭДО");
Результат.Добавить("ПредставлениеДокументаДиадок");
Результат.Добавить("Метка");
Результат.Добавить("ЗаблокированныйПакет");
Результат.Добавить("ВнешнийСтатус");
Результат.Добавить("СтатусПКФНС");
Результат.Добавить("СтатусТЭДО");
Результат.Добавить("ОбъектМаршрутизации");
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Входящие Тогда
Результат.Добавить("Пакет");
Результат.Добавить("ДокументЭДО");
Результат.Добавить("ПредставлениеДокументаДиадок");
Результат.Добавить("ДействиеВДД");
Результат.Добавить("ДействиеВ1С");
Результат.Добавить("ТребуетсяРасшифровка");
Результат.Добавить("ЗаблокированныйПакет");
Результат.Добавить("АнализПроведен");
Результат.Добавить("ВнешнийСтатус");
Результат.Добавить("СтатусПКФНС");
Результат.Добавить("СтатусТЭДО");
Результат.Добавить("ОбъектМаршрутизации");
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Внутренние Тогда
Результат.Добавить("ВидПакета");
Результат.Добавить("ВидЭлДокумента");
Результат.Добавить("Пакет");
Результат.Добавить("ДокументЭДО");
Результат.Добавить("ПредставлениеДокументаДиадок");
Результат.Добавить("Метка");
Результат.Добавить("ЗаблокированныйПакет");
Результат.Добавить("СтатусПКФНС");
Результат.Добавить("ОбъектМаршрутизации");
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Перевозочные Тогда
Результат.Добавить("ВидПакета");
Результат.Добавить("ВидЭлДокумента");
Результат.Добавить("Пакет");
Результат.Добавить("ДокументЭДО");
Результат.Добавить("ПредставлениеДокументаДиадок");
Результат.Добавить("Метка");
Результат.Добавить("ЗаблокированныйПакет");
Результат.Добавить("СтатусПКФНС");
Результат.Добавить("ОбъектМаршрутизации");
Иначе
ВызватьИсключение "Неизвестный режим отображения";
КонецЕсли;
Результат.Добавить("BoxId");
Результат.Добавить("LetterId");
Результат.Добавить("DocumentId");
Возврат Результат;
КонецФункции
Процедура ИнициализироватьНастройкуИВидимостьКнопкиЛентыКонтрагентов()
Ядро = Модуль_Ядро();
УведомлятьОНовыхСобытиях = Ядро.ЗначениеНастройки_УведомлятьОНовыхСобытиях();
Если НЕ УведомлятьОНовыхСобытиях Тогда
ЭлементыФормы.Удалить(ЭлементыФормы.СписокСобытий);
ЭлементыФормы.ОбновитьСписок.Лево =
ЭлементыФормы.ПоказыватьЗавершенные.Лево
+ ЭлементыФормы.ПоказыватьЗавершенные.Ширина
- ЭлементыФормы.ОбновитьСписок.Ширина
- 10;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьЦветКнопокПереключенияРежимов()
ЦветАктивнойКнопки = ЭтаФорма.Панель.ЦветФона;
ЦветНеактивнойКнопки = Новый Цвет(230, 230, 230);
Элементы.ВыбратьРежимДляОтправки.ЦветФонаКнопки = ЦветНеактивнойКнопки;
Элементы.ВыбратьРежимИсходящие.ЦветФонаКнопки = ЦветНеактивнойКнопки;
Элементы.ВыбратьРежимВходящие.ЦветФонаКнопки = ЦветНеактивнойКнопки;
Элементы.ВыбратьРежимВнутренние.ЦветФонаКнопки = ЦветНеактивнойКнопки;
Элементы.ОткрытьПеревозочныеДокументы.ЦветФонаКнопки = ЦветНеактивнойКнопки;
РежимыОтображения = РежимыОтображения();
Если РежимОтображенияДокументов = РежимыОтображения.ДляОтправки Тогда
Элементы.ВыбратьРежимДляОтправки.ЦветФонаКнопки = ЦветАктивнойКнопки;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Исходящие Тогда
Элементы.ВыбратьРежимИсходящие.ЦветФонаКнопки = ЦветАктивнойКнопки;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Входящие Тогда
Элементы.ВыбратьРежимВходящие.ЦветФонаКнопки = ЦветАктивнойКнопки;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Внутренние Тогда
Элементы.ВыбратьРежимВнутренние.ЦветФонаКнопки = ЦветАктивнойКнопки;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Перевозочные Тогда
Элементы.ОткрытьПеревозочныеДокументы.ЦветФонаКнопки = ЦветАктивнойКнопки;
КонецЕсли;
КонецПроцедуры
Процедура НастроитьДополнительныеКолонки()
ПараметрыПМ = Новый Структура;
ПараметрыПМ.Вставить("Режим", РежимОтображенияДокументов);
НастройкиДопКолонок = Модуль_Ядро().ПодключаемыйМодуль_ОбработатьСобытие("ПолучитьНастройкиДополнительныхКолонокСпискаДокументов", ПараметрыПМ);
КолонкиСпискаДокументов = ЭлементыФормы.СписокДокументов.Колонки;
Для Сч = 1 По 5 Цикл
ИмяКолонки = "ДопРеквизит" + Формат(Сч, "ЧГ=0");
КолонкиСпискаДокументов[ИмяКолонки].Видимость = Ложь;
КолонкиСпискаДокументов[ИмяКолонки].ИзменятьВидимость = Ложь;
КонецЦикла;
Если НастройкиДопКолонок <> Неопределено Тогда
Для Сч = 0 По НастройкиДопКолонок.Количество() - 1 Цикл
Если Сч > 4 Тогда
ВызватьИсключение "Допускается не более 5 дополнительных колонок в списке документов";
КонецЕсли;
ТекКолонка = КолонкиСпискаДокументов["ДопРеквизит" + Формат(Сч + 1, "ЧГ=0")];
ТекКолонка.ТекстШапки = НастройкиДопКолонок[Сч].Заголовок;
ТекКолонка.Видимость = Истина;
ТекКолонка.ИзменятьВидимость = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОбновитьСтраницуСпискаДокументов()
СписокДокументов.Очистить();
ОбновитьСтраницуСпискаДокументовНаСервере();
ДлительныеОперации_ПолучитьСтатусыЭПДвФоне();
КонецПроцедуры
Процедура ОбновитьСтраницуСпискаДокументовНаСервере() Экспорт
РежимОтображенияДокументовДляОтправки = (РежимОтображенияДокументов = РежимыОтображения().ДляОтправки);
ПараметрыСтраницы = СписокДокументов_ЗагрузитьСтраницу(НомерСтраницы, РазмерСтраницы, РежимОтображенияДокументовДляОтправки, СписокДокументов);
НомерСтраницы = ПараметрыСтраницы.НомерСтраницы;
КоличествоСтраниц = ПараметрыСтраницы.КоличествоСтраниц;
ОбновитьЗаголовокНомерСтраницы();
ОбновитьКнопкиНавигацииПоСтраницам();
ПараметрыПМ = Новый Структура;
ПараметрыПМ.Вставить("Режим", РежимОтображенияДокументов);
НастройкиДопКолонок = Модуль_Ядро().ПодключаемыйМодуль_ОбработатьСобытие("ПолучитьНастройкиДополнительныхКолонокСпискаДокументов", ПараметрыПМ);
КолонкиСпискаДокументов = ЭлементыФормы.СписокДокументов.Колонки;
Для Сч = 1 По 5 Цикл
КолонкиСпискаДокументов["ДопРеквизит" + Сч].ТекстПодвала = "";
КонецЦикла;
Если ТипЗнч(НастройкиДопКолонок) = Тип("Массив") Тогда
ОписаниеЧисла = Новый ОписаниеТипов("Число");
Для Сч = 0 По НастройкиДопКолонок.ВГраница() Цикл
Если НастройкиДопКолонок[Сч].Тип = ОписаниеЧисла Тогда
ИмяКолонки = "ДопРеквизит" + (Сч + 1);
КолонкиСпискаДокументов[ИмяКолонки].ТекстПодвала = СписокДокументов.Итог(ИмяКолонки);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ОбщийBoxId(ВыбранныеBoxId)
Результат = Неопределено;
Если ВыбранныеBoxId.Количество() > 0 Тогда
Если ВыбранныеBoxId.Количество() <> 1 Тогда
ПоказатьПредупреждениеПереопределенная( , "В списке выбраны документы по различным организациям.
|Выберите документы, относящиеся только к одной организации.");
Иначе
Результат = ВыбранныеBoxId[0];
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция BoxIdИзДокументов(ДокументыДляОбработки)
Результат = Новый Массив;
Для Каждого Документ Из ДокументыДляОбработки Цикл
BoxId = Документ.Идентификаторы.BoxId;
Если Результат.Найти(BoxId) = Неопределено Тогда
Результат.Добавить(BoxId);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция BoxIdИзСтрокСписка(СтрокиСписка)
Результат = Новый Массив;
Организации1С = Новый Массив;
Для Каждого СтрокаСписка Из СтрокиСписка Цикл
Организация = СтрокаСписка.Организация;
Если Организации1С.Найти(Организация) = Неопределено Тогда
Организации1С.Добавить(Организация);
КонецЕсли;
КонецЦикла;
УчастникиДО = ДанныеОрганизаций(Организации1С);
Для Каждого УчастникДО Из УчастникиДО Цикл
BoxId = УчастникДО.BoxId;
Если Результат.Найти(BoxId) = Неопределено Тогда
Результат.Добавить(BoxId);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ДанныеОрганизаций(Организации1С)
Результат = Новый Массив;
Для Каждого Организация1С Из Организации1С Цикл
Идентификаторы = Модуль_Ядро().Новый_ИдентификаторыСправочника(Организация1С);
УчастникДО_Организации = Модуль_Ядро().Организации_ЗаполнитьУчастникаДО(Идентификаторы);
Результат.Добавить(УчастникДО_Организации);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ВыделенныеСтрокиСпискаДокументов()
Результат = Новый Массив;
Для Каждого СтрокаСписка Из СписокДокументов Цикл
Если СтрокаСписка.Флажок Тогда
Если НЕ ЗначениеЗаполнено(СтрокаСписка.BoxId)
ИЛИ ЯщикиНеТребующиеОплаты.Получить(СтрокаСписка.BoxId) <> Неопределено Тогда
Результат.Добавить(СтрокаСписка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция Новый_СтруктураДанныхСтрокиСписка(Источник)
Ядро = Модуль_Ядро();
Результат = Ядро.Контракт_СтрокаСпискаДокументов();
Если Источник <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Результат, Источник);
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ДанныеВыделенныхСтрокТЧ(ОбрабатыватьШаблоны)
Результат = Новый Массив;
ВыделенныеСтроки = ВыделенныеСтрокиСпискаДокументов();
Для Каждого СтрокаТЧ Из ВыделенныеСтроки Цикл
Если СтрокаТЧ.Видимость И (НЕ СтрокаТЧ.Шаблон ИЛИ ОбрабатыватьШаблоны) Тогда
СтруктураСтроки = Новый_СтруктураДанныхСтрокиСписка(СтрокаТЧ);
Результат.Добавить(СтруктураСтроки);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ДанныеДокументовВыделенныхСтрокТЧ(ОбрабатыватьШаблоны = Ложь, ДобавитьЗаблокированные = Ложь)
ДанныеДокументов = Новый Массив;
ПакетыДокументов = Новый Массив;
МассивПакетов = Новый Массив;
ВыделенныеСтроки = ВыделенныеСтрокиСпискаДокументов();
Для Каждого СтрокаТЧ Из ВыделенныеСтроки Цикл
СтруктураСтроки = Новый_СтруктураДанныхСтрокиСписка(СтрокаТЧ);
Если СтрокаТЧ.Видимость И (Не СтрокаТЧ.Шаблон Или ОбрабатыватьШаблоны) Тогда
Если (СтрокаТЧ.ЗаблокированныйПакет И ДобавитьЗаблокированные) Тогда
LetterId = СтруктураСтроки.LetterId;
Если МассивПакетов.Найти(LetterId) = Неопределено Тогда
ИдентификаторыПакета = ИдентификаторыПакетаДокумента(СтруктураСтроки);
ПакетыДокументов.Добавить(ИдентификаторыПакета);
МассивПакетов.Добавить(LetterId);
КонецЕсли;
ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураСтроки.LetterId) Тогда
Продолжить;
Иначе
ДанныеДокументов.Добавить(СтруктураСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = МассивДокументовИзДанныхДокументов(ДанныеДокументов);
ДополнитьМассивДокументовДокументамиПакетов(Результат, ПакетыДокументов);
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ДокументыПакетовСтрокСписка(СтрокиСписка)
Результат = Новый Массив;
ПакетыДокументов = Новый Массив;
ОбработанныеПакеты = Новый Массив;
Для Каждого СтрокаСписка Из СтрокиСписка Цикл
Если ЗначениеЗаполнено(СтрокаСписка.Пакет) Тогда
Ключ = СтрокаСписка.Пакет;
Иначе
Ключ = СтрокаСписка.LetterId;
КонецЕсли;
Если ОбработанныеПакеты.Найти(Ключ) = Неопределено Тогда
ИдентификаторыПакета = ИдентификаторыПакетаДокумента(СтрокаСписка);
ПакетыДокументов.Добавить(ИдентификаторыПакета);
ОбработанныеПакеты.Добавить(Ключ);
КонецЕсли;
КонецЦикла;
ДополнитьМассивДокументовДокументамиПакетов(Результат, ПакетыДокументов);
Возврат Результат;
КонецФункции
//&НаСервере
Функция ИдентификаторыПакетаДокумента(СтрокаСписка)
Документ = ДокументИзДанныхСтрокиТЧ(СтрокаСписка);
Результат = Модуль_Ядро().Контракт_ИдентификаторыПакета();
Результат.BoxId = Документ.Идентификаторы.BoxId;
Результат.LetterId = Документ.Идентификаторы.LetterId;
Результат.ПакетЭДО = Документ.Идентификаторы.ПакетЭДО;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ДополнитьМассивДокументовДокументамиПакетов(МассивДокументов, ИдентификаторыПакетов)
Ядро = Модуль_Ядро();
ДокументыПакетов = Ядро.Пакеты_ДокументыПакетов(ИдентификаторыПакетов);
Ядро.ДополнитьМассив(МассивДокументов, ДокументыПакетов);
КонецПроцедуры
//&НаСервере
Функция МассивДокументовИзДанныхДокументов(СтрокиСпискаДокументов) Экспорт
Результат = Новый Массив;
Для Каждого СтрокаСписка Из СтрокиСпискаДокументов Цикл
Документ = ДокументИзДанныхСтрокиТЧ(СтрокаСписка);
Результат.Добавить(Документ);
КонецЦикла;
Возврат Результат;
КонецФункции
//&НаСервере
Функция ДокументИзДанныхСтрокиТЧ(СтрокаСписка) Экспорт
Модуль_Ядро = Модуль_Ядро();
Результат = Модуль_Ядро.Документ_ДокументИзДанныхСтрокиСписка(СтрокаСписка);
Возврат Результат;
КонецФункции
Процедура ОбновитьКэшСопоставленныхКонтрагентов()
Ядро = Модуль_Ядро();
// BSLLS:UnusedLocalVariable-off
СопоставленныеКонтрагенты1С = Ядро.Контрагенты_СопоставленныеПартнеры();
// BSLLS:UnusedLocalVariable-on
КонецПроцедуры
//&НаКлиенте
Функция ДействияЭДО() Экспорт
Результат = Модуль_Ядро().Перечисление_ДействияЭДО();
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ОтветыЭДО() Экспорт
Ядро = Модуль_Ядро();
Результат = Ядро.Перечисление_ВариантыОтветаПоДокументу();
Возврат Результат;
КонецФункции
Функция ДокументыПакетов(Пакеты)
Результат = Новый Массив;
Для Каждого Пакет Из Пакеты Цикл
Для Каждого Документ Из Пакет.Документы Цикл
Результат.Добавить(Документ);
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура СписокДокументовПриПолученииДанных(Элемент, ОформленияСтрок)
РежимыОтображения = РежимыОтображения();
// BSLLS:StyleElementConstructors-off
// BSLLS:MagicNumber-off
Цвет_НаличиеОшибок = Новый Цвет(255, 214, 214);
Цвет_ДокументНеСопоставлен = Новый Цвет(240, 240, 240);
Цвет_ОшибкаВоВнешнемСтатусе = Новый Цвет(206, 0, 20);
Цвет_Подсказка = Новый Цвет(128, 128, 128);
Цвет_Предупреждение = Новый Цвет(235, 168, 0);
// BSLLS:MagicNumber-on
// BSLLS:StyleElementConstructors-on
УровниКритичности = Модуль_Ядро().Контракт_УровниКритичностиСтатусаДокумента();
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
Ячейки = ОформлениеСтроки.Ячейки;
ИндексИконкиПакета = ДанныеСтроки.ИндексИконкиПакета;
Если ИндексИконкиПакета > 0 Тогда
Ячейки.КартинкаПакета.ОтображатьКартинку = Истина;
Ячейки.КартинкаПакета.ИндексКартинки = ИндексИконкиПакета;
КонецЕсли;
ТипДокумента = ДанныеСтроки.ТипДокумента;
ФункцияДокумента = ДанныеСтроки.ФункцияДокумента;
Если ЗначениеЗаполнено(ТипДокумента) Тогда
Если ТипДокумента = "Nonformalized" Тогда
ОписаниеТипаДокумента = ДанныеСтроки.ПредставлениеДокументаДиадок;
Иначе
ОписаниеТипаДокумента = ПредставлениеТиповДокументов.Получить(ТипДокумента);
Если ОписаниеТипаДокумента <> Неопределено Тогда
ФункцияДокументаДляXML = ФункцияДокументаДляВыводаВСписок(ТипДокумента, ФункцияДокумента);
Если ЗначениеЗаполнено(ФункцияДокументаДляXML) Тогда
ОписаниеТипаДокумента = ОписаниеТипаДокумента + ", " + ФункцияДокументаДляXML;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеТипаДокумента) Тогда
Ячейки.ОписаниеТипаДокумента.ОтображатьТекст = Истина;
Ячейки.ОписаниеТипаДокумента.Текст = ОписаниеТипаДокумента;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеСтроки.ОшибкиПроверкиТекст) Тогда
ОформлениеСтроки.ЦветФона = Цвет_НаличиеОшибок;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Входящие Тогда
ТребуетсяСопоставление = ТребуетсяСопоставлениеДокумента(ДанныеСтроки.ТипДокумента);
ДокументНеСопоставлен = НЕ ЗначениеЗаполнено(ДанныеСтроки.Документ)
И ТребуетсяСопоставление;
Если ДокументНеСопоставлен Тогда
ОформлениеСтроки.ЦветФона = Цвет_ДокументНеСопоставлен;
КонецЕсли;
КонецЕсли;
Если Найти(ВРег(ДанныеСтроки.ВнешнийСтатус), "ОШИБКА") > 0 Тогда
Ячейки.ВнешнийСтатус.ЦветТекста = Цвет_ОшибкаВоВнешнемСтатусе;
КонецЕсли;
Если ДанныеСтроки.СтатусМЧДКритичность = УровниКритичности.Error Тогда
Ячейки.СтатусМЧД.ЦветТекста = Цвет_ОшибкаВоВнешнемСтатусе;
КонецЕсли;
Если ДанныеСтроки.СтатусПКФНСКритичность = УровниКритичности.Error
ИЛИ ДанныеСтроки.СтатусПКФНСКритичность = УровниКритичности.Warning Тогда
Ячейки.СтатусПКФНС.ЦветТекста = Цвет_Предупреждение;
КонецЕсли;
Если ИспользоватьСопоставлениеПодразделений Тогда
Ячейки.Подразделение.Текст = "< из настройки >";
Ячейки.Подразделение.ЦветТекста = Цвет_Подсказка;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеСтроки.Организация) Тогда
Ячейки.Организация.Текст = СокрЛП(ДанныеСтроки.ПредставлениеОрганизацииЭДО);
Ячейки.Организация.ЦветТекста = Цвет_Подсказка;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеСтроки.Контрагент) Тогда
Ячейки.Контрагент.Текст = СокрЛП(ДанныеСтроки.ПредставлениеКонтрагентаЭДО);
Ячейки.Контрагент.ЦветТекста = Цвет_Подсказка;
КонецЕсли;
Если РежимОтображенияДокументов = РежимыОтображения.Перевозочные Тогда
Если Не ЗначениеЗаполнено(ДанныеСтроки.Организация) Тогда
Ячейки.Грузоотправитель.Текст = СокрЛП(ДанныеСтроки.ПредставлениеОрганизацииЭДО);
Ячейки.Грузоотправитель.ЦветТекста = Цвет_Подсказка;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеСтроки.ПромежуточныйПолучатель) Тогда
Ячейки.Грузополучатель.Текст = СокрЛП(ДанныеСтроки.ПредставлениеПромежуточногоПолучателяЭДО);
Ячейки.Грузополучатель.ЦветТекста = Цвет_Подсказка;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеСтроки.Контрагент) Тогда
Ячейки.Перевозчик.Текст = СокрЛП(ДанныеСтроки.ПредставлениеКонтрагентаЭДО);
Ячейки.Перевозчик.ЦветТекста = Цвет_Подсказка;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Попытка
ПараметрыПМ = Новый Структура;
ПараметрыПМ.Вставить("Форма", ЭтаФорма);
ПараметрыПМ.Вставить("ИмяФормы", "ОсновнаяФорма");
ПараметрыПМ.Вставить("Элемент", Элемент);
ПараметрыПМ.Вставить("ОформленияСтрок", ОформленияСтрок);
Модуль_Ядро().ПодключаемыйМодуль_ОбработатьСобытие("ПриПолученииДанныхТабличнойЧасти", ПараметрыПМ);
Исключение
Сообщить("Не удалось применить для формы условное оформление из ПМ!", СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
Функция ФункцияДокументаДляВыводаВСписок(ТипДокумента, ФункцияДокумента)
Результат = "";
Если ТипДокумента = "UniversalTransferDocument"
ИЛИ ТипДокумента = "UniversalTransferDocumentRevision"
ИЛИ ТипДокумента = "UniversalCorrectionDocument"
ИЛИ ТипДокумента = "UniversalCorrectionDocumentRevision" Тогда
Результат = Модуль_Ядро().Документы_ФункцияДокументаДляXML(ТипДокумента, ФункцияДокумента);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ТребуетсяСопоставлениеДокумента(ТипДокумента)
Результат = Ложь;
Если ЗначениеЗаполнено(ТипДокумента) Тогда
Если НЕ ЗначениеЗаполнено(ТипыДокументовДляСопоставления) Тогда
ТипыДокументовДляСопоставления = ТипыДокументовДляСопоставления();
КонецЕсли;
Результат = ТипыДокументовДляСопоставления.Свойство(ТипДокумента);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ТипыДокументовДляСопоставления()
Результат = Новый Структура;
Результат.Вставить("UniversalTransferDocument");
Результат.Вставить("UniversalTransferDocumentRevision");
Результат.Вставить("Invoice");
Результат.Вставить("InvoiceRevision");
Результат.Вставить("UniversalCorrectionDocument");
Результат.Вставить("UniversalCorrectionDocumentRevision");
Результат.Вставить("InvoiceCorrection");
Результат.Вставить("InvoiceCorrectionRevision");
Результат.Вставить("XmlTorg12");
Результат.Вставить("XmlAcceptanceCertificate");
Возврат Результат;
КонецФункции
Процедура ОбработатьВыделениеДокументов(УстановитьФлажки)
ПолеФормыСписка = Элементы.СписокДокументов;
Для Каждого СтрокаСписка Из СписокДокументов Цикл
Если Не ПолеФормыСписка.ПроверитьСтроку(СтрокаСписка) Тогда
Продолжить;
КонецЕсли;
СтрокаСписка.Флажок = УстановитьФлажки;
КонецЦикла;
КонецПроцедуры
//&НаКлиентеНаСервереБезКонтекста
Функция ОтпечаткиСертификатовКонтекстаСеанса(КонтекстСеанса)
Результат = Новый Массив;
Для Каждого текКлючЗначение Из КонтекстСеанса Цикл
ДанныеКонтекстаСеанса = текКлючЗначение.Значение;
Отпечаток = ДанныеКонтекстаСеанса.ОтпечатокСертификата;
Если ЗначениеЗаполнено(Отпечаток)
И Результат.Найти(Отпечаток) = Неопределено Тогда
Результат.Добавить(Отпечаток);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция АвторизованныеПользователиКонтекстаСеанса(КонтекстСеанса)
ОбработанныеИдентификаторы = Новый Массив;
Результат = Новый Массив;
Для Каждого текКлючЗначение Из КонтекстСеанса Цикл
ПользовательДД = текКлючЗначение.Значение.Сессия.Пользователь;
Если ОбработанныеИдентификаторы.Найти(ПользовательДД.Идентификатор) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбработанныеИдентификаторы.Добавить(ПользовательДД.Идентификатор);
Результат.Добавить(СокрЛП(ПользовательДД.Представление));
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура УстановитьПредставлениеТекущегоПользователяДиадок(Форма)
ИменаПользователей = АвторизованныеПользователиКонтекстаСеанса(КонтекстСеансаКлиентСервер);
Если ИменаПользователей.Количество() = 0 Тогда // Не авторизован
ПредставлениеТекущегоПользователя = "Авторизуйтесь";
ИначеЕсли ИменаПользователей.Количество() = 1 Тогда
ПредставлениеТекущегоПользователя = ИменаПользователей[0];
Иначе // Несколько активных сессий
ПредставлениеТекущегоПользователя = "Список пользователей";
КонецЕсли;
ЭлементыФормы.ПредставлениеПользователя.Заголовок = ПредставлениеТекущегоПользователя;
КонецПроцедуры
Процедура УстановитьТекущуюСтрокуСпискаДокументов()
Если Не ЗначениеЗаполнено(КлючТекущейСтроки) Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("Ключ", КлючТекущейСтроки);
СтрокиСписка = СписокДокументов.НайтиСтроки(Отбор);
Если СтрокиСписка.Количество() >= 1 Тогда
Элементы.СписокДокументов.ТекущаяСтрока = СтрокиСписка[0];
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОбновитьЗначенияПараметровОбщегоКонтекста()
Ядро = Модуль_Ядро();
Ядро.ОбщийКонтекст_ДополнитьЗначениямиИзОбщихНастроек(ОбщийКонтекстКлиентСервер);
КонецПроцедуры
Функция ТекущаяКоманднаяПанель()
РежимыОтображения = РежимыОтображения();
Если РежимОтображенияДокументов = РежимыОтображения.ДляОтправки Тогда
Результат = ЭлементыФормы.КоманднаяПанельДляОтправки;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Исходящие Тогда
Результат = ЭлементыФормы.КоманднаяПанельИсходящие;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Входящие Тогда
Результат = ЭлементыФормы.КоманднаяПанельВходящие;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Внутренние Тогда
Результат = ЭлементыФормы.КоманднаяПанельВнутренние;
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения.Перевозочные Тогда
Результат = ЭлементыФормы.КоманднаяПанельПеревозочные;
Иначе
ВызватьИсключение "Неизвестный режим отображения";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_НазваниеКатегории() Экспорт
Результат = Модуль_Ядро().Метрика_НазваниеКатегории();
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_КатегорияНастройка()
Результат = Метрика_НазваниеКатегории().Настройка;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_КатегорияНайтиНужныйДокумент()
КатегорииМетрик = Метрика_НазваниеКатегории();
Результат = КатегорииМетрик.НайтиНужныйДокумент;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_ДействиеОткрытиеПомощника()
ДействияМетрик = Метрика_НазваниеДействий();
Результат = ДействияМетрик.ОткрытиеПомощника;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики)
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(
КатегорияМетрики,
ДействиеМетрики
);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики)
НазваниеФормы = Метрика_НазваниеФормы();
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НазваниеФормы,
КатегорияМетрики,
ДействиеМетрики
);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_НажатиеКнопкиПакетнойОбработки(КатегорияМетрики, ДействиеМетрики, КоличествоДанных = 1)
НазваниеФормыДляМетрики = Метрика_НазваниеФормы();
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьПоведение_МассовоеДействиеНажатиеКнопки(НазваниеФормыДляМетрики,
КатегорияМетрики,
ДействиеМетрики,
КоличествоДанных);
КонецПроцедуры
//&НаКлиенте
Функция Метрика_НазваниеДействий() Экспорт
Результат = Модуль_Ядро().Метрика_НазваниеДействий();
Возврат Результат;
КонецФункции
Функция Метрика_ДействиеСоздатьДокументы()
Возврат "Создать";
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Метрика_ДействиеОткрытьСписокПлагинов()
Возврат "Плагины";
КонецФункции
//&НаКлиенте
Функция Метрика_НазваниеКатегорииРежимаОтображения() Экспорт
Результат = "";
Если РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
Результат = "Действие в документах на отправку";
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения().Исходящие Тогда
Результат = "Действие в исходящих";
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения().Входящие Тогда
Результат = "Действие во входящих";
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения().Внутренние Тогда
Результат = "Действие во внутренних";
ИначеЕсли РежимОтображенияДокументов = РежимыОтображения().Перевозочные Тогда
Результат = Метрика_НазваниеКатегории().Перевозочные;
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_НазваниеКатегорийПостроенияСписка(ВариантРежимаОтображенияДокументов)
Метрика_РежимОтображенияДокументов = РежимСпискаДокументовДляОбновления(ВариантРежимаОтображенияДокументов);
Если Метрика_РежимОтображенияДокументов = РежимыОтображения().ДляОтправки Тогда
Результат = Метрика_НазваниеКатегории().ПостроениеСпискаНаОтправку;
ИначеЕсли Метрика_РежимОтображенияДокументов = РежимыОтображения().Исходящие Тогда
Результат = Метрика_НазваниеКатегории().ПостроениеСпискаИсходящие;
ИначеЕсли Метрика_РежимОтображенияДокументов = РежимыОтображения().Входящие Тогда
Результат = Метрика_НазваниеКатегории().ПостроениеСпискаВходящие;
Иначе
Результат = Метрика_НазваниеКатегории().РежимОтображенияСпискаНеОпределен;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Метрика_НазваниеКатегорийМассовыхДействий(Действие)
ВариантыДействий = ДействияЭДО();
Если Действие = ВариантыДействий.СоздатьДокумент Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().СозданиеДокументов;
ИначеЕсли Действие = ВариантыДействий.СопоставитьДокумент Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().СопоставлениеДокументов;
ИначеЕсли Действие = ВариантыДействий.ПодписатьИОтправить Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().ОтправкаДокумента;
ИначеЕсли Действие = ВариантыДействий.ОтправитьОтвет Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().ПодписаниеВходящегоДокумента;
Иначе
КатегорияМетрики = Метрика_НазваниеКатегории().ДействиеНеОпределено;
КонецЕсли;
Возврат КатегорияМетрики;
КонецФункции
Функция Метрика_НазваниеДействияМаршрутизации(Действие) Экспорт
Результат = Модуль_Ядро().Метрика_НазваниеДействияМаршрутизации(Действие);
Возврат Результат;
КонецФункции
Функция Метрика_НазваниеДействияАннулирования(Действие) Экспорт
Результат = "";
Если Действие = ДействияЭДО().Аннулировать Тогда
Результат = "Аннулировать";
ИначеЕсли Действие = ДействияЭДО().ОтказатьВАннулировании Тогда
Результат = "Отказать в аннулировании";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_НазваниеДействияПодписание(Действие)
Результат = "";
Если Действие = ДействияЭДО().ПодписатьВходящий Тогда
Результат = "Подписать";
ИначеЕсли Действие = ДействияЭДО().ОтказатьВПодписи Тогда
Результат = "Отказать контрагенту в подписи";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_НазваниеФормы()
Возврат "Основная форма";
КонецФункции
// Возвращает признак что в конфигурации есть объекты для хранения данных, РегистрДопСведений или ПодсистемаДиадока.
//
// Возвращаемое значение:
// Булево
//
Функция СистемаХраненияОпределена()
Ядро = Модуль_Ядро();
Данные = Ядро.РезультатИнициализацииОсновногоМодуля();
Результат = (Данные.УстановленРегистрДопСведений Или Данные.УстановленаПодсистемаДиадока);
Возврат Результат;
КонецФункции
Процедура ВключитьДекорациюДлительнойОперации()
СтраницыФормы = ЭтаФорма.ЭлементыФормы.СтраницыОсновныхЭлементовФормы;
СтраницыФормы.ТекущаяСтраница = СтраницыФормы.Страницы.СтраницаДлительнаяОперация;
КонецПроцедуры
Процедура ОбновитьНадписьДекорацииДлительнойОперации()
ПорядковыйНомерОперацииЗагрузки = ПорядковыйНомерОперацииЗагрузки + 1;
КоличествоОпераций = 7;
ШаблонЗаголовка = НСтр(
"ru = 'Запускаем модуль %1/%2.
|Это может занять несколько минут.'"
);
Ядро = Модуль_Ядро();
ТекстЗаголовкаДекорации = Ядро.Общее_ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПорядковыйНомерОперацииЗагрузки, КоличествоОпераций);
ЭтаФорма.ЭлементыФормы.НадписьДлительнаяОперация.Заголовок = ТекстЗаголовкаДекорации;
КонецПроцедуры
Процедура ОтключитьДекорациюДлительнойОперацииОтложенно()
ПодключитьОбработчикОжидания("ОтключитьДекорациюДлительнойОперации", 0.1, Истина);
КонецПроцедуры
Процедура ОтключитьДекорациюДлительнойОперации() Экспорт
СтраницыФормы = ЭтаФорма.ЭлементыФормы.СтраницыОсновныхЭлементовФормы;
СтраницыФормы.ТекущаяСтраница = СтраницыФормы.Страницы.СтраницаСписокДокументов;
КонецПроцедуры
Процедура ПоказатьИндикаторДлительнойОперации()
СтраницыИндикаторыДлительнойОперации = ЭтаФорма.ЭлементыФормы.ПанельИндикаторыДлительнойОперации;
СтраницыИндикаторыДлительнойОперации.ТекущаяСтраница = СтраницыИндикаторыДлительнойОперации.Страницы.СтраницаДлительнаяОперация;
КонецПроцедуры
Процедура ПоказатьИндикаторПредупреждения()
СтраницыИндикаторыДлительнойОперации = ЭтаФорма.ЭлементыФормы.ПанельИндикаторыДлительнойОперации;
СтраницыИндикаторыДлительнойОперации.ТекущаяСтраница = СтраницыИндикаторыДлительнойОперации.Страницы.СтраницаПредупреждение;
КонецПроцедуры
//&НаКлиентеНаСервереБезКонтекста
Функция РежимыФормыПакета()
Результат = Новый Структура;
Результат.Вставить("СозданиеНовогоПакета", "СозданиеНовогоПакета");
Результат.Вставить("ОтображениеПакета", "ОтображениеПакета");
Результат.Вставить("ДобавлениеДокументовСДиска", "ДобавлениеДокументовСДиска");
Возврат Результат
КонецФункции
// } ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ФОРМЫ
// { ОБЩИЕ МЕТОДЫ
//&НаКлиенте
Процедура ОбновитьСвойствоЭлементаФормы(Элемент, СвойствоЭлемента, ЗначениеСвойства) Экспорт
Если Элемент[СвойствоЭлемента] <> ЗначениеСвойства Тогда
Элемент[СвойствоЭлемента] = ЗначениеСвойства;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеПоляФормы(Отказ, Форма, ИмяПоля, Синоним = "") Экспорт
Если НЕ ЗначениеЗаполнено(Форма[ИмяПоля]) Тогда
ВывестиСообщениеПользователю("Не заполнено поле """
+ ?(ЗначениеЗаполнено(Синоним), Синоним, ИмяПоля)
+ """");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура Обработчик_ОткрытьФайл(ИмяВременногоФайла, ИмяФайла) Экспорт
Если ЗначениеЗаполнено(ИмяВременногоФайла) Тогда
ЗапуститьПриложение(ИмяВременногоФайла);
КонецЕсли;
КонецПроцедуры
Процедура Обработчик_КопироватьФайл(ИмяВременногоФайла, ИмяФайла) Экспорт
ОписаниеОповещения = НовыйОписаниеОповещения("Обработчик_КопироватьФайл_Завершение", ЭтаФорма, ИмяВременногоФайла);
ПоказатьДиалогСохранение(ОписаниеОповещения, , "Сохранение документа на диск", , ИмяФайла);
КонецПроцедуры
Процедура Обработчик_КопироватьФайл_Завершение(ВыбранныеФайлы, ИмяВременногоФайла) Экспорт
Если ЗначениеЗаполнено(ВыбранныеФайлы) Тогда
КопироватьФайл(ИмяВременногоФайла, ВыбранныеФайлы[0]);
КонецЕсли;
КонецПроцедуры
Функция СохранитьДвоичныеДанныеВоВременныйФайл(ДвоичныеДанные, ИмяФайла) Экспорт
Каталог = Вычислить("КаталогВременныхФайлов()");
Результат = СохранитьДвоичныеДанныеВФайл(ДвоичныеДанные, ИмяФайла, Каталог);
Возврат Результат;
КонецФункции
Функция СохранитьДвоичныеДанныеВФайл(ДвоичныеДанные, Знач ИмяФайла, Каталог) Экспорт
Если ЗначениеЗаполнено(ИмяФайла) Тогда
ИмяФайла = ЗаменитьНедопустимыеСимволыИмениФайла(ИмяФайла);
Иначе
ИмяФайла = Строка(Новый УникальныйИдентификатор);
КонецЕсли;
Результат = Модуль_Ядро().ОбъединитьПути(Каталог, ИмяФайла);
Если ТипЗнч(ДвоичныеДанные) <> Тип("ДвоичныеДанные") Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДвоичныеДанные);
КонецЕсли;
ДвоичныеДанные.Записать(Результат);
Возврат Результат;
КонецФункции
Функция ЗаменитьНедопустимыеСимволыИмениФайла(ИмяФайла) Экспорт
Результат = ИмяФайла;
НедопустимыеСимволы = ":~!@/\#$%^&*=|`""?<>";
КоличествоНедопустимыхСимволов = СтрДлина(НедопустимыеСимволы);
Для Сч = 1 По КоличествоНедопустимыхСимволов Цикл
Результат = СтрЗаменить(Результат, Сред(НедопустимыеСимволы, Сч, 1), "_");
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура ОповеститьИлиПерейтиПоСсылке(Знач АдресСсылки, ДополнительныеПараметры, ФормаСобытия) Экспорт
Если ЭтоОповещение(АдресСсылки) Тогда
ВыполнитьОповещение(АдресСсылки, ДополнительныеПараметры, ФормаСобытия);
ИначеЕсли ЭтоАдресСсылки(АдресСсылки) Тогда
ПерейтиПоСсылке(АдресСсылки);
КонецЕсли;
КонецПроцедуры
Функция ЭтоОповещение(Знач АдресСсылки)
АдресСсылки = НРег(АдресСсылки);
Результат = Найти(АдресСсылки, "alert:") > 0 ИЛИ Найти(АдресСсылки, "alertandclose:") > 0;
Возврат Результат;
КонецФункции
Функция ЭтоАдресСсылки(Знач АдресСсылки)
АдресСсылки = НРег(АдресСсылки);
Результат = Ложь
Или Найти(АдресСсылки, "e1cib/") = 1
Или Найти(АдресСсылки, "http:") = 1
Или Найти(АдресСсылки, "https:") = 1
Или Найти(АдресСсылки, "e1c:") = 1
Или Найти(АдресСсылки, "v8help:") = 1
Или Найти(АдресСсылки, "mailto:") = 1
Или Найти(АдресСсылки, "tel:") = 1
Или Найти(АдресСсылки, "skype:") = 1;
Возврат Результат;
КонецФункции
Процедура ВыполнитьОповещение(АдресСсылки, ДополнительныеПараметры, ФормаСобытия)
ПараметрыОповещения = Модуль_Ядро().ПараметрыОповещенияИзСтрокиHTMLСообщения(АдресСсылки);
ОбработчикОповещения = ПараметрыОповещения.ОбработчикОповещения;
РезультатОповещения = ПараметрыОповещения.РезультатОповещения;
ОписаниеОповещения = НовыйОписаниеОповещения(ОбработчикОповещения, ФормаСобытия, ДополнительныеПараметры);
ВыполнитьОбработкуОповещенияПереопределенная(ОписаниеОповещения, РезультатОповещения);
КонецПроцедуры
//&НаКлиенте
Процедура ПерейтиПоСсылке(АдресСсылки)
#Если ТолстыйКлиентОбычноеПриложение Тогда
ЗапуститьПриложение(АдресСсылки);
#Иначе
ПерейтиПоНавигационнойСсылке(АдресСсылки);
#КонецЕсли
КонецПроцедуры
//&НаКлиенте
Функция ТипКлиента()
Результат = Неопределено;
#Если ТонкийКлиент Тогда
Результат = "Тонкий клиент";
#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда
Результат = "Толстый клиент обычное приложение";
#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда
Результат = "Толстый клиент управляемые формы";
#ИначеЕсли ВебКлиент Тогда
Результат = "Веб клиент";
#ИначеЕсли НаСервере Тогда
Результат = "Сервер";
#ИначеЕсли ВнешнееСоединение Тогда
Результат = "Внешнее соединение";
#КонецЕсли
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция ПараметрыВМассив(Параметр0 = NULL,
Параметр1 = NULL,
Параметр2 = NULL,
Параметр3 = NULL,
Параметр4 = NULL) Экспорт
Результат = Модуль_Ядро().ПараметрыВМассив(Параметр0, Параметр1, Параметр2, Параметр3, Параметр4);
Возврат Результат;
КонецФункции
Функция Цвет_АктивнаяКнопка() Экспорт
Результат = Новый Цвет(255, 255, 255);
Возврат Результат;
КонецФункции
Функция Цвет_НеактивнаяКнопка() Экспорт
Результат = Новый Цвет(230, 230, 230);
Возврат Результат;
КонецФункции
Функция Цвет_НетСвязиСДанными1С() Экспорт
Результат = Новый Цвет(128, 128, 128); // Серый
Возврат Результат;
КонецФункции
Функция Цвет_ИннКппНеЗаполнены() Экспорт
Результат = Новый Цвет(255, 0, 0); // красный
Возврат Результат;
КонецФункции
Процедура ОткрытьФормуСДаннымиСертификата(ДанныеСертификата, мВладелецФормы) Экспорт
Платформа = Модуль_Платформа();
Платформа.ПоказатьОписаниеСертификата(ДанныеСертификата, мВладелецФормы);
КонецПроцедуры
//&НаКлиенте
Функция ЭтоФормализованныйАктСверки405(ТипКонтента)
Возврат Нрег(ТипКонтента) = "reconciliationact405";
КонецФункции
// { ТИПИЗАЦИЯ ПОЛЯ СОСТАВНОГО ТИПА
//&НаКлиенте
Функция ОграничениеТипа_Неопределено() Экспорт
Результат = Новый ОписаниеТипов("Неопределено");
Возврат Результат;
КонецФункции
// } ТИПИЗАЦИЯ ПОЛЯ СОСТАВНОГО ТИПА
// } ОБЩИЕ МЕТОДЫ
// { МЧД
// Для переданных данных групповой операции выполняет проверку данных МЧД
//
// Параметры:
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
//&НаКлиенте
Процедура МЧД_НачатьПроверкуДанныхГрупповойОперации(ОписаниеГрупповойОперации)
ПараметрыГрупповойОбработки = ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки;
ТекущееДействиеЭДО = ПараметрыГрупповойОбработки.Действие;
ТребуетсяМЧД = Модуль_Ядро().МЧД_ДействияТребующиеДоверенность().Получить(ТекущееДействиеЭДО);
Если ТребуетсяМЧД = Истина Тогда
МЧД_ПроверитьДанныеГрупповойОперацииНаПоддержкуМЧДВРоуминге(ОписаниеГрупповойОперации);
Иначе
Обработчик_ВыполнитьГрупповуюОперациюПослеЗавершенияПроверок(Неопределено, ОписаниеГрупповойОперации);
КонецЕсли;
КонецПроцедуры
// Для переданных данных групповой операции выполняет проверку контрагентов на возможность отправки МЧД в роуминг
// Выводит диалог выбора с ошибками проверки
//
// Параметры:
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
//&НаКлиенте
Процедура МЧД_ПроверитьДанныеГрупповойОперацииНаПоддержкуМЧДВРоуминге(ОписаниеГрупповойОперации)
Ядро = Модуль_Ядро();
ПараметрыГрупповойОбработки = ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки;
ОшибкиПроверокМЧД = ЗаполнитьИПроверитьМЧДВРоумингеПередОтправкойДокументов(ПараметрыГрупповойОбработки.ДанныеДляОбработки);
Если ОшибкиПроверокМЧД.Количество() Тогда
ОписаниеОповещенияОбработчика = НовыйОписаниеОповещения(
"Обработчик_ПослеПроверкиКонтрагентовНаПоддержкуМЧДВРоуминге",
ЭтаФорма,
ОписаниеГрупповойОперации
);
Действие = ПараметрыГрупповойОбработки.Действие;
ГрупповоеДействие = ПараметрыГрупповойОбработки.ГрупповоеДействие;
ПараметрыДляПроверкиМЧД = ПараметрыДляПроверкиМЧД(ОписаниеОповещенияОбработчика, Неопределено, Неопределено, Действие, ГрупповоеДействие);
ПараметрыДляПроверкиМЧД.ОшибкиПроверокМЧД = ОшибкиПроверокМЧД;
ПоказатьВопрос_КонтрагентыДокументовНеПоддерживаютМЧД(ПараметрыДляПроверкиМЧД);
Иначе
Обработчик_ПослеПроверкиКонтрагентовНаПоддержкуМЧДВРоуминге(Неопределено, ОписаниеГрупповойОперации);
КонецЕсли;
КонецПроцедуры
//&НаСервере
Функция ЗаполнитьИПроверитьМЧДВРоумингеПередОтправкойДокументов(ДанныеДляОбработки)
Ядро = Модуль_Ядро();
Результат = Новый Массив;
ОшибкиПоОрганизациям = Новый Соответствие;
ИнформацияОбОператораторах = Неопределено;
Для каждого Документ Из ДанныеДляОбработки Цикл
Если Документ.Направление = "Внутреннее" Тогда
Продолжить;
КонецЕсли;
СтороныДокументооборота = СтороныДокументооборотаДляПроверкиПоддержкиМЧДВРоуминге(Документ);
ОрганизацияBoxId = СтороныДокументооборота.Организация.BoxId;
Если Ядро.МЧД_ТребуетсяДоверенность(ОрганизацияBoxId) Тогда
КонтрагентFNSParticipantId = СтороныДокументооборота.Контрагент.FNSParticipantId;
КонтрагентПоддерживаетМЧД = Ядро.МЧД_ОператорЭДОПоддерживаетДоверенности(ОрганизацияBoxId, КонтрагентFNSParticipantId);
Если НЕ КонтрагентПоддерживаетМЧД Тогда
ДополнитьДокументСведениямиМЧДКлиентСервер(Документ, Неопределено);
ДополнитьСписокОшибокМЧДВРоуминге(ОшибкиПоОрганизациям, СтороныДокументооборота);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого ОшибкаПоОрганизациям Из ОшибкиПоОрганизациям Цикл
Результат.Добавить(ОшибкаПоОрганизациям.Значение);
КонецЦикла;
Возврат Результат;
КонецФункции
//&НаСервере
Функция СтороныДокументооборотаДляПроверкиПоддержкиМЧДВРоуминге(Документ)
Ядро = Модуль_Ядро();
РежимыОтображения = РежимыОтображения();
Результат = Новый Структура("Контрагент, Организация");
ЕстьОтправитель = Документ.Свойство("Отправитель");
ЕстьПолучатель = Документ.Свойство("Получатель");
Если ЕстьОтправитель И ЕстьПолучатель Тогда
Результат.Контрагент = Ядро.Документы_Контрагент(Документ);
Результат.Организация = Ядро.Документы_Организация(Документ);
Иначе
ИдентификаторыОрганизации = Ядро.Новый_ИдентификаторыСправочника(Документ.Организация);
УчастникДО_Организации = Ядро.Организации_ЗаполнитьУчастникаДО(ИдентификаторыОрганизации);
ИдентификаторыКонтрагента = Ядро.Новый_ИдентификаторыСправочника(Документ.Контрагент);
УчастникДО_Контрагенты = Ядро.Контрагенты_ЗаполнитьУчастникаДО(ИдентификаторыКонтрагента, ИдентификаторыОрганизации);
ОрганизацияBoxId = УчастникДО_Организации.BoxId;
КонтрагентFNSParticipantId = УчастникДО_Контрагенты.FNSParticipantId;
КонтрагентНаименование = УчастникДО_Контрагенты.Наименование;
Результат.Контрагент = УчастникДО_Контрагенты;
Результат.Организация = УчастникДО_Организации;
КонецЕсли;
Возврат Результат;
КонецФункции // ()
//&НаСервере
Процедура ДополнитьСписокОшибокМЧДВРоуминге(ОшибкиПоОрганизациям, СтороныДокументооборота)
Ядро = Модуль_Ядро();
КонтрагентFNSParticipantId = СтороныДокументооборота.Контрагент.FNSParticipantId;
ОрганизацияBoxId = СтороныДокументооборота.Организация.BoxId;
ОписаниеОшибки = ОшибкиПоОрганизациям.Получить(ОрганизацияBoxId);
Если ОписаниеОшибки = Неопределено Тогда
Метрика_ВидыОшибокПроверокМЧД = Метрика_ВидыОшибокПроверокМЧД();
РазделыОшибок = Ядро.МЧД_РазделыОшибокПроверкиМЧД();
ОписаниеОшибки = Новый_ОписаниеОшибкиПроверкиМЧДпоУмолчанию(
РазделыОшибок.КонтрагентНеПоддерживаетМЧДВРоуминге,
"",
Новый Массив,
Метрика_ВидыОшибокПроверокМЧД.НеУказанаДоверенность,
ОрганизацияBoxId
);
ОшибкиПоОрганизациям.Вставить(ОрганизацияBoxId, ОписаниеОшибки);
КонецЕсли;
ИдентификаторФНСОператора = Ядро.ИдентификаторФНСИзИдентификаторУчастникаЭДО(КонтрагентFNSParticipantId);
ПредставлениеОператораЭДО = Ядро.ПредставлениеОператораЭДО(ИдентификаторФНСОператора, ОрганизацияBoxId);
ПредставлениеКонтрагента = СтороныДокументооборота.Контрагент.Наименование + " (" + ПредставлениеОператораЭДО + ")";
ОшибкаВСписке = ОписаниеОшибки.СписокОшибок.Найти(ПредставлениеКонтрагента);
Если ОшибкаВСписке = Неопределено Тогда
ОписаниеОшибки.СписокОшибок.Добавить(ПредставлениеКонтрагента);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура Обработчик_ПослеПроверкиКонтрагентовНаПоддержкуМЧДВРоуминге(Результат, ОписаниеГрупповойОперации) Экспорт
ПараметрыГрупповойОбработки = ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки;
ТекущееДействиеЭДО = ПараметрыГрупповойОбработки.Действие;
Если ТекущееДействиеЭДО = ДействияЭДО().ПодписатьВходящий Тогда
Обработчик_ВыполнитьГрупповуюОперациюПослеЗавершенияПроверок(Неопределено, ОписаниеГрупповойОперации);
Иначе
МЧД_ПроверитьДанныеГрупповойОперацииНаМЧДПоУмолчанию(ОписаниеГрупповойОперации);
КонецЕсли;
КонецПроцедуры
// Для переданных данных групповой операции выполняет заполнение МЧД по умолчанию
// Выводит диалог выбора с ошибками проверки
//
// Параметры:
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
Процедура МЧД_ПроверитьДанныеГрупповойОперацииНаМЧДПоУмолчанию(ОписаниеГрупповойОперации)
ПараметрыГрупповойОбработки = ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки;
ТекущееДействиеЭДО = ПараметрыГрупповойОбработки.Действие;
ОшибкиПроверокМЧД = ЗаполнитьИПроверитьМЧДпоУмолчаниюПередОтправкойДокументов(ПараметрыГрупповойОбработки.ДанныеДляОбработки);
Если ОшибкиПроверокМЧД.Количество() Тогда
ОписаниеОповещенияОбработчика = НовыйОписаниеОповещения(
"Обработчик_ВыполнитьГрупповуюОперациюПослеЗавершенияПроверок",
ЭтаФорма,
ОписаниеГрупповойОперации
);
ПараметрыДляПроверкиМЧД = ПараметрыДляПроверкиМЧД(ОписаниеОповещенияОбработчика, Неопределено, Неопределено, ТекущееДействиеЭДО);
ПараметрыДляПроверкиМЧД.ОшибкиПроверокМЧД = ОшибкиПроверокМЧД;
ПоказатьВопрос_НетПодходящейДоверенности(ПараметрыДляПроверкиМЧД);
Иначе
Обработчик_ВыполнитьГрупповуюОперациюПослеЗавершенияПроверок(Неопределено, ОписаниеГрупповойОперации);
КонецЕсли;
КонецПроцедуры
Функция ПараметрыДляПроверкиМЧД(ОповещениеЗавершения, ИдентификаторЯщика, ВыбраннаяМЧД, ДействиеЭДО, ГрупповоеДействие = Ложь) Экспорт
Результат = Новый Структура;
Результат.Вставить("ОповещениеЗавершения" , ОповещениеЗавершения);
Результат.Вставить("ИдентификаторЯщика" , ИдентификаторЯщика);
Результат.Вставить("ВыбраннаяМЧД" , ВыбраннаяМЧД);
Результат.Вставить("ДействиеЭДО" , ДействиеЭДО);
Результат.Вставить("ГрупповоеДействие" , ГрупповоеДействие);
Результат.Вставить("ВызовИзТитулаИлиОтказа" , Ложь);
Результат.Вставить("ОшибкиПроверокМЧД" , Новый Массив);
Результат.Вставить("РезультатПроверкиМЧД");
Результат.Вставить("НазваниеФормыДляМетрики");
Результат.Вставить("ОписаниеОповещенияДобавленияМетрики");
Возврат Результат;
КонецФункции
// Выполняет проверку переданной мчд и по результатам выводит сообщения пользователю
//
// Параметры:
// ПараметрыДляПроверкиМЧД - Структура - см.ПараметрыДляПроверкиМЧД().
//
Процедура ПроверитьМЧДИВыполнитьОповещение(ПараметрыДляПроверкиМЧД) Экспорт
ТребуетсяМЧД = ТребуетсяМЧД(ПараметрыДляПроверкиМЧД.ИдентификаторЯщика);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
ВыбраннаяМЧД = ПараметрыДляПроверкиМЧД.ВыбраннаяМЧД;
ОбработчикПослеПроверкиМЧД = НовыйОписаниеОповещения(
"ОбработчикПослеПроверкиМЧД",
ЭтаФорма,
ПараметрыДляПроверкиМЧД);
Если ТребуетсяМЧД
И НЕ ЗначениеЗаполнено(ВыбраннаяМЧД) Тогда
ПоказатьВопрос_НеВыбранаМЧД(
ОбработчикПослеПроверкиМЧД,
ПараметрыДляПроверкиМЧД);
Возврат;
КонецЕсли;
Если ТребуетсяМЧД Тогда
ПараметрыДляПроверкиМЧД.РезультатПроверкиМЧД = МЧД_БыстраяПроверка(
ВыбраннаяМЧД,
ПараметрыДляПроверкиМЧД.ИдентификаторЯщика);
Если ПараметрыДляПроверкиМЧД.РезультатПроверкиМЧД.ЭтоДействующаяМЧД Тогда
ВыполнитьОбработкуОповещенияПереопределенная(
ОбработчикПослеПроверкиМЧД,
ДействияНаФормеВопросаМЧД.ДействоватьСМЧД);
ИначеЕсли ПараметрыДляПроверкиМЧД.РезультатПроверкиМЧД.ЭтоПредупреждение Тогда
ПоказатьВопрос_ВыбраннаяМЧДИмеетПредупреждения(
ОбработчикПослеПроверкиМЧД,
ПараметрыДляПроверкиМЧД);
Иначе
ПоказатьВопрос_ВыбраннаяМЧДНеПодходит(
ОбработчикПослеПроверкиМЧД,
ПараметрыДляПроверкиМЧД);
КонецЕсли;
Иначе
ВыполнитьОбработкуОповещенияПереопределенная(
ОбработчикПослеПроверкиМЧД,
ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД);
КонецЕсли;
КонецПроцедуры
// BSLLS:MissingReturnedValueDescription-off
// BSLLS:MissingParameterDescription-off
Функция МЧД_БыстраяПроверка(Знач ВыбраннаяМЧД, Знач ИдентификаторЯщика)
// BSLLS:MissingReturnedValueDescription-on
// BSLLS:MissingParameterDescription-on
Модуль_Ядро = Модуль_Ядро();
Результат = Модуль_Ядро.МЧД_БыстраяПроверка(ВыбраннаяМЧД, ИдентификаторЯщика);
Возврат Результат;
КонецФункции
Процедура ОбработчикПослеПроверкиМЧД(ВыбранноеДействие, ПараметрыДляПроверкиМЧД) Экспорт
Результат = РезультатВыбораМЧД(Ложь, Неопределено);
Модуль_Ядро = Модуль_Ядро();
Метрика_НазваниеКатегории = Метрика_НазваниеКатегории();
Метрика_НазваниеДействий = Метрика_НазваниеДействий();
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
НазваниеФормыДляМетрики = ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики;
ЛейблМетрики = Метрика_НазваниеДействий.НажатиеКнопки;
ПредставлениеМетрики = Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормыДляМетрики);
ДопПеременные = Метрика_ДополнительныеПеременныеМЧД(ПараметрыДляПроверкиМЧД);
Если ПараметрыДляПроверкиМЧД.ГрупповоеДействие Тогда
КатегорияМетрики = Метрика_НазваниеКатегории.УведомлениеПриМассовыхДействиях;
Иначе
КатегорияМетрики = Метрика_НазваниеКатегории.УведомлениеИзформыПакета;
КонецЕсли;
Если ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД Тогда
ДействиеМетрики = Метрика_НазваниеДействий.ДействоватьБезДоверенности;
Результат.РазрешитьДействие = Истина;
ИначеЕсли ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ДействоватьСМЧД
ИЛИ ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ПродолжитьСМЧД Тогда
ДействиеМетрики = Метрика_НазваниеДействий.ДействоватьСДоверенностью;
Результат.РазрешитьДействие = Истина;
Результат.КонтрактМЧД = ПараметрыДляПроверкиМЧД.ВыбраннаяМЧД;
Иначе
ДействиеМетрики = Метрика_НазваниеДействий.ЗакрытиеФормы;
КонецЕсли;
ИдентификаторТрассировки = Неопределено;
Если НЕ ЗначениеЗаполнено(НазваниеФормыДляМетрики) Тогда
ИдентификаторТрассировки = Модуль_Ядро.TraceId();
КонецЕсли;
Модуль_Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НазваниеФормыДляМетрики,
КатегорияМетрики,
ДействиеМетрики,
ЛейблМетрики,
ПредставлениеМетрики,
ИдентификаторТрассировки);
Модуль_Ядро.Метрика_ДобавитьСтатистику_ДляОрганизации(
ПараметрыДляПроверкиМЧД.ИдентификаторЯщика,
КатегорияМетрики,
ДействиеМетрики,
Неопределено,
ДопПеременные,
Неопределено);
ВыполнитьОбработкуОповещенияПереопределенная(ПараметрыДляПроверкиМЧД.ОповещениеЗавершения, Результат);
КонецПроцедуры
Процедура ПоказатьВопрос_НеВыбранаМЧД(Оповещение, ПараметрыДляПроверкиМЧД)
ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().НеВыбранаДоверенность;
Метрика_ОткрытиеФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД);
ГрупповоеДействие = ПараметрыДляПроверкиМЧД.ГрупповоеДействие И НЕ ПараметрыДляПроверкиМЧД.ВызовИзТитулаИлиОтказа;
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД, ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД);
Если ГрупповоеДействие Тогда
КнопкиВопроса.Добавить(
ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок,
ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок
);
КонецЕсли;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.Закрыть, ДействияНаФормеВопросаМЧД.Закрыть);
ТекстВопроса =
"С 1 сентября 2024 года при работе с электронными документами требуется подтверждать полномочия подписанта "
+ "машиночитаемой доверенностью (МЧД). Если подтверждаете полномочия иным способом, продолжите без МЧД.";
Если ГрупповоеДействие Тогда
ОписаниеОповещенияОЗавершении = НовыйОписаниеОповещения(
"ОбработатьРезультатПриГрупповыхДействияхНаФормеВопросаМЧД",
ЭтаФорма,
ПараметрыДляПроверкиМЧД
);
Иначе
ОписаниеОповещенияОЗавершении = Оповещение;
КонецЕсли;
ПоказатьВопросПереопределенная(
ОписаниеОповещенияОЗавершении,
ТекстВопроса,
КнопкиВопроса,
,
ДействияНаФормеВопросаМЧД.Закрыть,
"Не выбрана доверенность"
);
КонецПроцедуры
Процедура ПоказатьВопрос_ВыбраннаяМЧДНеПодходит(Оповещение, ПараметрыДляПроверкиМЧД)
ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().ВыбраннаяДоверенностьНеПодходит;
Метрика_ОткрытиеФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД , ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.Закрыть , ДействияНаФормеВопросаМЧД.Закрыть);
ШаблонВопроса =
"%1
|
|%2
|
|Выберите другую доверенность или выпустите новую.";
МассивОшибок = Новый Массив;
Для каждого ОписаниеОшибки Из ПараметрыДляПроверкиМЧД.РезультатПроверкиМЧД.СписокОшибок Цикл
РасшифровкаОшибки = "- " + ОписаниеОшибки.Расшифровка;
МассивОшибок.Добавить(РасшифровкаОшибки);
КонецЦикла;
СписокОшибокСтрокой = Модуль_Ядро().СоединитьСтроку(МассивОшибок, Символы.ПС);
ПредставлениеМЧД = ПараметрыДляПроверкиМЧД.ВыбраннаяМЧД.ПредставлениеМЧД;
ТекстВопроса = Модуль_Ядро().Общее_ПодставитьПараметрыВСтроку(ШаблонВопроса, ПредставлениеМЧД, СписокОшибокСтрокой);
ПоказатьВопросПереопределенная(Оповещение, ТекстВопроса, КнопкиВопроса, , ДействияНаФормеВопросаМЧД.Закрыть , "Выбранная доверенность не подходит");
КонецПроцедуры
// BSLLS:MissingReturnedValueDescription-off
// BSLLS:MissingParameterDescription-off
Процедура ПоказатьВопрос_ВыбраннаяМЧДИмеетПредупреждения(Оповещение, ПараметрыДляПроверкиМЧД)
// BSLLS:MissingReturnedValueDescription-on
// BSLLS:MissingParameterDescription-on
ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().ВыбраннаяДоверенностьИмеетПредупреждения;
Метрика_ОткрытиеФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД);
Метрика_ЗаписатьСтатистику_ДоверенностьСПредупреждениями(ПараметрыДляПроверкиМЧД);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ПродолжитьСМЧД, ДействияНаФормеВопросаМЧД.ПродолжитьСМЧД);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД, ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.Закрыть, ДействияНаФормеВопросаМЧД.Закрыть);
ШаблонВопроса =
"%1
|
|%2
|
|Если хотите выполнить действие с выбранной доверенностью, то продолжите с МЧД. При необходимости выберите другую
|доверенность или продолжите действие без МЧД.";
МассивОшибок = Новый Массив;
Для Каждого ОписаниеОшибки Из ПараметрыДляПроверкиМЧД.РезультатПроверкиМЧД.СписокОшибок Цикл
РасшифровкаОшибки = "- " + ОписаниеОшибки.Расшифровка;
МассивОшибок.Добавить(РасшифровкаОшибки);
КонецЦикла;
Модуль_Ядро = Модуль_Ядро();
СписокОшибокСтрокой = Общее_СоединитьСтроку(МассивОшибок, Символы.ПС);
ПредставлениеМЧД = ПараметрыДляПроверкиМЧД.ВыбраннаяМЧД.ПредставлениеМЧД;
ТекстВопроса = Модуль_Ядро.Общее_ПодставитьПараметрыВСтроку(ШаблонВопроса, ПредставлениеМЧД, СписокОшибокСтрокой);
ПоказатьВопросПереопределенная(
Оповещение,
ТекстВопроса,
КнопкиВопроса,
,
ДействияНаФормеВопросаМЧД.ПродолжитьСМЧД,
"Выбранная доверенность с предупреждениями");
КонецПроцедуры
Процедура ПоказатьВопрос_НетПодходящейДоверенности(ПараметрыДляПроверкиМЧД, ОбработчикВопроса = Неопределено) Экспорт
ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().НетПодходящихДовереностей;
Метрика_ОткрытиеФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД , ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок, ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.Закрыть , ДействияНаФормеВопросаМЧД.Закрыть);
ТекстВопроса =
"С 1 сентября 2024 года при работе с электронными документами требуется подтверждать полномочия подписанта "
+ "машиночитаемой доверенностью (МЧД).
|
|При выполнении действия с доверенностями произошли ошибки. Перейдите по кнопке ""Подробнее"" для просмотра причин";
Если ОбработчикВопроса = Неопределено Тогда
ОбработчикВопроса = НовыйОписаниеОповещения(
"ОбработатьРезультатПриГрупповыхДействияхНаФормеВопросаМЧД",
ЭтаФорма,
ПараметрыДляПроверкиМЧД
);
КонецЕсли;
ПоказатьВопросПереопределенная(
ОбработчикВопроса,
ТекстВопроса,
КнопкиВопроса,
,
ДействияНаФормеВопросаМЧД.Закрыть,
"Нет подходящих доверенностей"
);
КонецПроцедуры
// Выводит вопрос "Оператор контрагента не поддерживает МЧД"
// Используется для группового действия
//
// Параметры:
// ПараметрыДляПроверкиМЧД - Структура - см. ПараметрыДляПроверкиМЧД()
//
Процедура ПоказатьВопрос_КонтрагентыДокументовНеПоддерживаютМЧД(ПараметрыДляПроверкиМЧД)
ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().ПоддержкаОператоромМЧД;
Метрика_ОткрытиеФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.Продолжить, ДействияНаФормеВопросаМЧД.Продолжить);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок, ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаМЧД.Закрыть, ДействияНаФормеВопросаМЧД.Закрыть);
ШаблонВопроса =
"Не для всех выделенных документов можно выполнить операцию: %1 с МЧД в роуминге.
|
|Перейдите по кнопке ""Подробнее"" для просмотра причин.
|
|Нажмите ""Продолжить"", чтобы выполнить действие для всех документов. Они отправятся без МЧД или с ней.";
ПредставлениеДействияЭДО = ПредставлениеДействияЭДО(ПараметрыДляПроверкиМЧД.ДействиеЭДО);
ТекстВопроса = Модуль_Ядро().Общее_ПодставитьПараметрыВСтроку(ШаблонВопроса, ПредставлениеДействияЭДО);
ОбработчикВопроса = НовыйОписаниеОповещения("ОбработатьРезультатНаФормеВопроса_КонтрагентНеПоддерживаетМЧД", ЭтаФорма, ПараметрыДляПроверкиМЧД);
ПоказатьВопросПереопределенная(ОбработчикВопроса, ТекстВопроса, КнопкиВопроса, , ДействияНаФормеВопросаМЧД.Закрыть);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьРезультатНаФормеВопроса_КонтрагентНеПоддерживаетМЧД(ВыбранноеДействие, ПараметрыДляПроверкиМЧД) Экспорт
ДобавитьМетрикиПриГрупповыхДействияхНаФормеВопросаМЧД(ВыбранноеДействие, ПараметрыДляПроверкиМЧД);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
ПродолжитьБезМЧД = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.Продолжить;
ОткрытьСписокОшибок = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок;
Если ПродолжитьБезМЧД Тогда
ВыполнитьОбработкуОповещенияПереопределенная(ПараметрыДляПроверкиМЧД.ОповещениеЗавершения);
ИначеЕсли ОткрытьСписокОшибок Тогда
ОшибкиПроверокМЧД = ПараметрыДляПроверкиМЧД.ОшибкиПроверокМЧД;
ОбработчикЗакрытияФормыHTML = НовыйОписаниеОповещения("ОбработатьЗакрытиеФормыHTMLСообщения", ЭтаФорма, ПараметрыДляПроверкиМЧД);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "КонтрагентыНеПоддерживаютМЧД");
ПараметрыОткрытияФормы.Вставить("ОшибкиПроверокМЧД", ОшибкиПроверокМЧД);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОбработчикЗакрытияФормыHTML
);
КонецЕсли;
КонецПроцедуры
Функция СгруппироватьДанныеДляОбработкиПоИдентификаторуЯщика(ДанныеДляОбработки)
Модуль_Ядро = Модуль_Ядро();
Результат = Новый Соответствие;
Если ЕстьСвойствоИдентификаторыВОбрабатываемыхДанных(ДанныеДляОбработки) Тогда
Для каждого Документ Из ДанныеДляОбработки Цикл
BoxId = Документ.Идентификаторы.BoxId;
Если Модуль_Ядро.ЭтоАдресЯщика(BoxId) Тогда
BoxId = Модуль_Ядро.АдресЯщикаВИдентификатор(BoxId);
КонецЕсли;
ДанныеПоBoxId = Результат.Получить(BoxId);
Если ДанныеПоBoxId = Неопределено Тогда
Результат.Вставить(BoxId, Новый Массив);
ДанныеПоBoxId = Результат.Получить(BoxId);
КонецЕсли;
ДанныеПоBoxId.Добавить(Документ);
КонецЦикла;
Иначе
Организации1С = Новый Массив;
Для Каждого СтрокаСписка Из ДанныеДляОбработки Цикл
Организация = СтрокаСписка.Организация;
Если Организации1С.Найти(Организация) = Неопределено Тогда
Организации1С.Добавить(Организация);
КонецЕсли;
КонецЦикла;
УчастникиДО = ДанныеОрганизаций(Организации1С);
Для каждого УчастникДО Из УчастникиДО Цикл
BoxId = УчастникДО.BoxId;
ПараметрыОтбора = Новый Структура("Организация", УчастникДО.Организация);
ДокументыПоОрганизации = Модуль_Ядро.МассивСтруктур_НайтиСтроки(ДанныеДляОбработки, ПараметрыОтбора);
Результат.Вставить(BoxId, ДокументыПоОрганизации);
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗаполнитьИПроверитьМЧДпоУмолчаниюПередОтправкойДокументов(ДанныеДляОбработки)
ДокументыБезМЧД = Новый Массив;
Для каждого Документ Из ДанныеДляОбработки Цикл
Если НЕ Документ.СлужебнаяИнформация.Свойство("КонтрактМЧД") Тогда
ДокументыБезМЧД.Добавить(Документ);
КонецЕсли;
КонецЦикла;
СписокОшибок = Новый Массив;
Модуль_Ядро = Модуль_Ядро();
СгруппированныеДанные = СгруппироватьДанныеДляОбработкиПоИдентификаторуЯщика(ДокументыБезМЧД);
ИдентификаторыЯщиков = Модуль_Ядро.ВыгрузитьКолонку(СгруппированныеДанные, "Ключ", Истина);
КонтрактыМЧД = ПолучитьДействующиеМЧДпоУмолчанию(ИдентификаторыЯщиков, СписокОшибок);
Для Каждого ИдентификаторЯщика Из ИдентификаторыЯщиков Цикл
КонтрактМЧД = КонтрактыМЧД.Получить(ИдентификаторЯщика);
ДокументыПоИдентификатору = СгруппированныеДанные.Получить(ИдентификаторЯщика);
Для Каждого Документ Из ДокументыПоИдентификатору Цикл
ДополнитьДокументСведениямиМЧДКлиентСервер(Документ, КонтрактМЧД)
КонецЦикла;
КонецЦикла;
Возврат СписокОшибок;
КонецФункции
Функция ПолучитьДействующиеМЧДпоУмолчанию(ИдентификаторыЯщиков, СписокОшибок) Экспорт
Результат = Новый Соответствие;
Модуль_Ядро = Модуль_Ядро();
КонекстыДанныхМЧД = Модуль_Ядро.МЧД_ДанныеПоИспользованиюДоверенностейПоСпискуBoxId(ИдентификаторыЯщиков);
РазделыОшибок = Модуль_Ядро.МЧД_РазделыОшибокПроверкиМЧД();
Метрика_ВидыОшибокПроверокМЧД = Метрика_ВидыОшибокПроверокМЧД();
Для Каждого ИдентификаторЯщика Из ИдентификаторыЯщиков Цикл
КонтекстМЧД = КонекстыДанныхМЧД.Получить(ИдентификаторЯщика);
Если НЕ КонтекстМЧД.ТребуетсяМЧД Тогда
Продолжить;
КонецЕсли;
КонтрактМЧД = Неопределено;
Если ЗначениеЗаполнено(КонтекстМЧД.МЧД) Тогда
КонтрактМЧД = КонтекстМЧД.СписокМЧД.Получить(КонтекстМЧД.МЧД);
РезультатПроверкиМЧД = КонтекстМЧД.РезультатПроверкиМЧД;
Если НЕ РезультатПроверкиМЧД.ЭтоДействующаяМЧД
И НЕ РезультатПроверкиМЧД.ЭтоПредупреждение Тогда
НаименованиеОрганизации = Модуль_Ядро.КонтекстСеанса_Прочитать(ИдентификаторЯщика, "ОрганизацияНаименование");
ТекстОшибки = Модуль_Ядро.Общее_ПодставитьПараметрыВСтроку(
"Для организации ""%1"" доверенность ""%2"" не прошла проверку",
НаименованиеОрганизации,
КонтрактМЧД.Представитель.Наименование);
ОписаниеОшибки = Новый_ОписаниеОшибкиПроверкиМЧДпоУмолчанию(
РазделыОшибок.МЧДнеПодходит,
ТекстОшибки,
РезультатПроверкиМЧД.СписокОшибок,
Метрика_ВидыОшибокПроверокМЧД.ДоверенностьНеПодходит,
ИдентификаторЯщика);
СписокОшибок.Добавить(ОписаниеОшибки);
КонтрактМЧД = Неопределено;
КонецЕсли;
Иначе
НаименованиеОрганизации = Модуль_Ядро.КонтекстСеанса_Прочитать(ИдентификаторЯщика, "ОрганизацияНаименование");
ОписаниеОшибки = Новый_ОписаниеОшибкиПроверкиМЧДпоУмолчанию(
РазделыОшибок.НетМЧДПоУмолчанию,
НаименованиеОрганизации,
Новый Массив,
Метрика_ВидыОшибокПроверокМЧД.НеУказанаДоверенность,
ИдентификаторЯщика);
СписокОшибок.Добавить(ОписаниеОшибки);
КонецЕсли;
Результат.Вставить(ИдентификаторЯщика, КонтрактМЧД);
КонецЦикла;
Возврат Результат;
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Новый_ОписаниеОшибкиПроверкиМЧДпоУмолчанию(Раздел, РасшифровкаСтатуса, СписокОшибок, Метрика_ВидОшибкиПроверкиМЧД, ИдентификаторЯщика)
Результат = Новый Структура;
Результат.Вставить("Раздел" , Раздел);
Результат.Вставить("РасшифровкаСтатуса" , РасшифровкаСтатуса);
Результат.Вставить("СписокОшибок" , СписокОшибок);
Результат.Вставить("Метрика_ВидОшибкиПроверкиМЧД" , Метрика_ВидОшибкиПроверкиМЧД);
Результат.Вставить("ИдентификаторЯщика" , ИдентификаторЯщика);
Возврат Результат;
КонецФункции
Функция ТребуетсяМЧД(ИдентификаторЯщика) Экспорт
Результат = Ложь;
Если ЗначениеЗаполнено(ИдентификаторЯщика) Тогда
КонтекстСеансаПоЯщику = Модуль_Ядро().КонтекстСеанса_СтрокаКонтекста(ИдентификаторЯщика);
Результат = КонтекстСеансаПоЯщику.ТребуетсяМЧД = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПараметрыФормыВыбораМЧД(ЗаголовокФормы = ""
, ЗаголовокКнопки = ""
, ИдентификаторЯщика = ""
, ДействиеЭДО = ""
, КатегорияМетрикиДокумента = ""
, КонтрагентПоддерживаетМЧД = Истина) Экспорт
Результат = Новый Структура;
Результат.Вставить("ЗаголовокФормы" , ЗаголовокФормы);
Результат.Вставить("ЗаголовокКнопкиДействия" , ЗаголовокКнопки);
Результат.Вставить("ИдентификаторЯщика" , ИдентификаторЯщика);
Результат.Вставить("ДействиеЭДО" , ДействиеЭДО);
Результат.Вставить("КатегорияМетрикиДокумента" , КатегорияМетрикиДокумента);
Результат.Вставить("КонтрагентПоддерживаетМЧД" , КонтрагентПоддерживаетМЧД);
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция РезультатВыбораМЧД(РазрешитьДействие, КонтрактМЧД) Экспорт
Результат = Новый Структура;
Результат.Вставить("РазрешитьДействие" , РазрешитьДействие);
Результат.Вставить("КонтрактМЧД" , КонтрактМЧД);
Возврат Результат;
КонецФункции
// см. ДополнитьДокументыСведениямиМЧДКлиентСервер()
//
//&НаКлиенте
Процедура ДополнитьДокументыСведениямиМЧДНаКлиенте(КонтрактыДокументов, КонтрактМЧД) Экспорт
Для Каждого Документ Из КонтрактыДокументов Цикл
ДополнитьДокументСведениямиМЧДКлиентСервер(Документ, КонтрактМЧД)
КонецЦикла;
КонецПроцедуры
// Дополняет служебную информацию переданных документов КонтрактомМЧД
//
// Параметры:
// Документ - Структура - ДокументДД, см. Модуль_Ядро.Контракт_Документ().
// КонтрактМЧД - Структура - см. Модуль_Ядро.Контракт_МЧД().
//
//&НаКлиентеНаСервереБезКонтекста
Процедура ДополнитьДокументСведениямиМЧДКлиентСервер(Документ, КонтрактМЧД)
Если НЕ Документ.СлужебнаяИнформация.Свойство("КонтрактМЧД") Тогда
Документ.СлужебнаяИнформация.Вставить("КонтрактМЧД", КонтрактМЧД);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьРезультатПриГрупповыхДействияхНаФормеВопросаМЧД(ВыбранноеДействие, ДополнительныеПараметры) Экспорт
ДобавитьМетрикиПриГрупповыхДействияхНаФормеВопросаМЧД(ВыбранноеДействие, ДополнительныеПараметры);
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
ПродолжитьБезМЧД = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД;
ПродолжитьСМЧД = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ПродолжитьСМЧД;
ДействоватьСМЧД = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ДействоватьСМЧД;
ОткрытьСписокОшибок = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок;
Если ПродолжитьБезМЧД
ИЛИ ПродолжитьСМЧД
ИЛИ ДействоватьСМЧД Тогда
ВыполнитьОбработкуОповещенияПереопределенная(ДополнительныеПараметры.ОповещениеЗавершения);
ИначеЕсли ОткрытьСписокОшибок Тогда
ОшибкиПроверокМЧД = ДополнительныеПараметры.ОшибкиПроверокМЧД;
ОбработчикЗакрытияФормыHTML = НовыйОписаниеОповещения(
"ОбработатьЗакрытиеФормыHTMLСообщения",
ЭтаФорма,
ДополнительныеПараметры);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "СписокОшибокМЧД");
ПараметрыОткрытияФормы.Вставить("СписокОшибокМЧД", ОшибкиПроверокМЧД);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОбработчикЗакрытияФормыHTML);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура ДобавитьМетрикиПриГрупповыхДействияхНаФормеВопросаМЧД(ВыбранноеДействие, ПараметрыДляПроверкиМЧД)
МетрикиОписаниеОповещенияПереопределяемая = СвойствоСтруктуры(
ПараметрыДляПроверкиМЧД,
"ОписаниеОповещенияДобавленияМетрики");
Если МетрикиОписаниеОповещенияПереопределяемая = Неопределено Тогда
ДействияНаФормеВопросаМЧД = ДействияНаФормеВопросаМЧД();
ПродолжитьБезМЧД = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ПродолжитьБезМЧД
ИЛИ ВыбранноеДействие = ДействияНаФормеВопросаМЧД.Продолжить;
ПродолжитьСМЧД = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ПродолжитьСМЧД
ИЛИ ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ДействоватьСМЧД;
ОткрытьСписокОшибок = ВыбранноеДействие = ДействияНаФормеВопросаМЧД.ОткрытьСписокОшибок;
Если ПродолжитьСМЧД Тогда
Возврат;
КонецЕсли;
Если ПродолжитьБезМЧД Тогда
Метрика_ПродолжитьБезМЧД(ПараметрыДляПроверкиМЧД);
Возврат;
КонецЕсли;
Если ОткрытьСписокОшибок Тогда
Метрика_СписокОшибокМЧД(ПараметрыДляПроверкиМЧД, Истина);
Возврат;
КонецЕсли;
Метрика_ЗакрытиеФормыФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД);
Иначе
ВыполнитьОбработкуОповещенияПереопределенная(МетрикиОписаниеОповещенияПереопределяемая, ВыбранноеДействие);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьЗакрытиеФормыHTMLСообщения(Результат, ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры <> Неопределено Тогда
Если ДополнительныеПараметры.Свойство("ОшибкиПроверокМЧД") Тогда
Метрика_СписокОшибокМЧД(ДополнительныеПараметры, Ложь);
Если ДополнительныеПараметры.НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().ПоддержкаОператоромМЧД Тогда
ПоказатьВопрос_КонтрагентыДокументовНеПоддерживаютМЧД(ДополнительныеПараметры);
Иначе
ПоказатьВопрос_НетПодходящейДоверенности(ДополнительныеПараметры);
КонецЕсли;
ИначеЕсли ДополнительныеПараметры.Свойство("СписокОшибокКЭП") Тогда
ПоказатьВопрос_НеДляВсехДокументовМожноВыполнитьДействиеКЭП(ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ЕстьСвойствоИдентификаторыВОбрабатываемыхДанных(ДанныеДляОбработки)
Результат = Ложь;
Если ЗначениеЗаполнено(ДанныеДляОбработки) Тогда
ЭлементКоллекцииДанных = ДанныеДляОбработки[0];
Если ТипЗнч(ЭлементКоллекцииДанных) = Тип("Структура")
И ЭлементКоллекцииДанных.Свойство("Идентификаторы")
И ЭлементКоллекцииДанных.Идентификаторы <> Неопределено Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ДействияНаФормеВопросаМЧД() Экспорт
Результат = Новый Структура;
Результат.Вставить("ПродолжитьБезМЧД", "Продолжить без МЧД");
Результат.Вставить("ДействоватьСМЧД", "Действовать с МЧД");
Результат.Вставить("ПродолжитьСМЧД", "Продолжить с МЧД");
Результат.Вставить("ОткрытьСписокОшибок", "Подробнее");
Результат.Вставить("Закрыть", "Закрыть");
Результат.Вставить("Продолжить", "Продолжить");
Возврат Результат;
КонецФункции
Процедура ОткрытьФормуВыбораДоверенности(ОписаниеОбработчикаЗакрытия, ПараметрыОткрытияФормы) Экспорт
ОткрытьФормуДиадокМодально(
"МЧД_ФормаВыбора",
ОписаниеОбработчикаЗакрытия.Модуль,
ПараметрыОткрытияФормы,
ОписаниеОбработчикаЗакрытия,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
Процедура НачатьПроверкуОшибкокМЧДПоУмолчанию()
БольшеНеПоказывать = НастройкиПользователяПрочитать_НеПоказыватьПредупрежденияПоМЧД();
Если БольшеНеПоказывать = Ложь Тогда
ПодключитьОбработчикОжидания("ПоказатьПредупреждениеСОшибкамиМЧДУСотрудниковПоОрганизациям", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
// Проверяет наличие ошибок в установках МЧД по умолчанию и при наличии открывает форму сообщения
//
Процедура ПоказатьПредупреждениеСОшибкамиМЧДУСотрудниковПоОрганизациям() Экспорт
ОшибкиПроверкиМЧД = Модуль_Ядро().МЧД_ПроверитьНаличиеДоверенностейУСотрудниковПоОрганизациям();
Если ЗначениеЗаполнено(ОшибкиПроверкиМЧД) Тогда
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "ОшибкиМЧД");
ПараметрыОткрытияФормы.Вставить("ОшибкиПроверкиМЧД", ОшибкиПроверкиМЧД);
ОповещениеОЗакрытииФормы = Неопределено;
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОповещениеОЗакрытииФормы,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Функция ЕстьЯщикДляДействийСДокументамиВКоторомНужнаМЧД()
Результат = Ложь;
СтрокиКонтекста = Модуль_Ядро().КонтекстСеанса_СтрокиКонтекста();
Для Каждого СтрокаКонтекста Из СтрокиКонтекста Цикл
КонтекстЯщика = СтрокаКонтекста.Значение;
Если КонтекстЯщика.ТребуетсяМЧД Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Обрабатывает нажатие гиперссылки на скачивание файлов доверенности в формах пакета и сообщения HTML
//
// Параметры:
// ПараметрыСкачиванияФайловМЧД - Строка - см. Ядро.Новый_ПараметрыГиперссылкиСкачатьФайлыДоверенности()
//
Процедура ОбработатьНажатиеГиперссылкиСкачатьФайлыМЧД(ПараметрыСкачиванияФайловМЧД) Экспорт
ОписаниеОповещения = НовыйОписаниеОповещения("ОкончаниеВыбораКаталогаПриНажатииСкачатьФайлыДоверенности", ЭтаФорма, ПараметрыСкачиванияФайловМЧД);
ПоказатьДиалогВыбораКаталога(ОписаниеОповещения, НСтр("ru = 'Сохранение файлов доверенности на диск'"));
КонецПроцедуры
Процедура ОкончаниеВыбораКаталогаПриНажатииСкачатьФайлыДоверенности(ВыбранныйКаталог, ДополнительныеПараметры) Экспорт
Если НЕ ЗначениеЗаполнено(ВыбранныйКаталог) Тогда
Возврат;
КонецЕсли;
Модуль_Ядро = Модуль_Ядро();
ПредставлениеТекущегоДокумента = ДополнительныеПараметры.ПредставлениеТекущегоДокумента;
ПрефиксКаталога = "МЧД к ";
ИмяКаталога = ЗаменитьНедопустимыеСимволыИмениФайла(ПрефиксКаталога + ПредставлениеТекущегоДокумента);
ПолноеИмяКаталога = Модуль_Ядро.ОбъединитьПути(ВыбранныйКаталог[0], ИмяКаталога);
СоздатьКаталог(ПолноеИмяКаталога);
ФайлыДоверенности = Модуль_Ядро.Документы_СобытияМЧД_ФайлыДоверенности(ДополнительныеПараметры.ПараметрыГиперссылки);
СохранитьФайлыДоверенностиНаДиск(ФайлыДоверенности, ПолноеИмяКаталога);
Если ФайлыДоверенности.ДанныеФайловДелегированныхМЧД.Количество() > 0 Тогда
ПрефиксКаталогаДелегированныхМЧД = "Передоверие ";
ИмяКаталогаДелегированныхМЧД = ЗаменитьНедопустимыеСимволыИмениФайла(ПрефиксКаталогаДелегированныхМЧД + ФайлыДоверенности.ИмяФайла);
ПолноеИмяКаталогаДелегированныхМЧД = Модуль_Ядро.ОбъединитьПути(ПолноеИмяКаталога, ИмяКаталогаДелегированныхМЧД);
СоздатьКаталог(ПолноеИмяКаталогаДелегированныхМЧД);
Для Каждого ДанныеФайловДелегированнойМЧД Из ФайлыДоверенности.ДанныеФайловДелегированныхМЧД Цикл
СохранитьФайлыДоверенностиНаДиск(ДанныеФайловДелегированнойМЧД, ПолноеИмяКаталогаДелегированныхМЧД);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура СохранитьФайлыДоверенностиНаДиск(ФайлыДоверенности, ПолноеИмяКаталога)
ДанныеДоверенности = ФайлыДоверенности.Данные;
ДанныеПодписи = ФайлыДоверенности.Подпись.ДанныеПодписи;
ИмяФайлаДоверенности = ФайлыДоверенности.ИмяФайла + ".xml";
ИмяФайлаПодписи = ФайлыДоверенности.ИмяФайла + ".sig";
ПолноеИмяФайлаДоверенности = СохранитьДвоичныеДанныеВФайл(ДанныеДоверенности, ИмяФайлаДоверенности, ПолноеИмяКаталога);
ПолноеИмяФайлаПодписи = СохранитьДвоичныеДанныеВФайл(ДанныеПодписи, ИмяФайлаПодписи, ПолноеИмяКаталога);
КонецПроцедуры
Процедура ОбработатьНажатиеСкачатьФайлЭлектроннойПодписи(ДанныеЭлектроннойПодписи) Экспорт
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОкончаниеВыбораКаталогаПриНажатииСкачатьФайлЭлектроннойПодписи",
ЭтаФорма,
ДанныеЭлектроннойПодписи);
ПоказатьДиалогВыбораКаталога(ОписаниеОповещения, НСтр("ru = 'Сохранение файла электронной подписи'"));
КонецПроцедуры
Процедура ОкончаниеВыбораКаталогаПриНажатииСкачатьФайлЭлектроннойПодписи(
ВыбранныйКаталог,
ДанныеЭлектроннойПодписи) Экспорт
Если НЕ ЗначениеЗаполнено(ВыбранныйКаталог) Тогда
Возврат;
КонецЕсли;
ПолноеИмяКаталога = ВыбранныйКаталог[0];
// BSLLS:UsingSynchronousCalls-off
СоздатьКаталог(ПолноеИмяКаталога);
// BSLLS:UsingSynchronousCalls-on
ДанныеПодписи = ДанныеЭлектроннойПодписи.ДанныеПодписи;
ИмяФайлаПодписи = ДанныеЭлектроннойПодписи.ИмяФайлаПодписи;
ДвоичныеДанныеПодписи = Base64Значение(ДанныеПодписи);
СохранитьДвоичныеДанныеВФайл(
ДвоичныеДанныеПодписи,
ИмяФайлаПодписи,
ПолноеИмяКаталога);
КонецПроцедуры
Процедура ОбработатьНажатиеСкачатьФайлСертификата(ДанныеЭлектроннойПодписи) Экспорт
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОкончаниеВыбораКаталогаПриНажатииСкачатьФайлСертификата",
ЭтаФорма,
ДанныеЭлектроннойПодписи);
ПоказатьДиалогВыбораКаталога(ОписаниеОповещения, НСтр("ru = 'Сохранение файла электронной подписи'"));
КонецПроцедуры
Процедура ОкончаниеВыбораКаталогаПриНажатииСкачатьФайлСертификата(
ВыбранныйКаталог,
ДанныеЭлектроннойПодписи) Экспорт
Если НЕ ЗначениеЗаполнено(ВыбранныйКаталог) Тогда
Возврат;
КонецЕсли;
Модуль_Ядро = Модуль_Ядро();
ПолноеИмяКаталога = ВыбранныйКаталог[0];
// BSLLS:UsingSynchronousCalls-off
СоздатьКаталог(ПолноеИмяКаталога);
// BSLLS:UsingSynchronousCalls-on
ДанныеПодписи = ДанныеЭлектроннойПодписи.ДанныеПодписи;
ДвоичныеДанныеПодписи = Base64Значение(ДанныеПодписи);
ДанныеСертификата = Модуль_Ядро.ПолучитьСертификатИзПодписи(ДвоичныеДанныеПодписи);
ИмяФайлаСертификата = ДанныеСертификата.СерийныйНомер + ".crt";
СохранитьДвоичныеДанныеВФайл(
ДанныеСертификата.ДвоичныеДанные,
ИмяФайлаСертификата,
ПолноеИмяКаталога);
КонецПроцедуры
Функция Метрика_НазванияФормМЧД()
Результат = Новый Структура;
Результат.Вставить("НеВыбранаДоверенность", "НеВыбранаДоверенность");
Результат.Вставить("ВыбраннаяДоверенностьНеПодходит", "ВыбраннаяДоверенностьНеПодходит");
Результат.Вставить("ВыбраннаяДоверенностьИмеетПредупреждения", "ВыбраннаяДоверенностьИмеетПредупреждения");
Результат.Вставить("ОписаниеОшибокСМЧД", "ОписаниеОшибокСМЧД");
Результат.Вставить("НетПодходящихДовереностей", "НетПодходящихДовереностей");
Результат.Вставить("ПоддержкаОператоромМЧД", "ПоддержкаОператоромМЧД");
Возврат Результат;
КонецФункции
Функция Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормы)
НазванияФормМЧД = Метрика_НазванияФормМЧД();
Результат = "";
Если НазваниеФормы = НазванияФормМЧД.НеВыбранаДоверенность Тогда
Результат = "Не выбрана доверенность";
ИначеЕсли НазваниеФормы = НазванияФормМЧД.ВыбраннаяДоверенностьНеПодходит Тогда
Результат = "Выбранная доверенность не подходит";
ИначеЕсли НазваниеФормы = НазванияФормМЧД.ОписаниеОшибокСМЧД Тогда
Результат = "Описание ошибок с МЧД";
ИначеЕсли НазваниеФормы = НазванияФормМЧД.НетПодходящихДовереностей Тогда
Результат = "Нет подходящих доверенностей";
ИначеЕсли НазваниеФормы = НазванияФормМЧД.ПоддержкаОператоромМЧД Тогда
Результат = "Поддержка оператором МЧД";
ИначеЕсли НазваниеФормы = НазванияФормМЧД.ВыбраннаяДоверенностьИмеетПредупреждения Тогда
Результат = "Выбранная доверенность с предупреждениями";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Метрика_ВидыОшибокПроверокМЧД()
Результат = Новый Структура;
Результат.Вставить("НеУказанаДоверенность" , "НеУказанаДоверенность");
Результат.Вставить("ДоверенностьНеПодходит" , "ДоверенностьНеПодходит");
Результат.Вставить("ОператорНеПоддерживаетМЧДВРоуминге" , "ОператорНеПоддерживаетМЧДВРоуминге");
Возврат Результат;
КонецФункции
Процедура Метрика_ПродолжитьБезМЧД(ДополнительныеПараметры)
КатегорияМетрики = Метрика_НазваниеКатегории().УведомлениеПриМассовыхДействиях;
ДопПеременные = Метрика_ДополнительныеПеременныеМЧД(ДополнительныеПараметры);
НазваниеФормыДляМетрики = ДополнительныеПараметры.НазваниеФормыДляМетрики;
ЛейблМетрики = Метрика_НазваниеДействий().НажатиеКнопки;
ПредставлениеМетрики = Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормыДляМетрики);
TraceId = Модуль_Ядро().TraceId();
ДействиеМетрики = Метрика_НазваниеДействий().ДействоватьБезДоверенности;
Модуль_Ядро().Метрика_ДобавитьПоведение_НажатиеКнопки(НазваниеФормыДляМетрики, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ПредставлениеМетрики, TraceId);
Для каждого ОписаниеОшибки Из ДополнительныеПараметры.ОшибкиПроверокМЧД Цикл
Модуль_Ядро().Метрика_ДобавитьСтатистику_ДляОрганизации(ОписаниеОшибки.ИдентификаторЯщика, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ДопПеременные, ПредставлениеМетрики, TraceId);
КонецЦикла;
КонецПроцедуры
Процедура Метрика_СписокОшибокМЧД(ДополнительныеПараметры, ОткрытиеФормы)
КатегорияМетрики = Метрика_НазваниеКатегории().УведомлениеПриМассовыхДействиях;
ДопПеременные = Метрика_ДополнительныеПеременныеМЧД(ДополнительныеПараметры);
ЛейблМетрики = Метрика_НазваниеДействий().НажатиеКнопки;
TraceId = Модуль_Ядро().TraceId();
Если ОткрытиеФормы Тогда
НазваниеФормыДляМетрики = ДополнительныеПараметры.НазваниеФормыДляМетрики;
ПредставлениеМетрики = Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормыДляМетрики);
ДействиеМетрики = Метрика_НазваниеДействий().Подробнее;
Модуль_Ядро().Метрика_ДобавитьПоведение_НажатиеКнопки(НазваниеФормыДляМетрики, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ПредставлениеМетрики, TraceId);
Для каждого ОписаниеОшибки Из ДополнительныеПараметры.ОшибкиПроверокМЧД Цикл
Модуль_Ядро().Метрика_ДобавитьСтатистику_ДляОрганизации(ОписаниеОшибки.ИдентификаторЯщика, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ДопПеременные, ПредставлениеМетрики, TraceId);
КонецЦикла;
КонецЕсли;
Если ОткрытиеФормы Тогда
ДействиеМетрики = Метрика_НазваниеДействий().ОткрытиеФормы;
Иначе
ДействиеМетрики = Метрика_НазваниеДействий().ЗакрытиеФормы;
КонецЕсли;
НазваниеФормыДляМетрики = Метрика_НазванияФормМЧД().ОписаниеОшибокСМЧД;
ПредставлениеМетрики = Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормыДляМетрики);
Модуль_Ядро().Метрика_ДобавитьПоведение_ДействиеСФормой(НазваниеФормыДляМетрики, КатегорияМетрики, ОткрытиеФормы, ЛейблМетрики, ПредставлениеМетрики, TraceId);
Для каждого ОписаниеОшибки Из ДополнительныеПараметры.ОшибкиПроверокМЧД Цикл
ДопПеременные.Вставить("Идентификатор ошибки", ОписаниеОшибки.Метрика_ВидОшибкиПроверкиМЧД);
Модуль_Ядро().Метрика_ДобавитьСтатистику_ДляОрганизации(ОписаниеОшибки.ИдентификаторЯщика, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ДопПеременные, ПредставлениеМетрики, TraceId);
КонецЦикла;
КонецПроцедуры
// Возвращает дополнительные переменные для отправки метрик по МЧД на основании параметров формы проверки МЧД
//
// Параметры:
// ПараметрыДляПроверкиМЧД - Структура - см. ПараметрыДляПроверкиМЧД().
//
// Возвращаемое значение:
// Структура
//
Функция Метрика_ДополнительныеПеременныеМЧД(ПараметрыДляПроверкиМЧД) Экспорт
Результат = Новый Соответствие;
ВыбраннаяМЧДИдентификатор = СвойствоСтруктуры(ПараметрыДляПроверкиМЧД.ВыбраннаяМЧД, "Идентификатор" , "");
ИспользуетсяМЧДПоУмолчанию = СвойствоСтруктуры(ПараметрыДляПроверкиМЧД.ВыбраннаяМЧД, "ПоУмолчанию");
РезультатПроверкиМЧД = СвойствоСтруктуры(ПараметрыДляПроверкиМЧД, "РезультатПроверкиМЧД");
СписокОшибок = СвойствоСтруктуры(РезультатПроверкиМЧД, "СписокОшибок", Новый Массив);
Если ЗначениеЗаполнено(СписокОшибок) Тогда
Результат.Вставить("Список ошибок", СписокОшибок);
КонецЕсли;
Результат.Вставить("Рег.номер МЧД" , ВыбраннаяМЧДИдентификатор);
Результат.Вставить("МЧД по умолчанию" , Формат(ИспользуетсяМЧДПоУмолчанию, "БЛ=False; БИ=True"));
ПредставленияДействийЭДО = Модуль_Ядро().Перечисление_ПредставленияДействийЭДО();
ПредставлениеДействия = СвойствоСтруктуры(ПредставленияДействийЭДО, ПараметрыДляПроверкиМЧД.ДействиеЭДО, ПараметрыДляПроверкиМЧД.ДействиеЭДО);
Если РежимОтображенияДокументов = РежимыОтображения().Входящие Тогда
НаправлениеДокумента = "Входящий";
Иначе
НаправлениеДокумента = "Исходящий";
КонецЕсли;
Результат.Вставить("Направление документа" , НаправлениеДокумента);
Результат.Вставить("Действие" , ПредставлениеДействия);
Возврат Результат;
КонецФункции
Функция Метрика_КолонкиФормыСписка()
МассивИменЭлементов = Новый Массив;
Для каждого ПодчиненныйЭлементы Из ЭлементыФормы.СписокДокументов.Колонки Цикл
Если ПодчиненныйЭлементы.Видимость = Истина Тогда
МассивИменЭлементов.Добавить(ПодчиненныйЭлементы.ТекстШапки);
КонецЕсли;
КонецЦикла;
Результат = Модуль_Ядро().СоединитьСтроку(МассивИменЭлементов, ";");
Возврат Результат;
КонецФункции
Процедура Метрика_ОткрытиеФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД)
НазваниеФормыДляМетрики = ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики;
ДопПеременные = Метрика_ДополнительныеПеременныеМЧД(ПараметрыДляПроверкиМЧД);
ДействиеМетрики = Метрика_НазваниеДействий().ОткрытиеФормы;
ЛейблМетрики = Метрика_НазваниеДействий().НажатиеКнопки;
ПредставлениеМетрики = Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормыДляМетрики);
Если ПараметрыДляПроверкиМЧД.ГрупповоеДействие Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().УведомлениеПриМассовыхДействиях;
Иначе
КатегорияМетрики = Метрика_НазваниеКатегории().УведомлениеИзФормыПакета;
КонецЕсли;
Модуль_Ядро = Модуль_Ядро();
Модуль_Ядро.Метрика_ДобавитьПоведение_ДействиеСФормой(
НазваниеФормыДляМетрики,
КатегорияМетрики,
Истина,
ЛейблМетрики,
ПредставлениеМетрики);
Для каждого ОписаниеОшибки Из ПараметрыДляПроверкиМЧД.ОшибкиПроверокМЧД Цикл
Модуль_Ядро.Метрика_ДобавитьСтатистику_ДляОрганизации(
ОписаниеОшибки.ИдентификаторЯщика,
КатегорияМетрики,
ДействиеМетрики,
ЛейблМетрики,
ДопПеременные,
ПредставлениеМетрики);
КонецЦикла;
КонецПроцедуры
Процедура Метрика_ЗаписатьСтатистику_ДоверенностьСПредупреждениями(ПараметрыДляПроверкиМЧД)
Модуль_Ядро = Модуль_Ядро();
Метрика_НазваниеКатегории = Метрика_НазваниеКатегории();
Метрика_НазваниеДействий = Метрика_НазваниеДействий();
Если ПараметрыДляПроверкиМЧД.ГрупповоеДействие Тогда
КатегорияМетрики = Метрика_НазваниеКатегории.УведомлениеПриМассовыхДействиях;
Иначе
КатегорияМетрики = Метрика_НазваниеКатегории.УведомлениеИзформыПакета;
КонецЕсли;
ИдентификаторЯщика = ПараметрыДляПроверкиМЧД.ИдентификаторЯщика;
ДействиеМетрики = Метрика_НазваниеДействий.ОткрытиеФормы;
Переменные = Метрика_ДополнительныеПеременныеМЧД(ПараметрыДляПроверкиМЧД);
Метка = Неопределено;
Представление = Неопределено;
Модуль_Ядро.Метрика_ДобавитьСтатистику_ДляОрганизации(
ИдентификаторЯщика,
КатегорияМетрики,
ДействиеМетрики,
Метка,
Переменные,
Представление);
КонецПроцедуры
Процедура Метрика_ЗакрытиеФормыФормыПредупрежденияПослеПроверкиМЧД(ПараметрыДляПроверкиМЧД)
НазваниеФормыДляМетрики = ПараметрыДляПроверкиМЧД.НазваниеФормыДляМетрики;
ДопПеременные = Метрика_ДополнительныеПеременныеМЧД(ПараметрыДляПроверкиМЧД);
ЛейблМетрики = Метрика_НазваниеДействий().НажатиеКнопки;
ПредставлениеМетрики = Метрика_ЛейблПоНазваниюФормыМЧД(НазваниеФормыДляМетрики);
TraceId = Модуль_Ядро().TraceId();
Если ПараметрыДляПроверкиМЧД.ГрупповоеДействие Тогда
КатегорияМетрики = Метрика_НазваниеКатегории().УведомлениеПриМассовыхДействиях;
Иначе
КатегорияМетрики = Метрика_НазваниеКатегории().УведомлениеИзФормыПакета;
КонецЕсли;
ДействиеМетрики = Метрика_НазваниеДействий().ЗакрытиеФормы;
Модуль_Ядро().Метрика_ДобавитьПоведение_ДействиеСФормой(НазваниеФормыДляМетрики, КатегорияМетрики, Ложь, ЛейблМетрики, ПредставлениеМетрики, TraceId);
Для каждого ОписаниеОшибки Из ПараметрыДляПроверкиМЧД.ОшибкиПроверокМЧД Цикл
Модуль_Ядро().Метрика_ДобавитьСтатистику_ДляОрганизации(ОписаниеОшибки.ИдентификаторЯщика, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ДопПеременные, ПредставлениеМетрики, TraceId);
КонецЦикла;
КонецПроцедуры
Процедура МЧД_ПоказатьСведенияОДоверенности(КонтрактМЧД, ФормаВызова) Экспорт
СведенияОМЧД = МЧД_ПредставлениеСведенийОДоверенностиНаСервере_HTML(КонтрактМЧД);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ЗаголовокФормы", НСтр("ru='Данные МЧД'"));
ПараметрыОткрытияФормы.Вставить("ТекстСообщения", СведенияОМЧД.ТекстHTML);
ПараметрыОткрытияФормы.Вставить("ТекстДляКопирования", СведенияОМЧД.Текст);
ПараметрыОткрытияФормы.Вставить("ПоказатьКнопкуСкопировать" , Истина);
ОткрытьФормуДиадокМодально("ФормаHTMLСообщения", ФормаВызова, ПараметрыОткрытияФормы, , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
Процедура МЧД_ПоказатьСведенияОПолномочияхДоверенности(КонтрактМЧД, ФормаВызова) Экспорт
СведенияОМЧД = МЧД_ПредставлениеПолномочийСервер_HTML(КонтрактМЧД);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ЗаголовокФормы", НСтр("ru='Сведения о полномочиях'"));
ПараметрыОткрытияФормы.Вставить("ТекстСообщения", СведенияОМЧД.ТекстHTML);
ПараметрыОткрытияФормы.Вставить("ТекстДляКопирования", СведенияОМЧД.Текст);
ПараметрыОткрытияФормы.Вставить("ПоказатьКнопкуСкопировать" , Истина);
ОткрытьФормуДиадокМодально("ФормаHTMLСообщения", ФормаВызова, ПараметрыОткрытияФормы, , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
Функция МЧД_ПредставлениеСведенийОДоверенностиНаСервере_HTML(КонтрактМЧД)
Результат = МЧД_ПредставлениеСведенийОДоверенности_HTML(КонтрактМЧД);
Возврат Результат;
КонецФункции
Функция МЧД_ПредставлениеПолномочийСервер_HTML(КонтрактМЧД)
Результат = ОбработкаОбъект().МЧД_ПредставлениеПолномочий_HTML(КонтрактМЧД);
Возврат Результат;
КонецФункции
Процедура МЧД_ПоказатьЦепочкуПередоверия(ДанныеМЧД, ПредставлениеТекущегоДокумента, ФормаВызова) Экспорт
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ДанныеМЧД", ДанныеМЧД);
ПараметрыОткрытияФормы.Вставить("Режим", "ПередовериеМЧД");
ПараметрыОткрытияФормы.Вставить("ПредставлениеТекущегоДокумента", ПредставлениеТекущегоДокумента);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ФормаВызова,
ПараметрыОткрытияФормы,
,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
// } МЧД
// { КЭП
//&НаКлиенте
Процедура НачатьПроверкуОшибокКЭП()
ПодключитьОбработчикОжидания("ПоказатьПредупреждениеСОшибкамиКЭППослеАвторизации", 0.1, Истина);
КонецПроцедуры
// Проверяет наличие ошибок в установках МЧД по умолчанию и при наличии открывает форму сообщения
//
//&НаКлиенте
Процедура ПоказатьПредупреждениеСОшибкамиКЭППослеАвторизации() Экспорт
СписокОшибокКЭП = Модуль_Ядро().КЭП_ПолучитьОшибкиПоСтрокамКонтекста();
Если ЗначениеЗаполнено(СписокОшибокКЭП) Тогда
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "ОшибкиКЭППриАвторизации");
ПараметрыОткрытияФормы.Вставить("СписокОшибокКЭП", СписокОшибокКЭП);
ОповещениеОЗакрытииФормы = Неопределено;
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОповещениеОЗакрытииФормы,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецЕсли;
КонецПроцедуры
Функция ДействияНаФормеВопросаКЭП()
Результат = Новый Структура;
Результат.Вставить("Продолжить" , "Продолжить");
Результат.Вставить("ОткрытьСписокОшибок" , "Подробнее");
Результат.Вставить("Закрыть" , "Закрыть");
Возврат Результат;
КонецФункции
// Для переданных данных групповой операции выполняет проверку сертификатов на КЭП.
// Далее запускает проверку МЧД
//
// Параметры:
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
Процедура КЭП_НачатьПроверкуДанныхГрупповойОперации(ОписаниеГрупповойОперации)
ПараметрыГрупповойОбработки = ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки;
РезультатПроверкиКЭП = КЭП_ПроверитьДанныеГрупповойОперацииНаСервере(ПараметрыГрупповойОбработки.ДанныеДляОбработки, ПараметрыГрупповойОбработки.Действие);
ЕстьДокументыДляОбработки = ЗначениеЗаполнено(РезультатПроверкиКЭП.ДанныеДляОбработкиБезОшибок);
Если ЗначениеЗаполнено(РезультатПроверкиКЭП.ОшибкиПроверки)
И ЕстьДокументыДляОбработки Тогда
ПараметрыГрупповойОбработки.ДанныеДляОбработки = РезультатПроверкиКЭП.ДанныеДляОбработкиБезОшибок;
ОписаниеГрупповойОперации.Вставить("СписокОшибокКЭП", РезультатПроверкиКЭП.ОшибкиПроверки);
ПоказатьВопрос_НеДляВсехДокументовМожноВыполнитьДействиеКЭП(ОписаниеГрупповойОперации);
ИначеЕсли ЗначениеЗаполнено(РезультатПроверкиКЭП.ОшибкиПроверки)
И НЕ ЕстьДокументыДляОбработки Тогда
ПоказатьВопрос_ДляДокументаНевозможноВыполнитьДействиеКЭП(РезультатПроверкиКЭП.ОшибкиПроверки);
Иначе
МЧД_НачатьПроверкуДанныхГрупповойОперации(ОписаниеГрупповойОперации);
КонецЕсли;
КонецПроцедуры
// Для переданных данных групповой операции выполняет проверку сертификатов на КЭП.
//
// Параметры:
// ДанныеДляОбработки - Массив - см. Новый_ПараметрыГрупповойОбработки().ДанныеДляОбработки
//
// Возвращаемое значение:
// Структура
// * ОшибкиПроверки - Массив- Список ошибок проверки. См Ядро.Новый_ОписаниеОшибкиПроверкиКЭП()
// * ДанныеДляОбработкиБезОшибок - Массив- ДанныеДляОбработки без ошибок КЭП
//
Функция КЭП_ПроверитьДанныеГрупповойОперацииНаСервере(ДанныеДляОбработки, ДействиеЭДО)
Результат = Новый Структура;
Результат.Вставить("ОшибкиПроверки" , Новый Массив);
Результат.Вставить("ДанныеДляОбработкиБезОшибок" , Новый Массив);
Модуль_Ядро = Модуль_Ядро();
СгруппированныеДанные = СгруппироватьДанныеДляОбработкиПоИдентификаторуЯщика(ДанныеДляОбработки);
Для каждого КлючЗначение Из СгруппированныеДанные Цикл
BoxID = КлючЗначение.Ключ;
ОписаниеОшибкиПроверкиКЭП = Модуль_Ядро.КЭП_ДоступноДействиеЭДО(ДействиеЭДО, BoxID);
Если ЗначениеЗаполнено(ОписаниеОшибкиПроверкиКЭП) Тогда
СгруппированныеДанные.Вставить(BoxId, Новый Массив);
Модуль_Ядро.ДополнитьМассив(Результат.ОшибкиПроверки, ОписаниеОшибкиПроверкиКЭП);
КонецЕсли;
КонецЦикла;
Для каждого ДанныеПоBoxID Из СгруппированныеДанные Цикл
Модуль_Ядро.ДополнитьМассив(Результат.ДанныеДляОбработкиБезОшибок, ДанныеПоBoxID.Значение);
КонецЦикла;
Возврат Результат;
КонецФункции
// Показывает пользователям форму с визуализацией ошибок проверок
//
// Параметры:
// ОписаниеГрупповойОперации - Структура - см. Новый_ОписаниеГрупповойОперации()
//
//&НаКлиенте
Процедура ПоказатьВопрос_НеДляВсехДокументовМожноВыполнитьДействиеКЭП(ОписаниеГрупповойОперации)
ДействияНаФормеВопросаКЭП = ДействияНаФормеВопросаКЭП();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаКЭП.Продолжить , ДействияНаФормеВопросаКЭП.Продолжить);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаКЭП.ОткрытьСписокОшибок, ДействияНаФормеВопросаКЭП.ОткрытьСписокОшибок);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаКЭП.Закрыть , ДействияНаФормеВопросаКЭП.Закрыть);
ТекстВопроса =
"Для работы с электронными документами в Диадоке требуется выпустить квалифицированный сертификат (КЭП).
|
|- Чтобы узнать о возможных причинах ошибки и посмотреть инструкции, нажмите на кнопку ""Подробнее"".
|- Чтобы выполнить действие для доступных документов, нажмите на кнопку ""Продолжить"".";
ОбработчикЗакрытияВопроса = НовыйОписаниеОповещения("ОбработатьРезультатВыбора_НеДляВсехДокументовМожноВыполнитьДействиеКЭП", ЭтаФорма, ОписаниеГрупповойОперации);
ПоказатьВопросПереопределенная(ОбработчикЗакрытияВопроса, ТекстВопроса, КнопкиВопроса, , ДействияНаФормеВопросаКЭП.Закрыть , "Не для всех документов в списке можно выполнить действие");
КонецПроцедуры
Процедура ОбработатьРезультатВыбора_НеДляВсехДокументовМожноВыполнитьДействиеКЭП(ВыбранноеДействие, ОписаниеГрупповойОперации) Экспорт
ДействияНаФормеВопросаКЭП = ДействияНаФормеВопросаКЭП();
ПродолжитьДляДоступных = ВыбранноеДействие = ДействияНаФормеВопросаКЭП.Продолжить;
ОткрытьСписокОшибок = ВыбранноеДействие = ДействияНаФормеВопросаКЭП.ОткрытьСписокОшибок;
Если ПродолжитьДляДоступных Тогда
ЕстьДанныеДляОбработки = ОписаниеГрупповойОперации.ПараметрыГрупповойОбработки.ДанныеДляОбработки.Количество() > 0;
Если ЕстьДанныеДляОбработки Тогда
МЧД_НачатьПроверкуДанныхГрупповойОперации(ОписаниеГрупповойОперации);
КонецЕсли;
ИначеЕсли ОткрытьСписокОшибок Тогда
Метрика_СписокОшибокКЭП(ОписаниеГрупповойОперации.СписокОшибокКЭП);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "ОшибкиКЭППриДействии");
ПараметрыОткрытияФормы.Вставить("СписокОшибокКЭП", ОписаниеГрупповойОперации.СписокОшибокКЭП);
ОбработчикЗакрытияФормыHTML = НовыйОписаниеОповещения("ОбработатьЗакрытиеФормыHTMLСообщения", ЭтаФорма, ОписаниеГрупповойОперации);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОбработчикЗакрытияФормыHTML
);
КонецЕсли;
КонецПроцедуры
// Показывает пользователям форму с визуализацией ошибок проверки КЭП для Пакета
//
// Параметры:
// СписокОшибокКЭП - Массив - см. КЭП_ПолучитьОшибкиПоСтрокеКонтекста()
// ДополнительныеПараметры - Структура - произвольные параметры
//
Процедура ПоказатьВопрос_ДляДокументаНевозможноВыполнитьДействиеКЭП(СписокОшибокКЭП) Экспорт
ДействияНаФормеВопросаКЭП = ДействияНаФормеВопросаКЭП();
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(ДействияНаФормеВопросаКЭП.ОткрытьСписокОшибок, ДействияНаФормеВопросаКЭП.ОткрытьСписокОшибок);
КнопкиВопроса.Добавить(ДействияНаФормеВопросаКЭП.Закрыть , ДействияНаФормеВопросаКЭП.Закрыть);
ТекстВопроса =
"Для работы с электронными документами в Диадоке требуется выпустить квалифицированный сертификат (КЭП).
|
|Чтобы узнать о возможных причинах ошибки и посмотреть инструкции, нажмите на кнопку ""Подробнее"".";
ОбработчикЗакрытияВопроса = НовыйОписаниеОповещения("ОбработатьРезультатВыбора_ДляДокументаНевозможноВыполнитьДействиеКЭП", ЭтаФорма, СписокОшибокКЭП);
ПоказатьВопросПереопределенная(ОбработчикЗакрытияВопроса, ТекстВопроса, КнопкиВопроса, , ДействияНаФормеВопросаКЭП.Закрыть , "Сертификат не является квалифицированным");
КонецПроцедуры
Процедура ОбработатьРезультатВыбора_ДляДокументаНевозможноВыполнитьДействиеКЭП(ВыбранноеДействие, СписокОшибокКЭП) Экспорт
ДействияНаФормеВопросаКЭП = ДействияНаФормеВопросаКЭП();
ПродолжитьДляДоступных = ВыбранноеДействие = ДействияНаФормеВопросаКЭП.Продолжить;
ОткрытьСписокОшибок = ВыбранноеДействие = ДействияНаФормеВопросаКЭП.ОткрытьСписокОшибок;
Если ОткрытьСписокОшибок Тогда
Метрика_СписокОшибокКЭП(СписокОшибокКЭП);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Режим", "ОшибкиКЭППриДействии");
ПараметрыОткрытияФормы.Вставить("СписокОшибокКЭП", СписокОшибокКЭП);
ОткрытьФормуДиадокМодально(
"ФормаHTMLСообщения",
ЭтаФорма,
ПараметрыОткрытияФормы
);
КонецЕсли;
КонецПроцедуры
Процедура Метрика_СписокОшибокКЭП(СписокОшибокКЭП)
КатегорияМетрики = Метрика_НазваниеКатегории().НеквалифицированныйСертификат;
ДействиеМетрики = Метрика_НазваниеДействий().Подробнее;
ЛейблМетрики = "";
ПредставлениеМетрики = "";
НазваниеФормыДляМетрики = "Неквалифицированный сертификат";
Модуль_Ядро = Модуль_Ядро();
TraceId = Модуль_Ядро.TraceId();
Модуль_Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(НазваниеФормыДляМетрики, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, ПредставлениеМетрики, TraceId);
Для каждого ОписаниеОшибкиКЭП Из СписокОшибокКЭП Цикл
Модуль_Ядро.Метрика_ДобавитьСтатистику_ДляОрганизации(ОписаниеОшибкиКЭП.BoxID, КатегорияМетрики, ДействиеМетрики, ЛейблМетрики, , ПредставлениеМетрики, TraceId);
КонецЦикла;
КонецПроцедуры
// } КЭП
//{ АВТООБНОВЛЕНИЕ МОДУЛЯ
Процедура ПодготовитьДанныеДляОбновленияМодуля()
Ядро = Модуль_Ядро();
МоментНачалаЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
ДанныеДляОбновленияМодуля = Ядро.ДанныеДляОбновленияМодуля();
Ядро.Метрика_ДобавитьЗамер_СборДанныхДляОбновленияМодуля(МоментНачалаЗамера, "НаСервере");
КонецПроцедуры
Процедура ДополнитьДанныеДляОбновленияМодуля()
Ядро = Модуль_Ядро();
МоментНачалаЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
Ядро.ДополнитьДанныеДляОбновленияМодуля(ДанныеДляОбновленияМодуля);
ЕстьНоваяВерсияМодуля = ДанныеДляОбновленияМодуля.ОписаниеОбновленияМодуля.ЕстьНоваяВерсия;
Ядро.Метрика_ДобавитьЗамер_СборДанныхДляОбновленияМодуля(МоментНачалаЗамера, "НаКлиенте");
КонецПроцедуры
Процедура ОбновитьМодульАвтоматически(Отказ)
РезультатОбновления = Модуль_Ядро().ОбновитьМодульАвтоматически(ДанныеДляОбновленияМодуля);
Если РезультатОбновления = "Success" Тогда
ПослеУспешногоОбновленияМодуля();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ПослеУспешногоОбновленияМодуля()
Закрыть();
МестоположенияМодуля = ДанныеДляОбновленияМодуля.Перечисления.МестоположенияМодуля;
РасположениеМодуля = ДанныеДляОбновленияМодуля.ОписаниеРасположенияМодуля;
Если РасположениеМодуля.Местоположение = МестоположенияМодуля.РасширениеКонфигурации Тогда
УведомитьПользователяОбУспешномОбновленииРасширенияКонфигурации();
Иначе
Попытка
НоваяВерсияМодуля = СоздатьНовуюВерсиюМодуля();
Исключение
Ошибка = ИнформацияОбОшибке();
ПопроситьПользователяПерезапуститьМодуль();
Возврат; // чтобы переоткрытие не зациклилось
КонецПопытки;
Форма = НоваяВерсияМодуля.ПолучитьФорму();
Форма.Открыть();
КонецЕсли;
КонецПроцедуры
Процедура УведомитьПользователяОбУспешномОбновленииРасширенияКонфигурации()
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОбработатьДействиеПользователяПослеОбновленияРасширения",
ЭтаФорма);
ЗаголовокВопроса = "Обновление модуля";
ТекстСообщения = "Модуль автоматически обновлен до актуальной версии. Для работы с модулем перезапустите программу.";
КнопкаПоУмолчанию = КодВозвратаДиалога.ОК;
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Отмена, "Закрыть");
Кнопки.Добавить(КнопкаПоУмолчанию, "Перезапустить");
ПоказатьВопросПереопределенная(
ОписаниеОповещения,
ТекстСообщения,
Кнопки, ,
КнопкаПоУмолчанию,
ЗаголовокВопроса);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработатьДействиеПользователяПослеОбновленияРасширения(Результат, ДополнительныеПараметры = Неопределено) Экспорт
Если Результат = КодВозвратаДиалога.ОК Тогда
ЗавершитьРаботуСистемы(Ложь, Истина);
КонецЕсли;
КонецПроцедуры
Функция СоздатьНовуюВерсиюМодуля()
МестоположенияМодуля = ДанныеДляОбновленияМодуля.Перечисления.МестоположенияМодуля;
РасположениеМодуля = ДанныеДляОбновленияМодуля.ОписаниеРасположенияМодуля;
ВнешняяОбработка = РасположениеМодуля.Ссылка;
ПутьКФайлу = РасположениеМодуля.ПутьКФайлу;
Местоположение = РасположениеМодуля.Местоположение;
Если Местоположение = МестоположенияМодуля.ФайлНаДиске Тогда
Результат = СоздатьОбработкуМодуляИзФайла(ПутьКФайлу);
ИначеЕсли Местоположение = МестоположенияМодуля.ЭлементСправочника Тогда
Результат = СоздатьОбработкуМодуляИзСправочника(ВнешняяОбработка);
Иначе // этого сценария не должно быть
ВызватьИсключение "ПодключениеНовойВерсииМодуля.НекорректноеРасположениеМодуля: " + Местоположение;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция СоздатьОбработкуМодуляИзФайла(ПутьКФайлу)
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
Результат = ВнешниеОбработки_СоздатьБезПредупреждений(ДвоичныеДанные);
Возврат Результат;
КонецФункции
Функция СоздатьОбработкуМодуляИзСправочника(ВнешняяОбработка)
ДвоичныеДанные = ДвоичныеДанныеВнешнейОбработки(ВнешняяОбработка);
Результат = ВнешниеОбработки_СоздатьБезПредупреждений(ДвоичныеДанные);
Возврат Результат;
КонецФункции
Процедура ПопроситьПользователяПерезапуститьМодуль()
Таймаут = 0;
ОписаниеОповещения = Неопределено;
ЗаголовокПредупреждения = "Выполнено обновление модуля";
ТекстПредупреждения = НСтр("ru = 'Перезапустите модуль, пожалуйста.'");
ПоказатьПредупреждениеПереопределенная(
ОписаниеОповещения,
ТекстПредупреждения,
Таймаут,
ЗаголовокПредупреждения
);
КонецПроцедуры
Процедура УведомитьПользователяОбУспешномАвтообновлении()
мОткрытьФорму("УведомлениеОбУспешномАвтообновлении");
КонецПроцедуры
// Плагины
//&НаКлиенте
Процедура ДлительныеОперации_ЗапуститьМиграциюПлагиновV3V4()
Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне("МиграцияПлагиновV3V4");
КонецПроцедуры
//&НаКлиенте
Процедура ДлительныеОперации_ЗапуститьЗаданиеОбновлениеПлагинов(Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
ОписаниеЗадания = Модуль_Платформа().ДлительныеОперации_ВыполнитьВФоне("ОбновитьПлагины");
ОписаниеОповещения = НовыйОписаниеОповещения("ДлительныеОперации_ОбновитьПлагиныАвтоматическиРезультат", ЭтаФорма);
Модуль_Платформа().ДлительныеОперации_ОжидатьЗавершение(ОписаниеЗадания, ОписаниеОповещения);
КонецПроцедуры
//&НаКлиенте
Процедура ДлительныеОперации_ОбновитьПлагиныАвтоматическиРезультат(АдресВХранилище, ДопПараметр = Неопределено) Экспорт
Результат = Модуль_Платформа().ДлительныеОперации_Результат(АдресВХранилище);
Если ТипЗнч(Результат) <> Тип("Массив") Тогда
Возврат;
КонецЕсли;
Количество = Результат.Количество();
Пояснение = Модуль_Ядро().СтдСтр().СтрСоединитьЛок(Результат, Символы.ПС);
Если Количество = 1 Тогда
ТекстСообщения = "Плагин обновлен";
ИначеЕсли Количество > 0 Тогда
ТекстСообщения = Модуль_Ядро().СтдСтр().СтрШаблонЛок("Обновлены плагины (%1)", Количество);
Иначе
Возврат;
КонецЕсли;
ПоказатьОповещениеПользователя(ТекстСообщения, , Пояснение);
КонецПроцедуры
//} АВТООБНОВЛЕНИЕ МОДУЛЯ
//{ ОБЕРТКИ
//&НаКлиенте
Функция Общее_СоединитьСтроку(Строки, Разделитель = "")
Результат = Модуль_Ядро().СоединитьСтроку(Строки, Разделитель);
Возврат Результат;
КонецФункции
Процедура _ОбработатьОшибку(Знач ВидОперации, Знач Ошибка, Знач Пояснение = "")
ДопИнформация = Неопределено;
Ядро = Модуль_Ядро();
Ядро.Ошибка_Обработать(
ВидОперации,
Ошибка,
ДопИнформация,
Пояснение
);
КонецПроцедуры
//} ОБЕРТКИ
//{ ПОДКЛЮЧАЕМЫЙ МОДУЛЬ
//&НаКлиенте
Процедура УправлениеПМ_ВыгрузитьВСервис()
Ядро = Модуль_Ядро();
Ядро.УправлениеПМ_ПроверитьВерсииФайловИВыгрузитьВСервис();
КонецПроцедуры
//} ПОДКЛЮЧАЕМЫЙ МОДУЛЬ
//{ СПРАВКА
Процедура Справка_ПоказатьПриПервомЗапуске()
Если ЭтоПервыйЗапуск Тогда
Справка_ОткрытьРаздел("НемногоОМодулеШаг1");
КонецЕсли;
КонецПроцедуры
Процедура Справка_ОткрытьРаздел(РазделСправки)
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("РазделСправки", РазделСправки);
мОткрытьФорму("ФормаСправки", ПараметрыОткрытияФормы);
КонецПроцедуры
//} СПРАВКА
//{ ОЦЕНКА РАБОТЫ МОДУЛЯ
//&НаКлиенте
Процедура ПоказатьПлашкуОтзываПоРаботеСКонтрагентами()
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
СценарийМодуляДляОтзыва = СценарииМодуля.РаботаСКонтрагентами;
ТребуетсяОценка = ТребуетсяПоказатьПлашкуОтзываПоРаботе();
УстановитьВидимостьКнопокОбратнойСвязи(ТребуетсяОценка);
УстановитьЗаголовокОценкиРаботыСМодулем();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьПлашкуОтзываПоРаботеСОплатойСервиса()
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
СценарийМодуляДляОтзыва = СценарииМодуля.ОплатаСервиса;
ТребуетсяОценка = ТребуетсяПоказатьПлашкуОтзываПоРаботе();
УстановитьВидимостьКнопокОбратнойСвязи(ТребуетсяОценка);
УстановитьЗаголовокОценкиРаботыСМодулем();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьПлашкуОтзываПоРаботеСПоискомДокументовНаОтправку()
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
// BSLLS:UnusedLocalVariable-off
СценарийМодуляДляОтзыва = СценарииМодуля.ПоискДокументовНаОтправку;
// BSLLS:UnusedLocalVariable-on
ТребуетсяОценка = ТребуетсяПоказатьПлашкуОтзываПоРаботе();
УстановитьВидимостьКнопокОбратнойСвязи(ТребуетсяОценка);
УстановитьЗаголовокОценкиРаботыСМодулем();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьПлашкуОтзываПоРаботеСЛентойКонтрагентов()
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
// BSLLS:UnusedLocalVariable-off
СценарийМодуляДляОтзыва = СценарииМодуля.СобытияЛентыКонтрагентов;
// BSLLS:UnusedLocalVariable-on
ТребуетсяОценка = ТребуетсяПоказатьПлашкуОтзываПоРаботе();
УстановитьВидимостьКнопокОбратнойСвязи(ТребуетсяОценка);
УстановитьЗаголовокОценкиРаботыСМодулем();
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьПлашкуОтзываПоРаботеСАвторизацией()
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
// BSLLS:UnusedLocalVariable-off
СценарийМодуляДляОтзыва = СценарииМодуля.Авторизация;
// BSLLS:UnusedLocalVariable-on
НоваяФорма = Модуль_Платформа().ИмяФормыАвторизации() = "АвторизацияНовая";
ТребуетсяОценка = НоваяФорма И ТребуетсяПоказатьПлашкуОтзываПоРаботе();
УстановитьВидимостьКнопокОбратнойСвязи(ТребуетсяОценка);
УстановитьЗаголовокОценкиРаботыСМодулем();
КонецПроцедуры
Функция ТребуетсяПоказатьПлашкуОтзываПоРаботе()
Результат = ОтзывПоРаботеСМодулем_ТребуетсяОценка(СценарийМодуляДляОтзыва);
Возврат Результат;
КонецФункции
Процедура УстановитьВидимостьКнопокОбратнойСвязи(НужноПоказатьПанель)
ПанельОценка = ЭлементыФормы.ПанельОценкаРаботыСМодулем;
ПанельОценка.Видимость = НужноПоказатьПанель;
Если НужноПоказатьПанель Тогда
ПанельОценка.Свертка = РежимСверткиЭлементаУправления.Нет;
Иначе
ПанельОценка.Свертка = РежимСверткиЭлементаУправления.Верх;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьЗаголовокОценкиРаботыСМодулем()
СценарииМодуля = Модуль_Ядро().Перечисление_СценарииМодуляДляОтзывов();
Если СценарийМодуляДляОтзыва = СценарииМодуля.РаботаСКонтрагентами Тогда
ЗаголовокОценки = НСтр("ru = 'Возникли трудности при работе с контрагентами?'");
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.ОплатаСервиса Тогда
ЗаголовокОценки = НСтр("ru = 'Возникли трудности с подписками?'");
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.ПоискДокументовНаОтправку Тогда
ЗаголовокОценки = НСтр("ru = 'Возникли трудности при поиске документов?'");
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.СобытияЛентыКонтрагентов Тогда
ЗаголовокОценки = НСтр("ru = 'Возникли трудности при работе с событиями?'");
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.Авторизация Тогда
ЗаголовокОценки = НСтр("ru = 'Возникли трудности при работе с авторизацией?'");
КонецЕсли;
Элементы.НадписьОценкаРаботыСКонтрагентами.Заголовок = ЗаголовокОценки;
КонецПроцедуры
//&НаКлиенте
Процедура ОценкаРаботыСМодулемДа(Элемент)
Метрики_ПриНажатии_ОценкаРаботыСМодулемДа();
ПоказатьФормуОценкиРаботыСМодулем();
КонецПроцедуры
//&НаКлиенте
Процедура ОценкаРаботыСМодулемНет(Элемент)
УстановитьВидимостьКнопокОбратнойСвязи(Ложь);
Метрики_ПриНажатии_ОценкаРаботыСМодулемНет();
ЗаписатьДатуОценкиРаботыСМодулем(СценарийМодуляДляОтзыва);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуОценкиРаботыСМодулем()
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Сценарий", СценарийМодуляДляОтзыва);
ОповещениеОЗакрытииФормы = НовыйОписаниеОповещения("ПослеОбработкиОценкаРаботыСМодулем", ЭтаФорма);
ОткрытьФормуДиадокМодально(
"ОтзывОРаботеМодуля",
ЭтаФорма,
ПараметрыОткрытияФормы,
ОповещениеОЗакрытииФормы,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецПроцедуры
//&НаКлиенте
Процедура ПослеОбработкиОценкаРаботыСМодулем(Отзыв, ДополнительныеПараметры = Неопределено) Экспорт
Если Отзыв = Неопределено Тогда
Возврат;
КонецЕсли;
Метрики_ЗаписатьОС_ЕстьТрудностиВРаботеСМодулем(Отзыв);
ЗаписатьДатуОценкиРаботыСМодулем(СценарийМодуляДляОтзыва);
УстановитьВидимостьКнопокОбратнойСвязи(Ложь);
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ПриНажатии_ОценкаРаботыСМодулемДа()
Категория = Метрики_КатегорияТрудностиСРаботойСМодулем();
Действие = Метрики_ДействиеНегативныйОтзывОРаботеСМодулем();
Метрика_ЗаписатьНажатиеКнопки(Категория, Действие);
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ПриНажатии_ОценкаРаботыСМодулемНет()
Категория = Метрики_КатегорияТрудностиСРаботойСМодулем();
Действие = Метрики_ДействиеПозитивныйОтзывОРаботеСМодулем();
Метрика_ЗаписатьНажатиеКнопки(Категория, Действие);
Метрики_ЗаписатьОС_НетТрудностейВРаботеСМодулем();
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьОС_ЕстьТрудностиВРаботеСМодулем(Отзыв)
Трассировка = Метрики_ИдентификаторТрассировки();
Категория = Метрики_КатегорияТрудностиСРаботойСМодулем();
Действие = Метрики_ДействиеНегативныйОтзывОРаботеСМодулем();
КоллекцияBoxId = Новый Массив;
ИдентификаторыПользователей = Новый Массив;
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
ЕстьПроблемыСОплатой = (СценарийМодуляДляОтзыва = СценарииМодуля.ОплатаСервиса);
СтрокиКонтекста = Ядро.КонтекстСеанса_СтрокиКонтекста(ЕстьПроблемыСОплатой);
Для Каждого СтрокаКонтекста Из СтрокиКонтекста Цикл
ЗначениеКонтекста = СтрокаКонтекста.Значение;
ИдентификаторЯщика = ЗначениеКонтекста.Ящик.Идентификатор;
ИдентификаторПользователя = ЗначениеКонтекста.Сессия.Пользователь.Идентификатор;
КоллекцияBoxId.Добавить(ИдентификаторЯщика);
Если ИдентификаторыПользователей.Найти(ИдентификаторПользователя) = Неопределено Тогда
ИдентификаторыПользователей.Добавить(ИдентификаторПользователя);
КонецЕсли;
КонецЦикла;
ИдентификаторБазы1С = Ядро.ОбщийКонтекст_Прочитать("ИдентификаторБазы1С");
Переменные = Новый Структура;
Переменные.Вставить("BoxId", КоллекцияBoxId);
Переменные.Вставить("BaseID", ИдентификаторБазы1С);
Переменные.Вставить("UserID", ИдентификаторыПользователей);
Переменные.Вставить("Комментарий", Отзыв);
Ядро.Метрика_ЗаписатьОбратнуюСвязь(
Категория,
Действие,
Переменные,
Трассировка);
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьОС_НетТрудностейВРаботеСМодулем()
Трассировка = Метрики_ИдентификаторТрассировки();
Категория = Метрики_КатегорияТрудностиСРаботойСМодулем();
Действие = Метрики_ДействиеПозитивныйОтзывОРаботеСМодулем();
КоллекцияBoxId = Новый Массив;
ИдентификаторыПользователей = Новый Массив;
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
ЕстьПроблемыСОплатой = Ложь;
Если СценарийМодуляДляОтзыва = СценарииМодуля.ОплатаСервиса Тогда
ЕстьПроблемыСОплатой = Истина;
КонецЕсли;
СтрокиКонтекста = Ядро.КонтекстСеанса_СтрокиКонтекста(ЕстьПроблемыСОплатой);
Для Каждого СтрокаКонтекста Из СтрокиКонтекста Цикл
ЗначениеКонтекста = СтрокаКонтекста.Значение;
ИдентификаторЯщика = ЗначениеКонтекста.Ящик.Идентификатор;
ИдентификаторПользователя = ЗначениеКонтекста.Сессия.Пользователь.Идентификатор;
КоллекцияBoxId.Добавить(ИдентификаторЯщика);
Если ИдентификаторыПользователей.Найти(ИдентификаторПользователя) = Неопределено Тогда
ИдентификаторыПользователей.Добавить(ИдентификаторПользователя);
КонецЕсли;
КонецЦикла;
ИдентификаторБазы1С = Ядро.ОбщийКонтекст_Прочитать("ИдентификаторБазы1С");
Переменные = Новый Структура;
Переменные.Вставить("BoxId", КоллекцияBoxId);
Переменные.Вставить("BaseID", ИдентификаторБазы1С);
Переменные.Вставить("UserID", ИдентификаторыПользователей);
Ядро.Метрика_ЗаписатьОбратнуюСвязь(
Категория,
Действие,
Переменные,
Трассировка);
КонецПроцедуры
//&НаКлиенте
Функция Метрики_ИдентификаторТрассировки()
Ядро = Модуль_Ядро();
Результат = Ядро.TraceId();
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрики_КатегорияТрудностиСРаботойСМодулем()
Ядро = Модуль_Ядро();
СценарииМодуля = Ядро.Перечисление_СценарииМодуляДляОтзывов();
Если СценарийМодуляДляОтзыва = СценарииМодуля.РаботаСКонтрагентами Тогда
Результат = "ТрудностиСКонтрагентами";
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.ОплатаСервиса Тогда
Результат = "ТрудностиСПодписками";
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.ПоискДокументовНаОтправку Тогда
Результат = "ТрудностиПриПоискеДокументов";
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.СобытияЛентыКонтрагентов Тогда
Результат = "ТрудностиССобытиямиКА";
ИначеЕсли СценарийМодуляДляОтзыва = СценарииМодуля.Авторизация Тогда
Результат = "ТрудностиСАвторизацией";
КонецЕсли;
Возврат Результат;
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Метрики_ДействиеПозитивныйОтзывОРаботеСМодулем()
Возврат "Нет"; // Пользователь сказал, что трудностей нет
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Метрики_ДействиеНегативныйОтзывОРаботеСМодулем()
Возврат "Да"; // Пользователь сказал, что есть трудности и оставил отзыв
КонецФункции
//} ОЦЕНКА РАБОТЫ МОДУЛЯ
// { ПОДПИСКИ И ОПЛАТЫ
Процедура ОбработатьНаличиеПредложенийДляПокупки()
МодульЯдро = Модуль_Ядро();
ПредложенияДляВсехЛицевыхСчетов = МодульЯдро.ПредложенияДляПокупки_ПредложенияДляВсехЛицевыхСчетов();
МодульЯдро.Метрика_ДобавитьСтатистику_ПредложенияДляПокупки(ПредложенияДляВсехЛицевыхСчетов);
СводноеОписаниеПредложений = МодульЯдро.ЛичныйКабинет_ДоступныеТипыПредложений(ПредложенияДляВсехЛицевыхСчетов);
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
// BSLLS:MagicNumber-off
ЦветФонаБаннераКрасный = Новый Цвет(255, 230, 230);
ЦветФонаБаннераЖелтый = Новый Цвет(251, 237, 158);
ЦветФонаБаннераЗеленый = Новый Цвет(199, 233, 199);
// BSLLS:MagicNumber-on
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПустая;
Если СводноеОписаниеПредложений.ПодпискаНаМодульЗакончилась Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаВосстановитьДоступ;
ПанельБаннера.ЦветФона = ЦветФонаБаннераКрасный;
ИначеЕсли СводноеОписаниеПредложений.ПодпискаНаМодульЗаканчивается Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПодпискаНаМодульЗаканчивается;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.ПакетЗакончился Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПакетЗакончился;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.ПакетЗаканчивается Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПакетЗаканчивается;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.МаршрутЗакончился Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаМаршрутЗакончился;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.МаршрутЗаканчивается Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаМаршрутЗаканчивается;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.ЛицензияНаКоннекторы Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаЛицензияНаКоннекторы;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.ЛицензияНаAPI Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаЛицензияНаAPI;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.СертификатЗакончился Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаСертификатЗакончился;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.СертификатЗаканчивается Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаСертификатЗаканчивается;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЖелтый;
ИначеЕсли СводноеОписаниеПредложений.ПромоМодуля Тогда
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПромо;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЗеленый;
ИначеЕсли СводноеОписаниеПредложений.РекомендацияПлагинов Тогда
ПоказатьБаннерРекомендацииПокупкиПлагинов();
ИначеЕсли СводноеОписаниеПредложений.РекомендацияПакетов Тогда
ПоказатьБаннерРекомендацииПокупкиПакетов();
Иначе
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПустая;
КонецЕсли;
НужноПоказатьПанель = (ПанельБаннера.ТекущаяСтраница <> ПанельБаннера.Страницы.СтраницаПустая);
Если НужноПоказатьПанель Тогда
НоваяСвертка = РежимСверткиЭлементаУправления.Нет;
Иначе
НоваяСвертка = РежимСверткиЭлементаУправления.Верх;
КонецЕсли;
ЭлементыФормы.ПанельОкончанияОплаченногоПериода.Свертка = НоваяСвертка;
КонецПроцедуры
Процедура ПоказатьБаннерРекомендацииПокупкиПакетов()
ТребуетсяПоказатьБаннер = ПредложенияДляПокупки_ТребуетсяПоказатьРекомендациюПокупкиПакетаДокументов();
Если ТребуетсяПоказатьБаннер Тогда
// BSLLS:MagicNumber-off
ЦветФонаБаннераЗеленый = Новый Цвет(199, 233, 199);
// BSLLS:MagicNumber-on
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаРекомендацияПакетов;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЗеленый;
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьБаннерРекомендацииПокупкиПлагинов()
ТребуетсяПоказатьБаннер = ПредложенияДляПокупки_ТребуетсяПоказатьРекомендациюПокупкиПлагинов();
Если ТребуетсяПоказатьБаннер Тогда
// BSLLS:MagicNumber-off
ЦветФонаБаннераЗеленый = Новый Цвет(199, 233, 199);
// BSLLS:MagicNumber-on
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаРекомендацияПлагинов;
ПанельБаннера.ЦветФона = ЦветФонаБаннераЗеленый;
КонецЕсли;
КонецПроцедуры
Процедура ГруппаНастроекОткрытьПодпискаИОплаты(Кнопка)
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ТолькоСрочные", Ложь);
ОткрытьФормуДиадокМодально("ПодпискиИОплата", ЭтаФорма, ПараметрыОткрытияФормы);
ПоказатьПлашкуОтзываПоРаботеСОплатойСервиса();
КонецПроцедуры
Процедура БаннерГиперссылкаНажатие(Элемент)
ОтображатьТолькоСрочные = НЕ (ОткрытБаннерРекомендацииПокупкиПлагинов()
ИЛИ ОткрытБаннерРекомендацииПокупкиПакетов());
РежимОткрытияФормыПодпискиИОплата = РежимБаннераПриОткрытииФормыПодпискиИОплата();
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("ТолькоСрочные", ОтображатьТолькоСрочные);
ПараметрыОткрытияФормы.Вставить("РежимБаннера", РежимОткрытияФормыПодпискиИОплата);
ОткрытьФормуДиадокМодально("ПодпискиИОплата", ЭтаФорма, ПараметрыОткрытияФормы);
ПоказатьПлашкуОтзываПоРаботеСОплатойСервиса();
КонецПроцедуры
Функция РежимБаннераПриОткрытииФормыПодпискиИОплата()
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
Если ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаВосстановитьДоступ Тогда
Результат = "Восстановить доступ";
ИначеЕсли ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаПромо Тогда
Результат = "Получить доступ";
ИначеЕсли ОткрытБаннерРекомендацииПокупкиПлагинов() Тогда
Результат = "Подключить плагины";
ИначеЕсли ОткрытБаннерРекомендацииПокупкиПакетов() Тогда
Результат = "Подключить пакет";
ИначеЕсли ОткрытБаннерСертификата() Тогда
Результат = "Продлить сертификат";
Иначе
Результат = "Перейти к подпискам";
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура БаннерКартинкаЗакрытияНажатие(Элемент)
ЭлементыФормы.ПанельОкончанияОплаченногоПериода.Свертка = РежимСверткиЭлементаУправления.Верх;
Если ОткрытБаннерРекомендацииПокупкиПлагинов() Тогда
ПредложенияДляПокупки_ЗаписатьДатуЗакрытияРекомендацииПокупкиПлагинов();
КонецЕсли;
Если ОткрытБаннерРекомендацииПокупкиПакетов() Тогда
ПредложенияДляПокупки_ЗаписатьДатуЗакрытияРекомендацииПокупкиПакетаДокументов();
КонецЕсли;
КонецПроцедуры
Функция ОткрытБаннерСертификата()
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
Результат = (ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаСертификатЗакончился
ИЛИ ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаСертификатЗаканчивается);
Возврат Результат;
КонецФункции
Функция ОткрытБаннерРекомендацииПокупкиПлагинов()
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
Результат = (ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаРекомендацияПлагинов);
Возврат Результат;
КонецФункции
Функция ОткрытБаннерРекомендацииПокупкиПакетов()
ПанельБаннера = ЭлементыФормы.ПанельОкончанияОплаченногоПериода;
Результат = (ПанельБаннера.ТекущаяСтраница = ПанельБаннера.Страницы.СтраницаРекомендацияПакетов);
Возврат Результат;
КонецФункции
// } ПОДПИСКИ И ОПЛАТЫ
// { ЛОГИСТИКА
Процедура УстановитьВидимостьЭлементовДляЛогистики()
Ядро = Модуль_Ядро();
ПредложитьУстановкуЛогистики = Ядро.КонтурЛогистика_ПредложитьУстановитьМодуль();
ИспользуетсяМодульЛогистики = Ядро.КонтурЛогистика_ИспользуетсяМодульЛогистики();
ИспользоватьЛогистикЛайт = Ядро.ИспользоватьЛогистикЛайт();
Если ПредложитьУстановкуЛогистики Тогда
НоваяСвертка = РежимСверткиЭлементаУправления.Нет;
Иначе
НоваяСвертка = РежимСверткиЭлементаУправления.Верх;
КонецЕсли;
ЭлементыФормы.ПанельБаннерЛогистики.Свертка = НоваяСвертка;
ПоказатьЭлементыЛогистики = ПредложитьУстановкуЛогистики ИЛИ ИспользуетсяМодульЛогистики Или ИспользоватьЛогистикЛайт;
ЭлементыФормы.ОткрытьПеревозочныеДокументы.Видимость = ПоказатьЭлементыЛогистики;
ИспользоватьВнутреннийДокументооборот = Ядро.ЗначениеНастройки_ИспользоватьВнутреннийДокументооборот();
Если НЕ ИспользоватьВнутреннийДокументооборот Тогда
ВнутренниеПозицияЛево = ЭлементыФормы.ВыбратьРежимВнутренние.Лево;
ОтступОтОсновныхКнопок = 20;
ЭлементыФормы.ОткрытьПеревозочныеДокументы.Лево = ВнутренниеПозицияЛево + ОтступОтОсновныхКнопок;
КонецЕсли;
КонецПроцедуры
//&НаКлиенте
Процедура БаннерУстановкаЛогистикиТекстГиперссылкаНажатие(Элемент)
ОткрытьМастерУстановкиЛогистики(Истина);
КонецПроцедуры
Процедура ОткрытьПеревозочныеДокументы(Команда)
Ядро = Модуль_Ядро();
ИспользуетсяМодульЛогистики = Ядро.КонтурЛогистика_ИспользуетсяМодульЛогистики();
ИспользоватьЛогистикЛайт = Ядро.ИспользоватьЛогистикЛайт();
Если ИспользуетсяМодульЛогистики Тогда
Метрика_ПриПереходеНаРабочийСтолЛогистики();
Период = Новый СтандартныйПериод(НастройкаВыбораПериода.ДатаНачала, НастройкаВыбораПериода.ДатаОкончания);
Ядро.КонтурЛогистика_ОткрытьРабочийСтол(Период);
ИначеЕсли ИспользоватьЛогистикЛайт Тогда
РежимОтображения = РежимыОтображения().Перевозочные;
УстановитьРежимОтбораПоПериоду(РежимОтображения);
ОбновитьСписок(РежимОтображения);
Иначе
ОткрытьМастерУстановкиЛогистики(Ложь);
КонецЕсли;
КонецПроцедуры
Процедура ОткрытьМастерУстановкиЛогистики(ПереходИзБаннера)
Метрика_ПриОткрытииМастераУстановкиЛогистики(ПереходИзБаннера);
ОбработкаМастераУстановкиЛогистики = ПодключитьМастерУстановкиЛогистики();
Если ОбработкаМастераУстановкиЛогистики <> Неопределено Тогда
// BSLLS:GetFormMethod-off
ФормаМастераУстановкиЛогистики = ОбработкаМастераУстановкиЛогистики.ПолучитьФорму("ФормаОсновная", ЭтаФорма);
// BSLLS:GetFormMethod-on
ФормаМастераУстановкиЛогистики.ОткрытьМодально();
КонецЕсли;
КонецПроцедуры
Функция ПодключитьМастерУстановкиЛогистики()
Ядро = Модуль_Ядро();
Результат = Ядро.КонтурЛогистика_ПодключитьМастерУстановки();
Возврат Результат;
КонецФункции
Процедура КартинкаБаннераЛогистикиЗакрытьНажатие(Элемент)
ЭлементыФормы.ПанельБаннерЛогистики.Свертка = РежимСверткиЭлементаУправления.Верх;
КонецПроцедуры
Процедура Метрика_ОтображениеБаннераЛогистики()
Если ЭлементыФормы.ПанельБаннерЛогистики.Свертка <> РежимСверткиЭлементаУправления.Нет Тогда
Возврат;
КонецЕсли;
Ядро = Модуль_Ядро();
КатегорияМетрики = Ядро.Метрика_НазваниеКатегории().ИнтеграцияСЛогистикой;
ДействиеМетрики = Ядро.Метрика_НазваниеДействий().ОтображениеБаннераЛогистики;
ДопПеременные = Новый Соответствие;
ДопПеременные.Вставить("KonturBaseID", Ядро.ОбщийКонтекст_КонтурИдентификаторИБ());
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(
КатегорияМетрики,
ДействиеМетрики,
,
ДопПеременные);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ПриОткрытииМастераУстановкиЛогистики(ПереходИзБаннера)
Метрика_НазваниеДействий = Метрика_НазваниеДействий();
Если ПереходИзБаннера Тогда
ДействиеМетрики = Метрика_НазваниеДействий.УстановкаИзБаннера;
Иначе
ДействиеМетрики = Метрика_НазваниеДействий.УстановкаПоКнопке;
КонецЕсли;
Метрика_ПриВыполненииДействияЛогистики(ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ПриПереходеНаРабочийСтолЛогистики()
ДействиеМетрики = Метрика_НазваниеДействий().ПереходВРабочийСтол;
Метрика_ПриВыполненииДействияЛогистики(ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ПриВыполненииДействияЛогистики(ДействиеМетрики)
Ядро = Модуль_Ядро();
НаименованиеФормы = Метрика_НазваниеФормы();
КатегорияМетрики = Метрика_НазваниеКатегории().ИнтеграцияСЛогистикой;
ДопПеременные = Новый Соответствие;
ДопПеременные.Вставить("KonturBaseID", Ядро.ОбщийКонтекст_КонтурИдентификаторИБ());
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НаименованиеФормы,
КатегорияМетрики,
ДействиеМетрики);
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(
КатегорияМетрики,
ДействиеМетрики,
,
ДопПеременные);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ПриНажатииНаГиперссылкуСтатусаЭПД()
КатегорияМетрики = Метрика_КатегорияИнтеграцияСЛогистикой();
ДействиеМетрики = Метрика_ДействиеПереходаВСвязанныеДокументы();
НазваниеФормы = Метрика_НазваниеФормы();
ПредставлениеМетки = "Статус логистического документа";
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НазваниеФормы,
КатегорияМетрики,
ДействиеМетрики,
,
ПредставлениеМетки
);
Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Функция Метрика_КатегорияИнтеграцияСЛогистикой()
КатегорииМетрик = Метрика_НазваниеКатегории();
Результат = КатегорииМетрик.ИнтеграцияСЛогистикой;
Возврат Результат;
КонецФункции
//&НаКлиенте
Функция Метрика_ДействиеПереходаВСвязанныеДокументы()
ДействияМетрик = Метрика_НазваниеДействий();
Результат = ДействияМетрик.ПереходВСвязанныеДокументы;
Возврат Результат;
КонецФункции
// } ЛОГИСТИКА
// { ПЕРЕВОЗОЧНЫЕ ДОКУМЕНТЫ
Процедура ПеревозочныеДокументы_ОткрытьФормуТитула(ВыбраннаяСтрока)
Если ЗначениеЗаполнено(ВыбраннаяСтрока.Документ) Тогда
Модуль_Платформа = Модуль_Платформа();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВидПакетаID", ВыбраннаяСтрока.ВидПакетаID);
ПараметрыФормы.Вставить("Документ", ВыбраннаяСтрока.Документ);
ПараметрыФормы.Вставить("СтрокаСписка", Новый_СтруктураДанныхСтрокиСписка(ВыбраннаяСтрока));
ОповещениеПослеЗакрытия = НовыйОписаниеОповещения(
"ПеревозочныеДокументы_ПослеЗакрытияФормыТитула",
ЭтаФорма,
ВыбраннаяСтрока.Ключ
);
Модуль_Платформа.ПеревозочныеДокументы_ОткрытьФормуТитула(ПараметрыФормы, ЭтаФорма, ОповещениеПослеЗакрытия);
Иначе
ПеревозочныеДокументы_ЗадатьВопросПерейтиВДиадок(ВыбраннаяСтрока);
КонецЕсли;
КонецПроцедуры
Процедура ПеревозочныеДокументы_ЗадатьВопросПерейтиВДиадок(ВыбраннаяСтрока)
ЗаголовокСообщения = НСтр("ru = 'Открытие перевозочного документа в Диадок'");
ТекстСообщения =
НСтр("ru = 'Перевозочный документ был переотправлен или создан не в модуле.
|Открыть документ в Диадок?
|
|Если документ будет подписан или аннулирован, необходимо обновить список документов для получения актуального статуса.
|'");
ДополнительныеПараметрыОповещения = Новый Структура;
ДополнительныеПараметрыОповещения.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
КнопкаПоУмолчанию = КодВозвратаДиалога.ОК;
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить(КнопкаПоУмолчанию, "Продолжить");
СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, "Закрыть");
ОповещениеОЗавершении = НовыйОписаниеОповещения(
"ПеревозочныеДокументы_ПослеВопросаПерейтиВДиадок",
ЭтаФорма,
ДополнительныеПараметрыОповещения
);
ПоказатьВопросПереопределенная(
ОповещениеОЗавершении,
ТекстСообщения,
СписокКнопок,
,
КнопкаПоУмолчанию,
ЗаголовокСообщения
);
КонецПроцедуры
Процедура ПеревозочныеДокументы_ПослеВопросаПерейтиВДиадок(Ответ, ДополнительныеПараметрыОповещения) Экспорт
ДействиеМетрики = Метрика_НазваниеДействий().ОткрытьДокументВДиадоке;
ВыбраннаяСтрока = ДополнительныеПараметрыОповещения.ВыбраннаяСтрока;
Если Ответ = КодВозвратаДиалога.ОК Тогда
Ядро = Модуль_Ядро();
СтруктураСтроки = Новый_СтруктураДанныхСтрокиСписка(ВыбраннаяСтрока);
ТекущийДокумент = ДокументИзДанныхСтрокиТЧ(СтруктураСтроки);
ГиперссылкаНаДокумент = Ядро.Документы_СсылкаВБраузере(ТекущийДокумент);
Если ЗначениеЗаполнено(ГиперссылкаНаДокумент) Тогда
// BSLLS:UsingSynchronousCalls-off
ЗапуститьПриложение(ГиперссылкаНаДокумент);
// BSLLS:UsingSynchronousCalls-on
КонецЕсли;
Иначе
ДействиеМетрики = ДействиеМетрики + "_отказ";
КонецЕсли;
ДопПеременные = Новый Соответствие;
ДопПеременные.Вставить("LetterId", ВыбраннаяСтрока.LetterId);
ДопПеременные.Вставить("DocumentId", ВыбраннаяСтрока.DocumentId);
ДопПеременные.Вставить("Status", ВыбраннаяСтрока.Статус);
Метрика_ПеревозочныеДокументыПерейтиВДиадок(ДействиеМетрики, ДопПеременные);
КонецПроцедуры
Процедура Метрика_ПеревозочныеДокументыПерейтиВДиадок(ДействиеМетрики, ДопПеременные)
Ядро = Модуль_Ядро();
НаименованиеФормы = Метрика_НазваниеФормы();
КатегорияМетрики = Метрика_НазваниеКатегории().Перевозочные;
ПредставлениеМетрики = "Открытие перевозочного документа";
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НаименованиеФормы,
КатегорияМетрики,
ДействиеМетрики,
,
ПредставлениеМетрики
);
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(
КатегорияМетрики,
ДействиеМетрики,
,
ДопПеременные
);
КонецПроцедуры
Процедура ПеревозочныеДокументы_ДобавитьЭПД(Кнопка)
Ядро = Модуль_Ядро();
Модуль_Платформа = Модуль_Платформа();
НаименованиеФормы = Метрика_НазваниеФормы();
КатегорияМетрики = Метрика_НазваниеКатегории().Перевозочные;
ДействиеМетрики = Метрика_НазваниеДействий().ДобавитьЭПД;
Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НаименованиеФормы,
КатегорияМетрики,
ДействиеМетрики
);
Ядро.Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
Период = Новый СтандартныйПериод(НастройкаВыбораПериода.ДатаНачала, НастройкаВыбораПериода.ДатаОкончания);
ОтборПоОрганизацииПустой = Ядро.Справочники_ПустаяСсылкаСправочника("Организации");
ОтборПоКонтрагентуПустой = Ядро.Справочники_ПустаяСсылкаСправочника("Контрагенты");
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Период", Период);
ПараметрыФормы.Вставить("ОтборПоОрганизации",
?(ВключитьОтборПоОрганизации, ОтборПоОрганизации, ОтборПоОрганизацииПустой));
ПараметрыФормы.Вставить("ОтборПоКонтрагенту",
?(ВключитьОтборПоКонтрагенту, ОтборПоКонтрагенту, ОтборПоКонтрагентуПустой));
ОповещениеПослеЗакрытия = НовыйОписаниеОповещения("ПеревозочныеДокументы_ПослеЗакрытияФормыДобавленияЭПД", ЭтаФорма);
Модуль_Платформа.ПеревозочныеДокументы_ОткрытьФормуПодбораДокументов(ПараметрыФормы, ЭтаФорма,
ОповещениеПослеЗакрытия);
КонецПроцедуры
Процедура ПеревозочныеДокументы_ПослеЗакрытияФормыДобавленияЭПД(Результат, ДопПараметры) Экспорт
Модуль_Платформа = Модуль_Платформа();
Если ТипЗнч(Результат) = Тип("Структура") Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДокументыОснования", Результат.ДокументыОснования);
ПараметрыФормы.Вставить("ВидПакетаID", Результат.ВидПакетаID);
ПараметрыФормы.Вставить("СтрокаСписка", Новый_СтруктураДанныхСтрокиСписка(Неопределено));
ОповещениеПослеЗакрытия = НовыйОписаниеОповещения("ПеревозочныеДокументы_ПослеЗакрытияФормыТитула", ЭтаФорма);
Модуль_Платформа.ПеревозочныеДокументы_ОткрытьФормуТитула(ПараметрыФормы, ЭтаФорма, ОповещениеПослеЗакрытия);
ИначеЕсли Результат = Истина Тогда
ОбновитьСписок();
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура ПеревозочныеДокументы_ПослеЗакрытияФормыТитула(Результат, ДопПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если ЗначениеЗаполнено(Результат.LetterId) Тогда
Ядро = Модуль_Ядро();
ОтборПоПакету = Ядро.Контракт_ОтборПоПакету();
ЗаполнитьЗначенияСвойств(ОтборПоПакету, Результат);
ОбновитьСписок( , ОтборПоПакету);
Иначе
ТекущиеДанные = Элементы.СписокДокументов.ТекущиеДанные;
Если Не ТекущиеДанные = Неопределено
И ТекущиеДанные.Ключ = Результат.Ключ Тогда
ЗаполнитьЗначенияСвойств(ТекущиеДанные, Результат);
Иначе
ОбновитьСписок();
КонецЕсли;
КонецЕсли;
ИначеЕсли Результат = Истина Тогда
ОбновитьСписок();
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
// } ПЕРЕВОЗОЧНЫЕ ДОКУМЕНТЫ
//&НаКлиенте
Процедура Метрика_ПоказатьПредупреждениеОНеДоступностиКонфигурацииНаТарифе()
Модуль_Ядро = Модуль_Ядро();
Метка = "";
КатегорияМетрики = Метрика_КонфигурацияНеДоступна();
ДействиеМетрики = Метрика_ОткрытиеФормы();
Переменные = Новый Структура;
Переменные.Вставить("Причина", СтатусПоддержкиКонфигурации);
Модуль_Ядро.Метрика_ДобавитьСтатистику(
КатегорияМетрики,
ДействиеМетрики,
Метка,
Переменные);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_УзнатьПодробнееОНеДоступностиКонфигурацииНаТарифе()
Модуль_Ядро = Модуль_Ядро();
НаименованиеФормы = Метрика_НазваниеФормы();
КатегорияМетрики = Метрика_КонфигурацияНеДоступна();
ДействиеМетрики = Метрика_УзнатьПодробнее();
Модуль_Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НаименованиеФормы,
КатегорияМетрики,
ДействиеМетрики);
Модуль_Ядро.Метрика_ДобавитьСтатистику(
КатегорияМетрики,
ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура Метрика_ЗаписатьВернутьсяКВыборуОрганизаций()
Модуль_Ядро = Модуль_Ядро();
НаименованиеФормы = Метрика_НазваниеФормы();
КатегорияМетрики = Метрика_КонфигурацияНеДоступна();
ДействиеМетрики = Метрика_ВернутьсяКВыборуОрганизаций();
Модуль_Ядро.Метрика_ДобавитьПоведение_НажатиеКнопки(
НаименованиеФормы,
КатегорияМетрики,
ДействиеМетрики);
Модуль_Ядро.Метрика_ДобавитьСтатистику(
КатегорияМетрики,
ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Функция Метрика_ОткрытиеФормы()
Возврат "ОткрытиеФормы";
КонецФункции
//&НаКлиенте
Функция Метрика_КонфигурацияНеДоступна()
Возврат "КонфигурацияНедоступна";
КонецФункции
//&НаКлиенте
Функция Метрика_УзнатьПодробнее()
Возврат "УзнатьПодробнее";
КонецФункции
//&НаКлиенте
Функция Метрика_ВернутьсяКВыборуОрганизаций()
Возврат "ВернутьсяКВыборуОрганизаций";
КонецФункции
//{ НАЙТИ НУЖНЫЙ ДОКУМЕНТ
//&НаКлиенте
Процедура ОткрытьПомощникПоискаДокумента(Команда)
Метрики_ЗаписатьНажатие_НайтиНужныйДокумент();
Метрики_ЗаписатьСтатистику_НайтиНужныйДокумент();
ОбработчикОткрытияФормыПоискаДокумента();
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьНажатие_НайтиНужныйДокумент()
КатегорияМетрики = Метрика_КатегорияНайтиНужныйДокумент();
ДействиеМетрики = Метрика_ДействиеОткрытиеПомощника();
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура Метрики_ЗаписатьСтатистику_НайтиНужныйДокумент()
КатегорияМетрики = Метрика_КатегорияНайтиНужныйДокумент();
ДействиеМетрики = Метрика_ДействиеОткрытиеПомощника();
Ядро = Модуль_Ядро();
Ядро.Метрика_ДобавитьСтатистику_СУчетомЗаполненияКонтекста(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработчикОткрытияФормыПоискаДокумента()
ОбработчикЗакрытия = НовыйОписаниеОповещения(
"ОбработчикЗакрытияФормыПоискаДокумента",
ЭтаФорма
);
Платформа = Модуль_Платформа();
Платформа.ПоказатьПомощникПоискаДокумента(ОбработчикЗакрытия);
КонецПроцедуры
//&НаКлиенте
Процедура ОбработчикЗакрытияФормыПоискаДокумента(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
ПоказатьПлашкуОтзываПоРаботеСПоискомДокументовНаОтправку();
ОбновитьКэшСопоставленныхКонтрагентов();
КонецПроцедуры
//} НАЙТИ НУЖНЫЙ ДОКУМЕНТ
// { Лента контрагентов
Процедура УстановитьТекстПоляСобытияЛентыКонтрагентовНаСервере()
МодульЯдро = Модуль_Ядро();
// BSLLS:UnusedLocalVariable-off
HTMLЛентаКонтрагентов = МодульЯдро.HTML_СобытияЛентыКонтрагентов(
ЛентаКонтрагентовОрганизация);
// BSLLS:UnusedLocalVariable-on
ЭлементыФормы.HTMLЛентаКонтрагентов.УстановитьТекст(HTMLЛентаКонтрагентов);
КонецПроцедуры
Процедура НастроитьИнтерфейсЛентыКонтрагентов()
Ядро = Модуль_Ядро();
УведомлятьОНовыхСобытиях = Ядро.ЗначениеНастройки_УведомлятьОНовыхСобытиях();
Если НЕ Ядро.ЗначениеНастройки_УведомлятьОНовыхСобытиях() Тогда
Возврат;
КонецЕсли;
СписокДляОтбора = ЭлементыФормы.ЛентаКонтрагентовОрганизация.СписокВыбора;
СписокДляОтбораОрганизации = Ядро.Организации_СписокОрганизацийДляВыбора(Ложь);
Для Каждого ТекОрганизация Из СписокДляОтбораОрганизации Цикл
Если НЕ ЗначениеЗаполнено(ЛентаКонтрагентовОрганизация) Тогда
ЛентаКонтрагентовОрганизация = ТекОрганизация.Значение;
КонецЕсли;
НовыйЭлемент = СписокДляОтбора.Добавить();
НовыйЭлемент.Значение = ТекОрганизация.Значение;
НовыйЭлемент.Представление = ТекОрганизация.Представление;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьСобытияЛентыКонтрагентов()
Если НЕ УведомлятьОНовыхСобытиях Тогда
Возврат;
КонецЕсли;
Ядро = Модуль_Ядро();
ЭлементыФормы.СписокСобытий.ЦветФонаКнопки = Новый Цвет();
БиблиотекаКартинокЯдра = Ядро.БиблиотекаКартинок();
ОформлениеКругОранжевый16 = БиблиотекаКартинокЯдра.ОформлениеКругОранжевый16;
ОформлениеПустое16 = БиблиотекаКартинокЯдра.ОформлениеПустое16;
ЛентаКонтрагентовОрганизация = Неопределено;
СписокДляОтбора = Элементы.ЛентаКонтрагентовОрганизация.СписокВыбора;
СписокДляОтбора.Очистить();
СписокДляОтбораОрганизации = Ядро.Организации_СписокОрганизацийДляВыбора(Ложь);
Для Каждого ТекОрганизация Из СписокДляОтбораОрганизации Цикл
НовыйЭлемент = СписокДляОтбора.Добавить();
НовыйЭлемент.Значение = ТекОрганизация.Значение;
НовыйЭлемент.Представление = ТекОрганизация.Представление;
ЕстьНовыеСобытия = Ядро.ЛентаКонтрагентов_ЕстьНовыеСобытияДляПользователя(
ТекОрганизация.Значение);
Если ЕстьНовыеСобытия Тогда
ЛентаКонтрагентовОрганизация = ТекОрганизация.Значение;
// BSLLS:MagicNumber-off
ЭлементыФормы.СписокСобытий.ЦветФонаКнопки = Новый Цвет(255, 237, 166);
// BSLLS:MagicNumber-on
НовыйЭлемент.Картинка = ОформлениеКругОранжевый16;
Иначе
НовыйЭлемент.Картинка = ОформлениеПустое16;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(ЛентаКонтрагентовОрганизация)
И ЗначениеЗаполнено(СписокДляОтбора) Тогда
ЛентаКонтрагентовОрганизация = СписокДляОтбора[0].Значение;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ЛентаКонтрагентовОрганизация)
И ЗначениеЗаполнено(СписокДляОтбора) Тогда
ЛентаКонтрагентовОрганизация = СписокДляОтбора[0].Значение;
КонецЕсли;
Если ЗначениеЗаполнено(ЛентаКонтрагентовОрганизация)
И НЕ СписокСобытийСвернут() Тогда
УстановитьТекстПоляСобытияЛентыКонтрагентовНаСервере();
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьСобытия(Кнопка)
КатегорияМетрики = "ЛентаКонтрагентов";
ДействиеМетрики = "События";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
Если СписокСобытийСвернут() Тогда
РазвернутьСписокСобытий();
Иначе
СвернутьСписокСобытий();
КонецЕсли;
Если ПоказыватьОнбордингЛентыКонтрагентов
И НЕ СписокСобытийСвернут() Тогда
ПоказатьОнбордингСобытияЛентыКонтрагентов();
КонецЕсли;
ПоказатьПлашкуОтзываПоРаботеСЛентойКонтрагентов();
ДействиеМетрики = "ОткрытиеФормы";
Если СписокСобытийСвернут() Тогда
ДействиеМетрики = "ЗакрытиеФормы";
КонецЕсли;
Если НЕ СписокСобытийСвернут() Тогда
НачатьУстановкуПоляСобытияКонтрагентов();
КонецЕсли;
Метрика_ДобавитьСтатистику_ПоКонтексту(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
Функция СписокСобытийСвернут()
Возврат (ЭлементыФормы.ПанельСобытийКонтрагентов.Свертка
<> РежимСверткиЭлементаУправления.Нет);
КонецФункции
Процедура РазвернутьСписокСобытий()
ДействиеФормыПоказатьСкрытьПанель(
Истина,
ЭлементыФормы.ПанельСобытийКонтрагентов,
РежимСверткиЭлементаУправления.Право,
ЭлементыФормы.РазделительСобытий);
КонецПроцедуры
Процедура ДействиеФормыПоказатьСкрытьПанель(
ЭлементКнопка,
ЭлементФормыПанель,
ТекущийРежимСвертки,
ЭлементФормыРазделитель = Неопределено) Экспорт
Если ТипЗнч(ЭлементКнопка) = тип("Булево") Тогда
ЭлементКнопкаПометка = ЭлементКнопка;
Иначе
ЭлементКнопкаПометка = ЭлементКнопка.Пометка;
КонецЕсли;
Если ТипЗнч(ТекущийРежимСвертки) = Тип("Строка") Тогда
РежимСвертки = РежимСверткиЭлементаУправления[ТекущийРежимСвертки];
ИначеЕсли ТипЗнч(ТекущийРежимСвертки) = Тип("РежимСверткиЭлементаУправления") Тогда
РежимСвертки = ТекущийРежимСвертки;
Иначе
Возврат;
КонецЕсли;
Если ЭлементФормыРазделитель = Неопределено Тогда
// Панель на форме без разделителя - Просто сворачиваем
Если ЭлементКнопкаПометка Тогда
ЭлементФормыПанель.Свертка = РежимСверткиЭлементаУправления.Нет;
Иначе
ЭлементФормыПанель.Свертка = РежимСвертки;
КонецЕсли;
Иначе
// Если Панель отделена разделителем, не просто сворачиваем, а изменяем привязки
// ГраницаПанелиДальняя - граница, находящаяся в противоположной сторооне от стороны свертки
// ГраницаПанелиБлижняя - граница, находящаяся с одной стороны со сверткой
Если РежимСвертки = РежимСверткиЭлементаУправления.Верх Тогда
ГраницаПанелиДальняя = ГраницаЭлементаУправления.Низ; // Эта граница меняет привязку
ГраницаПанелиБлижняя = ГраницаЭлементаУправления.Верх; // Эта граница куда привязываем
ИначеЕсли РежимСвертки = РежимСверткиЭлементаУправления.Низ Тогда
ГраницаПанелиДальняя = ГраницаЭлементаУправления.Верх;
ГраницаПанелиБлижняя = ГраницаЭлементаУправления.Низ;
ИначеЕсли РежимСвертки = РежимСверткиЭлементаУправления.Право Тогда
ГраницаПанелиДальняя = ГраницаЭлементаУправления.Лево;
ГраницаПанелиБлижняя = ГраницаЭлементаУправления.Право;
ИначеЕсли РежимСвертки = РежимСверткиЭлементаУправления.Лево Тогда
ГраницаПанелиДальняя = ГраницаЭлементаУправления.Право;
ГраницаПанелиБлижняя = ГраницаЭлементаУправления.Лево;
КонецЕсли;
// Получаем основной элемент привязки (Форма или основная панель)
_ПервыйЭлемент = Неопределено; // - основной элемент привязки
_ГраницаПервогоЭлемента = Неопределено;
_ВторойЭлемент = Неопределено;
_ГраницаВторогоЭлемента = Неопределено;
ЭлементФормыПанель.ПолучитьПривязку(ГраницаПанелиБлижняя, _ПервыйЭлемент, _ГраницаПервогоЭлемента, _ВторойЭлемент, _ГраницаВторогоЭлемента);
// Даннная привязка - по умолчанию
ЭлементФормыПанель.УстановитьПривязку(ГраницаПанелиБлижняя, _ПервыйЭлемент, ГраницаПанелиБлижняя);
// Свертка панели и разделителя при "не активной" кнопке - все границы привязыввем к основному элементу привязки
Если Не ЭлементКнопкаПометка Тогда
ЭлементФормыПанель.УстановитьПривязку(ГраницаПанелиДальняя, _ПервыйЭлемент, ГраницаПанелиБлижняя);
ЭлементФормыРазделитель.УстановитьПривязку(ГраницаПанелиБлижняя, ЭлементФормыПанель, ГраницаПанелиДальняя);
ЭлементФормыРазделитель.УстановитьПривязку(ГраницаПанелиДальняя, ЭлементФормыПанель, ГраницаПанелиДальняя);
КонецЕсли;
ЭлементФормыПанель.Свертка = ?(ЭлементКнопкаПометка, РежимСверткиЭлементаУправления.Нет, РежимСвертки);
ЭлементФормыРазделитель.Свертка = ?(ЭлементКнопкаПометка, РежимСверткиЭлементаУправления.Нет, РежимСвертки);
// Развертка панели и разделителя при "активной" кнопке
Если ЭлементКнопкаПометка Тогда
ЭлементФормыРазделитель.УстановитьПривязку(ГраницаПанелиДальняя, ЭлементФормыРазделитель, ГраницаПанелиБлижняя);
ЭлементФормыРазделитель.УстановитьПривязку(ГраницаПанелиБлижняя, _ПервыйЭлемент, ГраницаПанелиДальняя, _ПервыйЭлемент, ГраницаПанелиБлижняя);
ЭлементФормыПанель.УстановитьПривязку(ГраницаПанелиДальняя, ЭлементФормыРазделитель, ГраницаПанелиБлижняя);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СвернутьСписокСобытий()
ДействиеФормыПоказатьСкрытьПанель(
Ложь,
ЭлементыФормы.ПанельСобытийКонтрагентов,
РежимСверткиЭлементаУправления.Право,
ЭлементыФормы.РазделительСобытий);
КонецПроцедуры
Процедура ЛентаКонтрагентовОрганизацияПриИзменении(Элемент)
КатегорияМетрики = "ЛентаКонтрагентов";
ДействиеМетрики = "СменаФильтраПоОрганизации";
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
НачатьУстановкуПоляСобытияКонтрагентов();
КонецПроцедуры
Процедура НачатьУстановкуПоляСобытияКонтрагентов()
ЭлементыФормы.ПанельСпискаСобытийКонтрагентов.ТекущаяСтраница
= ЭлементыФормы.ПанельСпискаСобытийКонтрагентов.Страницы.СтраницаКружочек;
ПодключитьОбработчикОжидания(
"ЗавершитьУстановкуПоляСобытияКонтрагентов",
0.01,
Истина);
КонецПроцедуры
Процедура ЗавершитьУстановкуПоляСобытияКонтрагентов() Экспорт
УстановитьТекстПоляСобытияЛентыКонтрагентовНаСервере();
ЭлементыФормы.ПанельСпискаСобытийКонтрагентов.ТекущаяСтраница
= ЭлементыФормы.ПанельСпискаСобытийКонтрагентов.Страницы.СтраницаСписка;
КонецПроцедуры
Процедура HTMLЛентаКонтрагентовПриНажатии(Элемент, ДанныеСобытия)
// По какой-то неведомой причине иногда прилетают события с типом отличающимся от "click",
// и из-за этого код выполняется несколько раз
Если НЕ ЭтоНажатиеНаТекстHTML(ДанныеСобытия) Тогда
Возврат;
КонецЕсли;
АдресСсылки = Неопределено;
ДополнительныеПараметры = Неопределено;
// BSLLS:MissingCodeTryCatchEx-off
Попытка
Если ВРег(ДанныеСобытия.srcElement.tagName = "IMG")
ИЛИ ВРег(ДанныеСобытия.srcElement.tagName = "DIV") Тогда
АдресСсылки = ДанныеСобытия.srcElement.parentElement.href;
Иначе
АдресСсылки = ДанныеСобытия.srcElement.href;
КонецЕсли;
Исключение КонецПопытки;
// BSLLS:MissingCodeTryCatchEx-on
Если ЗначениеЗаполнено(АдресСсылки) Тогда
// BSLLS:UnusedLocalVariable-off
СтандартнаяОбработка = Ложь;
// BSLLS:UnusedLocalVariable-on
// BSLLS:MissingCodeTryCatchEx-off
Попытка
ДанныеСобытия.returnValue = СтандартнаяОбработка;
Исключение КонецПопытки;
// BSLLS:MissingCodeTryCatchEx-on
ОповеститьИлиПерейтиПоСсылке(
АдресСсылки,
ДополнительныеПараметры,
ЭтаФорма);
Метрика_ПерейтиПоСсылкеЛентыКонтрагентов(АдресСсылки);
КонецЕсли;
КонецПроцедуры
Функция ЭтоНажатиеНаТекстHTML(ДанныеСобытия)
Результат = Истина;
Попытка
Результат = НРег(ДанныеСобытия.type) = "click";
Исключение
ОписаниеОшибки = ИнформацияОбОшибке();
КонецПопытки;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура Метрика_ПерейтиПоСсылкеЛентыКонтрагентов(АдресСсылки)
КатегорияМетрики = "ЛентаКонтрагентов";
// BSLLS:DeprecatedFind-off
Если Найти(АдресСсылки, "ПосмотретьПриглашение") > 0 Тогда
ДействиеМетрики = "ПосмотретьПриглашение";
ИначеЕсли Найти(АдресСсылки, "ПосмотретьКомментарии") > 0 Тогда
ДействиеМетрики = "ПосмотретьКомментарий";
ИначеЕсли Найти(АдресСсылки, "ОткрытьСопоставлениеКонтрагента") > 0 Тогда
ДействиеМетрики = "СопоставитьКонтрагента";
Иначе
ДействиеМетрики = "НеизвестнаяСсылка";
КонецЕсли;
// BSLLS:DeprecatedFind-on
Метрика_ЗаписатьНажатиеКнопки(КатегорияМетрики, ДействиеМетрики);
КонецПроцедуры
//&НаКлиенте
Процедура ПосмотретьКомментарииКонтрагента(
Base64Строка,
ДополнительныеПараметры = Неопределено) Экспорт
ДанныеСтроки = ДанныеКомментарияДляОповещения(Base64Строка);
ЗаголовокФормыПредупреждения = ДанныеСтроки.ЗаголовокФормыПредупреждения;
Комментарий = ДанныеСтроки.Комментарий;
ТекстПредупреждения = ДанныеСтроки.ТекстПредупреждения;
Модуль_Платформа = Модуль_Платформа();
Модуль_Платформа.ОткрытьФормуПредупреждения(
ТекстПредупреждения,
Комментарий,
ЗаголовокФормыПредупреждения);
КонецПроцедуры
//&НаСервере
Функция ДанныеКомментарияДляОповещения(Знач Base64Строка)
Ядро = Модуль_Ядро();
ЗначениеДанных = Base64Значение(Base64Строка);
СтрокаДанных = Ядро.СтрокаИзДвоичныхДанных(ЗначениеДанных);
Результат = Ядро.ПарсерJSON_Прочитать(СтрокаДанных);
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ОткрытьСопоставлениеКонтрагента(
ИденификаторКонтрагента = Неопределено,
ДополнительныеПараметры = Неопределено) Экспорт
ДанныеОрганизации = ДанныеОрганизации(ЛентаКонтрагентовОрганизация);
ДанныеКонтрагента = ДанныеКонтрагента(ЛентаКонтрагентовОрганизация, ИденификаторКонтрагента);
ОткрытьФормуКонтрагента(ДанныеОрганизации, ДанныеКонтрагента);
КонецПроцедуры
//&НаСервере
// BSLLS:MissingReturnedValueDescription-off
// BSLLS:MissingParameterDescription-off
Функция ДанныеКонтрагента(Знач ИдентификаторОрганизации, Знач ИденификаторКонтрагента)
// BSLLS:MissingReturnedValueDescription-on
// BSLLS:MissingParameterDescription-on
Модуль_Ядро = Модуль_Ядро();
ИдентификаторыКонтрагента = Модуль_Ядро.Новый_ИдентификаторыСправочника(
Неопределено,
ИденификаторКонтрагента);
ДанныеКонтрагента = Модуль_Ядро.Контрагенты_ЗаполненныеРеквизиты(
ИдентификаторыКонтрагента);
Если ИспользуетсяПодсистемаДиадок
И НЕ ЗначениеЗаполнено(ДанныеКонтрагента.ID) Тогда
ДанныеКонтрагента = Модуль_Ядро.Контрагенты_ДанныеКонтрагентаАПИ(
ИдентификаторОрганизации,
ИденификаторКонтрагента);
Модуль_Ядро.Контрагенты_ОбновитьКонтрагентаЭДО(
ДанныеКонтрагента,
ИдентификаторОрганизации);
ДанныеКонтрагента = Модуль_Ядро.Контрагенты_ЗаполненныеРеквизиты(
ИдентификаторыКонтрагента);
КонецЕсли;
Возврат ДанныеКонтрагента;
КонецФункции
//&НаСервере
Функция ДанныеОрганизации(Знач ИдентификаторОрганизации)
Модуль_Ядро = Модуль_Ядро();
ИдентификаторыОрганизации = Модуль_Ядро.Новый_ИдентификаторыСправочника(
Неопределено,
ИдентификаторОрганизации);
ДанныеОрганизации = Модуль_Ядро.Организации_ЗаполненныеРеквизиты(
ИдентификаторыОрганизации);
Возврат ДанныеОрганизации;
КонецФункции
//&НаКлиенте
Процедура ПосмотретьПриглашениеКонтрагента(
ИденификаторКонтрагента = Неопределено,
ДополнительныеПараметры = Неопределено) Экспорт
ПоказатьФормуВыбранногоПриглашения(ИденификаторКонтрагента);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуВыбранногоПриглашения(ИденификаторКонтрагента)
ДополнительныеПараметры = ПараметрыОткрытияФормыПриглашенияКонтрагента(
ИденификаторКонтрагента);
ПоказатьФормуПриглашения(ДополнительныеПараметры);
КонецПроцедуры
//&НаКлиенте
Процедура ПоказатьФормуПриглашения(ДополнительныеПараметры)
ОписаниеЗакрытияФормы = НовыйОписаниеОповещения(
"ЗакрытаФормаПриглашения",
ЭтаФорма,
ДополнительныеПараметры
);
ОткрытьФормуДиадокМодально(
"ФормаПриглашения",
ЭтаФорма,
ДополнительныеПараметры,
ОписаниеЗакрытияФормы
);
КонецПроцедуры
//&НаСервере
Функция ПараметрыОткрытияФормыПриглашенияКонтрагента(ИденификаторКонтрагента)
Результат = Новый Структура;
Модуль_Ядро = Модуль_Ядро();
ДанныеОрганизации = ДанныеОрганизации(ЛентаКонтрагентовОрганизация);
ДанныеКонтрагента = ДанныеКонтрагента(
ЛентаКонтрагентовОрганизация,
ИденификаторКонтрагента);
ПараметрКонтрагенты = Новый Массив;
ПараметрКонтрагенты.Добавить(ДанныеКонтрагента);
Приглашения = Модуль_Ядро.Контрагенты_КомментарийИДокументПриглашения(
ДанныеОрганизации,
ПараметрКонтрагенты
);
Приглашение = Приглашения.Получить(ДанныеКонтрагента.ID);
Результат.Вставить("Приглашение", Приглашение);
Результат.Вставить("ДанныеОрганизации", ДанныеОрганизации);
Результат.Вставить("ДанныеКонтрагента", ДанныеКонтрагента);
Если ДанныеКонтрагента.Статус = Статус_ОжидаемОтветНаПриглашение() Тогда
РежимОткрытия = "Исходящее";
Иначе
РежимОткрытия = "Входящее";
КонецЕсли;
Результат.Вставить("ТекущийРежим", РежимОткрытия);
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ЗакрытаФормаПриглашения(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Команда = НРег(Результат.Команда);
Если Команда = НРег("Отменить") Тогда
Возврат;
КонецЕсли;
// BSLLS:IfElseIfEndsWithElse-off
Если Команда = НРег("Отказать") Тогда
ОтказатьВПриглашении(ДополнительныеПараметры);
ИначеЕсли Команда = НРег("Принять") Тогда
ПринятьКонтрагентов(ДополнительныеПараметры);
КонецЕсли;
// BSLLS:IfElseIfEndsWithElse-on
НачатьУстановкуПоляСобытияКонтрагентов();
КонецПроцедуры
//&НаКлиенте
Процедура ОтказатьВПриглашении(ДополнительныеПараметры)
ОписаниеЗакрытияФормы = НовыйОписаниеОповещения(
"ОтказатьВПриглашенииЗавершение",
ЭтаФорма,
ДополнительныеПараметры
);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Режим", "ОтказатьВПриглашении");
ОткрытьФормуДиадокМодально(
"ФормаВводаV2",
ЭтаФорма,
ПараметрыФормы,
ОписаниеЗакрытияФормы);
КонецПроцедуры
//&НаКлиенте
Процедура ОтказатьВПриглашенииЗавершение(Знач Результат, Знач ДополнительныеПараметры) Экспорт
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Возврат;
КонецЕсли;
Комментарий = Результат.Комментарий;
ОтказатьВПриглашенииКонтрагентовНаСервере(
Комментарий,
ДополнительныеПараметры);
КонецПроцедуры
//&НаСервере
Процедура ОтказатьВПриглашенииКонтрагентовНаСервере(Знач Комментарий, Знач ДополнительныеПараметры)
Контрагенты_Заблокировать(
ДополнительныеПараметры,
Комментарий);
НовыйСтатус = Статус_РаботаетВДиадок();
ОбновитьДанныеКонтрагентаВКэше(
ДополнительныеПараметры,
НовыйСтатус);
КонецПроцедуры
//&НаСервере
Функция Контрагенты_Заблокировать(Знач ДополнительныеПараметры, Комментарий)
Модуль_Ядро = Модуль_Ядро();
ДанныеОрганизации = ДополнительныеПараметры.ДанныеОрганизации;
ДанныеКонтрагента = ДополнительныеПараметры.ДанныеКонтрагента;
МассивКонтрагентов = Новый Массив;
МассивКонтрагентов.Добавить(ДанныеКонтрагента);
Результат = Модуль_Ядро.Контрагенты_Заблокировать(
ДанныеОрганизации,
МассивКонтрагентов,
Комментарий
);
НовыйСтатус = Статус_ЗаблокированМной();
Модуль_Ядро.Контрагенты_ЗаписатьСтатусДляМассиваКонтрагентов(
ДанныеОрганизации,
Результат,
НовыйСтатус
);
Возврат Результат;
КонецФункции
Процедура ПринятьКонтрагентов(ДополнительныеПараметры)
ИдентификаторЯщика = ДополнительныеПараметры.ДанныеОрганизации.ID;
ОписаниеДоверенности = МашиночитаемаяДоверенность(ИдентификаторЯщика);
Если ЗначениеЗаполнено(ОписаниеДоверенности.Ошибки) Тогда
ВыбраннаяМЧД = ОписаниеДоверенности.МЧД;
ДействиеЭДО = "";
ОписаниеОповещенияОЗавершении = НовыйОписаниеОповещения(
"ПринятьКонтрагентовЗавершение",
ЭтаФорма,
ДополнительныеПараметры);
ПараметрыДляПроверкиМЧД = ПараметрыДляПроверкиМЧД(
ОписаниеОповещенияОЗавершении,
ИдентификаторЯщика,
ВыбраннаяМЧД,
ДействиеЭДО
);
ПараметрыДляПроверкиМЧД.ОшибкиПроверокМЧД = ОписаниеДоверенности.Ошибки;
ОписаниеОповещения = НовыйОписаниеОповещения(
"ОбработатьРезультатПриГрупповыхДействияхНаФормеВопросаМЧД",
ЭтаФорма,
ПараметрыДляПроверкиМЧД
);
ПоказатьВопрос_НетПодходящейДоверенности(
ПараметрыДляПроверкиМЧД,
ОписаниеОповещения
);
Иначе
ПринятьКонтрагентовЗавершение(
ОписаниеДоверенности.МЧД,
ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
Функция МашиночитаемаяДоверенность(ИдентификаторЯщика)
Результат = Новый Структура;
Результат.Вставить("МЧД");
Результат.Вставить("Ошибки");
Если НЕ ТребуетсяМЧД(ИдентификаторЯщика) Тогда
Возврат Результат;
КонецЕсли;
ОшибкиПроверкиМЧД = Новый Массив;
ИдентификаторыЯщиков = Новый Массив;
ИдентификаторыЯщиков.Добавить(ИдентификаторЯщика);
КонтрактыМЧД = ПолучитьДействующиеМЧДпоУмолчанию(
ИдентификаторыЯщиков,
ОшибкиПроверкиМЧД);
КонтрактМЧД = КонтрактыМЧД.Получить(ИдентификаторЯщика);
Результат.МЧД = КонтрактМЧД;
Результат.Ошибки = ОшибкиПроверкиМЧД;
Возврат Результат;
КонецФункции
//&НаКлиенте
Процедура ПринятьКонтрагентовЗавершение(КонтрактМЧД, ДополнительныеПараметры) Экспорт
Приглашение = ДополнительныеПараметры.Приглашение;
СведенияОФайле = Приглашение.Файл;
Если СведенияОФайле.ТребуетсяПодпись Тогда
Модуль_Ядро = Модуль_Ядро();
ДанныеПодписи = Модуль_Ядро.ПодписьДанных(
ДополнительныеПараметры.ДанныеОрганизации.ID,
СведенияОФайле.Данные);
СведенияОФайле.Вставить("ДанныеПодписи", ДанныеПодписи);
Если ЗначениеЗаполнено(КонтрактМЧД) Тогда
СведенияОФайле.Вставить("КонтрактМЧД", КонтрактМЧД);
КонецЕсли;
КонецЕсли;
ПринятьКонтрагентовНаСервере(ДополнительныеПараметры);
КонецПроцедуры
//&НаСервере
Процедура ПринятьКонтрагентовНаСервере(Знач ДополнительныеПараметры)
Модуль_Ядро = Модуль_Ядро();
Приглашения = Новый Соответствие;
Приглашения.Вставить(
ДополнительныеПараметры.ДанныеКонтрагента.ID,
ДополнительныеПараметры.Приглашение);
Модуль_Ядро.Контрагенты_ПринятьПриглашение(
ДополнительныеПараметры.ДанныеОрганизации,
Приглашения
);
НовыйСтатус = Статус_МойКонтрагент();
ОбновитьДанныеКонтрагентаВКэше(
ДополнительныеПараметры,
НовыйСтатус);
КонецПроцедуры
//&НаСервере
Процедура ОбновитьДанныеКонтрагентаВКэше(Знач ДополнительныеПараметры, НовыйСтатус = Неопределено)
Ядро = Модуль_Ядро();
ПараметрыСпискаДляСпискаДокументов = Ядро.Контрагенты_ПараметрыПолученияСпискаПартнеров(
ДополнительныеПараметры.ДанныеОрганизации);
КэшКонтрагентовДляСпискаДокументов = Ядро.Контрагенты_ЗаполненныйСписок(
ПараметрыСпискаДляСпискаДокументов);
ДанныеКонтрагента = ДополнительныеПараметры.ДанныеКонтрагента;
УдалитьДанныеКонтрагентаИзСписка(
КэшКонтрагентовДляСпискаДокументов,
ДанныеКонтрагента);
Если ДанныеКонтрагента.Статус = Статус_МойКонтрагент() Тогда
СтрокаТаблицы = КэшКонтрагентовДляСпискаДокументов.Добавить();
СтрокаТаблицы.РеквизитыСвязанныхСправочников = ДанныеКонтрагента.СвязанныеСправочники;
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ДанныеКонтрагента);
Ядро.Кэш_Поместить(
ПараметрыСпискаДляСпискаДокументов.Ключ,
КэшКонтрагентовДляСпискаДокументов);
КонецЕсли;
КонецПроцедуры
//&НаСервере
Процедура УдалитьДанныеКонтрагентаИзСписка(Список, Знач НовыеДанныеКонтрагента)
ПараметрыОтбораСтрок = Новый Структура;
ПараметрыОтбораСтрок.Вставить("ID", НовыеДанныеКонтрагента.ID);
СтрокиСписка = Список.НайтиСтроки(ПараметрыОтбораСтрок);
Для Каждого СтрокаСписка Из СтрокиСписка Цикл
Список.Удалить(СтрокаСписка);
КонецЦикла;
КонецПроцедуры
//&НаКлиенте
Процедура ОткрытьФормуКонтрагента(ДанныеОрганизации, ДанныеКонтрагента)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ID", ДанныеКонтрагента.ID);
ПараметрыФормы.Вставить("ДанныеКонтрагента", ДанныеКонтрагента);
ПараметрыФормы.Вставить("ДанныеОрганизации", ДанныеОрганизации);
ПараметрыФормы.Вставить("ИмяСправочника", "Контрагенты");
ПараметрыФормы.Вставить("ОткрытоИзМастераПервогоЗапуска", Истина);
ОписаниеОповещения = НовыйОписаниеОповещения(
"ПослеЗакрытияФормыКонтрагента",
ЭтаФорма,
ПараметрыФормы);
ОткрытьФормуДиадокМодально(
"ФормаЭлементаСправочника",
ЭтаФорма,
ПараметрыФормы,
ОписаниеОповещения);
КонецПроцедуры
//&НаКлиенте
Процедура ПослеЗакрытияФормыКонтрагента(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
НачатьУстановкуПоляСобытияКонтрагентов();
КонецПроцедуры
//&НаКлиентеНаСервереБезКонтекста
Функция Статус_МойКонтрагент()
Возврат "IsMyCounteragent";
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Статус_ЗаблокированМной()
Возврат "isRejectedByMe";
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Статус_РаботаетВДиадок()
Возврат "NotInCounteragentList";
КонецФункции
//&НаКлиентеНаСервереБезКонтекста
Функция Статус_ОжидаемОтветНаПриглашение()
Возврат "IsInvitedByMe";
КонецФункции
// } Лента контрагентов
ИнициализироватьОбщийКонтекст();
УстановитьКонтекстФормы(ЭтаФорма, Неопределено);
ИмяФормы = Метаданные().Формы.Форма.ПолноеИмя();
Элементы = ЭлементыФормы;
ПредставлениеТиповДокументов = Новый Соответствие;