Имя: Пароль:
1C
1С v8
Удаление и создание проводок при проведении документа
, ,
0 Krasotka
 
26.04.22
11:53
Пишу такой код в обработке проведения документа. Надо вначале удалить неправильные "типовые" проводки, а потом создать правильные самописные. Ничего не меняется после отработки, хотя в отладчике все строки проходят. Как правильно удалить в таком случае?

        НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(этотобъект.Ссылка);
        
        НаборЗаписей.Прочитать();    
        НомераСтрок = Новый СписокЗначений;
        
        Для каждого Запись из НаборЗаписей Цикл
            
            Если (Запись.СчетДт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01") и Запись.СчетКт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02"))или (Запись.СчетДт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01") и Запись.СчетКт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01"))  Тогда
                НомераСтрок.Добавить(Запись.НомерСтроки-1);
            КонецЕсли;        
            
        КонецЦикла;
        НомераСтрок.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
        Для каждого Ном из НомераСтрок Цикл
            НаборЗаписей.Удалить(Ном.Значение);
        КонецЦикла;
        
        НаборЗаписей.Записать();
        НомераСтрок.Очистить();
1 mikecool
 
26.04.22
12:05
выбросить код, использовать коллекцию ДВижения документа
2 Krasotka
 
26.04.22
12:06
(1)
Напишите правильный код плиз
3 vde69
 
26.04.22
12:39
Движения.Очистить()
Движения.ДобавитьПравильныеПроводки()
Движения.Записать()
4 Krasotka
 
26.04.22
12:47
(3)
Мне не надо все удалить, как выборочно тут удалять?
5 hhhh
 
26.04.22
13:00
(4)         НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(этотобъект.Ссылка);
        
        НаборЗаписей.Прочитать();    

выкинь, напиши

НаборЗаписей = Движения.Хозрасчетный;


номера строк выкинь, можно писать сами записи. типа

        ЗаписиДляУдаления = Новый Массив;
        
        Для каждого Запись из НаборЗаписей Цикл
            
            Если (Запись.СчетДт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01") и Запись.СчетКт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02"))или (Запись.СчетДт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01") и Запись.СчетКт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01"))  Тогда
                ЗаписиДляУдаления.Добавить(Запись);
            КонецЕсли;        
            
        КонецЦикла;
        Для каждого Запись из ЗаписиДляУдаления Цикл
            НаборЗаписей.Удалить(Запись);
        КонецЦикла;
        

сортировку естественно тоже выкинь
6 Krasotka
 
26.04.22
13:02
(5)
Это можно в обработку проведения вставлять? Или куда еще?
7 shuhard
 
26.04.22
13:03
(5) Запись.СчетДт =  ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01") == Запись.СчетДт.Код="62.01" =)
8 hhhh
 
26.04.22
13:13
(6) вы чего?? не помните куда вставляли свой кусок из (0)? Да уж.
9 Krasotka
 
26.04.22
13:17
(5) это отработало, теперь мне надо новые написать заместо удаленных. Как правильно это сделать? Пример можно?
10 Krasotka
 
26.04.22
15:09
Я написала такую обработку создания проводок, они в проводках сформировались, но в ОСВ они по документу расчета не схлапываются, выводятся отдельно, чего там еще не хватает?
НоваяЗапись=    НаборЗаписей.Добавить();
НоваяЗапись.Период=этотобъект.Дата;
НоваяЗапись.Регистратор=этотобъект.Ссылка;
НоваяЗапись.СчетДт= ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
НоваяЗапись.СчетКт= ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
ВидСубк1 = Запись.СчетКт.ВидыСубконто[0].ВидСубконто;
НоваяЗапись.СубконтоКт.Вставить(ВидСубк1, этотобъект.Контрагент);
НоваяЗапись.СубконтоДт.Вставить(ВидСубк1, этотобъект.Контрагент);
ВидСубк2 = Запись.СчетКт.ВидыСубконто[1].ВидСубконто;
НоваяЗапись.СубконтоКт.Вставить(ВидСубк2, ДоговорПроводки);
НоваяЗапись.СубконтоДт.Вставить(ВидСубк2, ДоговорПроводки);
ВидСубк3 = Запись.СчетКт.ВидыСубконто[2].ВидСубконто;
НоваяЗапись.СубконтоКт.Вставить(ВидСубк3, стр.субконто3);
НоваяЗапись.СубконтоДт.Вставить(ВидСубк3, этотобъект.ДокументРеализации);
Если стр.суммаостаток<= ОставшаясяСумма тогда
НоваяЗапись.Сумма=стр.суммаостаток;
Иначе
НоваяЗапись.Сумма=ОставшаясяСумма;
Конецесли;
11 Krasotka
 
26.04.22
15:25
(10)
Там организации не было в проводке, все, теперь работает
AdBlock убивает бесплатный контент. 1Сергей