Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

ЗаполнитьЗначенияСвойств() при работе с ТЗ

ЗаполнитьЗначенияСвойств() при работе с ТЗ
Я
   2S
 
11.11.18 - 23:37
Откройте глаза на проблему
Кусок кода
        Для Каждого СтрокаПоказателей Из СтрокиНачисления Цикл
            Если СтрокаПоказателей.Показатели.Количество() = 0 Тогда
                ТекущийПроцентСН = 0;
            Иначе    
                ТекущийПроцентСН = СтрокаПоказателей.Показатели[0].Значение;
            КонецЕсли;    
            
            НовоеНачисление = Начисления.Добавить();
            
            ЗаполнитьЗначенияСвойств(НовоеНачисление, СтрокаПоказателей);
            НовоеНачисление.ИдентификаторСтроки = СледующийИдентификатор;
            НовоеНачисление.Категория = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ПовременнаяОплатаТруда;
            НовоеНачисление.Начисление = ПерсональнаяНадбавка;
            
            НовоеНачисление.Показатели[0].ИдентификаторСтроки = СледующийИдентификатор;
            НовоеНачисление.Показатели[0].Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Персональная надбавка", Истина);

У ТЗ источника есть поле с типом ТаблицаЗначений, называется "Показатели". Казалось бы добавил новую строку, заполним данными от донора. Но почему-то две последние строки кода также меняют значение и в ТЗ источнике. ЗаполнитьЗначенияСвойств() ссылку тоже что ли передает?
 
 
   Полбатона
 
1 - 11.11.18 - 23:43
а где ты в НовоеНачисление.Показатели строку добавляешь?
   Casey1984
 
2 - 11.11.18 - 23:46
(0) Потому что ТЗ надо копировать (читай создавать) и присваивать, а не просто присваивать.
   2S
 
3 - 11.11.18 - 23:48
(1)
и так было
            НовыйПоказатель = НовоеНачисление.Показатели.Добавить();
            НовыйПоказатель.ИдентификаторСтроки = СледующийИдентификатор;
            НовыйПоказатель.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Персональная надбавка", Истина);

Добавляет и в Источник
   2S
 
4 - 11.11.18 - 23:50
(2) ТЗ уже есть, задача добавить новые строки. Уже и копию ТЗ создал, чтобы с него читать, а писать в основное, та же херня
   Casey1984
 
5 - 11.11.18 - 23:51
(4) Покажи как создавал?)
   Полбатона
 
6 - 11.11.18 - 23:53
обожаю, когда топикстартер чего-то недоговаривает или как всегда забывает скопировать кусок кода.
 Для Каждого СтрокаПоказателей Из СтрокиНачисления Цикл
НовоеНачисление = Начисления.Добавить();
            
            ЗаполнитьЗначенияСвойств(НовоеНачисление, СтрокаПоказателей);

Для Каждого табСтрокаПоказателей из СтрокаПоказателей Цикл
НовыйПоказатель = НовоеНачисление.Показатели.Добавить();
 ЗаполнитьЗначенияСвойств(НовыйПоказатель , табСтрокаПоказателей );


КонецЦикла

КонецЦикла;
   Casey1984
 
7 - 11.11.18 - 23:53
(4) У тебя вот тут вот что думаешь с ТЗ происходит?
   Полбатона
 
8 - 11.11.18 - 23:54
(6) сорян 
Для Каждого табСтрокаПоказателей из СтрокаПоказателей.Показатели Цикл
   2S
 
9 - 11.11.18 - 23:54
(6) ок )
    //1. удалим текущие строки персональной надбавки, т.к. записи должны быть привязаны только к СН. Сколько записей СН, столько и ПН

    //2. Заполним показатели относительно регистра соответствий шкал

    
    ПерсональнаяНадбавка = ПланыВидовРасчета.Начисления.НайтиПоКоду("ПН");
    СевернаяНадбавка = ПланыВидовРасчета.Начисления.НайтиПоКоду("СН");
    
    СтрокиНачисленияПерсональнойНадбавки = Начисления.НайтиСтроки(Новый Структура("Начисление", ПерсональнаяНадбавка));
    
    СледующийИдентификатор = Начисления[Начисления.Количество() - 1].ИдентификаторСтроки + 1;
    Если СтрокиНачисленияПерсональнойНадбавки.Количество() > 0 Тогда
        //1.

        Для Каждого Строка Из СтрокиНачисленияПерсональнойНадбавки Цикл
            Начисления.Удалить(Строка);
        КонецЦикла;
        
        //2.

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

            //НовыйПоказатель = НовоеНачисление.Показатели.Добавить();

            НовоеНачисление.Показатели[0].ИдентификаторСтроки = СледующийИдентификатор;
            НовоеНачисление.Показатели[0].Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Персональная надбавка", Истина);
                    
            Запрос = Новый Запрос;
            Запрос.Текст = 
                "ВЫБРАТЬ
                |    ШкалаПерсональныхНадбавок.ПроцентПерсональнойНадбавки КАК ПроцентПерсональнойНадбавки
                |ИЗ
                |    РегистрСведений.ШкалаПерсональныхНадбавок КАК ШкалаПерсональныхНадбавок
                |ГДЕ
                |    ШкалаПерсональныхНадбавок.ПроцентСевернойНадбавки = &ПроцентСевернойНадбавки";
            
            Запрос.УстановитьПараметр("ПроцентСевернойНадбавки", ТекущийПроцентСН);
            РезультатЗапросаВыборка = Запрос.Выполнить().Выбрать();
            Если РезультатЗапросаВыборка.Следующий() Тогда
                НовоеНачисление.Показатели[0].Значение = РезультатЗапросаВыборка.ПроцентПерсональнойНадбавки;
            Иначе    
                НовоеНачисление.Показатели[0].Значение = 0;
            КонецЕсли;
            СледующийИдентификатор = СледующийИдентификатор + 1;
        КонецЦикла;
    КонецЕсли;
   Casey1984
 
10 - 11.11.18 - 23:54
(7) -> ЗаполнитьЗначенияСвойств(НовоеНачисление, СтрокаПоказателей);
 
 Рекламное место пустует
   Casey1984
 
11 - 11.11.18 - 23:57
(9) и тут я не вижу откуда у тебя строка появилась... НовоеНачисление.Показатели[0] ?
   2S
 
12 - 11.11.18 - 23:58
(9) Строку ЗаполнитьЗначенияСвойств(НовоеНачисление, СтрокаПоказателей); видите?
А она там есть ) случайно удалил,
   2S
 
13 - 11.11.18 - 23:59
(11) вот это меня и смущает, 
после ЗаполнитьЗначенияСвойств(НовоеНачисление, СтрокаПоказателей); она уже есть
Ощущение, что со ссылкой работаю
   Casey1984
 
14 - 11.11.18 - 23:59
(12) так вот она все и портит. сделай Показатели = Новый ТаблицаЗначений
   Casey1984
 
15 - 11.11.18 - 23:59
(13) да! все, я спать)
   Casey1984
 
16 - 12.11.18 - 00:02
(13) ты же объект присваиваешь, с чего он новый будет?) доброй ночи)
   2S
 
17 - 12.11.18 - 00:02
(15) тьфу млин, туплю на ночь , спасибо
   МимохожийОднако
 
18 - 12.11.18 - 07:22
Для остроты восприятия всегда помогает отладчик.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует