Имя: Пароль:
1C
1С v8
Как добавить или отнять число от максимального значение в запросе
0 ColonelAp4u
 
11.06.19
11:54
Добрый день уважаемые форумчане, делаю запрос в РС Распределение заработка сотрудников, суть получить % по каждому способу отражения затрат для каждого подразделения. В результате запроса у меня у большинства подразделений итог собирается 100% но есть случаи когда 101 и есть когда 99, так вот нужно к максимальному % в группировке добавить или отнять любую цифру что бы получилось 100%.
ВЫБРАТЬ
    РаспределениеЗаработкаРаботников.ПериодРегистрации,
    СУММА(РаспределениеЗаработкаРаботников.ДоляСпособаОтражения) КАК ОсновнаяДоля,
    СотрудникиОрганизаций.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ ОбщаяДоля
ИЗ
    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗаработкаРаботников КАК РаспределениеЗаработкаРаботников
        ПО СотрудникиОрганизаций.Физлицо = РаспределениеЗаработкаРаботников.Физлицо
ГДЕ
    РаспределениеЗаработкаРаботников.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
    РаспределениеЗаработкаРаботников.ПериодРегистрации,
    СотрудникиОрганизаций.ПодразделениеОрганизации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РаспределениеЗаработкаРаботников.СпособОтраженияВУпрУчете КАК СпособОтражения,
    СУММА(РаспределениеЗаработкаРаботников.ДоляСпособаОтражения) КАК ДоляРаспределения,
    РаспределениеЗаработкаРаботников.ПериодРегистрации,
    СотрудникиОрганизаций.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ ОбщаяПоСпособам
ИЗ
    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗаработкаРаботников КАК РаспределениеЗаработкаРаботников
        ПО СотрудникиОрганизаций.Физлицо = РаспределениеЗаработкаРаботников.Физлицо
ГДЕ
    РаспределениеЗаработкаРаботников.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
    РаспределениеЗаработкаРаботников.СпособОтраженияВУпрУчете,
    РаспределениеЗаработкаРаботников.ПериодРегистрации,
    СотрудникиОрганизаций.ПодразделениеОрганизации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОбщаяДоля.Подразделение КАК Подразделение,
    ОбщаяПоСпособам.СпособОтражения,
    СУММА(ВЫРАЗИТЬ(ОбщаяПоСпособам.ДоляРаспределения * 100 / ОбщаяДоля.ОсновнаяДоля КАК ЧИСЛО(3, 0))) КАК ДоляРаспределенияЗатрат
ИЗ
    ОбщаяДоля КАК ОбщаяДоля
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОбщаяПоСпособам КАК ОбщаяПоСпособам
        ПО ОбщаяДоля.ПериодРегистрации = ОбщаяПоСпособам.ПериодРегистрации
            И ОбщаяДоля.Подразделение = ОбщаяПоСпособам.Подразделение

СГРУППИРОВАТЬ ПО
    ОбщаяДоля.Подразделение,
    ОбщаяПоСпособам.СпособОтражения

УПОРЯДОЧИТЬ ПО
    ОбщаяДоля.Подразделение.Наименование
ИТОГИ ПО
    Подразделение
1 Cyberhawk
 
11.06.19
12:02
С таким подходом к выражению мыслей далеко не уедешь
2 mikecool
 
11.06.19
12:04
(0) правильное максимальное значение - 146%
3 ColonelAp4u
 
11.06.19
12:36
(1) в чем мысль то не понятная?
4 mistеr
 
11.06.19
12:37
(0) Распределение нужно делать в коде, а не в запросе. Для этого есть стандартный метод РаспределитьПропорционально(), забыл в каком модуле.
5 Cyberhawk
 
11.06.19
12:38
(3) Какая?
6 pasha_d
 
11.06.19
13:43
(4) ОбщегоНазначения.РаспределитьПропорционально()
Там три параметра, возвращает массив по-моему. Иногда пользуюсь.
7 RomanYS
 
11.06.19
13:46
(0) А если кто-то вместо процентов введет долю от целого, в сумме будет 1.00. Ты ещё 99 на большего накинешь?
8 АнализДанных
 
11.06.19
13:51
(0) Если я правильно понял, то в запросе можно написать так:

Выбор когда ТвойПоказатель>100 тогда
   100
Иначе
   ТвойПоказатель
Конец
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс