Имя: Пароль:
1C
1C 7.7
v7: Временный расчет регистра остатков
0 MiracMC
 
07.03.13
15:18
День добрый.

перечитал массу похожих тем, но так и не получилось у меня вынуть остатки своего регистра остатков на конкретную дату.

суть задачи:
есть регистр остатков "касса". в который пишутся движения по кассе.
Измерения - Фирма и Касса
Ресурсы - остаток
Реквизиты -

пробую так:
       ркасса = СоздатьОбъект("Регистр.Кассы");
   ркасса = рег.кассы;    
   ркасса.ВременныйРасчет(1);
   РассчитатьРегистрыНа(датаС);
   ркасса.Фирма = Константа.ОсновнаяФирмаНал;
   ркасса.касса = Константа.ОсновнаяФирмаНал.касса;
   ркасса.ОстаткиПолучить();
   Сообщить(ркасса.Остаток);
в ответе на любую дату = 0......

пробую еще так:
       рег = СоздатьОбъект("регистр.кассы");
   рег.УстановитьЗначениеФильтра("Фирма",Константа.ОсновнаяФирмаНал);
   рег.УстановитьЗначениеФильтра("касса",Константа.ОсновнаяФирмаНал.касса);
   рег.ВременныйРасчет(1);  
   РассчитатьРегистрыНа(датаС);
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   рег.ВыгрузитьИтоги(тз,1);
   Сообщить("строк " + тз.КоличествоСтрок());
   Сообщить("кол " + тз.Количествоколонок());

и получаю ответ:
Строк 0
кол 4

при этом, если для этого же регистра сделать ВыбратьДвижения() и перебрать их в цикле

пока рег.ПолучитьДвижение() = 1 Цикл
      Сообщить(рег.ТекущийДокумент());
КонецЦикла;

оно выводит все документы, которые совершали движения по регистру.

так же вот это:

Сообщить(регистр.Кассы.СводныйОстаток(Константа.ОсновнаяФирмаНал,Константа.ОсновнаяФирмаНал.Касса,"Остаток"));

выводит состояние регистра, но тоже как то странно...
если пересчитать все документы - сумма должна быть 2110 грн в остатке. а мне выдает 2070 грн

уже все перепробовал...

задач 2:
1. получить итоги на дату
2. найти потерянные 40 грн...
1 Cthulhu
 
07.03.13
15:21
Книшка такая есть - "Описание встроенного языка". В простонародье - ОВЯ.
Так там по "ВременныйРасчет" - вполне себе работоспособный пример есть.
2 Cthulhu
 
07.03.13
15:22
ЗЫ: или ты прсто хочешь чтобы за тебя твою работу сделали?.. так это незабесплатно.
3 MiracMC
 
07.03.13
15:31
2  Cthulhu
я перечитал и перепробовал массу вариантов...
но по каким то причинам у меня оно не работает...

конфигурация самописная. не имеет ничего общего с типовыми.
просто, возможно, я где то что то упустил...

вот и прошу, так сказать, взглянуть новым взглядом на код, который мне уже скоро снится будет...
4 MiracMC
 
07.03.13
15:33
просто мне не понятно, почему при использовании временного расчета мне нули выдает... а СводныйОстаток() - выдает почти правильное значение....
5 Джинн
 
07.03.13
15:35
рег.ВыгрузитьИтоги(тз,1);
тз.ВыбратьСтроку();

И смотрите что там.
6 MiracMC
 
07.03.13
15:38
(5)

рег.ВыгрузитьИтоги(тз,1);

Сообщить("строк " + тз.КоличествоСтрок());
Сообщить("кол " + тз.Количествоколонок());

и получаю ответ:
Строк 0
кол 4
7 КонецЦикла
 
07.03.13
15:50
Нет итогов
А что дает ручной подсчет за все время существования базы по ВыбратьДвижения()? :)
Если что-то не то - можно пересчитать итоги, просто сдвинуть ТА на начало, а потом вернуть на место
8 MiracMC
 
07.03.13
15:55
попробовал еще один вариант:

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

так вот тут все показывает правильно...
всем спасибо...
9 Джинн
 
07.03.13
15:57
(8)
рег = СоздатьОбъект("регистр.кассы");
рег.ВременныйРасчет();        
РассчитатьРегистрыНа(датаС);

ТЗ = СоздатьОбъект("ТаблицаЗначений");
рег.ВыгрузитьИтоги(ТЗ,1,1);
ТЗ.ВыбратьСтроку();

Что в ТЗ?
10 КонецЦикла
 
07.03.13
15:57
(8) Да, но в вышеприведенном коде есть фильтры по фирме и кассе :)
Предлагаю разобраться правильно ли они установлены и нужны ли вообще
11 MiracMC
 
07.03.13
16:22
(9) в ТЗ из моего примера нет ни одной строки...
Ваш, не пробовал еще...

(10) фильтры - это я пробовал из примеров... ставил по аналогии с тем, что было написано в примере...
12 Cthulhu
 
08.03.13
16:58
(3): врать изволите, юноша. в примере к этому методу (в ОВЯ) - совершенно не то, что Вы изволите тут долбить. там вопервых, временный расчет устанавливается для <СоздатьОбъект("Регистры")>.<ИмяНужногоРегистра>. А ".РаасчитатьРегистры<Чо>(..)" применяется к <СоздатьОбъект("Регистры")>.

(8): движения от итогов - не умеешь отличать?.. тогда - да, все правильно.
13 kiruha
 
08.03.13
18:24
(0)
ВремРегистры = СоздатьОбъект("Регистры");
рег=ВремРегистры.Кассы;
рег.ВременныйРасчет();        
ВремРегистры.РассчитатьРегистрыНа(датаС);

ТЗ = СоздатьОбъект("ТаблицаЗначений");
рег.ВыгрузитьИтоги(ТЗ,1,1);
ТЗ.ВыбратьСтроку();
14 Cthulhu
 
08.03.13
18:53
(13): нуинаф?..