![]() |
|
ут 11.4 перенос команды на форму отчета | ☑ | ||
---|---|---|---|---|
0
saradip
03.10.22
✎
14:51
|
Приветствую! Прошу помочь профи! Хочу перенести функцию для подсчета выделенных строк в отчете Валовая прибыль предприятия!
Нашел код в конфигураторе: ОбщаяФорма.ПоказателиВыделенныхЯчеек Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Параметры: // Если передан параметр Расчет, то параметры ТабличныйДокумент и ВыделенныеОбласти не используются. // Расчет - Структура - Результат функции СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(). // ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. // ВыделенныеОбласти - Массив - Области документа, которые требуется рассчитать. // См. возвращаемое значение функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти(). Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Расчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Расчет"); Если ТипЗнч(Расчет) <> Тип("Структура") Тогда Расчет = СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(Параметры.ТабличныйДокумент, Параметры.ВыделенныеОбласти); КонецЕсли; ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); РазрядностьЧисел = Макс(0, Разрядность(Сумма), Разрядность(Минимум), Разрядность(Максимум)); РазрядностьСреднего = Макс(РазрядностьЧисел, Разрядность(Среднее)); ФорматЧисел = "ЧДЦ=" + Строка(РазрядностьЧисел) + "; ЧН=0"; Элементы.Сумма.ФорматРедактирования = ФорматЧисел; Элементы.Минимум.ФорматРедактирования = ФорматЧисел; Элементы.Максимум.ФорматРедактирования = ФорматЧисел; Элементы.Среднее.ФорматРедактирования = "ЧДЦ=" + Строка(РазрядностьСреднего) + "; ЧН=0"; Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Закрыть", "Видимость", Ложь); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Справка", "ТолькоВоВсехДействиях", Истина); КонецЕсли; КонецПроцедуры #КонецОбласти И ОбщийМодуль.СтандартныеПодсистемыКлиентСервер Функция РасчетЯчеек(ТабличныйДокумент, ВыделенныеОбласти) Экспорт Результат = Новый Структура; Результат.Вставить("Количество", 0); Результат.Вставить("КоличествоНеПустых", 0); Результат.Вставить("КоличествоЧисловых", 0); Результат.Вставить("Сумма", 0); Результат.Вставить("Среднее", 0); Результат.Вставить("Минимум", Неопределено); Результат.Вставить("Максимум", Неопределено); Результат.Вставить("НуженВызовСервера", Ложь); Если ВыделенныеОбласти = Неопределено Тогда #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ВызватьИсключение НСтр("ru = 'Не указано значение параметра ""ВыделенныеОбласти"".'"); #Иначе ВыделенныеОбласти = ТабличныйДокумент.ВыделенныеОбласти; #КонецЕсли КонецЕсли; ПроверенныеЯчейки = Новый Соответствие; Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") И ТипЗнч(ВыделеннаяОбласть) <> Тип("Структура") Тогда Продолжить; КонецЕсли; ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Верх; ВыделеннаяОбластьНиз = ВыделеннаяОбласть.Низ; ВыделеннаяОбластьЛево = ВыделеннаяОбласть.Лево; ВыделеннаяОбластьПраво = ВыделеннаяОбласть.Право; Если ВыделеннаяОбластьВерх = 0 Тогда ВыделеннаяОбластьВерх = 1; КонецЕсли; Если ВыделеннаяОбластьНиз = 0 Тогда ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; КонецЕсли; Если ВыделеннаяОбластьЛево = 0 Тогда ВыделеннаяОбластьЛево = 1; КонецЕсли; Если ВыделеннаяОбластьПраво = 0 Тогда ВыделеннаяОбластьПраво = ТабличныйДокумент.ШиринаТаблицы; КонецЕсли; Если ВыделеннаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда ВыделеннаяОбластьВерх = ВыделеннаяОбласть.Низ; ВыделеннаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; КонецЕсли; ВыделеннаяОбластьВысота = ВыделеннаяОбластьНиз - ВыделеннаяОбластьВерх + 1; ВыделеннаяОбластьШирина = ВыделеннаяОбластьПраво - ВыделеннаяОбластьЛево + 1; Результат.Количество = Результат.Количество + ВыделеннаяОбластьШирина * ВыделеннаяОбластьВысота; #Если Не Сервер И Не ТолстыйКлиентОбычноеПриложение И Не ВнешнееСоединение Тогда Если Результат.Количество >= 1000 Тогда Результат.НуженВызовСервера = Истина; Возврат Результат; КонецЕсли; #КонецЕсли Для НомерКолонки = ВыделеннаяОбластьЛево По ВыделеннаяОбластьПраво Цикл Для НомерСтроки = ВыделеннаяОбластьВерх По ВыделеннаяОбластьНиз Цикл Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); Если ПроверенныеЯчейки.Получить(Ячейка.Имя) = Неопределено Тогда ПроверенныеЯчейки.Вставить(Ячейка.Имя, Истина); Иначе Продолжить; КонецЕсли; Если Ячейка.Видимость = Истина Тогда Если Ячейка.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Колонки И Ячейка.СодержитЗначение И ТипЗнч(Ячейка.Значение) = Тип("Число") Тогда Число = Ячейка.Значение; ИначеЕсли ЗначениеЗаполнено(Ячейка.Текст) Тогда ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); ТекстЯчейки = Ячейка.Текст; Если СтрНачинаетсяС(ТекстЯчейки, "(") И СтрЗаканчиваетсяНа(ТекстЯчейки, ")") Тогда ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "(", ""); ТекстЯчейки = СтрЗаменить(ТекстЯчейки, ")", ""); Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); Если Число > 0 Тогда Число = -Число; КонецЕсли; Иначе Число = ОписаниеТипаЧисло.ПривестиЗначение(ТекстЯчейки); КонецЕсли; Иначе Продолжить; КонецЕсли; Результат.КоличествоНеПустых = Результат.КоличествоНеПустых + 1; Если ТипЗнч(Число) = Тип("Число") Тогда Результат.КоличествоЧисловых = Результат.КоличествоЧисловых + 1; Результат.Сумма = Результат.Сумма + Число; Если Результат.КоличествоЧисловых = 1 Тогда Результат.Минимум = Число; Результат.Максимум = Число; Иначе Результат.Минимум = Мин(Число, Результат.Минимум); Результат.Максимум = Макс(Число, Результат.Максимум); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; Если Результат.КоличествоЧисловых > 0 Тогда Результат.Среднее = Результат.Сумма / Результат.КоличествоЧисловых; КонецЕсли; Возврат Результат; КонецФункции Как этот кусок адаптировать под "свою базу", чтобы можно было из формы отчета вызывать расчет? Как это работает вообще, чтобы на форму добавить команду для вызову такой функции? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |