Имя: Пароль:
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
    ...

Как далеко прогресс шагнул, раньше думать надо было.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший