|
v7: БИ на 00:00:02 от первых чисел каждого месяца | ☑ | ||
---|---|---|---|---|
0
Dwarrior
27.08.09
✎
17:04
|
Добрый день, камрады!
Каждый день, в 00:00:02 создается расходник, который выписывает в подотчет на 1251 какую-то сумму. Есть вот такой код: начТочка = СформироватьПозициюДокумента(начДата,0,0,3); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ВключатьСубсчета(-1); БИ.ВыполнитьЗапрос(начТочка, начДата+1, СчетПоКоду("1251")); Сообщить(БИ.СНД()); Т.е. получаем остаток по счету 1251 на 3 секунду начДаты. Так вот, все дни, кроме первых чисел месяцев это работает, а вот 01.06.09, 01.07.09, 01.08.09 и т.п. БИ.СНД()=0!!! Бьюсь над этой проблемой уже который день, мозг сломал...Это глюк 1С или я неправильно что-то делаю? Кстати, граница "00:00:02" условная, это может быть другое время. База ДБФ, 1с 25 релиз. Подскажите пожалуйста, кто сталкивался... |
|||
1
Dwarrior
28.08.09
✎
06:33
|
Что, совсем никаких мыслей?:)
|
|||
2
VoditelKobyly
28.08.09
✎
07:23
|
По первым числам этот кусок кода не работает.
Из какой процедуры это выдернуто? Когда запускается эта процедура? Проблема в том что создается расходник или в том что не создается? |
|||
3
Dwarrior
28.08.09
✎
12:41
|
это я сам написал, но мне кажется, что он законченный, в смысле там все есть...
Процедура запускается сейчас за любой первый день месяца:) |
|||
4
Dwarrior
28.08.09
✎
12:41
|
это фрагмент отчета
|
|||
5
Dwarrior
28.08.09
✎
12:43
|
Проблема в том, что БИ.СНД() = 0 в вышеприведенном примере, хотя должно быть точно не ноль. И только если начДата='01.06.09', '01.07.09' и т.п. За все другие дни БИ.СНД() показывает правильную сумму.
|
|||
6
zak555
28.08.09
✎
16:05
|
(0) а так что покажет? + обновил бы платформы
БИ.ВыполнитьЗапрос(начДата, начДата+1, СчетПоКоду("1251")); |
|||
7
Torquader
29.08.09
✎
22:44
|
Чего-то мне кажется, что там где-то из даты вычитается единица, только не в этом коде, а в другом - может такое быть ?
|
|||
8
Джинн
29.08.09
✎
22:48
|
(0) Бред какой-то :(
Я между 00.00.00 и 00.00.02 легко запихаю несколько сотен документов. |
|||
9
Torquader
29.08.09
✎
23:22
|
(8) так не в количестве документов вопрос, а в итогах, которые у автора неправильные.
Может ему даже больше нас ТИИ поможет. |
|||
10
Побрекито
29.08.09
✎
23:30
|
какая-то хрень!
(0) если тебе нужно просто посмотреть начальное сальдо на НачДата, зачем ты указываешь конец периода НачДата+1? P.S. чтобы решить проблему сабжа, запрашивай не начальное сальдо текущего дня, а конечное сальдо предыдущего. БухИт = СоздатьОбъект("БухгалтерскиеИтоги"); БухИт.ВключатьСубсчета(-1); БухИт.ВыполнитьЗапрос(, НачДата-1, СчетПоКоду("1251")); Сообщить(БухИт.СКД()); |
|||
11
Dwarrior
02.09.09
✎
17:29
|
Доброе время суток!
Извиняюсь, выпал ненадолго из обоймы.. Напомню еще раз суть проблемы: 01.08.09 00:00:00 - СНД=0 01.08.09 00:00:02 - Документом на счет 1251 закидывается сумма, например 500 01.08.09 00:00:03 - Смотрим СНД по счету 1251 на этот момент. И оно равно 0! Если этот трюк повторить не первым числом месяца(2,3,4 и т.п.) - то в итоге сальдо = 500, т.е. как и надо. Проблема только ПЕРВЫМИ числами месяцев. Думается мне, что это глюк 1С, связанный с помесячным расчетом ее промежуточных итогов. Но мне не хочется в это верить:) |
|||
12
Dwarrior
02.09.09
✎
17:37
|
вот еще результаты опытов - не имеет значения счет и субконто. Также попробовал то же самое на MSSQL базе - там все нормально, сальдо показывается правильно. Значит дело в формате DBF?
|
|||
13
Dwarrior
02.09.09
✎
17:38
|
Может, это можно как-то преодолеть?
|
|||
14
zak555
03.09.09
✎
14:20
|
(11) ща проверил - аналогичная ситуация
|
|||
15
zak555
03.09.09
✎
14:24
|
+ (14) делай тогда так:
БИ.ВыполнитьЗапрос(начДата, начТочка, СчетПоКоду("РВ.1"),,,1,,1); результат: БИ.СНД() = 0 БИ.ДО() = 100 БИ.СКД() = 100 НО, если сделать так: БИ.ВыполнитьЗапрос(, начТочка, СчетПоКоду("РВ.1"),,,1,,1); результат: БИ.СНД() = 0 БИ.ДО() = 0 БИ.СКД() = 0 |
|||
16
Dwarrior
04.09.09
✎
08:29
|
Спасибо zak555!
так и придется сделать... Всем спасибо за участие:) |
|||
17
zak555
04.09.09
✎
11:03
|
а что у всех всё работает?
|
|||
18
Torquader
04.09.09
✎
12:46
|
(17) Предлагаешь тестовую конфигурацию "замутить" на предмет проверки ?
|
|||
19
zak555
04.09.09
✎
12:55
|
(18) а что мутить?
вон код из (15) из бухи типовой создал операцию на первое число месяца в 00:00:02 результат описан |
|||
20
Torquader
04.09.09
✎
13:03
|
(19) Сегодня посмотрю - сейчас у меня Linux восстановлением диска занимается - и "бюстгалтерию" на нём не запустишь.
|
|||
21
Dwarrior
04.09.09
✎
16:24
|
а никто не обладает лицензионной 1С-кой? мож позвонить к производителю(или реселлеру) и спросить, типа что за фигня? Мож есть какой-нить патчик для релиза (или более новый релиз), который бы нам помог...
Я бы позвонил, но у меня все ломанное и украденное:) |
|||
22
zak555
04.09.09
✎
16:40
|
(21) ужас! к тебе придёт ОБЭП
|
|||
23
zak555
06.09.09
✎
14:07
|
(20) ну и как успехи?
|
|||
24
Torquader
06.09.09
✎
16:27
|
(23) Так оно и есть.
Сляпал тестовую конфу, в которой два счёта и документ, который проводит с одного на другой некоторую сумму. У каждого счёта по одному субконто из справочника. Документ записываю в нужную дату: Procedure CreateOper() Ref=CreateObject("Reference.Суб1Спр"); if Ref.FindByCode("1")<>1 then Message("Первого нет");return;endif; r1=Ref.CurrentItem(); if Ref.FindByCode("2")<>1 then Message("Второго нет");return;endif; r2=Ref.CurrentItem(); Doc=CreateObject("Document.Проводилово"); Doc.New(); Doc.Суб1=r1; Doc.Суб1Кред=r2; Doc.Сумма=50; Doc.DocDate=ВыбДата;// выбирается в диалоге Doc.SetTime(0,0,2); Doc.Write(); // установка времени повторно, так как иначе получается 12-00-00 Doc.SetTime(0,0,2); Doc.Write(); Doc.MakeActions(); EndProcedure Далее снимаю отчёт по итогам: Procedure ShowTotals() t=CreateObject("Text"); t.AddLine("Обороты:"); Pos=MakeDocPosition(ВыбДата,23,59,59);// на конец дня Message("POS="+String(Pos));// смотрю позицию BT=CreateObject("BookkeepingTotals"); BT.UseSubconto(SubcontoKinds.Суб1); if BT.DoQuery(Pos,выбДата+1,AccountByCode("123"),,,1,,"S")=1 then if BT.SelectSubconto(1)=1 then while BT.GetSubconto()=1 do t.AddLine(String(BT.Subconto(1))+":"+String(BT.IDB())+":"+String(BT.ICB())); enddo; endif; endif; t.Show(); EndProcedure Первого числа созданный документ почему-то не попадает в итог на начало периода. А второго - попадает. Если сделать так: Procedure ShowTotals() t=CreateObject("Text"); t.AddLine("???????:"); Pos=MakeDocPosition(???????,0,0,3); PosEnd=MakeDocPosition(???????,23,59,59); Message("POS="+String(Pos)); Message("POSEND="+String(PosEnd)); BT=CreateObject("BookkeepingTotals"); BT.UseSubconto(SubcontoKinds.???1); if BT.DoQuery(Pos,PosEnd,AccountByCode("123"),,,1,,"S")=1 then if BT.SelectSubconto(1)=1 then while BT.GetSubconto()=1 do t.AddLine(String(BT.Subconto(1))+":"+String(BT.IDB())+":"+String(BT.ICB())); enddo; endif; endif; t.Show(); EndProcedure То не попадают не только итоги, но и нет записей (у меня первый документ первого числа) - то есть система смотрит остатки на конец прошлого периода. Позиции документов можно посмотреть так: Procedure ShowPosInfo() d=CreateObject("Document.Проводилово"); t=CreateObject("Text"); t.AddLine("Позиции документов:"); if d.SelectDocuments(ВыбДата,ВыбДата)=1 then while d.GetDocument()=1 do t.AddLine("Документ № "+TrimAll(d.DocNum)+" от "+String(d.DocDate)+" время "+d.GetTime()+" позиция "+String(d.GetPosition())); enddo; endif; t.Show(); EndProcedure Документ № 2 от 01.09.09 время 00:00:02 позиция #20090901 20000 22905 Документ № 1 от 01.09.09 время 12:00:10 позиция #20090901 432100000 22904 Документ № 3 от 02.09.09 время 00:00:02 позиция #20090902 20000 22906 P.S. получается, что "съели" не только документ со временем 2 секунды, но и стандартный (созданный вручную) в 12-00-00. |
|||
25
Torquader
06.09.09
✎
16:30
|
Релиз был 7.70.020 - в понедельник "поимею" на 27-ом.
|
|||
26
Torquader
06.09.09
✎
16:57
|
Кстати, документы до начала выборки (Pos) в конечный остаток (FDB и FCB) тоже не попадают.
Если же документ внутри выбранного интервала - то он попадает в конечный остаток. Мораль такова - на первое число получаем нереальные итоги, если вместо даты указываем позицию. |
|||
27
zak555
06.09.09
✎
19:40
|
(24) а зачем конфу текстовую?
вон на бухе можно типовой! ))) |
|||
28
zak555
06.09.09
✎
19:40
|
(26) не позицию, а дату!
|
|||
29
Torquader
06.09.09
✎
20:52
|
(27) Чтобы видеть всё, что делается и быть уверенным, что оно работает, как надо.
(28) Как раз в позиции и дело - если использовать дату (в тексте не Pos, а ВыбДата) то всё работает. Просто где-то в выборке на первое число неправильно преобразуется позиция. Проверю на 27 - если и там такое, то можно спросить и у 1С. |
|||
30
zak555
07.09.09
✎
07:22
|
(29) + надо посомтреть файл итогов!
самое прикольное, что вот так тоже не работает БИ.ВыполнитьЗапрос(начДата, начТочка, СчетПоКоду("РВ.1"),,,1,"Проводка",1); результат: БИ.СНД() = 0 БИ.ДО() = 100 БИ.СКД() = 100 |
|||
31
zak555
07.09.09
✎
14:31
|
(29) ну как?
|
|||
32
Torquader
07.09.09
✎
23:30
|
7.70.027 лажается точно также.
Завтра буду узнавать, у кого можно спросить - почему так. |
|||
33
zak555
08.09.09
✎
00:10
|
(32) думается, что в итоги не попадает проводки от первого числа, если начальная "точка" - позиция, т.к. если дата - то всё гуд
|
|||
34
Dwarrior
08.09.09
✎
08:42
|
(33) zak555, все таки есть!
Torquader, а спрашивать будешь у производителя?:) Мне кажется, вопрос нужно адресовать им. |
|||
35
zak555
08.09.09
✎
11:13
|
(34) вообще я нашёл решения твоей задачи из (0)
БИ не работают 1-го числа месяца с ПОЗИЦИЕЙ, но не с ДОКУМЕНТОМ создал фиктивный док от первого числа в 00:00:03 (операция ручная была по-прежнему от 00:00:03) делаю запрос: НачДата = РабочаяДата(); начТочка = СформироватьПозициюДокумента(начДата,0,0,3); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); Док = СоздатьОбъект("Документ.БухгалтерскаяСправка"); Док.НайтиПоНомеру("00000001", НачДата); НачТочка = Док.ТекущийДокумент(); БИ.ВыполнитьЗапрос(начТочка,начДата + 1, СчетПоКоду("РВ.1"),,,1,,1); результат: БИ.СНД() = 100 БИ.ДО() = 0 БИ.СКД() = 100 т.е. косяк в позиции !!! |
|||
36
zak555
08.09.09
✎
11:32
|
+ (35) опытным путём выяснилось, что не работает функция:
СформироватьПозициюДокумента(<?>,,,,); MakeDocPosition(<?>,,,,); Синтаксис: СформироватьПозициюДокумента(<Дата>,<Час>,<Мин>,<Сек>,<ФлагКонцаСекунды>) Назначение: Формирует и возвращает позицию документа согласно переданным параметрам. Параметры: <Дата> - дата, на которую формируется позиция документа, <Час> - час, на который формируется позиция документа, <Мин> - минута, на которую формируется позиция документа, <Сек> - секунда, на которую формируется позиция документа. <ФлагКонцаСекунды> - необязательный параметр. Число: 1 - позиция будет браться от следующей секунды. 0 - позиция от указан-ной секунды. Значение по умолчанию - 0. а вот функция эта - работает: СформироватьПозициюДокумента(<?>,); MakeDocPosition(<?>,); Синтаксис: СформироватьПозициюДокумента(<Докум>,<ФлагСмещения>) Назначение: Формирует и возвращает позицию документа согласно переданным параметрам. Параметры: <Докум> - значение документа (или его позиция), позиция которого определяется. <ФлагСмещения> - необязательный параметр. Число: -1 (минус единица) - предыдущая позиция. 1 - следующая позиция. 0 - текущая позиция. Значение по умолчанию - 0. Использование данного параметра позволяет получить предыдущую или последующую позицию от уже имеющейся позиции. Док-во: НачДата = РабочаяДата(); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); Док = СоздатьОбъект("Документ.БухгалтерскаяСправка"); Док.НайтиПоНомеру("00000001", НачДата); //НачТочка = Док.ТекущийДокумент(); начТочка = СформироватьПозициюДокумента(Док.ТекущийДокумент(),1); БИ.ВыполнитьЗапрос(начТочка,начДата + 1, СчетПоКоду("РВ.1"),,,1,,1); результат: БИ.СНД() = 100 БИ.ДО() = 0 БИ.СКД() = 100 |
|||
37
Torquader
08.09.09
✎
18:12
|
На самом деле функция работает - позиция формируется правильно, а вот система с ней работать не может.
(Если позицию формировать от документа, то система смотрит на его внутренний ID и ничего больше её не интересует). Есть подозрение, что система ошибается из-за того, что после анализа позиции итоги запрашиваются на прошлую дату, а потом делается выборка документов по текущей дате и они добавляются в итог (просто прошлая дата получается 00-ХХ-ХХХХ, что и приводит к ошибке). Во всех стандартных отчётах позиция документа не используется - и ошибка не повлияет на работу типовой. |
|||
38
zak555
08.09.09
✎
18:14
|
(37) в (0) использовалась начДата+1
ДО не было!!! |
|||
39
zak555
08.09.09
✎
21:41
|
кстати, а может так как-то с шалонов и внутренним представление можно что-то сделать?
|
|||
40
zak555
18.09.09
✎
13:18
|
так можно что-то с шаблоном намуть?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |