Имя: Пароль:
1C
 
ЗаписатьПроводки(), ВыполнитьЗапрос(текущийДокумент(),текущийДокумент())
0 FAR
 
18.10.04
14:54
Вот такая проблема: провожу документ. Проведение разбито, упрощенно говоря, на 2 этапа. В первом из них записываются проводки по счету А. Во втором надо использовать результаты работы первого этапа. После первого блока ставлю Операция.ЗаписатьПроводки(), Операция.Записать().
Во втором выполняю ВыполнитьЗапрос(текущийДокумент(), текущийДокумент(),"А"). И НИЧЕГО! Запрос мне выдает би.ДО() = 0; Притом, если заменять текущийДокумент() на ДатаДок, то он выдает би.ДО() не равный нулю, где учитывает оборот по счету А в первом блоке.
Примечание: если испольлзую би.выполнитьЗапрос(датаДок,датаДок,"А",,,"Операция"), а потом выбратьПериоды, получитьпериод, то 1с пробегает по циклу всего лишь 1 раз, и выдает консолидированную сумму, равную обороту за датуДок.
Я уже ничего не понимаю:кто глючит: я или 1С. Хелп!
Заранее спасибо, FAR
1 Rovan
 
гуру
18.10.04
15:01
Запись в базу не производиться пока не закрыта транзакция, коя произходит после удачного завершения процедуры проведения. Так что как-ньть по другому надо.
2 FAR
 
18.10.04
15:04
А в чем же тогда сама ссуть записатьПроводки() ? Только в том, что можешь учитывать их минимум за день, а по этому конкретному документу не можешь?
Кстати, ручная операция позволяет такое !!!!
3 FAR
 
18.10.04
16:49
Так что , совсем все плохо?
4 Rovan
 
гуру
18.10.04
16:53
Видимо все-таки я неправ, извиняюсь, читаем тут
http://www.mista.ru/tutor_1c/buh_oper.htm

Делаем Операция.Записать() в самую последнюю очередь.
5 FAR
 
18.10.04
17:23
Вообще, делал и в последнюю, не помогало.
6 FAR
 
18.10.04
17:25
ХОТЯ.....
7 OctoberHammer
 
18.10.04
17:32
2(5) Э... У меня так сделано в проведении БВ. скажем по одному заказу может быть две строки, и нужно чтобы ко второй строке учитывались проводки, сделанные по первой строке...
так вот смотри:
ИТ.ВыполнитьЗапрос(ТекДок,,);
ИТ.СНД();//так было
----
Теперь я переписал так:
ИТ.ВыполнитьЗапрос(,ТекДок,);
Ит.СКД();//Берем конечное сальдо, понятно почему.
Операция.ЗаписатьПроводки();
======
Еще я заходил отладчиком, ставил точку останова на оператор
Операция.ЗаписатьПроводки(), запускал в разделенном режиме два экземпляра 1С, в одном проводил документ, а в другом находил его операцию в журнале операций и буквально смотрел, как появляются проводки после каждой строки...
8 FAR
 
18.10.04
18:06
to OctoberHAmmer
3 строки последнего примера - это при формировании 2 строки ? тогда зачем там тебе нужны записатьПроводки а не просто операция.записать?
9 OctoberHammer
 
18.10.04
18:27
2(8) Нет, это после каждой строки. Просто первый пример - это как было в типовой, а второй - как пришлось переписать. То есть поменять начальную дату на конечную, и взятие конечного сальдо вместо начального.
10 FAR
 
18.10.04
18:31
То есть ты не можешь просто получить обороты по этому документу, пока проведение не закончилось, поэтому полагаешь оборот, как разница между сальдо ?
11 OctoberHammer
 
18.10.04
18:39
2(10) ффух... Нет, это я показал для примера. В твоем случе вроде все правильно, но все равно нужно быть внимательным, в частности применить прием, описаный в последнем абзаце (7) То есть - вда экземпляра - под одним юзером проводим документ и держим точку останова на Операция.ЗаписатьПроводки(), а во втором смотрим проводки после проведения каждой строки - действительно ли они там появлятся. что будет, если заказать оборотку - включены ли проводки в обороты за период, и т.п.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс