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 Цикл
Если Опер_Обн.Дебет.Счет = Счет_Переноса Тогда
Опер_Обн.Дебет.Счет = Счет_Конечный;
ИначеЕсли Опер_Обн.Кредит.Счет = Счет_Переноса Тогда
Опер_Обн.Кредит.Счет = Счет_Конечный;
КонецЕсли;
КонецЦикла;
Опер_Обн.Записать();
КонецЦикла;
Спасибо!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн