Имя: Пароль:
1C
1С v8
ДанныеФормаКоллекция. ЗУП.
0 Target1025
 
11.06.21
12:55
Вызывается внешняя дополнительная обработка табличной части документа Премия, которая должна распихать результаты расчета в таблицу НАчисления, а распределение по долям по территориями в таблицу РаспределениеПоТерриториямУсловиямТруда. Код такой:

        ПремияОбъект = ВладелецФормы.Объект;
        Для Каждого Стр из ПремияОбъект.Начисления Цикл
            Стр.Результат = МассивДанных[Стр.НомерСтроки-1];
            НомерТекСтроки = Стр.номерСтроки;
            Отбор = новый Структура;
            Строки = ПремияОбъект.РаспределениеПоТерриториямУсловиямТруда.НайтиСтроки(Отбор);
            Если Строки.Количество() > 0 Тогда
                МаксДоля = 0;
                МаксРяд = 0;
                Итог = 0;
                Для Каждого Стр2 Из Строки Цикл
                    Стр2.результат = МассивДанных[Стр.НомерСтроки-1]*Стр2.ДоляРаспределения;
                    Итог = Итог + Стр2.результат;
                    Если МаксДоля < Стр2.ДоляРаспределения Тогда
                        МаксДоля = Стр2.ДоляРаспределения;
                        МаксРяд = Стр2;
                    КонецЕсли;    
                КонецЦикла;    
                Дельта = Стр.Результат - Итог;
                МаксРяд.Результат = МаксРяд.Результат + Дельта;
                Сообщить("Максряд = "+ МаксРяд.Результат);
            КонецЕсли;    
        Конеццикла;    


Начисления заполняется, а вот РаспределениеПоТерриториямУсловиямТруда уже - нет. Сообщить("Максряд = "+ МаксРяд.Результат) = всегда равно нулю, как и остальные значения таблицы. Может кто-то ошибку видит в работе с данными формы?
1 Momus
 
11.06.21
13:22
Отбор = новый Структура;
Строки = ПремияОбъект.РаспределениеПоТерриториямУсловиямТруда.НайтиСтроки(Отбор);
Хороший отбор
2 Target1025
 
11.06.21
13:23
(0)(1) Там в коде строка с заполнением отбора пропущена.
        ПремияОбъект = ВладелецФормы.Объект;
        Для Каждого Стр из ПремияОбъект.Начисления Цикл
            Стр.Результат = МассивДанных[Стр.НомерСтроки-1];
            НомерТекСтроки = Стр.номерСтроки;
            Отбор = новый Структура;
            Сообщить("НомерТекСтроки = "+НомерТекСтроки );
            Отбор.Вставить("ИдентификаторСтроки",НомерТекСтроки);
            Строки = ПремияОбъект.РаспределениеПоТерриториямУсловиямТруда.НайтиСтроки(Отбор);
            Если Строки.Количество() > 0 Тогда
                МаксДоля = 0;
                МаксРяд = 0;
                Итог = 0;
                Для Каждого Стр2 Из Строки Цикл
                    Сообщить("1. Стр2.результат = " + Стр2.результат);
                    Стр2.результат = МассивДанных[Стр.НомерСтроки-1]*Стр2.ДоляРаспределения;
                    Итог = Итог + Стр2.результат;
                    Если МаксДоля < Стр2.ДоляРаспределения Тогда
                        МаксДоля = Стр2.ДоляРаспределения;
                        МаксРяд = Стр2;
                    КонецЕсли;    
                    Сообщить("2. Стр2.результат = " + Стр2.результат);
                КонецЦикла;    
                Дельта = Стр.Результат - Итог;
                Сообщить("Дельта = " + Дельта );
                МаксРяд.Результат = МаксРяд.Результат + Дельта;
                Сообщить("Максряд.результат = "+ МаксРяд.Результат);
            КонецЕсли;    
        Конеццикла;    
        ВладелецФормы.Записать();

Вывод проги (данные левые):

НомерТекСтроки = 1
1. Стр2.результат = 0
2. Стр2.результат = 3 051
Дельта = 0
Максряд.результат = 3 051 // тут распределять не надо, доля = 1
НомерТекСтроки = 2
1. Стр2.результат = 0
2. Стр2.результат = 4 616,86
1. Стр2.результат = 0
2. Стр2.результат = 12 696,14
Дельта = 0
Максряд.результат = 12 696,14 // распределил, сделал корректировку копеек самой большой доли

Ну и как бы на этом все! Если таблица начислений заполнена, то вот таблица РаспределениеПоТерриториямУсловиямТруда имеет нулевые значения (если смотреть из одкумента).
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн