Имя: Пароль:
1C
1С v8
Конечный остаток не равен начальному остатку следующего периода
0 программистище
 
28.07.14
10:42
Всем добрый день

Отчет и запрос простой
Остатки в ценах номенклатуры в разрезе организаций по периодам

Но не пойму в чем загвоздка, конечный остаток не равен начальному остатку.

Левое соединение не должно влиять на результат, если нет дополнительных условий.

xml СКД: http://fls-host.rusfolder.net/files/41308642
1 Сияющий Асинхраль
 
28.07.14
11:15
Замечал. Самому надо вылечить этот глюк. Прослеживается на УТ11. Вообще работы с ценами у УТ11 мягко говоря очень странная. Привожу краткий анализ этого дела. Вообще, цены устанавливаются в УТ11 с точностью до секунды, а не как в УТ11 с привязкой к регистратору. Что странно, еще более странно, когда обратишь внимание, что ВСЕ установленные цены несмотря на то, что в конфигураторе указано, что они задаются с точностью до секунды сваливаются на НАЧАЛО ДНЯ, т.е. на время 00:00:00. Похоже именно из-за этого часть установленных цен при определении цен на начало дня не видятся, по крайней мере даже типовой отчет по ценам номенклатуры не видит некоторые документы установки цен :-(. Я сильно предполагаю (но не экспериментировал еще), что если установить цены нормально, т.е. не в начале дня, а именно в момент их установки, то остатки на конец дня и начало следующего должны будут совпадать. Иными словами пока можно либо допилить установку цен руками, либо ждать когда 1С проснется и сделает установку цен нормально с привязкой к регистратору как это было в УТ10.3...
2 Сияющий Асинхраль
 
28.07.14
11:16
+(1) Фразу ", а не как в УТ11 с привязкой к регистратору" следует читать ", а не как в УТ10.3 с привязкой к регистратору"
3 программистище
 
28.07.14
11:29
(1) может это вообще тогда глюк платформы 8.2
сейчас буду проверять (1) предположение


и кстати да 11.1 ут на 8.2
4 Сияющий Асинхраль
 
28.07.14
11:38
(3) Думаю, это не глюк платформы - это криво написанная конфа :-(. Зачем надо было делать цены с точностью до секунды и сваливать все эти цены в одну единственную секунду в течении дня, боюсь, это даже 1С не сможет объяснить :-(. Обрати внимание, установленные сегодня цены, в типовой УТ в ценниках видятся только завтрашним днем :-( - это еще одна кривизна установки цен от 1С, кстати тоже, похоже, по той же причине - ценники видят цены опять таки на начало дня :-(, вместо того, чтобы видеть цены на текущий момент или, лучше, на конец дня...
5 программистище
 
28.07.14
11:43
но остатки соединяются левым соединением с ценами

я пробовал и вложенным запросом и виртуальной таблицей
результат одинаковый
при этом условия накладываются только на выборку внутри

разве это должно влиять на сами остатки
6 Сияющий Асинхраль
 
28.07.14
11:52
Я же говорю - я не пробовал, хотя попробую, как только до базы доберусь, если сама база и конфа перед тобой поменяй движения по регистру цен так, чтобы сами цены сваливались на время документа, а не на начало дня. Думаю, глюк уйдет. Как только доберусь до базы сам это сделаю...
7 программистище
 
28.07.14
12:39
а главное чудный запрос у них в типовом ВедомостьПоТоварамОрганизацийВЦенахНоменклатуры

может у меня что не так, в моем запросе?
8 m-serg74
 
28.07.14
12:43
(7) да чето слишком замудреный какой то, попроще не можно было сделать?
9 m-serg74
 
28.07.14
12:45
+(8)  и что то не видно Остаток чего получаешь то?

ВЫБРАТЬ
    СУММА(ТоварыОрганизацийОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)) КАК ОстатокСумма,
    СУММА(ТоварыОрганизацийОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
    ТоварыОрганизацийОстаткиИОбороты.ПериодМесяц,
    ТоварыОрганизацийОстаткиИОбороты.ПериодГод,
    ТоварыОрганизацийОстаткиИОбороты.Организация,
    СУММА(ТоварыОрганизацийОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
    СУММА(ТоварыОрганизацийОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход,
    СУММА(ТоварыОрганизацийОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток
10 программистище
 
28.07.14
12:46
ну как
1) получаю номенклатуру с периодами (месяц)
2) получаю максимальную цену номенклатуры на этот период
3) соединяю остатки с ценами по периоду
11 программистище
 
28.07.14
12:47
(9) там соединение по номенклатуре,
а вывожу обобщенно по организации
12 программистище
 
28.07.14
12:48
(11) но даже если добавить номенклатуру, все так же будет
13 m-serg74
 
28.07.14
12:52
(12) сли убрать из отчета цены тогда все правильно работает?
14 программистище
 
28.07.14
12:54
да, проверено
15 программистище
 
28.07.14
12:55
и главное не важно какое соединение делаешь
начальные остатки не совпадают с конечными
16 m-serg74
 
28.07.14
12:59
(15) значит соединение задваивает где то
17 программистище
 
28.07.14
13:02
(16) важно, если бы задваивало, то реальный остаток был бы меньше, чем получаемый в моем отчете
но в моем отчете получается меньше
как будто записи наоборот отсеиваются
18 m-serg74
 
28.07.14
13:04
(17) не факт, может двоить и Расход
19 m-serg74
 
28.07.14
13:04
(17) в консоли проверь получение цен, и посмотри что там
20 программистище
 
28.07.14
13:06
(19) да вот в консоли и сижу
21 m-serg74
 
28.07.14
13:10
(20) вот здесь рупь за сто будут двойники
ВЫБРАТЬ
    ТоварыОрганизацийОстаткиИОбороты.ПериодМесяц,
    ТоварыОрганизацийОстаткиИОбороты.Номенклатура
ПОМЕСТИТЬ ВтНоменклатура
ИЗ
    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(&НачалоПериода, &ОкончаниеПериода, Авто, , ) КАК ТоварыОрганизацийОстаткиИОбороты
22 m-serg74
 
28.07.14
13:11
+(21)  сделай хотя б ВЫБРАТЬ РАЗЛИЧНЫЕ
23 m-serg74
 
28.07.14
13:11
а вообще не понимаю назначение этой ВТ
24 floody
 
28.07.14
13:11
остатки и обороты так и работают, в проф. разработке целая глава
25 m-serg74
 
28.07.14
13:12
(24) как так?
26 m-serg74
 
28.07.14
13:14
(22) сторно :)
27 Сияющий Асинхраль
 
29.07.14
14:10
Увы, я был неправ. Они ставят документ установки цен начиная с 00:00:00 через секунду. Тем не менее остатки начальные и конечные все равно не совпадают даже в типовом отчете :-(
28 Сияющий Асинхраль
 
29.07.14
14:17
Похоже типовой отчет по остаткам в ценах номенклатуры просто тупо хватает первую установку цен :-( (которая не должна бы сваливаться на начало периода), ту самая которая идет со временем 00:00:00 - прикольно...
29 Сияющий Асинхраль
 
29.07.14
14:33
Итого, получается, что отчет по остаткам в ценах номенклатуры видит остатки в ценах на конец дня, а вот остатки в на начало видятся в ценах, которые уже изменены первым документом установки цен номенклатуры в этом дне :-(. Именно поэтому и не совпадают остатки. Поправить это можно, похоже, только если сдвинуть время первого документа установки цен со времени 00:00:00 хотя бы на одну секунду, соответственно сдвигая на одну секунду и остальные документы...
30 RomanYS
 
29.07.14
14:51
Запрос к таблице ОстаткиИОбороты возвращает выборку только по тем периодам, где есть обороты.
Когда обращаешься просто к этой таблице СКД дополняет отсутствующие периоды и все получается красиво. Для более сложного запроса в СКД надо указывать в ролях полей "НачальныОстаток", "КонечныйОстаток"
31 Сияющий Асинхраль
 
29.07.14
15:02
(30) Все ты правильно говоришь, но по любому типовой отчет работает неправильно :-(, т.е. менять либо типовой отчет, либо документ установки цен. Думаю, что проще отчет поменять...
32 программистище
 
29.07.14
16:03
(30) т.е. если мы сделаем простой запрос к остаткам оборотам и поместим в виртуальную таблицу
а потом соединим его уже с другой виртуальной таблицей, то все правильно получится?
33 RomanYS
 
29.07.14
16:13
(32) нет
простой запрос (без СКД и построителя) уже возвращает "неправильно": если у тебя в месяце не было оборотов по элементу номенклатуры (но был начальный остаток = конечному остатку), то в выборке не будет записи по этой номенклатуре за этот месяц, и будет разрыв с предыдущим месяцем.
СКД умеет это исправлять - для этого необходимо как минимум указать роли полей (возможно нужны ещё какие-то танцы с бубнами)
Для простого запроса констуктор СКД делает это автоматически
34 программистище
 
29.07.14
16:48
(33) та дело то не в том что в месяце не было оборотов, а в том что даже если обороты и есть то остаток на конец месяца не равен остатку на начало следующего месяца
даже если в обоих месяцах есть обороты
35 Сияющий Асинхраль
 
29.07.14
16:53
Я же сказал почему... Отчет остатки товаров в ценах номенклатуры в начальные остатки хватают первый документ установки цен, который стоит на 00:00:00 на дату начала :-(, попытался на секунду сдвинуть период начала

ДобавитьКДате(&ПериодОтчета.ДатаНачала,"Секунда",-1)

Не воспринимает... падла...
36 программистище
 
29.07.14
16:56
(35)  результат не изменился в отчете или что не воспринимает?
37 программистище
 
29.07.14
17:00
(36) я переделал отчет
получаю два периода начало месяца и окончание
и цены выбираю на конец месяца
результат такой же
38 Сияющий Асинхраль
 
29.07.14
17:10
(36) Нет, он падла воспринимает то, что не нужно :-(, смысл такой 1С записывает все документы установки цен через секунду начиная с 00:00:00 и в отчете самый первый документ тот самый, что на 00 учитывается при расчете начальных остатков, т.е. на конец предыдущего дня он не учитывается, а на начало текущего - учитывается :-(. Вот и лезет разница в отчете, т.е. получается, что данные на конец предыдущего дня не равны данным на начало текущего...
39 Сияющий Асинхраль
 
29.07.14
18:27
Победил!!!
40 программистище
 
30.07.14
09:17
(39) чем? изменением проведения установок цен?
41 программистище
 
30.07.14
15:43
короче, я сформировал остатки обычной таблицей
медленно, но цифры реальные :(
42 Сияющий Асинхраль
 
30.07.14
16:14
(40) Ну я уже несколько раз сказал, что надо сделать: либо убрать установку цен со времени 00:00:00, либо время начала отчета сдвинуть назад хотя бы на одну секунду. Я сдвинул время начала отчета...
43 программистище
 
30.07.14
16:22
(42) спасибо, проверю
44 Сияющий Асинхраль
 
30.07.14
16:32
Касательно отчета ведомость по остаткам в ценах номенклатуры достаточно значение функции определяющее начало периода:

&ПериодОтчета.ДатаНачала

заменить на:

ДобавитьКДате(&ПериодОтчета.ДатаНачала,"Секунда",-1)

Вчера не сразу заметил, что заменял в другом отчете :-(, и чертыхался поэтому, что не работает. На самом деле работает, все в норме...