|   |   | 
| 
 | 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 = Сумма(Сумма) ничего не возвращает, такое движение регистра просто отбрасывается. Как можно его всё таки зафиксировать в выборке ? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |