Имя: Пароль:
1C
 
ЗУП. Новый показатель НормаЧасовЗаПериод. Как всегда плутаю в трёх соснах ТЗ
0 Гена
 
гуру
02.05.26
16:18
Задумал разобраться с премиями за период, например, квартальными. Чтобы использовать новые собственные показатели в любых формулах. Например, НормаЧасовЗаПериод

Есть ТЗ СтрокаНачисления (рис.1)
В ней есть колонка «Показатели»

В цикле перебираю начисления сотрудника и после оклада и РК заходит новое начисление с нужным мне показателем «Норма часов за квартал» (рис. 2)

Как мне присвоить, пусть к примеру, число 100 этому значению (понятно, что пока оно нулевое)?

Когда я пытаюсь тупо:
Если СтрокаНачисления.Показатели[0].Показатель <> Неопределено И СтрокаНачисления.Показатели[0].Показатель = "Норма часов за квартал" Тогда
    СтрокаНачисления.Показатели[0].Значение = 100;    
КонецЕсли;

то программа слетает на первом же начислении у которого нет показателей )
Да и [0] плохо. Надо как-то найти мне строку эту.

Предвосхищая вопросы: да, нет напарника кодера рядом, и давно )
1 Anarki
 
02.05.26
22:41
Ща Гена ответит
2 vicof
 
02.05.26
22:45
Если СтрокаНачисления.Показатели.Количество() > 0 не?
или
Для Каждого Показатель из СтрокаНачисления.Показатели Цикл
3 Anarki
 
02.05.26
22:46
(0) что значит "программа слетает"?
4 Гена
 
гуру
03.05.26
07:31
Благодарю, коллеги, утро вечера мудренее )
Сработал код:
// 1. Обходим таблицу начислений
Для Каждого СтрокаНачисления Из Начисления Цикл
        
// 2. Нам нужна колонка Показатели, но её может и не быть
    Если СтрокаНачисления.Показатели.Количество() > 0 Тогда
        Для Каждого Показатель из СтрокаНачисления.Показатели Цикл
            Если Строка(Показатель.Показатель) = "Норма часов за квартал" Тогда
                Показатель.Значение = 100;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;                              

КонецЦикла;
5 2S
 
03.05.26
17:54
>Если СтрокаНачисления.Показатели.Количество()

Вы уверены, что СтрокаНачисления.Показатели это всегда таблица или массив? А если вдруг Неопределено? Имхо, лучше на тип проверить, а не на количество строк.
6 Гена
 
гуру
03.05.26
19:48
(5) Вроде работает. Пусть, я уже близок к финишу для создания премий за любой премиальный период по доле отработанного времени в нём. Например, кварталки.

Вот тут не пойму.
Табло:
СтрокаНачисления[1].ВидыВремени[0].ВидВремени .... Командировка

СтрокаНачисления[1].ВидыВремени[1].ВидВремени .... Рабочее время

А как пытаюсь выцепить колонку через
СтрокаНачисления.ВидыВремени .... Поле объекта не обнаружено
7 vicof
 
04.05.26
09:54
(4) "Для Каждого Показатель из СтрокаНачисления.Показатели Цикл"
Лучше Показатель заменить на СтрокаПоказатель.
(5) Поддерживаю.
(6) Возможно, кривой код.
Возможно, не у всех начислений есть поле ВидыВремени
8 Гена
 
гуру
04.05.26
10:13
На картинках.
Рис.1 Вот моя здоровенная ТЗ СтрокаНачисления
По строке с индексом 1 вижу свою премию.

Рис.2 Это я сдвинулся далеко вправо до колонки ВидыВремени

Рис.3 Увы, но попасть я могу в эту ячейку только задав индекс (только по строке 1)
СтрокаНачисления[1].ВидыВремени

Грустно так оставлять, ведь в общем случае может не быть строки 1, либо она ляжет под другим номером.

Метод Найти меня посылает в грубой форме )
9 vicof
 
04.05.26
10:28
(8) "Грустно так оставлять, ведь в общем случае может не быть строки 1, либо она ляжет под другим номером."
Как вариант задать приоритет. Сортировать по нему.
В видах времени здесь все красиво должно быть, либо кривой код.
"Метод Найти меня посылает в грубой форме"
Смотря в каком объекте. Как говорит Гена, нужны исходники.
Про показатели на картинках ни слова.

Судя по картинкам, что-то такое должно получиться:
Для Каждого СтрокаВидВремени из СтрокаНачисления.ВидыВремени Цикл
            Если СтрокаВидВремени.ВидВремени = Перечисления.ВидыРабочегоВремениСотрудников.ОтработанноеВПределахНормы Тогда
                СтрокаПоказатель.Значение = 100;
            КонецЕсли;
        КонецЦикла;
10 Гена
 
гуру
04.05.26
10:40
(9) Поле объекта не обнаружено (ВидыВремени)

Я же говорю: не работает СтрокаНачисления.ВидыВремени без индекса в квадратных скобках (
11 Gucci76
 
04.05.26
10:43
А откуда скрины?
Из менеджера расчета ЗП?
Не очень понятно как к этому пришли?
Доработка в расширении? Если да, то может предопределенный показатель расчета сделать, чтобы не по тексту искать?
12 Гена
 
гуру
04.05.26
10:46
А с индексом понятно и ежу, что работает:
Для Каждого СтрокаВидВремени из СтрокаНачисления[1].ВидыВремени Цикл

Ну что, оставлять с единичкой? У кого будет расширение вылетать - сам поправит )
13 Гена
 
гуру
04.05.26
10:54
Ладно. Похоже в языке 1С нет перебора по строкам.
Обрамлю попыткой, пожалуй, и все дела.

Попытка
.....
Исключение
.....
КонецПопытки;

Так вроде обрамляется код попыткой?
14 vicof
 
04.05.26
11:05
(10) Скорей всего ты не у того объекта видывремени смотришь.
Давай базу и говори, где смотреть, посмотрю.
15 Гена
 
гуру
04.05.26
11:10
(14) Зачем базу. Сейчас оформлю в расширение и скину.
Только они у меня почему-то потом только через конфигуратор вносятся. В режиме предприятия никак. Ну и шут с ним )
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.