|
v7: Не записываются проводки | ☑ | ||
---|---|---|---|---|
0
web_profiler
01.07.15
✎
17:29
|
Спр=СоздатьОбъект("Справочник.Валюты");
Спр.НайтиПоКоду("840"); Валюта = Спр.ТекущийЭлемент(); Операция = СоздатьОбъект("Операция"); Операция.ВыбратьОперацииСПроводками(ДатаН, ДатаК, "91"); Пока Операция.ПолучитьОперацию() = 1 Цикл Сообщить(Операция); Операция.ВыбратьПроводки(); Курс = глКурсДляВалюты(Валюта, Операция.ДатаОперации); Пока Операция.ПолучитьПроводку() = 1 Цикл Если (Операция.Дебет.Счет.Код = "91") ИЛИ (Операция.Кредит.Счет.Код = "91") Тогда ВалСумма = глПересчет(Операция.Сумма,Гривня,Валюта,Операция.ДатаОперации); Операция.УстановитьАтрибут("ВалСумма", ВалСумма); Попытка Операция.УстановитьАтрибут("Курс", Курс); Исключение КонецПопытки; Операция.УстановитьАтрибут("Валюта", Валюта); Сообщить(Операция.Документ); КонецЕсли; КонецЦикла; Операция.ЗаписатьПроводки(); Операция.Записать(); КонецЦикла; Что я не так делаю? |
|||
1
web_profiler
01.07.15
✎
17:31
|
Я смотрю по СП эти методы только в ОбработкеПроведения
|
|||
2
web_profiler
01.07.15
✎
17:31
|
а у меня внешняя обработка, которая правит операции
|
|||
3
Andrey2C
01.07.15
✎
17:34
|
||||
4
web_profiler
01.07.15
✎
17:38
|
(3) и че? был я тут. У меня вопрос по программной корректировке проводок внешней обработкой
|
|||
5
Andrey2C
01.07.15
✎
17:47
|
Метод ЗаписатьПроводки выполняет запись в информационную базу уже добавленных и заполненных проводок операции. Метод может использоваться только для атрибута «Операция» документа в момент проведения (в процедуре ОбработкаПроведения). При этом происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам уже измененным проводками, записанными этим документом. После выполнения метода ЗаписатьПроводки и до окончания процедуры ОбработкаПроведение уже невозможно изменять или удалять проводки, добавленные до вызова этого метода.
|
|||
6
web_profiler
01.07.15
✎
17:51
|
(5) да что Вы? см. (1), (4)
|
|||
7
Andrey2C
01.07.15
✎
18:13
|
(6) Ну насколько я понимаю метод "ЗаписатьПроводки" будет работать только в процедуре "ОбработкаПроведения". Это если верить справке.
|
|||
8
web_profiler
02.07.15
✎
10:00
|
Операция = СоздатьОбъект("Операция");
Операция.ВыбратьОперацииСПроводками(ДатаН, ДатаК, "91"); Пока Операция.ПолучитьОперацию() = 1 Цикл Сообщить(Операция); //Операция.НайтиОперацию(Операция.Документ); Операция.ВыбратьПроводки(); Курс = глКурсДляВалюты(Валюта, Операция.ДатаОперации); Пока Операция.ПолучитьПроводку() = 1 Цикл Если (Операция.Дебет.Счет.Код = "91") ИЛИ (Операция.Кредит.Счет.Код = "91") Тогда ВалСумма = глПересчет(Операция.Сумма,Гривня,Валюта,Операция.ДатаОперации); Операция.УстановитьАтрибут("ВалСумма", ВалСумма); Попытка Операция.УстановитьАтрибут("Курс", Курс); Исключение КонецПопытки; Операция.УстановитьАтрибут("Валюта", Валюта); Сообщить(Операция.Документ); КонецЕсли; КонецЦикла; Операция.Записать(); КонецЦикла; Операция.ПроводкаВыбрана() = 0 Операция.Выбрана() = 1 Да что я не так делаю? Почему операция не выбрана? |
|||
9
web_profiler
02.07.15
✎
10:03
|
ссори, проводка не выберается
|
|||
10
web_profiler
02.07.15
✎
10:05
|
если разкомментировать строку //Операция.НайтиОперацию(Операция.Документ);
тогда выбираются операции только одного документа |
|||
11
web_profiler
02.07.15
✎
10:06
|
я понимаю, что как-то надо спозиционироваться на операции
|
|||
12
web_profiler
02.07.15
✎
10:19
|
Перебор проводок и запись операций
При работе с объектом "Операция" существует возможность перебора проводок с использованием различных условий отбора. Для этого используется метод "ВыбратьОперацииСПроводками". Достаточно часто эта возможность используется не только для формирования отчетов, но и для группового изменения проводок. Например, для замены значений субконто при изменении структуры учета. Одной из типичных ошибок при использовании данного метода является попытка выполнить корректировку и запись проводок непосредственно тем же объектом (переменной), которой выполняется отбор. Это действие не может быть выполнено системой, так как при записи операции проводки фактически записываются заново, и текущая позиция в списке проводок (текущая проводка) не может быть адекватно сохранена для последующего перебора. Таким образом, для выполнения изменения проводок не следует выполнять запись тем же объектом, который выполняет перебор. Для наиболее надежного выполнения записи измененных операций можно рекомендовать не использовать перебор проводок, а выполнять перебор операций, и для каждой операции перебирать в цикле все проводки. В этом случае изменение проводок и запись операции не вызовет проблем. В некоторых случаях, если требуется изменить проводки по определенному условию, можно рекомендовать для повышения производительности выполнить перебор проводок и накопить в таблице значений операции (документы) и номера проводок, которые нужно изменить. Затем можно поочередно открывать эти операции и изменять в них необходимые проводки Диск ИТС |
|||
13
silent person
02.07.15
✎
10:19
|
Процедура ПоменятьМестами()
опер1 = создатьобъект("операция"); опер1.найтиоперацию(оп1); опер1.выбратьпроводки(); пока опер1.получитьпроводку()=1 цикл н=н+1; состояние(н); Если (опер1.дебет.счет = СчетДеб) тогда субконто1 = опер1.дебет.субконто(1); субконто2 = опер1.дебет.субконто(2); опер1.Кредит.счет = СчетДеб; опер1.Кредит.субконто(1,субконто1); опер1.Кредит.субконто(2,субконто2); опер1.дебет.счет = ""; ИначеЕсли (опер1.Кредит.счет = СчетДеб) тогда субконто1 = опер1.кредит.субконто(1); субконто2 = опер1.кредит.субконто(2); опер1.дебет.счет = СчетДеб; опер1.дебет.субконто(1,субконто1); опер1.дебет.субконто(2,субконто2); опер1.кредит.счет = ""; конецесли; конеццикла; опер1.записать(); КонецПроцедуры |
|||
14
web_profiler
02.07.15
✎
10:20
|
Я так понимаю надо создать ТЗ с операциями, номерами проводок в них и создать цикл по перебору всего этого движения
|
|||
15
web_profiler
02.07.15
✎
10:21
|
(13) так это для одного документа, у меня так тоже работает
|
|||
16
web_profiler
02.07.15
✎
10:22
|
а мне кучу операций пересмотреть надо
|
|||
17
web_profiler
02.07.15
✎
10:22
|
на диске ИТС сказано что не корректно использовать один и тот же объект перебора операций и проводок
|
|||
18
web_profiler
02.07.15
✎
10:23
|
пробую через ТЗ
|
|||
19
Andrey2C
02.07.15
✎
10:28
|
(10) Операция это и есть документ у которого есть проводки. (12) Ну так выбери операции засунь во временную ТЗ ссылки. Только наверное не Операция.ВыбратьОперацииСПроводками(ДатаН, ДатаК, "91"); а Операция.ВыбратьОперации
Опер.ВыбратьОперации('20150112','20150131'); Пока Опер.ПолучитьОперацию()=1 Цикл Если Опер.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Опер.ВыбратьПроводки(); Пока Опер.ПолучитьПроводку() = 1 Цикл Если Опер.Кредит.Счет.Код = "68.1" И Опер.Дебет.Счет.Код = "70" Тогда Вот тут свое меняешь |
|||
20
silent person
02.07.15
✎
10:29
|
(0) попробуй не использовать слово "операция" в качестве имени переменной
|
|||
21
Andrey2C
02.07.15
✎
10:41
|
(19) Или так но ВыбратьОперации() без фильтра будет работать долго. Или выбрать проводки и ссылки документов и номера проводок во временную тз. Если тебе разово надо то 1 подойдет а если на постоянной основе то лучше через ТЗ писать. Как то так.
|
|||
22
web_profiler
02.07.15
✎
10:56
|
спасибо всем, пробую: меняю Операция на Опер, создаю ТЗ
|
|||
23
Andrey2C
02.07.15
✎
11:04
|
(22) Ты только если пишешь Операция.ВыбратьОперацииСПроводками(ДатаН, ДатаК, "91"); то этим ты уже фильтр по 91 счету делаешь. Эта строчка лишняя:"Если (Операция.Дебет.Счет.Код = "91") ИЛИ (Операция.Кредит.Счет.Код = "91") Тогда" И тут уже надо выбирать сразу проводки без "Пока Операция.ПолучитьОперацию() = 1 Цикл"
Пример: Опер.ВыбратьОперацииСПроводками('20091231','20091231',"70"); Пока Опер.ПолучитьПроводку()=1 Цикл |
|||
24
web_profiler
02.07.15
✎
12:08
|
ТабЗнач.НоваяСтрока();
ТабЗнач.ПолучитьСтрокуПоНомеру(ТабЗнач.КоличествоСтрок()); ТабЗнач.Док = Опер.Документ; ТабЗнач.Ном = Опер.НомерПроводки(); При выходе из цикла операции Док = Объект не найден |
|||
25
web_profiler
02.07.15
✎
12:08
|
Хелп!!
|
|||
26
Andrey2C
02.07.15
✎
12:17
|
(25) Если тебе 1 раз нужно это напиши просто по выбору операций а в ней уже выбирай проводки да и все.
|
|||
27
web_profiler
02.07.15
✎
12:22
|
(26) ок, спс
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |