Имя: Пароль:
1C
1C 7.7
v7: Остатки по счёту
0 whitesnake
 
03.09.07
15:59
Ногами только не пинайте :)
Как остатки по счету на текущий день в отчете отобразить? Только через БИ???
Дело в том что у меня несколько самописных доков в упрощенке (регламентируют внутренние перемещения предприятия, там своя специфика) - хотя все исправно отправляют на счёт 10.1 сырье и полуфабрикаты. И всю инфу по движениям я вытяну из самих доков. Но вот остатки - как?
1 Джинн
 
03.09.07
16:03
А через что еще, кроме бухитогов? Либо напрямую, либо через запрос? :))
См. ДО()
2 desert cactus
 
03.09.07
16:03
(0) А чем БИ не подходят?
3 у лю 427
 
03.09.07
16:03
пля....
А как же контролируется остаток при внутренних перемещениях?


амистинеть....
4 Джинн
 
03.09.07
16:03
Тьфу, СКД()
5 Программист 484
 
03.09.07
16:04
Не фига не понял
6 whitesnake
 
03.09.07
16:53
Спасибо за ответы. А напрямую это как??
При внутренних перемещениях... никак. всё на совести людей :) в принципе оно надо конечно дописать всё по-хорошему но сейчас не до того просто :) с отчетом бы разобраться счас...
7 desert cactus
 
03.09.07
16:55
(6) Напрямую - это (4). Но до этого придется Би.Рассчитать();
8 Джинн
 
03.09.07
16:57
(7) + а кошернее всего бух. запросом пользоваться.
9 whitesnake
 
05.09.07
21:15
Сделал через БИ. Пробовал и рассчитать() и выполнитьзапрос() - как я понял при этом в БИ.СКД указываются разные параметры.
Итог - либо остатки по всему счёту (10.1) либо ноль. Субконто нужно только номенклатура. Что может быть?
10 у лю 427
 
05.09.07
22:24
миздеццццц......
11 Mister-X07
 
06.09.07
11:33
Читай "Работа с БИ в режиме запроса" там можно выбырать конкретное субконто.
12 whitesnake
 
08.09.07
20:51
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
Би.ИспользоватьСубконто(ВидыСубконто.Номенклатура,док.ТекущийДокумент().молоко);
Сообщить(док.ТекущийДокумент().молоко);
Би.ВыполнитьЗапрос(дата1,дата1,"10.1",,,,,"К");
Остаток=Би.СКК("К");

док.ТекущийДокумент().молоко - выводится с помощью сообщить, там действительно то субконто которое мне нужно. тем не менее выводит Остаток равный 0. По оборотке на тот же день всё есть.
13 AAZ
 
08.09.07
21:00
"Молоко" - реквизит шапки или ТЧ? док.молоко пробовал?
14 whitesnake
 
08.09.07
21:18
Пробовал. Ессно это реквизит шапки
15 Креатив
 
08.09.07
21:32
(12) не СКК(), а СКД() в (4) же "русским по белому написано"
16 Креатив
 
08.09.07
21:33
(15)+это если на конец периода
17 у лю 427
 
08.09.07
21:37
док.ТекущийДокумент().молоко

понравилось... а если молоко 2.5 и 3.8?  Два реквизита?
18 whitesnake
 
08.09.07
21:39
Писалось что только в разрезе субконто ведется количественный учет. А тут и так не получается. Галки в плане счетов "кол. учет" стоят где надо. Куда еще копать??
19 whitesnake
 
08.09.07
21:40
(15) Я пробовал разное. В оборотке у меня сейчас количество показывается кредитовое (играюсь - провожу доки) а в этом отчете нет...
20 whitesnake
 
08.09.07
21:40
(17) Речь идет о молоке базисной жирности а оно одно и только одно.
21 Креатив
 
08.09.07
21:47
(19) Батенька, а вот тут незачот по проверке на наличие. 10-й счет активный, унего остаток ВСЕГДА дебетовый. Кредитовый остаток означает, что материала израсходованно больше, чем получено. И то, что написано в (6) - роковая ошибка. Сначала надо сделать, чтобы документы адекваьно реагировали, а потом уже писать отчёты. Ибо раскаяние будет жестоким.
Чтобы посмотреть реальное сальдо сформируй оборотно-сальдовую ведемость по счету.
22 whitesnake
 
08.09.07
21:48
(19) да я всё понимаю. Нцу вот сделал дебетовый остаток на счете. те же яйдза. В ОСВ по счету 10.1 выводит все нормально, с помощью БИ - НИЧЕГО!!! У меня только количество считается...
23 Дядя Васька
 
08.09.07
21:51
Би.ИспользоватьСубконто(ВидыСубконто.Номенклатура,док.молоко, 2);
24 whitesnake
 
08.09.07
21:55
(23) уже пробовал играться с значением ТипФильтра - хрен там...
25 whitesnake
 
08.09.07
21:57
ЕСТЬ!
Забудьте про всякие там запросы и т.д. все делается 2-мя строчками (странно но раньше не срабатывало или делал не так):
   БИ=СоздатьОбъект("БухгалтерскиеИтоги");
   остаток=БИ.скд("10.1",3,,док.ТекущийДокумент().молоко);
26 Дядя Васька
 
08.09.07
21:57
(24) Ну тогда поиграйся с отладчиком, что у тебя там в док.молоко
27 Дядя Васька
 
08.09.07
22:00
(25) Не тупи, это на точку актуальности. Чтобы на документ получить перед этим еще и временный расчет потребуется. А запрос у тебя скорее всего потому не работает что у док.молоко тип не справочник.номенклатура, а справочник.материалы. По крайней мере десятка это материалы, а уж в каком они справочнике от конфы зависит...
28 whitesnake
 
08.09.07
22:02
(25) Справочника Материалы я в упрощенке не нашёл. док.молоко - это стопроцентно справочник.номенклатура.
29 whitesnake
 
08.09.07
22:04
би.рассчитать(дата1,дата1);
остатокНач=Би.СНД("10.1",3,,док.ТекущийДокумент().молоко);
остатокКон=БИ.скд("10.1",3,,док.ТекущийДокумент().молоко);

вот теперь всё кошерно. считается и на начало и на конец дня.
30 Креатив
 
08.09.07
22:04
(27) в упрощёнке на 10-ке номенклатура.
А вот что такое дата1, интересно было бы знать?
31 Дядя Васька
 
08.09.07
22:04
(28) Ну, про то что это упрощенка в сабже не написано. В бухии есть. Короче мучай запросы дальше если хочешь получить остаток на документ, а не только на рабочую дату.
32 у лю 427
 
08.09.07
22:04
ответ то нужен?
33 Дядя Васька
 
08.09.07
22:05
(29) не кошерно, чтобы один остаток выудить все регистры на дату пересчитываешь
34 whitesnake
 
08.09.07
22:06
(30) Дата 1 это дата отчёта
(32) Давай. Интересно почему у меня запросом не получилось?
35 Дядя Васька
 
08.09.07
22:07
+(33) В течение дня остаток может меняться неоднократно. Т.е. если тебе нужен остаток на документ такое не прокатит (не знаю твоей ситуации, но обычно именно он-то и нужен)
36 whitesnake
 
08.09.07
22:07
(31) прочитайте - написано что упрощенка...
37 whitesnake
 
08.09.07
22:07
(35) Мне нужен остаток на начало дня и конец дня. Отчёт будет делаться раз в конце дня после забивания и проведения всех доков
38 у лю 427
 
08.09.07
22:08
Процедура Сформировать()  
НачДата = '01.09.2007';    
КонДата = '30.09.2007';    
   
//____________________________________________________________________
Би = CreateObject("BookkeepingTotals");
Би.UseSubconto(SubcontoKinds.Номенклатура,    , 1);    
Би.DoQuery(НачДата,КонДата, AccountByCode("10.1"),   ,  , 3,"День","К");  
   
//________________________________________________________________________________
if Би.SelectSubconto(1) =1 then                 //  выбрать Номенклатура
   while Би.GetSubconto(1) = 1 do              //  получить Номенклатура
       //_________________________________________________
       Би.SelectPeriods();    
       while Би.GetPeriod() = 1 do    
           Message ("Дата "+ Би.НачДата+ "   Номенклатура "+Би.Subconto(1)+"   Остаток "+(Би.СКД("к")-Би.СКК("к")));
       endDo;
   endDo;    // перебор по Номенклатура
EndIf;
КонецПроцедуры





выполни и результат выложи сюда-
39 Дядя Васька
 
08.09.07
22:08
(36) Проглядел... А 427 сейчас про гены скажет...
40 у лю 427
 
08.09.07
22:09
д.б. выведены строки вида
ДАТА НОМЕНКЛ  ОСТАТОК
где ДАТА - Внимание!!! - дата изменения остатка. Те даты, в которых остаток не менялся - не выводятся....
41 у лю 427
 
08.09.07
22:10
(39) миздеть - не тележку мазать...
42 Дядя Васька
 
08.09.07
22:12
(41) Хм. Кто бы говорил ))
43 whitesnake
 
08.09.07
22:13
(38) Результаты

Дата 02.09.07   Номенклатура    Остаток 20767
Дата 04.09.07   Номенклатура Молоко 2.5%   Остаток 200
Дата 04.09.07   Номенклатура Молоко базисной жирности   Остаток 532
Дата 04.09.07   Номенклатура обрат   Остаток 30
Дата 02.09.07   Номенклатура сливки   Остаток 10
Дата 04.09.07   Номенклатура сливки   Остаток 30
44 Дядя Васька
 
08.09.07
22:14
(43) А в дата1-то у тя какая дата?
45 whitesnake
 
08.09.07
22:15
Короче говоря проблема решена (странно что раньше оно не работало) - на дату я остаток вижу. На документ остаток как бы не нужен, но чуть попозже поковыряюсь...
46 whitesnake
 
08.09.07
22:15
(44) 4 сентября - этот день я мучаю
47 whitesnake
 
08.09.07
22:16
Ребята, спасибо что вы есть! Миста - супер! :)))
48 Креатив
 
08.09.07
22:17
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
Би.ИспользоватьСубконто(ВидыСубконто.Номенклатура,док.молоко, 2);
Сообщить(док..молоко);
Би.ВыполнитьЗапрос(дата1,дата1,"10.1");
Если БИ.ПолучитьСубконто(,,док.молоко) = 0 Тогда
  Сообщить("Хрен вам, а не молоко!");//то есть по данному субконто на счёте пусто
КонецЕсли;
Остаток=Би.СКД("К");
Сообщить(Остаток);
Всё должно работать даже в таком варианте, если конечно у тебя счёт не валютный.
Думаю, что даже без конструкции если.
Кстати, а молоко - типа Справочник.Номенкатура?
49 у лю 427
 
08.09.07
22:17
ну вот - результат запроса по всей номенклатуре на 10...

Если реквизит МОЛОКО в документе - справочник
тогда можно отобрать только остатки по молоку, заменив строку  

Би.UseSubconto(SubcontoKinds.Номенклатура,    , 1);    

на

Би.UseSubconto(SubcontoKinds.Номенклатура,Молоко, 2);    

предварительно в переменную Молоко надо затолкать ссылку на справочник Номенкл элемент МОЛОКО
50 Дядя Васька
 
08.09.07
22:17
(45) Т.е. теперь и запрос работает без изменений? Однако форум волшебный ))
51 whitesnake
 
08.09.07
22:19
(48) Да, номенклатура
52 whitesnake
 
08.09.07
22:19
(50) Неееее запрос не пробовал и пока не буду :)
53 whitesnake
 
08.09.07
22:19
(49) спасибо :)
54 у лю 427
 
08.09.07
22:20
вот запрос, который покажет остатки на каждый документ, толкающий молоко по счету в + или -


Процедура Сформировать()  
НачДата = '01.09.2007';    
КонДата = '30.09.2007';    
   
//____________________________________________________________________
Би = CreateObject("BookkeepingTotals");
Би.UseSubconto(SubcontoKinds.Номенклатура,    , 1);    
Би.DoQuery(НачДата,КонДата, AccountByCode("10.1"),   ,  , 3,"Операция","К");  
   
//________________________________________________________________________________
if Би.SelectSubconto(1) =1 then                 //  выбрать Номенклатура
   while Би.GetSubconto(1) = 1 do              //  получить Номенклатура
       //_________________________________________________
       Би.SelectPeriods();    
       while Би.GetPeriod() = 1 do    
           Message (    ""+Би.НачДата+
                   "   Номенклатура "+Би.Subconto(1)+
                   "   Остаток "+(Би.СКД("к")-Би.СКК("к"))+
                   "   Document "+Би.Operation.Document);
       endDo;
   endDo;    // перебор по Номенклатура
EndIf;
КонецПроцедуры

При параметре ПЕРИОД = ОПЕРАЦИЯ в Би становится доступен документ, который породил операцию...
55 Дядя Васька
 
08.09.07
22:20
(48) Как раз в таком варианте не должно ;) В ИспользоватьСубконто() ты двойку поставил, т.е. не разворачивать, а отбирать, после чего ПолучитьСубконто() не имеет смысла.
56 у лю 427
 
08.09.07
22:22
(55) два балла... идите четать ЖКК...
57 ИльяА
 
08.09.07
22:23
первый раз вижу, что бы (38) так питомцам что то разжевывал...
58 Дядя Васька
 
08.09.07
22:23
(56) Это не тебе, посмотри на какой пост ссылаюсь...

Би.ИспользоватьСубконто(ВидыСубконто.Номенклатура,док.молоко, 2);

...

Если БИ.ПолучитьСубконто(,,док.молоко) = 0 Тогда
  Сообщить("Хрен вам, а не молоко!");//то есть по данному субконто на счёте пусто

КонецЕсли;
59 у лю 427
 
08.09.07
22:27
(58) все верно - 2 - отбирать молоко....
60 Дядя Васька
 
08.09.07
22:43
(59) Отбирать, а не выборку формировать. Т.е. после 2 ПолучитьСубконто() не имеет смысла. Может и сработает, как-то не пробовал, но по смыслу скорее всего как раз результат этого ПолучитьСубконто() ноль будет.
61 у лю 427
 
08.09.07
22:50
при 2 в выборке будет только
- при указании одного субконто - данные по этому субконто
- при указании списка значений - данные по субконто из списка...

при 1
- развернуто по всем (субконто в Использовать ставить не надо)
- если субконто проставлено в
 UseSubconto(SubcontoKinds.Номенклатура, Номенклатура, 1,);
  то параметр 1 указывает РАЗВОРАЧИВАТЬ ПО ГРУППЕ и в выборке будут только субконто из этой группы...


ну и есть ряд неочевидных (неочевидных из документации) особенностей в формируемой выборке в зависимости от других параметров, которые часто позволяют делать не 2 запроса, а 1.....
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший