3_1_2_150

This commit is contained in:
Компания 1С committed 2019-09-18 22:50:00 +03:00
1 parent 28f5f6c774
commit ccbf98d8bf
1114 files changed
+74111 -42158

No files matched your search

@@ -25,7 +25,7 @@
КонецФункции
// Конвертирует параметры запуска текущего сеанса в передаваемые параметры в скрипт
// Например, на вход программа может быть запущена с ключем:
// Например, на вход программа может быть запущена с ключом:
// /C "ПараметрыЗапускаИзВнешнейОперации=/TestClient -TPort 48050 /C РежимОтладки;РежимОтладки"
// Пробросит в скрипт следует "/TestClient -TPort 48050 /C РежимОтладки"
//
@@ -207,50 +207,76 @@
////////////////////////////////////////////////////////////////////////////////
// Функции для работы с табличными документами.
// Формирует описание выделенных областей табличного документа.
// Выполняет расчет и вывод показателей выделенных областей ячеек табличного документа.
//
// Параметры:
// ТабличныйДокумент - ТабличныйДокумент - документ, значения ячеек которого участвуют в расчете.
// Форма - ФормаКлиентскогоПриложения - форма, в которой выводятся значения расчетных показателей.
// ИмяТабличногоДокумента - Строка - имя реквизита формы типа ТабличныйДокумент, показатели которого рассчитываются.
// ТекущаяКоманда - Строка - имя команды расчета показателя, например, "РассчитатьСумму".
// Определяет, какой показатель является основным.
//
// Возвращаемое значение:
// Структура - содержит:
// * ВыделенныеОбласти - Массив - содержит структуры со свойствами:
// * Верх - Число - Номер строки верхней границы области.
// * Низ - Число - Номер строки нижней границы области.
// * Лево - Число - Номер колонки верхней границы области.
// * Право - Число - Номер колонки нижней границы области.
// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица.
// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере.
//
Функция ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент) Экспорт
ПараметрыРасчетаПоказателей = Новый Структура;
ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив);
ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь);
Процедура РассчитатьПоказатели(Форма, ИмяТабличногоДокумента, ТекущаяКоманда = "") Экспорт
ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти;
Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл
Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Продолжить;
КонецЕсли;
ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти");
ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть);
ВыделенныеОбласти.Добавить(ГраницыОбласти);
КонецЦикла;
Элементы = Форма.Элементы;
ТабличныйДокумент = Форма[ИмяТабличногоДокумента];
ВыделеноВсе = Ложь;
Если ВыделенныеОбласти.Количество() = 1 Тогда
ВыделеннаяОбласть = ВыделенныеОбласти[0];
ВыделеноВсе = Не Булево(
ВыделеннаяОбласть.Верх
+ ВыделеннаяОбласть.Низ
+ ВыделеннаяОбласть.Лево
+ ВыделеннаяОбласть.Право);
Если Не ЗначениеЗаполнено(ТекущаяКоманда) Тогда
ТекущаяКоманда = ТекущаяКомандаРасчетаПоказателей(Элементы);
КонецЕсли;
ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100);
// Расчет показателей.
ПараметрыРасчета = ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент);
Возврат ПараметрыРасчетаПоказателей;
КонецФункции
Если ПараметрыРасчета.РассчитатьНаСервере Тогда
РасчетныеПоказатели = СтандартныеПодсистемыВызовСервера.РасчетныеПоказателиЯчеек(
ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти);
Иначе
РасчетныеПоказатели = ОбщегоНазначенияСлужебныйКлиентСервер.РасчетныеПоказателиЯчеек(
ТабличныйДокумент, ПараметрыРасчета.ВыделенныеОбласти);
КонецЕсли;
// Установка значений показателей.
ЗаполнитьЗначенияСвойств(Форма, РасчетныеПоказатели);
// Переключение и форматирование показателей.
КомандыПоказателей = КомандыПоказателей();
Для Каждого Команда Из КомандыПоказателей Цикл
ИзменитьСвойствоЭлементаРасчетаПоказателей(Элементы, Команда.Ключ, "Пометка", Ложь);
ЗначениеПоказателя = РасчетныеПоказатели[Команда.Значение];
Элементы[Команда.Значение].ФорматРедактирования = ФорматРедактированияПоказателя(ЗначениеПоказателя);
КонецЦикла;
ИзменитьСвойствоЭлементаРасчетаПоказателей(Элементы, ТекущаяКоманда, "Пометка", Истина);
// Вывод основного показателя.
ТекущийПоказатель = КомандыПоказателей[ТекущаяКоманда];
Форма.Показатель = Форма[ТекущийПоказатель];
Элементы.Показатель.ФорматРедактирования = Элементы[ТекущийПоказатель].ФорматРедактирования;
ИзменитьСвойствоЭлементаРасчетаПоказателей(
Элементы, "КомандыВидовПоказателей", "Картинка", БиблиотекаКартинок[ТекущийПоказатель]);
// Кэширование состояния выбора показателей.
Форма.ОсновнойПоказатель = ТекущаяКоманда;
Форма.РазвернутьОбластьПоказателей = Элементы.РассчитатьВсеПоказатели.Пометка;
КонецПроцедуры
// Управляет признаком видимости панели расчетных показателей.
//
// Параметры:
// Видимость - Булево - Признак включения / выключения видимости панели показателей.
// См. также Синтакс-помощник: ГруппаФормы.Видимость.
//
Процедура УстановитьВидимостьПанелиПоказателей(ЭлементыФормы, Видимость = Ложь) Экспорт
ЭлементыФормы.ОбластьПоказателей.Видимость = Видимость;
ИзменитьСвойствоЭлементаРасчетаПоказателей(ЭлементыФормы, "РассчитатьВсеПоказатели", "Пометка", Видимость);
КонецПроцедуры
#КонецОбласти
@@ -503,7 +529,7 @@
|по причине:
|Метод НачатьПодключениеВнешнейКомпоненты вернул Ложь.'"),
Контекст.Идентификатор,
ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение));
Контекст.Местоположение);
ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст);
КонецЕсли;
@@ -554,7 +580,7 @@
|по причине:
|%3'"),
Контекст.Идентификатор,
ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение),
Контекст.Местоположение,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ПодключитьКомпонентуОповеститьОбОшибке(ТекстОшибки, Контекст);
@@ -586,7 +612,7 @@
|по причине:
|%3'"),
Контекст.Идентификатор,
ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение),
Контекст.Местоположение,
ТекстОшибки);
КонецЕсли;
@@ -615,7 +641,7 @@
|%4'"),
ИдентификаторОбъекта,
Контекст.Идентификатор,
ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение),
Контекст.Местоположение,
ТекстОшибки);
КонецЕсли;
@@ -644,19 +670,6 @@
КонецФункции
// Продолжение процедуры ПодключитьКомпоненту.
Функция ПредставлениеМестоположенияКомпоненты(Местоположение)
Если СтрНачинаетсяС(Местоположение, "e1cib/") Тогда
Возврат НСтр("ru = 'из хранилища внешних компонент'");
Иначе
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'из макета ""%1""'"),
Местоположение);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область УстановкаВнешнейКомпоненты
@@ -709,7 +722,7 @@
|по причине:
|%3'"),
Контекст.Идентификатор,
ПредставлениеМестоположенияКомпоненты(Контекст.Местоположение),
Контекст.Местоположение,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Результат = РезультатУстановкиКомпоненты();
@@ -894,8 +907,8 @@
КонецЕсли;
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Регистрация компоненты comcntr'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
"Ошибка",
НСтр("ru = 'Регистрация компоненты comcntr'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
"Ошибка",
ТекстСообщения,,
Истина);
@@ -948,6 +961,147 @@
#КонецОбласти
#Область ТабличныйДокумент
Функция ТекущаяКомандаРасчетаПоказателей(ЭлементыФормы)
Перем ТекущаяКоманда;
КомандыПоказателей = КомандыПоказателей();
Для Каждого Команда Из КомандыПоказателей Цикл
Если ЭлементыФормы[Команда.Ключ].Пометка Тогда
ТекущаяКоманда = Команда.Ключ;
Прервать;
КонецЕсли;
КонецЦикла;
Если ТекущаяКоманда = Неопределено Тогда
ТекущаяКоманда = "РассчитатьСумму";
КонецЕсли;
Возврат ТекущаяКоманда;
КонецФункции
// Определяет соответствие между командами расчета показателей и показателями.
//
// Возвращаемое значение:
// Соответствие - Ключ - имя команды, Значение - имя показателя.
//
Функция КомандыПоказателей()
КомандыПоказателей = Новый Соответствие();
КомандыПоказателей.Вставить("РассчитатьСумму", "Сумма");
КомандыПоказателей.Вставить("РассчитатьКоличество", "Количество");
КомандыПоказателей.Вставить("РассчитатьСреднее", "Среднее");
КомандыПоказателей.Вставить("РассчитатьМинимум", "Минимум");
КомандыПоказателей.Вставить("РассчитатьМаксимум", "Максимум");
Возврат КомандыПоказателей;
КонецФункции
// Формирует описание выделенных областей табличного документа.
//
// Параметры:
// ТабличныйДокумент - ТабличныйДокумент - документ, значения ячеек которого участвуют в расчете.
//
// Возвращаемое значение:
// Структура - содержит:
// * ВыделенныеОбласти - Массив - содержит структуры со свойствами:
// * Верх - Число - Номер строки верхней границы области.
// * Низ - Число - Номер строки нижней границы области.
// * Лево - Число - Номер колонки верхней границы области.
// * Право - Число - Номер колонки нижней границы области.
// * ТипОбласти - ТипОбластиЯчеекТабличногоДокумента - Колонки, Прямоугольник, Строки, Таблица.
// * РассчитатьНаСервере - Булево - признак того, что расчет должен выполняться на сервере.
//
Функция ПараметрыРасчетаПоказателейЯчеек(ТабличныйДокумент)
ПараметрыРасчетаПоказателей = Новый Структура;
ПараметрыРасчетаПоказателей.Вставить("ВыделенныеОбласти", Новый Массив);
ПараметрыРасчетаПоказателей.Вставить("РассчитатьНаСервере", Ложь);
ВыделенныеОбласти = ПараметрыРасчетаПоказателей.ВыделенныеОбласти;
Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл
Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Продолжить;
КонецЕсли;
ГраницыОбласти = Новый Структура("Верх, Низ, Лево, Право, ТипОбласти");
ЗаполнитьЗначенияСвойств(ГраницыОбласти, ВыделеннаяОбласть);
ВыделенныеОбласти.Добавить(ГраницыОбласти);
КонецЦикла;
ВыделеноВсе = Ложь;
Если ВыделенныеОбласти.Количество() = 1 Тогда
ВыделеннаяОбласть = ВыделенныеОбласти[0];
ВыделеноВсе = Не Булево(
ВыделеннаяОбласть.Верх
+ ВыделеннаяОбласть.Низ
+ ВыделеннаяОбласть.Лево
+ ВыделеннаяОбласть.Право);
КонецЕсли;
ПараметрыРасчетаПоказателей.РассчитатьНаСервере = (ВыделеноВсе Или ВыделенныеОбласти.Количество() >= 100);
Возврат ПараметрыРасчетаПоказателей;
КонецФункции
Функция ФорматРедактированияПоказателя(ЗначениеПоказателя)
ШаблонФорматаРедактирования = "ЧДЦ=%1; ЧРГ=' '; ЧН=0";
ЗначениеДробнойЧасти = Макс(ЗначениеПоказателя, -ЗначениеПоказателя) % 1;
РазрядностьДробнойЧасти = Мин(?(ЗначениеДробнойЧасти = 0, 0, СтрДлина(ЗначениеДробнойЧасти) - 2), 5);
ФорматРедактирования = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонФорматаРедактирования, РазрядностьДробнойЧасти);
ПредставлениеПоказателя = Формат(ЗначениеПоказателя, ФорматРедактирования);
Пока РазрядностьДробнойЧасти > 0
И СтрЗаканчиваетсяНа(ПредставлениеПоказателя, "0") Цикл
ПредставлениеПоказателя = Сред(ПредставлениеПоказателя, 1, СтрДлина(ПредставлениеПоказателя) - 1);
РазрядностьДробнойЧасти = РазрядностьДробнойЧасти - 1;
КонецЦикла;
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонФорматаРедактирования, РазрядностьДробнойЧасти);
КонецФункции
Процедура ИзменитьСвойствоЭлементаРасчетаПоказателей(ЭлементыФормы, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства)
СписокИменЭлементов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1, %1%2", ИмяЭлемента, "Еще");
ИменаЭлементов = СтрРазделить(СписокИменЭлементов, ", ", Ложь);
Для Каждого Имя Из ИменаЭлементов Цикл
НайденныйЭлемент = ЭлементыФормы.Найти(Имя);
Если НайденныйЭлемент <> Неопределено Тогда
НайденныйЭлемент[ИмяСвойства] = ЗначениеСвойства;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область УстаревшиеПроцедурыИФункции
#Область РасширениеДляРаботыСФайлами
@@ -962,7 +1116,7 @@
ТекстСообщения = ДополнительныеПараметры.ТекстПредупреждения;
Если ПустаяСтрока(ТекстСообщения) Тогда
ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не установлено расширение для веб-клиента 1С:Предприятие.'")
ТекстСообщения = НСтр("ru = 'Действие недоступно, так как не установлено расширение для работы с 1С:Предприятием.'")
КонецЕсли;
ПоказатьПредупреждение(, ТекстСообщения);