|
МоментВремени в запросе | ☑ | ||
---|---|---|---|---|
0
1С_Дурик
12.01.12
✎
13:43
|
Добрый день. При использовании МоментВремени, запрос выполняется очень . В чем может быть проблема.Спасибо
МоментДокумента = Новый МоментВремени(Ссылка.Дата,Ссылка); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Счет",Счет); Запрос.УстановитьПараметр("Склад",Склад); Запрос.УстановитьПараметр("Номенклатура",Номенклатура); Запрос.УстановитьПараметр("Дата",МоментДокумента); Если дата = Неопределено Тогда Запрос.Текст = "ВЫБРАТЬ | Остатки.КоличествоОстатокДт КАК Остаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | , | Счет = &Счет, | , | Субконто1 = &Номенклатура | И Субконто2 = &Склад) КАК Остатки"; Иначе Запрос.Текст = "ВЫБРАТЬ | Остатки.КоличествоОстатокДт КАК Остаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &Дата, | Счет = &Счет, | , | Субконто1 = &Номенклатура | И Субконто2 = &Склад) КАК Остатки"; КонецЕсли; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); |
|||
1
vicof
12.01.12
✎
13:44
|
очень быстро?
|
|||
2
Cube
12.01.12
✎
13:44
|
(0) Ну дык, без использования МоментВремени, запрос будет выполняться не очень...
|
|||
3
1С_Дурик
12.01.12
✎
13:45
|
*очень долго
|
|||
4
1С_Дурик
12.01.12
✎
13:46
|
без использования остатки не правильные
|
|||
5
DrShad
12.01.12
✎
13:46
|
Остатки без даты берет текущие, а с датой рассчитывает
|
|||
6
Cube
12.01.12
✎
13:47
|
Если дата = Неопределено Тогда
Что за переменная "Дата" и где она присваивается? |
|||
7
1С_Дурик
12.01.12
✎
13:47
|
реквизит документа
|
|||
8
Cube
12.01.12
✎
13:48
|
(7) Как реквизит документа типа "Дата" может быть равен Неопределено? У тебя это условие всегда возвращает ЛОЖЬ...
|
|||
9
1С_Дурик
12.01.12
✎
13:49
|
А если использовать Ссылка.МоментВремени() на сколько будут точные остатки?
|
|||
10
Cube
12.01.12
✎
13:49
|
(9) Да хоть что используй, у тебя в любом случае выполняется первый запрос, втрой никогда не выполняется.
|
|||
11
Cube
12.01.12
✎
13:50
|
(10) То есть, выполняется только второй
|
|||
12
Cube
12.01.12
✎
13:50
|
запрос...
|
|||
13
Cube
12.01.12
✎
13:51
|
(0) Ты это при проведении документа, поди, делаешь, да?)
|
|||
14
1С_Дурик
12.01.12
✎
13:51
|
извиняюсь, не реквизит документа, я передаю
|
|||
15
1С_Дурик
12.01.12
✎
13:52
|
(13) ага
|
|||
16
Cube
12.01.12
✎
13:52
|
(14) Что передаешь? Эстафету? Кому?)) Выражайся конретнее.
|
|||
17
1С_Дурик
12.01.12
✎
13:53
|
(16)
ПроверитьОстаток(Ссылка,Строчка.Счет,Ссылка.Склад,Строчка.Номенклатура,Ссылка.Дата); ПроверитьОстаток(Ссылка,Счет,Склад,Номенклатура,Дата=Неопределено) |
|||
18
Cube
12.01.12
✎
13:53
|
(15) Ага... А документу разрешено оперативное проведение и проводишь ты его текущей датой, угадал?
|
|||
19
Rovan
гуру
12.01.12
✎
13:53
|
(0) а по какой день у тебя в регистре итоги рассчитаны ?
|
|||
20
Cube
12.01.12
✎
13:54
|
(17) Вместо "дата = Неопределено" используй "ЗначениеЗаполнено(Дата)"...
|
|||
21
hhhh
12.01.12
✎
13:54
|
(15) по-любому текущий остаток быстрее, хоть ты дерись. Потому что он уже есть, а если на дату, то 1С его рассчитывает из 2-х таблиц.
|
|||
22
Cube
12.01.12
✎
13:55
|
(20) А ещё лучше сделай так:
ПроверитьОстаток(Ссылка,Строчка.Счет,Ссылка.Склад,Строчка.Номенклатура, ?(ЗначениеЗаполнено(Ссылка.Дата, Ссылка.Дата, ТекущаяДата())); И запрос один оставь, тот который с параметром "Дата". |
|||
23
1С_Дурик
12.01.12
✎
13:56
|
(19) Дата документа 01.12.2011 23.59.59 итоги 31.12.2011
|
|||
24
Cube
12.01.12
✎
13:57
|
(22) О, лучше не так, а вот так:
ПроверитьОстаток(Ссылка,Строчка.Счет,Ссылка.Склад,Строчка.Номенклатура, ?(Ссылка.Пустая(), ТекущаяДата(), МоментВремени())); Ну как-то так, направление я думаю, ты понял. |
|||
25
Cube
12.01.12
✎
13:58
|
(23) Ответь на (18).
|
|||
26
1С_Дурик
12.01.12
✎
13:59
|
(18) неоперативно провожу
|
|||
27
RomanYS
12.01.12
✎
13:59
|
База файловая и в сети?
А вообще уходи от запроса в цикле, делай проверку одним запросом. |
|||
28
1С_Дурик
12.01.12
✎
14:00
|
(27) SQL
|
|||
29
Cube
12.01.12
✎
14:03
|
(26) Ты не ответил на вопрос.
|
|||
30
AndOne
12.01.12
✎
14:04
|
Обращение к таблице остатков без указания вида субконто, сомнительное удовольствие.
|
|||
31
RomanYS
12.01.12
✎
14:07
|
(30) поддерживаю
+(27) один запрос на документ будет выполняться ненамного дольше чем твои запросы для каждой строки |
|||
32
Cube
12.01.12
✎
14:10
|
(31) Один запрос будет выполняться гарантированно быстрее, чем его запросы для каждой строки. А за запросы в цикле, обычно, расстреливают без суда и следствия... :)
|
|||
33
RomanYS
12.01.12
✎
14:10
|
* чем каждый запрос для одной строки
|
|||
34
RomanYS
12.01.12
✎
14:10
|
(32) я про тоже, а (0) проверяет построчно
|
|||
35
afk
12.01.12
✎
14:22
|
(0) очень долго - это сколько в секундах?
|
|||
36
1С_Дурик
12.01.12
✎
14:42
|
(35) 5-10
|
|||
37
Fragster
гуру
12.01.12
✎
14:48
|
на какую дату итоги рассчитаны?
|
|||
38
1С_Дурик
12.01.12
✎
14:53
|
(32) помогите передалать запрос, мне не понятно как будут определять номенклатура и счет, когда я ТЗ передаю, что передавать в &Счет и &Номенклатура.
Запрос.Текст = "ВЫБРАТЬ | Остатки.КоличествоОстатокДт КАК Остаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &Дата, | Счет В (&Счет), | , | Субконто1 В (&Номенклатура) | И Субконто2 = &Склад) КАК Остатки"; |
|||
39
1С_Дурик
12.01.12
✎
14:53
|
(37) 31 12 2011
|
|||
40
kabanoff
12.01.12
✎
15:02
|
(0)+(17) ужас какой...
(38) Все можно сделать одним запросом. Получай ТЗ из самого документа и помещай результат во временную таблицу, затем эту таблицу соединяй с регистром остатков. |
|||
41
1С_Дурик
12.01.12
✎
15:03
|
(40) пример можно?!
|
|||
42
kabanoff
12.01.12
✎
15:06
|
(40) ну или делай так (конкретный пример):
Процедура ПроверкаОстатка(Отказ)
|
|||
43
kabanoff
12.01.12
✎
15:12
|
(42) Запрос, конечно, лучше сделать к таблице непосредственно самого документа:
ВЫБРАТЬ
|
|||
44
Fragster
гуру
12.01.12
✎
15:16
|
(43) зачем? лишний раз базу подергать? а если это в "передЗаписью"?
|
|||
45
kabanoff
12.01.12
✎
15:19
|
(42) Строку:
Запрос.УстановитьПараметр("НаДату", Новый Граница(Дата, ВидГраницы.Включая));
надо заменить на: Запрос.УстановитьПараметр("НаДату", Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая));
иначе при перепроведении документа будут учитываться остатки с его собственными движениями. Ну и код: СгруппированныеТовары = Товары.Выгрузить();
выкосить за ненадобностью. |
|||
46
Fragster
гуру
12.01.12
✎
15:30
|
(45) а если при перепроведении сдвинули дату вперед? надо еще с таблицей регистра объединить с отбором по ссылке, дате и вывернутыми движениями.
а вообще - нужно просто после записи посмотреть "а что это мы нафигачили" и если что - откатить |
|||
47
kabanoff
12.01.12
✎
15:53
|
(46) Ну тогда надо запрещать изменять дату проведенного документа :)
А насчет "откатить" - этот принцип используется в 8.2, там парадигма несколько другая. В 8.1 это будет не оптимально. |
|||
48
1С_Дурик
12.01.12
✎
15:56
|
Сделал вот так запрос. Для 110 позиций выполнялся около 1 мин
ВЫБРАТЬ | Товары.Номенклатура, | Товары.Счет, | Товары.Количество |ПОМЕСТИТЬ Товары |ИЗ | &ТЧОстатков КАК Товары |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Товары.Номенклатура, | ВложенныйЗапрос.КоличествоОстатокДт КАК Остаток, | ВложенныйЗапрос.КоличествоОстатокДт - Товары.Количество КАК КонОстаток |ИЗ | Товары КАК Товары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ХозрасчетныйОстатки.КоличествоОстатокДт КАК КоличествоОстатокДт, | ХозрасчетныйОстатки.Счет КАК Счет, | ХозрасчетныйОстатки.Субконто1 КАК Субконто1, | ХозрасчетныйОстатки.Субконто2 КАК Субконто2 | ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , ,Субконто2 = &Склад) КАК ХозрасчетныйОстатки) КАК ВложенныйЗапрос | ПО Товары.Номенклатура = ВложенныйЗапрос.Субконто1 | И Товары.Счет = ВложенныйЗапрос.Счет"; |
|||
49
kabanoff
12.01.12
✎
15:56
|
(44) Ну контроль остатков обычно выполняется в обработке проведения.
А так согласен, нужно думать головой и решать в каждом конкретном случае. |
|||
50
kabanoff
12.01.12
✎
16:02
|
(48)
1. Ты е%анулся? Получать остатки по РБ без указания счета - это глупость. 1.1. У тебя остатки номенклатуры могут на разных счетах лежать? 2. Пользуйся ограничением типов по субконто и конструкцией ВЫРАЗИТЬ(). 3. Используй ограничение по номенклатуре в параметрах виртуальной таблицы Остатков РБ (как это сделано в (42). 4. В данном случае запрос к остаткам РБ можно делать без вложенного запроса. |
|||
51
1С_Дурик
12.01.12
✎
16:08
|
(50) 1.Разве я не указал??? "И Товары.Счет = ВложенныйЗапрос.Счет"
|
|||
52
hhhh
12.01.12
✎
16:11
|
(51) вот ты указал
ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , ,Субконто2 таблица остатков формируется по всему плану счетов. Там счетов 150-200. |
|||
53
1С_Дурик
12.01.12
✎
16:16
|
не пойму как сделать, помогите пожалуйста
|
|||
54
hhhh
12.01.12
✎
16:54
|
(&Дата, , Счет В (&СписокСчетов),Субконто2
|
|||
55
1С_Дурик
12.01.12
✎
16:59
|
Так правильно будет?
РегистрБухгалтерии.Хозрасчетный.Остатки( | &Дата, | Счет В | (ВЫБРАТЬ | Товары.Счет | ИЗ | Товары), | , | Субконто2 = &Склад) КАК ХозрасчетныйОстатки |
|||
56
1С_Дурик
12.01.12
✎
19:07
|
подскажите альтернативу МоментВремени, при использовании, запрос выполняется 7.355 сек, при использовании Граница 0.423 сек. Итоги пересчитал, тестирование и исправление ИБ делал, ничего не помогает...
|
|||
57
kabanoff
13.01.12
✎
09:54
|
(55) Да, только добавь еще ограничение по типам субконто в параметры виртуальной таблицы:
&СписокСубконто
где СписокСубконто - список значений с элементами ПВХ "ВидыСубконтоХозрасчетные". и вырази тип Субконто2, т.е. ВЫРАЗИТЬ(Субконто2 КАК Справочник.Склады) = &Склад
Индексирование еще по счету во временную таблицу добавь: ИНДЕКСИРОВАТЬ ПО Счет, Номенклатура |
|||
58
1С_Дурик
13.01.12
✎
12:40
|
сделал вот так, ругается
Ошибка обработки представления "РегистрБухгалтерии.Хозрасчетный.Остатки:Недопустимое значение параметра виды субконто." Запрос.УстановитьПараметр("СписокСубконто",ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные); Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Счет КАК Счет, | Товары.Количество |ПОМЕСТИТЬ Товары |ИЗ | &ТЧОстатков КАК Товары | |ИНДЕКСИРОВАТЬ ПО | Счет, | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Товары.Номенклатура, | ВложенныйЗапрос.КоличествоОстатокДт КАК Остаток, | ВложенныйЗапрос.КоличествоОстатокДт - Товары.Количество КАК КонОстаток |ИЗ | Товары КАК Товары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ХозрасчетныйОстатки.КоличествоОстатокДт КАК КоличествоОстатокДт, | ХозрасчетныйОстатки.Счет КАК Счет, | ХозрасчетныйОстатки.Субконто1 КАК Субконто1, | ХозрасчетныйОстатки.Субконто2 КАК Субконто2 | ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &Дата, | Счет В | (ВЫБРАТЬ | Товары.Счет | ИЗ | Товары), | &СписокСубконто, | ВЫРАЗИТЬ(Субконто2 КАК Справочник.Склады) = &Склад) КАК ХозрасчетныйОстатки) КАК ВложенныйЗапрос | ПО Товары.Номенклатура = ВложенныйЗапрос.Субконто1 | И Товары.Счет = ВложенныйЗапрос.Счет"; |
|||
59
hhhh
13.01.12
✎
12:51
|
(58) ну вот это бред ИМХО
Запрос.УстановитьПараметр("СписокСубконто",ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные); |
|||
60
kabanoff
13.01.12
✎
12:55
|
(58) Очевидно надо сделать так:
СписокСубконто = Новый СписокЗначений;
|
|||
61
1С_Дурик
13.01.12
✎
13:46
|
спасибо. Запрос работает, но проблема осталась, долго выполняется. Если момент времени использую = 14,773 сек, если ссылка.дата = 4,417 сек
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |