Имя: Пароль:
1C
1С v8
Копирование документа по порядку строк
0 lirt82
 
23.11.17
11:44
Пишу обработку, алгоритм такой получаю документ и нужно скопировать столько раз сколько количество строк в таб. части, при чем в каждом новом оставлять в таб. части строку по порядковому номеру из документа первоисточника. Например есть док Возврат, у него в таб. части 3 строки, первая Ботинки, вторая Сапоги, третья Тапки. Обработка должна скопировать 3 раза док Возврата (по количеству строк в таб. части) причем в первом скопированном документе в его таб. части должны быть только Ботинки, во втором доке Сапоги и в третьем Тапки. Не получается строки в цикле при копировании проконтролировать. Подскажите
Для каждого Стр Из СписокВозвратов Цикл
    Если НЕ Стр.Пометка Тогда
        Продолжить;
    Иначе
        Д = Стр.Док.ПолучитьОбъект();
        А = Д.Товары.Количество();
        Пока А >= 1 Цикл
            НовыйД = Д.Скопировать();
            НовыйД.Дата = ТекущаяДата();
            Для каждого ТекущаяСтрока Из НовыйД.Товары Цикл
                ОставляемСтроку = ТекущаяСтрока.НомерСтроки;
                
                ??? тут оставлять только нужную строку            
                
            КонецЦикла;
            НовыйД.Записать();
1 vicof
 
23.11.17
12:55
Стр=Новыйдок.тч.Добавить()
Заполнитьзначениясвойств(стр, Стараястр)
2 FIXXXL
 
23.11.17
13:19
Д.Товары[ТекСтрока.НомерСтроки-1]

а цикл делай
Для каждого ТекСтрока ИЗ Д.Товары
3 FIXXXL
 
23.11.17
13:22
(2) + ТЧ нового дока Очистить(), добавить строку и (1)
4 Пес Барбос
 
23.11.17
13:32
Я бы сделал цикл по кол-ву строк в ТЧ и
при каждой итерации создавал бы документ через .Скопировать() и в нем удалял все строки ТЧ <> индексу итерации
5 lirt82
 
23.11.17
13:37
(1) (2) спасибо вот так закодил:)
Для каждого Стр Из СписокВозвратов Цикл
        Если НЕ Стр.Пометка Тогда
            Продолжить;
        Иначе
            Д = Стр.Док.ПолучитьОбъект();
            А = Д.Товары.Количество();
            Ин = 0;
            Пока А >= 1 Цикл
                СтрокаДляКопирования = Д.Товары[Ин];
                НовыйД = Д.Скопировать();
                НовыйД.Товары.Очистить();
                НовыйД.Дата = ТекущаяДата();
                НоваяСтрока = НовыйД.Товары.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДляКопирования);
                НовыйД.вз_ДокИсточник = СтрокаДляКопирования.ДокументПартии.Ссылка;
                НовыйД.Записать();
                А = А - 1;
                Ин = Ин + 1;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
6 lirt82
 
23.11.17
13:46
Парни, а как программно сделать так чтоб документ нельзя было изменить?
Д = Стр.Док.ПолучитьОбъект();
тут действие после которого ничего нельзя сделать с документом
7 lirt82
 
23.11.17
13:49
т.е. ни провести, ни перепровести, все реквизиты недоступны для изменения, только просмотр
8 lirt82
 
23.11.17
13:50
все нашел, в Синтаксисе - Заблокировать()
9 FIXXXL
 
24.11.17
11:05
(5) зачем тебе целых два счетчика, лишних к тому же?

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