Версия для печати темы (https://pro1c.org.ua/index.php?s=8d6a622f73f4e01e225f3da292a9f52a&showtopic=38910)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Функция СУММАЕСЛИ в 1С 8.2

Автор: Gigi 21.07.17, 16:53

Привет всем!
Написал функцию в 1С для гибкого учета данных.
Эту функцию заимствовал из эксель. Потому, что она очень простая и удобная.
Поэтому решил подобное написать и в 1С. для общего модуле.
Вроде все получилось, только одна проблема.... хочу ее сделать симпатичнее чем так грубо и коряво как и получилось. smile.gifsmile.gif
Ибо вообще на этом форуме примечали, что код написанный мной грубоват. И думаю на самом деле. smile.gifsmile.gif
Поэтому прошу помощи. Помочь в доработке.
Что нужно?
Функция имеет три базовых параметров: Столбец суммирования, искомое значение для поиска и и столбец поиска.
Все это решил адаптировать для 1С. Т.е. уже в 1С реквизит суммирования и текст(Объект) поиска и реквизит поиска.
Просто последние два аргумента нужно в не ограниченном количестве.
А я это не знаю как сделать. Потому, что с массивами слабо дружу.
Поэтому данная функция ограничивается только тремя аргументами объекта поиска и реквизита поиска.
А нужно, что бы можно было любое количество указывать, как в Экселе.
Вот сама функция нуждающаяся в доработке:

//Общий модуль с именем на пример: "Fx_Арифм"
Функция СУММАЕСЛИ_Простой(Конфигурат,КонфигуратЭлемент, РеквизитСУММЫ, значение1, Рекывизит1, значение2, Рекывизит2, значение3, Рекывизит3) Экспорт
//=================================================================
Попытка
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
|"+КонфигуратЭлемент+".Ссылка
|ИЗ
|"+Конфигурат+"."+КонфигуратЭлемент+" КАК "+КонфигуратЭлемент+";";
Исключение    
Возврат "Не корректное указание объекта конфирурации!";    
КонецПопытки;    
//=================================================================    
Выборка = Запрос.Выполнить().Выбрать();    
//=================================================================
знСУММАЕСЛИ=0;
Пока Выборка.Следующий() Цикл
//----------------------------------------------    
знРеквизитаСУММЫ=Выборка.Ссылка[РеквизитСУММЫ];
знРеквизита1=""+Выборка.Ссылка[Рекывизит1];
//----------------------------------------------
Если значение2=Неопределено и Рекывизит2=Неопределено тогда
УсловиеСУММЫ=(знРеквизита1=значение1)
Иначе
знРеквизита2=""+Выборка.Ссылка[Рекывизит2];
УсловиеСУММЫ=(знРеквизита1=значение1 и знРеквизита2=значение2);
КонецЕсли;
Если значение3=Неопределено и Рекывизит3=Неопределено тогда
УсловиеСУММЫ=(знРеквизита1=значение1 и знРеквизита2=значение2)
Иначе
знРеквизита3=""+Выборка.Ссылка[Рекывизит3];
УсловиеСУММЫ=(знРеквизита1=значение1 и знРеквизита2=значение2 и знРеквизита3=значение3);
КонецЕсли;
//----------------------------------------------
Если УсловиеСУММЫ тогда
знСУММАЕСЛИ=знСУММАЕСЛИ+(знРеквизитаСУММЫ*1);
КонецЕсли;
//----------------------------------------------
КонецЦикла;     
//=================================================================    
Возврат знСУММАЕСЛИ;    
КонецФункции

//А это вызов функции с клиента:

&НаКлиенте
Процедура Кнопка_СуммаПоСчетам(Команда)
НачисленоРуб_Итого=Fx_Арифм.СУММАЕСЛИ_Простой("Документ","Счета", "СуммаНачисленоРуб", Объект.Ссылка, "ОбъектСчета", ,, ,);
Предупреждение(НачисленоРуб_Итого);
КонецПроцедуры


Уважаемые СПЕЦИАЛИСТЫ!!!! ТУТ УЖ ТОЧНО НУЖНА ВАША ПОМОЧЬ! smile.gifsmile.gif
Буду признателен!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua