|
v7: Прямой запрос (НачОст) | ☑ | ||
---|---|---|---|---|
0
AleksL12
28.08.15
✎
16:37
|
Добрый день.
В родном запросе было Если Датадок >= ПолучитьПозициюТА() Тогда выбдата= ПолучитьДатуТА(); Иначе выбдата = Датадок; КонецЕсли; И дальше в тексте запроса (регистр остатков "ОстаткиТоваров"), ... ... ... |Кол=Регистр.ОстаткиТоваров.ОстатокТовара; и в зависимости от того чему рана выбдата, была функция: если выбдата = Датадок, тогда: |Функция НачКол = НачОст(Кол); если выбдата = ПолучитьДатуТА(), тогда : |Функция НачКол = КонОст(Кол); собственно вопрос, как реализовать это в прямом запросе: ... ... ... |FROM | $Регистростатки.ОстаткиТоваров(:ВыбДата~,,Склад = :ВыбСклад1 |(Товар,Склад),(ОстатокТовара) ... ... ... |
|||
1
AleksL12
28.08.15
✎
16:38
|
как то коряво объяснил да?
|
|||
2
AleksL12
28.08.15
✎
16:55
|
т.е. как в конструкции
| $Регистростатки.ОстаткиТоваров(:ВыбДата~,,Склад= |:ВыбСклад1,(Товар,Склад),(ОстатокТовара) чтоб получить Начост на выбдату? :ВыбДата~ или период надо указать с :ВыбДата по :ВыбДата~ ? |
|||
3
Ёпрст
28.08.15
✎
17:02
|
НачОст на выбдату = КонОст за предыдущую...
|
|||
4
Ёпрст
28.08.15
✎
17:02
|
дальше думай.
|
|||
5
AleksL12
28.08.15
✎
17:03
|
А если на позицию документа?
На момент времени, то бишь |
|||
6
AleksL12
28.08.15
✎
17:13
|
Т.е проверяются остатки перед проведением документа,
данный запрос правилен? ТекстЗапроса = " |SELECT | Рег.Товар as [Товар $Справочник.Товары], | Рег.Склад as [Склад $Справочник.Склады], | Рег.ОстатокТовараОстаток as ОстатокТовара |FROM | $Регистростатки.ОстаткиТоваров(:ВыбДата1~ | , | ,Склад = :ВыбСклад1 | ,(Товар,Склад) | ,(ОстатокТовара) | ) as Рег |Where | Рег.Товар in (SELECT Val FROM #Выбтовары) |"; Запрос.УстановитьТекстовыйПараметр("ВыбСклад1",ВыбСклад); Запрос.УстановитьТекстовыйПараметр("ВыбДата1",Выбдата); Запрос.УложитьСписокОбъектов(Выбтовары, "#Выбтовары", "Товары"); или он возьмет остатки на конец дня Выбдата ? а не на данный момент времени |
|||
7
AleksL12
28.08.15
✎
17:14
|
значение выбдата я описывал в первом посте
|
|||
8
Ёпрст
28.08.15
✎
17:41
|
на конец дня, если на документ - передавай позицию дока
|
|||
9
Ёпрст
28.08.15
✎
17:41
|
если это в модуле проведения, то там тоже есть ньюансы
|
|||
10
AleksL12
28.08.15
✎
17:44
|
сначала записать, потом получитьпозицию() ?
ок, понял, но в данном случае в прямом как написать? :ВыбДата1 ? или :ВыбДата1~ или период указать с :ВыбДата1 по :ВыбДата1~ |
|||
11
AleksL12
28.08.15
✎
17:45
|
чтобы остаток получить на момент документа
|
|||
12
Попытка1С
28.08.15
✎
17:52
|
:ВыбДата1 ? это начало дня
:ВыбДата1~ это конец дня |
|||
13
Попытка1С
28.08.15
✎
17:53
|
"или период указать с :ВыбДата1 по :ВыбДата1~"
в остатках нет периода |
|||
14
AleksL12
28.08.15
✎
18:01
|
выбдата1 у меня равна теперь позициидокумента
и как писать чтоб именно взял на ПОЗИЦИЮДОКУМЕНТА ? |
|||
15
Попытка1С
28.08.15
✎
18:02
|
(14) Он сам берет позицию документа если в параметре документ.
|
|||
16
Ёпрст
28.08.15
✎
18:02
|
(14) сформироватьпозицию (..., -1
) |
|||
17
Попытка1С
28.08.15
✎
18:02
|
(16) Зачем?
|
|||
18
Попытка1С
28.08.15
✎
18:03
|
Или класс прямойзапрос по другому работает? Там передаешь док и все.
|
|||
19
AleksL12
28.08.15
✎
18:11
|
а разве
выбдата = ПолучитьПозицию() не достаточно? |
|||
20
AleksL12
28.08.15
✎
18:15
|
(15) в параметрах документ не передавал
|
|||
21
Попытка1С
28.08.15
✎
18:16
|
(20) В установитьтекстовыйпараметр передай документ и все.
|
|||
22
AleksL12
28.08.15
✎
18:18
|
и в запросе где то показать надо, так ведь?
|
|||
23
Попытка1С
28.08.15
✎
18:19
|
Ненадо ничего.
| $Регистростатки.ОстаткиТоваров(:ВыбДок УстановитьТекстовыйПараметр("ВыбДок",ТекущийДокумент()); |
|||
24
AleksL12
28.08.15
✎
18:27
|
вместо даты?, а в описалове написано про то что первым указывается период, либо момент остатков,
ну да ладно, но ведь у меня в зависимости если выбдата= ПолучитьДатуТА() надо на ТА, а если выбдата= = ПолучитьПозицию() надо на текдок . Т.Е для каждого случая сделать разный текст запроса |
|||
25
AleksL12
28.08.15
✎
18:30
|
или не оно?
|
|||
26
AleksL12
28.08.15
✎
18:33
|
И кстати ведь ,я родной переделываю, а в родном (обычном черном)
|Функция НачКол = НачОст(Кол); что НачОст означает? на начало дня, так ведь? |
|||
27
Попытка1С
28.08.15
✎
18:35
|
(24) • КонецПериода – Тип: Дата, Документ. Параметр со значением даты или документа, до которого необходимо рассчитать остатки (условие <, т.е. не входит в сумму остатков). При установке параметра для типа «Дата» учитывается наличие модификатора. По умолчанию: по дату ТА.
|
|||
28
AleksL12
28.08.15
✎
18:42
|
т.е. все таки период надо указать?
в резистре остатков? а как же (13) |
|||
29
AleksL12
28.08.15
✎
18:44
|
сорри (27) , понял ,это ты описалово дал, и получается что (24) надо делать, правильно?
|
|||
30
Попытка1С
28.08.15
✎
18:47
|
Че ты тормозишь то.
Нет периода у остатков, конецпериода это просто параметр так называется. У тебя это первый параметр, передай туда док и все. |
|||
31
AleksL12
28.08.15
✎
18:48
|
да не торможу, а изучаю с нуля, вот и не разбираюсь в терминологии
|
|||
32
AleksL12
28.08.15
✎
18:50
|
вот и говорю
для случая с выбдата = ПолучитьПозицию --- текстзапроса = текстзапроса + " | $Регистростатки.ОстаткиТоваров(:ВыбДок --- а иначе если выбдата = ТА --- текстзапроса = текстзапроса + " | $Регистростатки.ОстаткиТоваров(:ВыбДок --- , как то так? |
|||
33
AleksL12
28.08.15
✎
18:50
|
(32) сорри
а иначе если выбдата = ТА --- текстзапроса = текстзапроса + " | $Регистростатки.ОстаткиТоваров(:Выбдата --- |
|||
34
AleksL12
28.08.15
✎
19:01
|
и еще один вопрос есть, повторю еще раз, в родном (обычном) запросе
|Функция НачКол = НачОст(Кол); что НачОст означает? на начало дня, так ведь? |
|||
35
AleksL12
29.08.15
✎
07:50
|
(30) нет. не получается туда документ передать,
потому как :<ГраницаРасчета> Тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. Если передан период времени (дата или позиция документа), остатки рассчитываются на начало периода. Для того чтобы рассчитать остатки на конец периода необходимо передавать момент времени. Для этого можно воспользоваться вторым модификатором типа Дата, что соответствует моменту времени конца этой даты. Для формирования моментов времени также можно воспользоваться позицией документа: процедурой СформироватьПозициюДокумента() синтаксис 1, указывая не нулевой ФлагСмещения; или СформироватьПозициюДокумента() синтаксис 2.Если граница расчета больше ТА, то будут получены остатки по ТА; По умолчанию остатки на точку актуальности. |
|||
36
AleksL12
29.08.15
✎
07:53
|
Пытаюсь сделать через СформироватьПозициюДокумента() с -1,
Запрос.УстановитьТекстовыйПараметр("Текдок1",СформироватьПозициюДокумента(Текдок,-1)); но в этом случае ругается Ошибка преобразования даты или времени из символьной строки |
|||
37
AleksL12
29.08.15
✎
08:30
|
сорри ,ступил, оказывается надо просто так:
ТекстЗапроса = " |SELECT | Рег.Товар as [Товар $Справочник.Товары], | Рег.Склад as [Склад $Справочник.Склады], | Рег.ОстатокТовараОстаток as ОстатокТовара"; |FROM | $Регистростатки.ОстаткиТоваров(:ВыбДата1~ | , | ,Склад = :ВыбСклад1 | ,(Товар,Склад) | ,(ОстатокТовара) | ) as Рег" |Where | Рег.Товар in (SELECT Val FROM #Выбтовары) |"; Запрос.УстановитьТекстовыйПараметр("ВыбДата1",выбдата); Запрос.УстановитьТекстовыйПараметр("ВыбСклад1",ВыбСклад); Запрос.УложитьСписокОбъектов(Выбтовары, "#Выбтовары", "Товары"); СформироватьПозициюДокумента(Текдок,-1)); и получим остатки на документ, на момент до проведения |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |