Версия для печати темы (https://pro1c.org.ua/index.php?s=3b9e86567ef72dcf596a95bbdcd260c6&showtopic=53739)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Программное копирование строки ТЧ (разбивка по кол-ву)

Автор: Constantus 22.08.19, 14:17

Приветствую, Форумчане!
1с8.3.12, самопис, БСП, УФ

Имеется некий документ. В ТЧ документа есть некоторые записи, где кол-во >1.
Требуется обработкой разбить строки ТЧ, у которых кол-во больше 1 на нужное кол-во строк.

Например:
Товар 1, 34.56 денег, 5 штук... Реквизиты1, Реквизиты2,Реквизиты3

Получить:

Товар 1, 34.56 денег, 1 штук... Реквизиты1, Реквизиты2,Реквизиты3
Товар 1, 34.56 денег, 1 штук... Реквизиты1, Реквизиты2,Реквизиты3
Товар 1, 34.56 денег, 1 штук... Реквизиты1, Реквизиты2,Реквизиты3
Товар 1, 34.56 денег, 1 штук... Реквизиты1, Реквизиты2,Реквизиты3
Товар 1, 34.56 денег, 1 штук... Реквизиты1, Реквизиты2,Реквизиты3

Потом сохранить и провести документ.

Вроде есть функционал, но никак не могу сообразить как изменить кол-во у первой записи на "1", а далее добавить строки с такими-же реквизитами, только с кол-вом "1"


Попробовал:

&НаКлиенте
Процедура РазбивкаПоКолву(Команда)
    // Вставить содержимое обработчика.
    
    Для Каждого СТР из Объект.Состав Цикл
        
        Если СТР.Количество > 1 Тогда
            
        Для Счетчик = 1 По СТР.Количество Цикл
                
            НоваяСтрока = Объект.Состав.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока,СТР);
            НоваяСтрока.Количество = 1;
        КонецЦикла;    
            
        КонецЕсли;    
        
        
        
    КонецЦикла;


Но в текущей строке, где обнаружено большее количество, значение не поменяла на "1"


Автор: sava1 22.08.19, 14:22

тз = Товары.Выгрузить();
тв = Товары.ВыгрузитьКолонки();

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

Товарі.Загрузить(тв);

Автор: Constantus 22.08.19, 15:05

Все сработало. Спасибо, разобрался...

Странная ситуация возникла. При программном добавлении строк в ТЧ, форма не показала модифицированность.

Поэтому, если после выполнения операции изменения ТЧ, форму закрыть, то изменений в ТЧ никаких, т.е. данные не сохранены.

Почему после изменения ТЧ програмным методом 1с не понял, что нужно сохранять данные?


sava1 @ Сегодня, 18:22 * ,

У меня кнопка в ТЧ висит. Попробовал Ваш код, но говорит, что недопустимо использовать на Клиенте.
Попробовал на Сервере - вообще тишина...

Автор: Petre 22.08.19, 15:33

Constantus @ Today, 15:05 * ,
В тонком клиенте ТЗ не доступна.

Автор: Constantus 22.08.19, 15:42

Поставил после кода:

ЭтаФорма.Модифицированность = Истина;

Тогда встала (*) на документе.

Но я этот код планирую задействовать не на форме документа, а в обработке. Там формы документа не будет, а нужно будет записывать программно, а модифицированности нет. Как быть, если этот код уду использовать в обработке при обращении к объекту документа?

Автор: Petre 22.08.19, 16:45

Constantus @ Today, 15:42 * ,
Никак не быть. Перепишите код с обращением к объекту, а не к его форме или к его данным формы.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua