Имя: Пароль:
1C
1C 7.7
v7: Требуется помощь с регистром
,
0 AL CAPONE
 
13.01.12
13:39
Имеется некий регистр остатков.

Измерения - Склад.
Ресурсы - Количество.
Реквизиты - Сумма.

Имеется следующий код:

ТекстЗапроса = "
|Период с ДатаНачала по ДатаКонца;
|Склад = Регистр.КА.Склад;
|Сумма = Регистр.КА.Сумма;
|Функция СумНаНачало = НачОст(Сумма);
|Функция СумНаКонец  = КонОст(Сумма);
|Условие (Склад = ВыбСклад);
|";
   
Запрос = СоздатьОбъект("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Предупреждение("Прервались...");
       Возврат 0;    
   КонецЕсли;  
       
Сумма = Запрос.СумНаКонец - Запрос.СумНаНачало;
Возврат(Сумма);

Сумма возвращает всегда 0. Отладчик также показал, что для любых складов суммы = 0. Как оказалось функции НачОст и КонОст можно использовать только для ресурсов регистра.

Как можно выкрутиться, если нужно получить те же данные из измерения регистра ? Перенос Суммы в Ресурсы регистра не рассматривается.
1 ДенисЧ
 
13.01.12
13:40
Сумма - в измерение?
Ого... Такого я ещё не встречал...
2 ДенисЧ
 
13.01.12
13:41
А... У тебя сумма реквизит... Так вот. Никаких остатков по реквизитам нет и быть не может.
3 AL CAPONE
 
13.01.12
13:41
(1)
не в измерениях, а в реквизитах
4 1Сергей
 
13.01.12
13:42
(3) попробуй приход - расход. Но, это будут не остатки
5 AL CAPONE
 
13.01.12
13:42
(2)
но движения по Регистру же делаются и по суммам тоже ...
6 ДенисЧ
 
13.01.12
13:42
(5) Но остатки не считаются. Если хочешь всё-таки получить - руками собирай движения от начала времён
7 Ёпрст
 
13.01.12
13:43
(3) остатки накапливаются ТОЛЬКО по РЕСУРСАМ регистров в разрезе ИЗМЕРЕНИЙ
rtfm
8 Fish
 
13.01.12
13:45
(0) А вы хотя бы имеете представление, для чего служат Измерения, Ресурсы и Реквизиты и в чём их отличие?
9 dk
 
13.01.12
13:45
ТекстЗапроса = "
|Период с '01.01.1980'по ДатаКонца;
|Склад = Регистр.КА.Склад;
|Сумма = Регистр.КА.Сумма;
|Функция СумНаНачало = НачОст(Сумма);
|Функция СумНаКонец  = Сумма(Сумма);
|Условие (Склад = ВыбСклад);
|";
но медленно будет
---
а вообще с таким стажем писать "Как оказалось функции НачОст и КонОст можно использовать только для ресурсов регистра"? )))
10 1Сергей
 
13.01.12
13:49
как я понял из:

Сумма = Запрос.СумНаКонец - Запрос.СумНаНачало;

ему нужны обороты, поэтому всё же попробуй (4)
11 AL CAPONE
 
13.01.12
13:52
(10)
там Сумма с накоплением идёт, типа
Январь - 10.000
Ферваль - 15.000
...
Декабрь - 120.000
И нужно вытянуть сумму на декабрь -  сумму на январь, так что Приход/Расход не прокатит :(
12 1Сергей
 
13.01.12
13:54
(11) переделать реквизит в ресурс не предлагать?
13 AL CAPONE
 
13.01.12
13:55
Попробовал такой код:

ТекстЗапроса = "
|Период с ДатаНачала по ДатаНачала;
|Склад = Регистр.КА.Склад;
|Сумма = Регистр.КА.Сумма;
|Условие  (Склад = Киоск);
|";
   
Запрос = СоздатьОбъект("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Предупреждение("Прервались...");
       Возврат 0;    
   КонецЕсли;  
       
СуммаНаНачало = Запрос.Сумма;
   
ТекстЗапроса = "
|Период с ДатаКонца по ДатаКонца;
|Склад = Регистр.КА.Склад;
|Сумма = Регистр.КА.Сумма;
|Условие  (Склад = Киоск);
|";
   
Запрос = СоздатьОбъект("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Предупреждение("Прервались...");
       Возврат 0;    
   КонецЕсли;  
       
СуммаНаКонец = Запрос.Сумма;
       
Сумма = СуммаНаКонец - СуммаНаНачало;
Возврат(Сумма)

тоже даёт 0 :(
14 AL CAPONE
 
13.01.12
13:55
(12)
к сожалению нельзя
15 1Сергей
 
13.01.12
13:57
(13) запрос к регистру без функций не имеет смысла
16 AL CAPONE
 
13.01.12
14:04
(15)
а, ну да, логично :)
Так какой-нибудь функцией можно всё же вытянуть Реквизит регистра остатков на определённую дату ?
17 1Сергей
 
13.01.12
14:07
(16) нельзя. А вообще, я так понял в (0) это функция? и она выполняется скорее всего в цикле?
За такое обычно пальцы дверью правят
18 filh
 
13.01.12
14:09
(16) не получится, т.к. у тебя нет остатков. А считать с 1710г. до ДатаНачало это крута будет.
19 Эльниньо
 
13.01.12
14:48
(14) Открой великую тайну - почему?
20 filh
 
13.01.12
14:49
(19) пересчетов боится
:)
21 GrayT
 
13.01.12
14:53
Боюсь, что покуда мы не поймем с какого перепугу родилась такая структура регистра - ни чего дельного сказать не получится.
А когда поймем - скажем что сумма нужна в Ресурсах :)
22 Classic
 
13.01.12
14:55
(11)
не совсем понял, что ты хочешь, но попробуй

ТекстЗапроса = "
|Период с ДатаНачала по ДатаНачала;
|Склад = Регистр.КА.Склад;
|Сумма = Регистр.КА.Сумма;
|Функция Сумма(1);
|Условие  (Склад = Киоск);
|";

Запрос = СоздатьОбъект("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Предупреждение("Прервались...");
       Возврат 0;    
   КонецЕсли;  
       
СуммаНаНачало = Запрос.Сумма;
23 Classic
 
13.01.12
14:56
Точнее Конечно вместо

|Функция Сумма(1);

|Функция Чтототам = Сумма(1);
24 AL CAPONE
 
13.01.12
15:10
(17)
никакого там цикла, разовый запрос по разовому складу
25 AL CAPONE
 
13.01.12
15:10
(19)
т.к. регистр не закроется по сумме, закрытие происходит только количественное
26 filh
 
13.01.12
15:16
(25) Ну блин, тогда сделай еще 1 реквизит Остаток и заполняй его.
27 AL CAPONE
 
13.01.12
15:20
(26)
может Ресурс, а не Реквизит ?
28 filh
 
13.01.12
15:23
(27) Сумма у тебя что?
29 AL CAPONE
 
13.01.12
15:24
(23)
возвращает нули :((

(28)
Реквизит регистра
30 AL CAPONE
 
13.01.12
15:27
(18)
а если не считать с начала времён, а проверять

Регистр.ТекДок.ДатаДок входит в интервал [ДатаНачала,ДатаКонца] ??
31 filh
 
13.01.12
15:28
(29) Ресурс у тебя на закроется, сам же написал.
32 filh
 
13.01.12
15:29
(30) а как определишь остаток на ДатаНачала
33 filh
 
13.01.12
15:29
?
34 AL CAPONE
 
13.01.12
15:30
(32)
ну а если сделать Группировку по ТекДок.ДатаДок и при получение первого движения регистра и получим по логике начальный остаток ...
35 Джинн
 
13.01.12
15:32
(34) По логике тебе нужна веревка. Чтобы не мучится.
36 AL CAPONE
 
13.01.12
15:34
(35)
как дитё ) Не стыдно в вашем-то возрасте ?
37 filh
 
13.01.12
15:43
(34)

ТекстЗапроса = "
|Период по ДатаНачала;
|Склад = Регистр.КА.Склад;
|Сумма = Регистр.КА.Сумма;
|Функция Сумма1 = Сумма(Сумма);
|Условие (Склад = ВыбСклад);
|";
38 Mikeware
 
13.01.12
15:44
(35) "вазелин еще надо заслужить"©
39 AL CAPONE
 
13.01.12
15:51
(37)
о, так вроде хоть что-то считает, спасибо, буду дальше проверять
40 AL CAPONE
 
14.01.12
17:33
Ребета, нужен ещё совет:
метод в (37) работает, но если Регистр.КА.Сумма = 0, то Функция Сумма1 = Сумма(Сумма) ничего не возвращает, такое движение регистра просто отбрасывается. Как можно его всё таки зафиксировать в выборке ?
Программист всегда исправляет последнюю ошибку.