Имя: Пароль:
1C
1С v8
Помогите с запросом
,
0 Мэс33
 
18.06.13
15:58
Всем привет.

Вопрос по запросу к регистру накопления.

Ситуация такая, как пример:
- в регистре "СуперРегистр" есть два измерения: КлассификаторЧегоЛибо (справочник "КлассификаторЧегоЛибо") и НекийНомерДоговора (тип "Число")
- и есть ресурс: ну скажем "Количество" (тип тоже "Число")

И к примеру есть в регистре записи (по порядку: измерение1 / измерение2 / значение1):
: ТТТТ : 100 : 333
: NNNN : 200 : 444
: ТТТТ : 100 : 555
: NNNN : 200 : 666

Нужно запросом вытащить остатки по регистру по следующим значениям измерений:
(TTTT + 100) и (NNN + 200).

Как это сделать? Не соображу. Если в запросе написать типа
-----------------------------
ИЗ
РегистрНакопления.СуперРегистр.Остатки(
,
НекийНомерДоговора В (&НекийНомерДоговора )
И КлассификаторЧегоЛибо В (&КлассификаторЧегоЛибо)) КАК СуперРегистрОстатки
-----------------------------
То выйдут все записи, а нужны только две..

Что делоть?
Спасибо.
1 lEvGl
 
гуру
18.06.13
16:01
что значит ТТТТ + 100 ? Сумма остатков по измерению ТТТТ?
2 salvator
 
18.06.13
16:03
ИЗ
РегистрНакопления.СуперРегистр.Остатки(
,
(НекийНомерДоговора = &НомерДоговора100
И КлассификаторЧегоЛибо = &КлассификаторТТТТ) ИЛИ (НекийНомерДоговора = &НомерДоговора200
И КлассификаторЧегоЛибо = &КлассификаторNNNN)) КАК СуперРегистрОстатки
3 DarKySiK
 
18.06.13
16:03
(0) в значениях параметров точно в все нормально?
4 Мэс33
 
18.06.13
16:05
(1) То есть, чел к примеру в табличной части документа заполнил:
ТТТТ :: 100
NNNN :: 200

Мне надо по ним проверить остатки.
5 Мэс33
 
18.06.13
16:06
(2) Это было бы гуд, если бы значений было ограниченное количество. На самом деле их миллионы. Миллионы номеров документов и около 20 классификаторов. И более того, в живой базе 5 измерений, а не два, которые я привел в качестве примера.
6 salvator
 
18.06.13
16:09
(5) И как соответствие "классификатор - номер документа" определять?
7 Мэс33
 
18.06.13
16:09
(6) Вот в этом-то и вопрос. Как лучше сделать.
8 DarKySiK
 
18.06.13
16:13
(7) а получить таблицу соответствий реально?
9 DarKySiK
 
18.06.13
16:14
(8) я имею в виду таблицу, которую можно во временную таблицу запихать
10 salvator
 
18.06.13
16:14
(7) Интересный ты. А как ты хочешь получить информацию по остаткам, если не знаешь как получить это соответствие?
11 Мэс33
 
18.06.13
16:16
(10) Я не знаю, как получить соответствие (а его наверное и не получишь), потому и обратился за помощью.
12 Мэс33
 
18.06.13
16:18
Фактически - этот модуль ведет учет БСО, но сами БСО создавать не стали, а просто гуляют номера БСО туда-сюда. Модуль уже написан, достался в наследство. Поэтому тяжело создать соответствие - так как номера БСО получаются не уникальными.
13 DarKySiK
 
18.06.13
16:19
(4) тьфу ты... не увидела.. Ну можно сначала отобрать остатки как в (0), а потом внутренним соединением с табличной частью :) Долго, а что делать:)
14 salvator
 
18.06.13
16:19
(11) Ну ты же написал в примере:
для TTTT - 100
для NNNN - 200.
Значит должна быть какая-то логика. Иначе как программе втолковать, что от нее требуется? :)
15 Мэс33
 
18.06.13
16:19
В настоящий момент проверка на остатки есть, но написано не оптимально и банальное проведение списания БСО вешает всех пользователей, не смотря на то, что к документу привязан один регистр.
16 Мэс33
 
18.06.13
16:21
(14) Логика простая:
по ТТТТ - 100 найти остаток 333, и по NNNN - 200 найти остаток 666.
Если искать по отдельности, сначала первую комбинацию, потом вторую - то нет проблем.
А нужно сразу "одним махом" :-)
17 Мэс33
 
18.06.13
16:25
(13) Долго - не то слово.
18 Мэс33
 
18.06.13
16:25
(17) Хотя и быстрее будет текущего решения.
19 Мэс33
 
18.06.13
16:25
(18) в смысле имеющегося решения
20 viktor_vv
 
18.06.13
16:35
(19) Я так понял вот здесь появляется соотвествие

(4)

ТТТТ :: 100

Тогда поясни в каком виде это вносится, в отдельные реквизиты табличной части , или в один в виде строки?
21 Мэс33
 
18.06.13
16:36
(20) В отдельные реквизиты табличной части.
22 viktor_vv
 
18.06.13
16:36
(20)+ И что значат эти точечки ?
23 Мэс33
 
18.06.13
16:37
(22) Ничего не значат, просто я не знаю как тут на форуме таблицу нарисовать. Теги html не поддерживаются ведь?
24 Мэс33
 
18.06.13
16:38
Повторю вопрос:
В регистре накопления лежат данные:
: ТТТТ : 100 : 333
: NNNN : 200 : 444
: ТТТТ : 100 : 555
: NNNN : 200 : 666

В документе забили такие данные:
: ТТТТ : 100 : <Остаток1>
: NNNN : 200 : <Остаток2>

Надо по ним проверить остатки.
25 viktor_vv
 
18.06.13
16:40
Если в лоб, то

ИЗ
Документ.ГдеВноситсяСоотвествие.ТабличнаяЧасть КАК табЧасть
Левое соединение

РегистрНакопления.СуперРегистр.Остатки(
,
) КАК СуперРегистрОстатки
ПО
табЧасть.ИдентификаторРеквизитаКлассификаторЧегоЛибо = СуперРегистрОстатки.КлассификаторЧегоЛибо
И табЧасть.ИдентификаторНомерДоговра = СуперРегистрОстатки.НомерДоговра
26 viktor_vv
 
18.06.13
16:41
(25) +

ГДЕ
  табЧасть.Ссылка = &СсылкаНаДокумент
27 Мэс33
 
18.06.13
16:43
(26) В чем минус этого решения?
28 viktor_vv
 
18.06.13
16:44
Ну и в параметры можно таки прилепить условие на измерения из документа, как выше было.

НекийНомерДоговора В (&НекийНомерДоговора )
И КлассификаторЧегоЛибо В (&КлассификаторЧегоЛибо)

только в &НекийНомерДоговора и &КлассификаторЧегоЛибо выгрузить соотвествующую колонки табчасти.
29 viktor_vv
 
18.06.13
16:44
(27) Да просто без условия на измерения в параметрах виртуальной таблицы.
В (28) написал уточнение.
30 Мэс33
 
18.06.13
16:46
(29) Так, спасибо за совет.
Попробуем завтра днем изменить запрос.
Просто там параметров 5, а не 2 (я просто пример привел).
В табличной части по факту указывается не чисто номер, а диапазон ("с номер1 по номер2"). Но это не проблема. Примерный путь решения понял, попробуем.
31 viktor_vv
 
18.06.13
16:47
И учитывая (24) Сразу в запросе проверяй равенство, и отбирай только отличающиеся, если надо.
Если формируешь из формы документа, проверяй модифицированность, чтобы выполнять запрос, только если записан последний вариант документа.
32 Мэс33
 
18.06.13
16:52
(31) Спасибо.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.