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


1С:Предприятие :: 1С:Предприятие 8 общая

Как обратиться к ТЧ документа Корректировка записей регистров УПП 1.3

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

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


Движение.Записать();
   Cyberhawk
 
4 - 11.04.18 - 14:53
(3) Неправильно. Надо модифицированность взвести у формы документа, чтобы пользователь сам решил, записать или нет
   Tateossian
 
5 - 11.04.18 - 15:12
(4) Да, если интерактивно обрабатывать, но, судя по условию задачи, тут не требуется интерактивная работа.
   Cyberhawk
 
6 - 11.04.18 - 15:17
(5) А, ну да, вполне возможно.
Я почему-то подумал, что ему внешняя обработка заполнения ТЧ  нужна, т.е. интерактивчик.
   makkut
 
7 - 11.04.18 - 15:21
спасибо, буду пробовать
   makkut
 
8 - 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)К чему эти загадочные танцы с бубном?
Движения - это обычная коллекция.
//--

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

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

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

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

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

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

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

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

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


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

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

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

КонецЦикла;

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

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

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

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

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

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

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


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

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


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