Имя: Пароль:
1C
1С v8
Автоматическая подстановка данных 8.3
0 cesaku
 
29.09.21
10:48
Всем привет.
Суть проблемы: имеется документ НачисленияСотрудникам с табличной частью Начисления с реквизитами: Сотрудник (СправочникСсылка.Сотрудники), Должность (СправочникСсылка.Должность), Оклад (число), Премия (число). Так же имеется оборотный регистр накопления Продажи с измерением Бариста (СправочникСсылка.Сотрудники) и ресурс Стоимость (число).
Что нужно сделать: при выборе сотрудника в табличной части должна проставляться сумма ресурса Стоимость в реквизит Премия в том случае, если его должность Бариста, если кто-то другой, то в Премию проставляется 0.
1 acht
 
29.09.21
10:51
Какая часть непонятна?
2 cesaku
 
29.09.21
11:00
Не понятно как именно вытащить сумму ресурса Стоимость для конкретного баристы.
3 mikecool
 
29.09.21
11:03
(2) запросом
4 acht
 
29.09.21
11:05
(2) Необходимо написать запрос к виртуальной таблице оборотов регистра, задав в параметрах таблицы отбор по значению измерения. Или воспользоваться объектным механизмом - использовать метод Обороты менеджера регистра. Подробности - в синтакс помощнике.
5 cesaku
 
29.09.21
11:07
(4) Хорошо, сейчас попробую.
6 Ненавижу 1С
 
гуру
29.09.21
11:14
(0) это курсовая про барист?
7 cesaku
 
29.09.21
11:16
(6) Почти, тему диплома взял из практики с 3 курса :)
8 cesaku
 
29.09.21
11:19
(4) На сколько понимаю, так должно получиться?
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СУММА(ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0)) КАК СтоимостьОборот
        |ИЗ
        |    РегистрНакопления.Продажи.Обороты(, , , Бариста = &Бариста) КАК ПродажиОбороты
        |ГДЕ
        |    ПродажиОбороты.Бариста.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Бариста", Сотрудник);
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Если Выборка.Следующий() Тогда
        СуммаПродаж = Выборка.СтоимостьОборот;
        Если СуммаПродаж = 0 Тогда
            Премия = 0;
        Иначе
            Премия = СуммаПродаж / 100 * 10;
        КонецЕсли;
        Возврат Премия;
    КонецЕсли;
9 acht
 
29.09.21
11:32
(8) > |ГДЕ ПродажиОбороты.Бариста.Ссылка = &Ссылка";
>...
> Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

Что это значит в терминах предметной области?

> Если Выборка.Следующий() Тогда
> ...

Если Выборка.Следующий() Тогда
    Возврат Выборка.СтоимостьОборот / 100 * 10;
КонецЕсли;

Возврат 0;
10 cesaku
 
29.09.21
11:40
(9) Если вы говорите про деление на 100 и умножение, то я из данной функции вытаскиваю 10% от ресурса (решил установить премию - 10% от продаж).
11 acht
 
29.09.21
11:40
(10) Я всего лишь оптимизировал твой код.
12 cesaku
 
29.09.21
11:44
(11) Я понял это. Я говорю про ваше замечание "Что это значит в терминах предметной области?".
Кстати, не знаете почему Выборка передается пустая (хотя не должна, даже нуля нет)? Из-за этого ругается на невозможность преобразования к типу Число.
13 acht
 
29.09.21
11:49
(12) Фрагмент кода:

>|ГДЕ ПродажиОбороты.Бариста.Ссылка = &Ссылка";
>...
> Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

Расскажи, что ты пытаешся сделать этим. В терминах предметной области - сотрудники/баристы/деньги/документы и т.п.
14 acht
 
29.09.21
11:49
Выборка пустая потому что у тебя нет данных
15 acht
 
29.09.21
11:50
Вернее потому что у тебя запрос написан так, что он не возвращает данные
16 cesaku
 
29.09.21
11:52
(13) Я пытаюсь тут обратиться к конкретному Баристе, используя реквизит Ссылка. Нужно мне это для того, чтобы, при выборе в документе НачисленияСотрудникам конкретного баристы, премия проставлялась именно его, а не чья-то другая.
17 cesaku
 
29.09.21
11:53
(15) Тогда можете помочь в исправлении запроса, если вам не тяжело?
18 acht
 
29.09.21
12:10
(17) Нет. Я хочу чтобы ты понял, что где используешь.

К конкретному баристе ты уже обратился, когда установил по нему фильтр.
Что такое у тебя Объект и что ты пытаешся сделать наложением дополнительного отбора по значению Объект.Ссылка?
19 cesaku
 
29.09.21
12:14
(18) Да, понял, зря обращался. Все заработало, спасибо большое за помощь.
20 Anton1307
 
29.09.21
17:55
>>> Не понятно как именно вытащить сумму ресурса Стоимость для конкретного баристы

Результат = СУММА(КонкретныйБариста.Стоимость)

Не благодари.
21 acht
 
29.09.21
23:24
(7) > тему диплома

А, то есть сейчас дипломы вот так вот пишутся, да?
    https://forum.infostart.ru/forum9/topic269905/
    https://forum.infostart.ru/forum9/topic269890/
    https://www.cyberforum.ru/1c-standard/thread2877065.html
    Автоматическая подстановка данных 8.3
    ...

Как далеко прогресс шагнул, раньше думать надо было.