Имя: Пароль:
1C
1C 7.7
v7: Запрос к Регистру (дв.) ОстаткиТМЦ (1С++)
0 Последняя_
Надежда
 
27.01.12
11:50
1С 7.7 ТиС на SQL (нетиповая конф.)
Есть вот такой запрос, на основе которого формируется таблица значений.
тз="
   |SELECT
   | СпрНом.Code as КодНоменклатуры,
   | КоличествоНачальныйОстаток as НачОст,
   | КоличествоПриход as Приход,
   | КоличествоРасход as Расход,
   | КоличествоКонечныйОстаток as КонОст
   |FROM
|$РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаОстатков,:ДатаОстатков~,Период,,
   | JOIN #vr_id_nom as врНом ON врНом.id=Номенклатура,,
   |(Номенклатура),(Количество)) as Ост
   |INNER JOIN $Справочник.Номенклатура as СпрНом ON СпрНом.ID=Ост.Номенклатура
   |";

В таблице есть
врТаб.НачОст- начальный остаток
врТаб.Приход - приход
врТаб.Расход - расход
врТаб.КонОст - конечный остаток
Но сильно смущают поля Приход и Расход. В таблице появляются непонятные приходы, хотя по факту их не было! и непонятные расходы. в итоге разница между непонятным приходом и непонятным расходом равна реальному расходу.
Да, я ничего не понимаю в регистрах, но с таким раскладом возникают проблемы.
1 viktor_vv
 
27.01.12
11:51
Период дополнения по умолчанию кажется ДвиженияИГраницыПериода.
2 miki
 
27.01.12
11:51
Реальный расход это = продажи?
Перемещения относятся к реальным расходам?
3 viktor_vv
 
27.01.12
11:53
(1)+ Это я не в тему.
4 Последняя_
Надежда
 
27.01.12
11:56
(2) перемещений вообще нет. Расход это только документы реализаций.
5 viktor_vv
 
27.01.12
11:58
Сделай так

тз="
   |SELECT
   | СпрНом.Code as КодНоменклатуры,
   | Right(Ост.ПозицияДокумента) as [ДокДвижения $Документ],
   | Ост.ВидДокумента as ДокДвижения_вид,
   | КоличествоНачальныйОстаток as НачОст,
   | КоличествоПриход as Приход,
   | КоличествоРасход as Расход,
   | КоличествоКонечныйОстаток as КонОст
   |FROM
|$РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаОстатков,:ДатаОстатков~,Документ,Движения,
   | JOIN #vr_id_nom as врНом ON врНом.id=Номенклатура,,
   |(Номенклатура),(Количество)) as Ост
   |INNER JOIN $Справочник.Номенклатура as СпрНом ON СпрНом.ID=Ост.Номенклатура
   |";

И смотри, какие документы делали движения.
6 viktor_vv
 
27.01.12
11:59
(5) *
   | Right(Ост.ПозицияДокумента,9) as [ДокДвижения $Документ],
7 Последняя_
Надежда
 
27.01.12
12:48
Все равно выдает тоже
начало=104  Приход=5  Расход=10  КонОст=99 /реально  104  0  5   99
начало=99  Приход=3  Расход=6  КонОст=96   /реально  99   0  3   96
начало=96  Приход=12  Расход=24  КонОст=84 /реально  96   0  12  84
и выдает такую ошибку...
Ошибка запроса: Meta name parser error: это метаимя разрешить невозможно "$РегистрОстаткиОбороты.ОстаткиТМЦ"State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '#vr_id_nom'.
8 Ёпрст
 
27.01.12
12:52
>>>JOIN #vr_id_nom as врНом ON врНом.id=Номенклатура

забавное соединение
9 Ёпрст
 
27.01.12
12:53
не проще ли фильтр на измерение поставить ?
10 Последняя_
Надежда
 
27.01.12
12:54
(8) (9) я даже не могу вот так сразу понять что в этой строке делается... так чисто на основе того что должно делаться знаю.
11 Ёпрст
 
27.01.12
12:56
12 Ёпрст
 
27.01.12
12:58
не нужно там соединение унутри вт, тупо в условие вт воткни, что дескать
Номенклатура in (select val from #vr_id_nom )
13 Ёпрст
 
27.01.12
12:59
ну и дальше, INNER JOIN $Справочник.Номенклатура as СпрНом это тоже лишнее, раз ты ни в селекте, ни в ветке where не используешь поля с таблички справочника.
14 viktor_vv
 
27.01.12
13:01
(13) В селекте код справочника тянет.
15 viktor_vv
 
27.01.12
13:02
(7) Это у вас с созданием временной таблички проблемы, не создается она.
16 Ёпрст
 
27.01.12
13:05
(14) непонятно тока, зачем он нужен..
Проще сам элемент поиметь
17 Последняя_
Надежда
 
27.01.12
13:07
(14) в таблицу выводится именно код номенклатуры. может поэтому и нужен... хотя Вам виднее
18 viktor_vv
 
27.01.12
13:07
(16) Отож и я не пойму, нафик он нужен, ладно б еще вместе с элементом, понять можно, чтоб лишний раз потом не дергать, а так хз.
19 Ёпрст
 
27.01.12
13:08
(17) И ? нафига ? У тебя же запрос не к сторонней базе
:)
20 viktor_vv
 
27.01.12
13:10
(17) А по теме, у вас точно перемещения учитываются, о чем еще в начале сказали.
21 Последняя_
Надежда
 
27.01.12
13:16
(20) перемещения редкий случай, но бывают со склада на склад... но с тем товаром и с тем складом, по которому формируется данный запрос, нет перемещений.
22 Ёпрст
 
27.01.12
13:20
(21) у тя получилось, али нет ?
Если нет - показывай свой текст запроса, как фильтруешь и что не нравится
23 viktor_vv
 
27.01.12
13:27
(21) Че-то по складу не наблюдаю фильтра.
24 Последняя_
Надежда
 
27.01.12
13:32
(19) у меня запрос и к родной и к сторонней базе.
25 Последняя_
Надежда
 
27.01.12
13:34
(21) фильтра по складу как такового нет. есть группировка (в формирование временной таблицы со списком номенклатуры) где идет выборка только по указанным группам товара, а они все с одного склада. Хотя думаю это программе не важно.
26 Последняя_
Надежда
 
27.01.12
13:39
(12) не нравится ему закрывающаяся скобка в
   | Номенклатура in (select val from #vr_id_nom)
Ошибка запроса: Meta name parser error: это метаимя разрешить невозможно "$РегистрОстаткиОбороты.ОстаткиТМЦ"State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 9: Incorrect syntax near ')'.
27 Ёпрст
 
27.01.12
13:40
(26) мот ты текст запроса весь покажешь ?
Нам отсюда не видно ничернта
28 Последняя_
Надежда
 
27.01.12
14:00
может я обработку саму всю кину?
29 Ёпрст
 
27.01.12
14:00
да кидай
30 Последняя_
Надежда
 
27.01.12
14:01
31 Ёпрст
 
27.01.12
14:10
Вот тут у тебя шляпа:

тз = "        
       |INSERT INTO #vr_id_nom
       |SELECT Ном.id
       |FROM $Справочник.Номенклатура as Ном
       |INNER JOIN $Справочник.Номенклатура as ГрНом ON Ном.ParentID=ГрНом.id
       |WHERE ГрНом.Descr = '"+грНом1+"' or ГрНом.Descr='"+грНом2+"' or ГрНом.Descr='"+ГрНом3+"'
       |";
32 Ёпрст
 
27.01.12
14:14
На вопрос, почему, выполни это:

select * from  #vr_id_nom
33 Последняя_
Надежда
 
27.01.12
14:15
(31) (32) а может прокомментируете почему... я делать буду дольше...
34 Последняя_
Надежда
 
27.01.12
14:17
(31) как я это вижу: заполнить временную таблицу номерами из справочника номенклатура, если номенклатура входит в такие-то группы товаров
35 Ёпрст
 
27.01.12
14:19
(33) неккоректное условие на наименование группы справочника.
Да и .. достаточно было сделать УложитьОбъекты - так по крайней мере в список попали бы ВСЕ элементы принадлежащие этим группам, в том числе, и вложенные.

У тебя же - сравнение на только непосредственного родителя, это раз (вложенные элементы не учитываются), сравниваешь строки разной длины, это два.
36 Ёпрст
 
27.01.12
14:19
+35 точнее,УложитьСписокОбъектов
37 Ёпрст
 
27.01.12
14:21
|SELECT
   | СпрНом.Code as КодНоменклатуры,
   | Right(Ост.ПозицияДокумента,9) as [ДокДвижения $Документ],
   | Ост.ВидДокумента as ДокДвижения_вид,
   | КоличествоНачальныйОстаток as НачОст,
   | КоличествоПриход as Приход,
   | КоличествоРасход as Расход,
   | КоличествоКонечныйОстаток as КонОст,
   | FROM
   |$РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаОстатков,:ДатаОстатков~,Документ,Движения,
   | ,Номенклатура in (select id from #vr_id_nom),
   |(Номенклатура),(Количество)) as Ост
   |left JOIN $Справочник.Номенклатура as СпрНом ON СпрНом.ID=Ост.Номенклатура
   |";
38 Ёпрст
 
27.01.12
14:22
ну и так примерно, для останков
39 trad
 
27.01.12
14:25
офф/2
я например тоже обычно фильтрую join'ом, а не in'ом
и думаю в этом нет криминала
один хрен, этот ваш in сервер превратит в join
40 Последняя_
Надежда
 
27.01.12
14:28
(35) у меня нету вложенных групп. А сравнение строк разной длины - криминально?
41 Ёпрст
 
27.01.12
14:29
(40) в твоём случае нет, но где-то (щас не вспомню - да)
42 Последняя_
Надежда
 
27.01.12
14:31
результат тот же что и в (7)
43 Ёпрст
 
27.01.12
14:33
(43)

покажи скриншот
рс.выполнитьинструкцию(тз).ВыбратьСтроку()
44 Последняя_
Надежда
 
27.01.12
14:37
(43) не совсем поняла, что именно надо показать.
45 Ёпрст
 
27.01.12
14:38
(44) выполни код из (43) и покажи картинку того, что на экранчике будет
:)
46 Ёпрст
 
27.01.12
14:39
этот код воткни в получение останков
47 Последняя_
Надежда
 
27.01.12
14:42
48 Ёпрст
 
27.01.12
14:43
(47) :)
ну супер вообще
49 Последняя_
Надежда
 
27.01.12
14:45
ошибку выдает... потому как параметр преобразуется чуть ниже и в левую переменную
50 Ёпрст
 
27.01.12
14:45
вот так, что кажет ?
   тз="
   |SELECT
   | СпрНом.Code as КодНоменклатуры,
   | Right(Ост.ПозицияДокумента,9) as [ДокДвижения $Документ],
   | Ост.ВидДокумента as ДокДвижения_вид,
   | КоличествоНачальныйОстаток as НачОст,
   | КоличествоПриход as Приход,
   | КоличествоРасход as Расход,
   | КоличествоКонечныйОстаток as КонОст,
   | FROM
   |$РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаОстатков,:ДатаОстатков~,Документ,Движения,
   | ,Номенклатура in (select id from #vr_id_nom),
   |(Номенклатура),(Количество)) as Ост
   |left JOIN $Справочник.Номенклатура as СпрНом ON СпрНом.ID=Ост.Номенклатура
   |";
рс.УстановитьТекстовыйПараметр("ДатаОстатков",ДатаОстатков);
рс.выполнитьинструкцию(тз).ВыбратьСтроку();
51 Ёпрст
 
27.01.12
14:46
и это, группы то на форме там выбери что ли
52 Последняя_
Надежда
 
27.01.12
14:49
все так же как и на прошлом скрине. группы выбраны - на одной группе экспериментирую с одной позицией - чтобы быстрее было.
53 Ёпрст
 
27.01.12
14:52
так, для начала, вот так, есть че ?

   тз = "        
       |INSERT INTO #vr_id_nom
       |SELECT Ном.id
       |FROM $Справочник.Номенклатура as Ном
       |INNER JOIN $Справочник.Номенклатура as ГрНом ON Ном.ParentID=ГрНом.id
       |WHERE ГрНом.Descr = '"+грНом1+"' or ГрНом.Descr='"+грНом2+"' or ГрНом.Descr='"+ГрНом3+"'
       |";
       
       рс.Выполнить(тз);
               рс.выполнитьинструкцию("select * from #vr_id_nom").ВыбратьСтроку();
54 Последняя_
Надежда
 
27.01.12
15:01
55 Ёпрст
 
27.01.12
15:28
(54) уже лучше
и ?
запрос на останки ничего не возвращает ?
Они хоть есть  по это й номенклатуре ?
56 Mikeware
 
27.01.12
15:38
А если посмотреть просто все движения по этому регистру по номенклатуре - что в движениях?
57 Последняя_
Надежда
 
27.01.12
17:33
(56) как?
58 Mikeware
 
27.01.12
17:39
(57) Select * from $Регистр.ОстаткиТМЦ
с соответсвующими условиями и упорядочиванием...
59 Последняя_
Надежда
 
28.01.12
08:58
В общем ничего не понятно...
60 Mikeware
 
28.01.12
09:46
(59)типа
SELECT ОстаткиТМЦ.DATE_TIME_IDDOC ДатаВремяИдДок
   , ОстаткиТМЦ.IDDOC [Документ $Документ]
   , ОстаткиТМЦ.IDDOCDEF Документ_вид
   , ОстаткиТМЦ.LINENO_ НомерСтроки
   , ОстаткиТМЦ.DEBKRED ПриходРасход
   , $ОстаткиТМЦ.Фирма [Фирма $Справочник.Фирмы]
   , $ОстаткиТМЦ.Номенклатура [Номенклатура $Справочник.Номенклатура]
   , $ОстаткиТМЦ.Склад [Склад $Справочник.Склады]
   , $ОстаткиТМЦ.ЦенаПрод ЦенаПрод
   , $ОстаткиТМЦ.Количество Количество
   , $ОстаткиТМЦ.Внутреннее Внутреннее
   , $ОстаткиТМЦ.Внутрифирменные Внутрифирменные
FROM $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK)
WHERE (ОстаткиТМЦ.DATE_TIME_IDDOC > :НачДата)
   AND (ОстаткиТМЦ.DATE_TIME_IDDOC < :КонДата~)
   AND ($ОстаткиТМЦ.Номенклатура = :ВыбНоменклатура)
ORDER BY $ОстаткиТМЦ.Номенклатура
   , ОстаткиТМЦ.DATE_TIME_IDDOC
61 Последняя_
Надежда
 
28.01.12
10:01
не хотит (((
Ошибка запроса: Meta name parser error: не указан параметр ":НачДата"
62 Mikeware
 
28.01.12
10:05
(61) ну так укажи
63 miki
 
28.01.12
10:11
(57)regprint.ert
64 Mikeware
 
28.01.12
10:15
(63) :-)) я его так и видел никогда...
65 Последняя_
Надежда
 
28.01.12
10:46
(63) надо поискать... по-любому на дисках итс должен быть
66 Mikeware
 
28.01.12
10:52
-Сколько тебе лет, Вася?
-- Сам ты тормоз!!
©
67 Последняя_
Надежда
 
31.01.12
14:12
Хм... ничего нового не увидела. кто-нибудь может показать скрин своего отчета по регистру ОстаткиТМЦ по итогам (столбцы Нач.Ост.,Приход,Расход,Кон.Ост. с данными)??? может я чего-то не понимаю в работе регистра...
68 Mikeware
 
31.01.12
15:06
(67) а что увидела?
69 Последняя_
Надежда
 
01.02.12
09:29
(68) тоже что и в (7)
70 Ёпрст
 
01.02.12
11:48
(69) а что ты видишь в(7) ?
скриншот есть ?
71 Последняя_
Надежда
 
01.02.12
11:52
(70) вижу что в регистре не то что по факту. т.е. откуда-то берутся какие-то приходы и расходы. Хотя по факту приходов нет, а есть только расход. В (7) есть табличка - скриншот такой же будет (через / указано мое ожидание согласно данным)
72 Ёпрст
 
01.02.12
11:57
(71) ё..
давно бы уже поимело такую табличку:

ДокументДвиженияРегистра  Измерение НачОст Приход Расход КонОст

там всё наглядно - что откуда и куда.
73 Последняя_
Надежда
 
01.02.12
12:21
74 Ёпрст
 
01.02.12
12:31
И ?
что не устраивает ?!!!

104 -20 = 84

5+3+12 = 20..
75 Ёпрст
 
01.02.12
12:35
или ты про верхнюю табличку ?
Дык открой движения документов и смотри, кто там у тебя делает приход и почему в движениях регистра.
76 Последняя_
Надежда
 
01.02.12
12:36
(74) это в ведомости по остаткам все нормально. А почему в регистре приход-20, а расход-40 ???  (75) нижняя табличка как раз с движением!
77 Ёпрст
 
01.02.12
12:39
(76) выгрузи результат работы прямого запроса в ТЗ, выбери строку и результат в студию.
78 Ёпрст
 
01.02.12
12:40
>>>А почему в регистре приход-20, а расход-40 ?

еще раз, открой движения регистра этих документов в общем журнале документа (пкм на доке - движения регистров- нужный регистр - смотри глазёнками)
и гляди, какие записи пишутся в регистр
79 Mikeware
 
01.02.12
12:46
Или выполни (60), и скрин...
80 Последняя_
Надежда
 
01.02.12
13:32
(78) не ругайте меня... разобралась в "своем" дурацком учете...
81 miki
 
01.02.12
13:34
(80)где отчет?
82 Ёпрст
 
01.02.12
13:37
(80) и ?
че было то хоть ?
83 Последняя_
Надежда
 
01.02.12
13:40
эти движняки из-за того что товар оприходован на одну фирму, а продажа с другой.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан