Объединение задвоенных строк в печатной форме

1. hartman620 29.04.18 16:59 Сейчас в теме
Пытаюсь разобраться с методом Свернуть
В типовой конфигурации ЗУП 3.1 в списке документа "Ведомости в кассу" перечисляются сотрудники. Среди этих сотрудников есть те, которые приняты на 2 рабочих места. в этом списке отображается общая сумма"К выплате", но при печати Печатной ведомости Т-53 сотрудники, принятые на 2 рабочих места, задваиваются и сумма к выплате у них дробится.
Да возможно не совсем корректно ведётся учёт, но менять что то категорически запретили.
Суть вопроса:
Создал Внешнюю обработку Платежная ведомость с типовым макетом печатной формы Т-53, там есть ОбластьСтроки. Как правильно методом "свернуть" объединить по строки по ФИО, а сумму к выплате сложить?
Синтаксис помощник подсказывает
Состав.Свернуть("Номенклатура", "Количество, Сумма, Всего");
, но я так подозреваю что провернуть это со строкой в печатной форме нельзя, т.к. меня встречает ошибка
{ВнешняяОбработка.ВПФ.МодульОбъекта(139)}: Метод объекта не обнаружен (Свернуть)
        ОбластьСтроки.Свернуть("ФизЛицо", "Сумма");

Что я делаю не так?

    //ЗаполняемСтроку:
    ОбластьСтроки    =    МакетОбработки.ПолучитьОбласть("Строка");    
    ОбластьИтога    =    МакетОбработки.ПолучитьОбласть("ИтогПоЛисту");
    ОбластьПодвала    =    МакетОбработки.ПолучитьОбласть("Подвал");

    //СсылкаНаОбъект.Состав Новый ТаблицаЗначений;
    //x.Свернуть("ФизическоеЛицо");
    
    Итератор = 0;
    Для Каждого Строка из СсылкаНаОбъект.Зарплата Цикл
        
    //Форматируем код сотрудника:
      КодБезПрефикса    =    Строка.Сотрудник.Код;
       Пока Найти(КодБезПрефикса,"0") <> 1 Цикл
               КодБезПрефикса    =    Сред(КодБезПрефикса,2); //удаляет лидирующие ненули
           КонецЦикла;
           
       КодБезНулей    =    КодБезПрефикса;
       Пока Найти(КодБезНулей,"0") = 1 Цикл
                КодБезНулей    =    Сред(КодБезНулей,2); //удаляет лидирующие нули
            КонецЦикла;
       ОбработанныйКод    =    СтрЗаменить(КодБезНулей,"-","");
    //Код сотрудника отформатирован;
        
        итератор = итератор+1;
        ОбластьСтроки.Параметры.НомерСтроки             =    Итератор;
        ОбластьСтроки.Параметры.ТабельныйНомер         =    ОбработанныйКод;
        ОбластьСтроки.Параметры.ФизЛицо                 =    Строка.ФизическоеЛицо;
        ОбластьСтроки.Параметры.Сумма                 =    Строка.КВыплате;
        ОбластьСтроки.Параметры.ЗаписьОДепонировании =    "";    
        
        ОбластьСтроки.Свернуть("ФизЛицо", "Сумма");
        
        //ДобавляемРазделительСтраниц:
        Проверка = ТабличныйДокумент.ПроверитьВывод(ОбластьСтроки);    
        Если Не Проверка Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ТабличныйДокумент.Вывести(ОбластьШапки);
            КоличествоСтраниц = КоличествоСтраниц+1;
        КонецЕсли;
        //РазделительСтраниц;
        
        Если Итератор = СсылкаНаОбъект.Зарплата.Количество() тогда
            Таб = новый Массив;
            Таб.Добавить(ОбластьСтроки);
            Таб.добавить(ОбластьИтога);
            Таб.Добавить(ОбластьПодвала);
            Проверка = ТабличныйДокумент.ПроверитьВывод(Таб);
            
        Если Не Проверка Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ТабличныйДокумент.Вывести(ОбластьШапки);
            КоличествоСтраниц = КоличествоСтраниц+1;
        КонецЕсли;
    КонецЕсли;
    
    ТабличныйДокумент.Вывести(ОбластьСтроки);

    КонецЦикла;

Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user705522_constantin_h 37 29.04.18 17:20 Сейчас в теме
(1)
//СсылкаНаОбъект.Состав Новый ТаблицаЗначений;
//x.Свернуть("ФизическоеЛицо");

Итератор = 0;
Для Каждого Строка из СсылкаНаОбъект.Зарплата Цикл

Так попробуйте:

    //СсылкаНаОбъект.Состав Новый ТаблицаЗначений;
    //x.Свернуть("ФизическоеЛицо");
    
    СсылкаНаОбъект.Зарплата.Свернуть("ФизическоеЛицо", "КВыплате")
    Итератор = 0;
    Для Каждого Строка из СсылкаНаОбъект.Зарплата Цикл
3. hartman620 29.04.18 17:28 Сейчас в теме
(2)
Уже так пробовал, но увы
{ВнешняяОбработка.ВПФ.МодульОбъекта(113)}: Ошибка при вызове метода контекста (Свернуть)
    СсылкаНаОбъект.Зарплата.Свернуть("ФизическоеЛицо", "КВыплате");
по причине:
Объект недоступен для изменения.
4. user705522_constantin_h 37 29.04.18 17:34 Сейчас в теме
(3)Не сворачивает?
У этого документа сложная структура. В табличной части Состав ФизическиеЛица, а строкам присваивается УникальныйИдентификатор, по которому связываются табличные части Состав, Зарплата, НДФЛ. Может у вас дубли в табличной части Состав?
5. hartman620 29.04.18 18:04 Сейчас в теме
(4)я так понял не сворачивает тк не даёт внести изменение в типовую конфигурацию

Мне кажется возможный алгоритм действий таков:
1. Создать новую таблицу значений;
2. Заполнить её построчно из СсылкаНаОбъект.Зарплата (но тут сразу вопрос - как?);
3. Свернуть. (правда после свертки у меня похерятся порядковые номера "Итератор");
4. В печатную форму вывести таблицу значений (но тоже не представляю как и возможно ли это).

ещё как вариант создать новая табличнаячасть и как то запихать туда строки из СсылкаНаОбъект.Зарплата, затем свернуть её и после этого её вывести на печатную форму, правда это тоже только в голове, тк из-за малоопытности не представляю как это можно было бы реализовать.
Прикрепленные файлы:
6. hartman620 29.04.18 18:32 Сейчас в теме
В принципе есть ещё более простой способ:
при заполнении ОбластьСтроки.Параметры можно обратиться к предыдущей строке и сравнить, в случае равенства уже работать с ними, но тут возникает вопрос как обратиться к этой предыдущей строке и сравнить её с текущей?
7. Xershi 1557 29.04.18 21:45 Сейчас в теме
(6) по индексу. Или через переменную.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот