Имя: Пароль:
1C
1С v8
ЗУП 3. Сохранение объекта плана видов расчета.
0 Target1025
 
09.12.19
07:52
В расчетных листках не проставляется показатель процента северной надбавки т.к. в таблице Показатели объекта видов расчета не нет строки, где ОсновнойПоказатель = Истина. К примеру в РК есть такая строка, в СН - нет.
Пытаясь откорректировать лично, я столкнулся с тем, что не понимаю, почему объект плана видов расчета не хочет сохраняться:

&НаСервереБезКонтекста
Процедура сделатьНаСервере()
    Выборка = ПланыВидовРасчета.Начисления.Выбрать();
    Пока Выборка.Следующий() Цикл
        Если (""+Выборка = "Северная надбавка")Тогда
            Если Сокрлп(Выборка.Код) = "СН" Тогда
                Объектик = Выборка.ПолучитьОбъект();
                Сообщить(Объектик.Показатели[1].ОсновнойПоказатель);
                Объектик.Показатели[1].ОсновнойПоказатель = Истина;
                Сообщить(Объектик.Показатели[1].ОсновнойПоказатель);
                Объектик.Записать();
                Сообщить(Объектик.Показатели[1].ОсновнойПоказатель);
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
    
    // Вставить содержимое обработчика.
КонецПроцедуры

&НаКлиенте
Процедура сделать(Команда)
    сделатьНаСервере();
КонецПроцедуры

вывод:
Нет (это до начала корректировки)
Да (это после корректировки, но до сохранения)
Нет (это после сохранения, показатель снова становится Ложь)
1 2S
 
09.12.19
08:30
зачем темы плодить?
2 Target1025
 
09.12.19
08:31
(1) Это уже другая тема с другим совершенно вопросом. Она пересекается с прошлой темой, да, но вопрос уже другой.
3 2S
 
09.12.19
08:35
(2) мы пошли другим путем - написали свою расчетку, где РК и СН выведены в колонки с выводом показателей.
4 Target1025
 
09.12.19
09:17
(3) Тоже неплохо.
===
(0) Объект сохранялся, просто показатель "переписывался" в момент сохранения.
В Процедура ЗаполнитьИнформациюОПоказателяхВидаРасчета(ВидРасчетаОбъект) Экспорт общего модуля РасчетЗарплатыРасширенный есть такой цикл:
    СтрокиПоказателей = Новый Массив;
    Для Каждого СтрокаПоказателя Из ВидРасчетаОбъект.Показатели Цикл
        // Для начала все строки не основные.
        СтрокаПоказателя.ОсновнойПоказатель = Ложь;
        // Получаем сведения о показателе.
        СведенияОПоказателе = СведенияОПоказателях[СтрокаПоказателя.Показатель];
        Если СведенияОПоказателе <> Неопределено Тогда
            // Собираем не автоматически рассчитываемые показатели.
            Если (Не СведенияОПоказателе.ЗначениеРассчитываетсяАвтоматически
                И СведенияОПоказателе.НазначениеПоказателя = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника) Тогда
                СтрокиПоказателей.Добавить(СтрокаПоказателя);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
Он перебором очищает все показатели, проставляя ему Ложь и тут же показатели и только те, что НЕ имеют признак "ЗначениеРассчитываетсяАвтоматически" попадают в массив СтрокиПоказателей.
Следующим циклом он из отобранных, по своим алгоритмам подбирает ОсновнойПоказатель и ему ставит признак Истина. Т.к. РК имеет признак ЗначениеРассчитываетсяАвтоматически = Ложь, то он попадает в список строк, а СН имеет признак ЗначениеРассчитываетсяАвтоматически = Истина и не попадает.
Временной поправкой кода в стиле -             
Если (Не СведенияОПоказателе.ЗначениеРассчитываетсяАвтоматически
                И СведенияОПоказателе.НазначениеПоказателя = Перечисления.НазначенияПоказателейРасчетаЗарплаты.ДляСотрудника) или
                (СведенияОПоказателе.Наименование = "Северная надбавка") Тогда
можно добиться попадания СН  в список строк с последующей простановкой показания Истина в ОсновнойПоказатель. Далее можно базу вернуть на поддержку, т.к. вид расчета уже будет сохранен.

С этого момента в расчетный листок начинает попадать показатель СН. Какие неожиданные эффекты могут вылезти в других местах - я пока что не знаю. :)
5 Target1025
 
09.12.19
12:45
Нашел более точное место имплементации изменений:
Общий модуль , процедура ДополнитьТекстЗапросаНачисленияУдержанияЗначениямиПоказателей(ТекстЗапроса)
запрос
                |ПОМЕСТИТЬ ВТПоказателиНачисленийПредварительно
                |ИЗ
                |    ВТСотрудникиМесяцы КАК СотрудникиМесяцы
                |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.Начисления КАК Начисления
                |            ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.Показатели КАК НачисленияПоказатели
                |            ПО Начисления.ВидРасчета = НачисленияПоказатели.Ссылка
                |                И (НачисленияПоказатели.ОсновнойПоказатель)

правим на

                |ПОМЕСТИТЬ ВТПоказателиНачисленийПредварительно
                |ИЗ
                |    ВТСотрудникиМесяцы КАК СотрудникиМесяцы
                |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.Начисления КАК Начисления
                |            ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.Показатели КАК НачисленияПоказатели
                |            ПО Начисления.ВидРасчета = НачисленияПоказатели.Ссылка
                |                И (НачисленияПоказатели.ОсновнойПоказатель
                |                    ИЛИ НачисленияПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.СевернаяНадбавка))

Но придется снять с поддержки конфигурацию.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший