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

1С:Предприятие ::

Метки: 

Копирование документа по порядку строк

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

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

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


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