Имя: Пароль:
1C
1С v8
Как обратиться к ТЧ документа Корректировка записей регистров УПП 1.3
,
0 makkut
 
11.04.18
14:48
Есть необходимость создать обработку которая пробегат циклом по ТЧ документа Корректировка записей регистров одного регистра накопления НДСсАвансом и по определенным параметром удаляет строки. Но не пойму как обратится к ТЧ документа. Подскажите пожалуйста.
1 Малыш Джон
 
11.04.18
14:49
(0) у него нет ТЧ, у него есть Движения
2 Cyberhawk
 
11.04.18
14:49
У этого документа нет ТЧ. Вернее у него есть ТЧ со списком имен затронутых регистров, но это не та ТЧ с движениями, которую ты видишь.
3 Tateossian
 
11.04.18
14:51
(0) Движение = ДокументОбъект.Движения["НДСсАвансом"];
Движение.Прочитать();

// а дальше работаешь с движением, в конце

Движение.Записать();
4 Cyberhawk
 
11.04.18
14:53
(3) Неправильно. Надо модифицированность взвести у формы документа, чтобы пользователь сам решил, записать или нет
5 Tateossian
 
11.04.18
15:12
(4) Да, если интерактивно обрабатывать, но, судя по условию задачи, тут не требуется интерактивная работа.
6 Cyberhawk
 
11.04.18
15:17
(5) А, ну да, вполне возможно.
Я почему-то подумал, что ему внешняя обработка заполнения ТЧ  нужна, т.е. интерактивчик.
7 makkut
 
11.04.18
15:21
спасибо, буду пробовать
8 makkut
 
13.04.18
06:58
(3) в продолжении темы....
есть одна таблица "ТаблицаРеестра" в которой есть записи. У этой таблицы всего две колонки "покупатель" и "документ".
Нужно осуществить удаление всех записей кроме тех что в таблице "ТаблицаРеестра" в документе корректировки регистров.

Движение = СсылкаНаобъект.ПолучитьОбъект().Движения["НДСсАвансов"];

Движение.Прочитать();
    
        й = Движение.Количество()- 1;

    Пока  й>=0  Цикл
        
        н = ТаблицаРеестра.Количество()-1;
        
        Пока  н>=0  Цикл
                    
            
            Если СокрЛП(Строка(Движение[й].СчетФактура)) =   СокрЛП(Строка(ТаблицаРеестра[н].Документ)) И Движение[й].Покупатель = ТаблицаРеестра[н].Покупатель Тогда
                
                            
                    Сообщить("УДАЛЕНА строка " + Движение[й].Покупатель + " " + Строка(Движение[й].СчетФактура) );
                    Движение.Удалить(й);
                    Прервать;
                
                                    
            КонецЕсли;
            
            н = н - 1;
            
        КонецЦикла;
        
        й = й - 1;    
        
    КонецЦикла;
    
    Движение.Записать();

Так записи удаляются те что есть в таблице.

когда делаю так:

й = Движение.Количество()- 1;

    Пока  й>=0  Цикл
        
        н = ТаблицаРеестра.Количество()-1;
        
        Пока  н>=0  Цикл
                    
            Если СокрЛП(Строка(Движение[й].СчетФактура)) =   СокрЛП(Строка(ТаблицаРеестра[н].Документ)) И Движение[й].Покупатель = ТаблицаРеестра[н].Покупатель Тогда
                
                    Сообщить("НЕ УДАЛЕНА строка " + Движение[й].Покупатель + " " + Строка(Движение[й].СчетФактура));
                                    
                Иначе
                    
                    Сообщить("УДАЛЕНА строка " + Движение[й].Покупатель);
                    Движение.Удалить(й);
                    Прервать;
                
                                    
            КонецЕсли;
            
            н = н - 1;
            
        КонецЦикла;
        
        й = й - 1;    
        
    КонецЦикла;
    
    Движение.Записать();

то работает всё криво.... удаляются почти все записи, нужные и не нужные. Помогите пожалуйста с задачей.
9 Рэйв
 
13.04.18
07:03
(8)К чему эти загадочные танцы с бубном?
Движения - это обычная коллекция.

//--
Об=СсылкаНаобъект.ПолучитьОбъект();
Движения =Об.Движения["НДСсАвансов"];

Движения.Прочитать();

Для Каждого Запись Из Движения Цикл
    // делаемштохатим
КонецЦикла;
Об.Записать();
10 Chameleon1980
 
13.04.18
07:07
выгрузи движения в тз
обойди циклом
в цикле сложи строки под удаление в массив

после цикла по тз

делай цикл по массиву

к тз примени удалить(элементМассива)

далее загрузи движения из тз

как-то так, вроде
11 Рэйв
 
13.04.18
07:10
(10) для удаления можно легко использовать (9)
//--

Об=СсылкаНаобъект.ПолучитьОбъект();
Движения =Об.Движения["НДСсАвансов"];
мУдалить=Новый Массив;

Движения.Прочитать();

Для Каждого Запись Из Движения Цикл
    Если УсловиеУдаления Тогда
       мУдалить.Добавить(Запись);
    КонецЕсли;

КонецЦикла;

Для Каждого Запись Из мУдалить Цикл
      Движения.Удалить(Запись);
КонецЦикла;
Об.Записать();
12 makkut
 
13.04.18
07:14
(11) УсловиеУдаления тут мне надо сравнить записи с движением и таблицей.... То есть ещё сделать перебор по записям
13 Рэйв
 
13.04.18
07:15
(12)Движения  сами с собой сравнивать что ли?
14 Рэйв
 
13.04.18
07:15
(12)Ну в общем тебе примеров накидали бесплатно, придумаешь что-нибудь:-)
15 makkut
 
13.04.18
07:15
(13) нет записи движений с таблицей отдельной. И удалить все записи движения кроме тех что есть в таблице
16 Chameleon1980
 
13.04.18
07:16
(11) не увидел. или пока писал - отвлекся и в тот миг ты нарисовал. Но, видимо ТС еще не понял.
17 Chameleon1980
 
13.04.18
07:17
(15) ну как нет?
сделай из движений после прочитать типа:
выгрузи, обойди, удали, загрузи
18 Chameleon1980
 
13.04.18
07:17
ну или даже выгрузи, загрузи можно убрать
19 Chameleon1980
 
13.04.18
07:18
по движениям ходить тебе уже разрешили
и собирать нужные строки по условиям
Рэйв жеж тебе говорит в (14)
20 makkut
 
13.04.18
07:20
(17) ок буду пробовать, отпишусь)
21 makkut
 
13.04.18
12:28
(19) не получается чего то

    Движение = СсылкаНаобъект.ПолучитьОбъект().Движения["НДСсАвансов"];

    Движение.Прочитать();
    Движение.Выгрузить();
    мУдалить=Новый Массив;

    Для Каждого Запись Из Движение Цикл
    

        Для Каждого Запись2 Из ТаблицаРеестра Цикл

                    
            Если СокрЛП(Строка(запись.СчетФактура)) =   СокрЛП(Строка(Запись2.Документ)) И запись.Покупатель = Запись2.Покупатель Тогда
                
                    Сообщить("НЕ УДАЛЕНА строка " + запись.Покупатель + " " + Строка(запись.СчетФактура));
                                    
            Иначе
                    
                    мУдалить.Добавить(Запись);
                                    
            КонецЕсли;
            
            
        
        КонецЦикла;
    
    КонецЦикла;
    
    Для Каждого Запись Из мУдалить Цикл
          Движение.Удалить(Запись);
    КонецЦикла;
    Движение.Записать();

выходит ошибка

{ВнешняяОбработка.Обработка.Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Удалить)
          Движение.Удалить(Запись);
по причине:
Недопустимое значение параметра (параметр номер '1')


что не так делаю?
22 Михаил Козлов
 
13.04.18
12:50
(21) В Движение.Удалить(Запись); тип значения Запись какой?
Ошибка возникает и на 1-ом удалении?
23 makkut
 
13.04.18
13:10
(22) на втором удалении, потому что как я понял записи походу одинаковые
24 Chameleon1980
 
13.04.18
13:59
а куда у тебя идет
Движение.Выгрузить();

???
25 Михаил Козлов
 
13.04.18
14:02
(23) Засуньте в массив индексы записей и попробуйте удалять с конца.
AdBlock убивает бесплатный контент. 1Сергей