Имя: Пароль:
1C
1C 7.7
v7: Помогите разобраться с перезаписью проводок
0 Zhuravlik
 
15.03.13
10:41
Добрый день. Нужно перенести обороты с одного счета на другой, делаю так:


Операция = СоздатьОбъект("Операция");
Операция.ВыбратьОперацииСПроводками(_НачГода, _КонГода, ""+Счет_Переноса);
Пока Операция.ПолучитьОперацию() = 1 Цикл

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

КонецЦикла;



Но цикл проходит только один раз, т.е. меняет самую первую проводку, которую находит, а потом - без изменения. Что я тут не так сделал?
1 ЧеловекДуши
 
15.03.13
10:42
(0) Если только раз, то ты лучше сохрани операцию в ТЗ.
А потом по ТЗ и меняй.
2 Zhuravlik
 
15.03.13
10:45
(1) Операцию, или проводку? т.е. как-то так?

Пока Опер.ПолучитьПроводку() = 1 Цикл
тз.НоваяСтрока();
тз.Опер = Опер.Документ;
тз.Пров = Опер.НомерПроводки()
....

тз.ВыбратьСтроки();
Пока тз.ПолучитЬСтроку() = 1 Цикл
Опер_Обн.НайтиОперацию(тз.Опер);
Опер_Обн.ПолучитьПроводкуПоНомеру()
...
3 Chum
 
15.03.13
10:48
В первом цикле документы имхо загнать в список значений.
Второй внешний цикл уже по списку значений с позиционированием на конкретной операции и перебором проводок.
4 Zhuravlik
 
15.03.13
10:55
Вот так взлетело:

тзОпер = СоздатьОбъект("ТаблицаЗначений");
тзОпер.НоваяКолонка("Док");

Операция = СоздатьОбъект("Операция");
Операция.ВыбратьОперацииСПроводками(_НачГода, _КонГода, ""+Счет_Переноса);
Пока Операция.ПолучитьОперацию() = 1 Цикл
   тзОпер.НоваяСтрока();
   тзОпер.Док = Операция.Документ.ТекущийДокумент();
КонецЦикла;


тзОпер.ВыбратьСтроки();
Пока тзОпер.ПолучитьСтроку() = 1 Цикл
   Опер_Обн = СоздатьОбъект("Операция");
   Опер_Обн.НайтиОперацию(тзОпер.Док);
   Опер_Обн.ВыбратьПроводки();
   Пока Опер_Обн.ПолучитьПроводку() = 1 Цикл
       Если Опер_Обн.Дебет.Счет = Счет_Переноса Тогда
           Опер_Обн.Дебет.Счет = Счет_Конечный;
       ИначеЕсли Опер_Обн.Кредит.Счет = Счет_Переноса Тогда
           Опер_Обн.Кредит.Счет = Счет_Конечный;
       КонецЕсли;
   КонецЦикла;
   Опер_Обн.Записать();
КонецЦикла;

Спасибо!