|
v7: Получить последнее движение по регистру. | ☑ | ||
---|---|---|---|---|
0
Andreyyy
09.11.12
✎
08:08
|
Чем можно заменить этот тормозной код выполняющийся в цикле:
ВремЦеныНаСкладах = СоздатьОбъект("Регистр.ЦеныНаСкладах"); ВремЦеныНаСкладах.УстановитьЗначениеФильтра("Склад", СкладПриемник); ВремЦеныНаСкладах.УстановитьЗначениеФильтра("Товар", Товар); ВремЦеныНаСкладах.ОбратныйПорядок(1); ВремЦеныНаСкладах.ВыбратьДвижения('01.09.2012', ДатаДок); Если ВремЦеныНаСкладах.ПолучитьДвижение() > 0 Тогда Цена = ВремЦеныНаСкладах.Цена; КонецЕсли; |
|||
1
zak555
09.11.12
✎
08:10
|
это типа рс периодический ?
|
|||
2
ДенисЧ
09.11.12
✎
08:10
|
select top 1 * from $Регистр.ЦеныНаСкладах рег
order by рег.date_time_iddoc |
|||
3
aka AMIGO
09.11.12
✎
08:13
|
(1)это 7-ка.
(0) выбирай документы поступления черным запросом авось поможет |
|||
4
ДенисЧ
09.11.12
✎
08:15
|
(3) А что, в 7.7.28 появилось в запросе Упорядочить УБЫВ?
|
|||
5
Andreyyy
09.11.12
✎
08:34
|
(2) Это по всей видимости 1С++ ? так и придется браться за изучение.
|
|||
6
ДенисЧ
09.11.12
✎
08:38
|
(5) Он. Но можно и простым ADO :-)
|
|||
7
Andreyyy
09.11.12
✎
08:43
|
(6) Не легче)
|
|||
8
aka AMIGO
09.11.12
✎
08:45
|
(4)нет, еще 28 пока не появилась :)
|
|||
9
dk
09.11.12
✎
08:50
|
зависит от цикла и объема данных
можно 1. выбрать в ТЗ все движения по фильтру склад + список номенклатуры 2. отсортировать по дате / документам 3. в цикле искать уже по ТЗ -- но если много оборотов или список номенклатуры большой, то можно проиграть в скорости |
|||
10
Ёпрст
09.11.12
✎
10:15
|
(4) давно.. по функции можно упорядочить в любом прорядке, почти всё что угодно
|
|||
11
Andreyyy
16.11.12
✎
21:34
|
Подниму ветку.
(2) Мне удалось одолеть запуск запроса на 1С++ в DBF, вот что получилось: ТекстЗапроса = " |select top 1 |$рег.Склад as Товар, |$рег.Поставщик as Поставщик, |$рег.Товар as Товар, |$рег.ТипЦеныНаСкладе as ТипЦеныНаСкладе, |$рег.Цена as Цена, |рег.DATE as Дата |from $Регистр.ЦеныНаСкладах as рег |WHERE |$рег.Склад = :Склад AND |$рег.Поставщик = :Поставщик AND |$рег.Товар = :Товар |order by рег.Date"; Поля "date_time_iddoc" в DBF по видимому нет + выдает первое значение по движению, а не последнее. Отсюда два вопроса: 1. Как сделать упорядочивание не только по дате, но и по времени. 2. И как получить последнее движение, как в (0). |
|||
12
КонецЦикла
16.11.12
✎
21:40
|
Заглянул бы хоть в дбф и dd
Там отдельные поля для даты, времени и иддок |
|||
13
Andreyyy
16.11.12
✎
21:43
|
(12) С временем разобрался вроде |order by рег.DATE,рег.TIME
но какая инструкция нужна для сортировки в обратном порядке не знаю. |
|||
14
КонецЦикла
16.11.12
✎
21:46
|
ORDER BY ... DESC
|
|||
15
Andreyyy
16.11.12
✎
21:51
|
(14) При варианте order by рег.DATE,рег.TIME DESC
Выдает первую запись. А если order by рег.DATE DESC, то не отрабатывает "TOP", но сортирует правильно. |
|||
16
Andreyyy
16.11.12
✎
21:51
|
+(15) т.е. выдает все записи
|
|||
17
Andreyyy
16.11.12
✎
21:52
|
Наверное вот так правильно |order by рег.DATE DESC,рег.TIME DESC ?
Но как избавиться от всех записей, делать подзапрос ? |
|||
18
Mikeware
16.11.12
✎
21:53
|
(16) где-то кто-то говорит неправду...
|
|||
19
Andreyyy
16.11.12
✎
21:59
|
(18)
ТекстЗапроса = " |select top 1 |$рег.Склад as Товар, |$рег.Поставщик as Поставщик, |$рег.Товар as Товар, |$рег.ТипЦеныНаСкладе as ТипЦеныНаСкладе, |$рег.Цена as Цена, |рег.DATE as Дата, |рег.TIME as Время |from $Регистр.ЦеныНаСкладах as рег |WHERE |$рег.Склад = :Склад AND |$рег.Поставщик = :Поставщик AND |$рег.Товар = :Товар |order by рег.DATE DESC,рег.TIME DESC"; Выдает две записи. |
|||
20
ВалераОшкин
16.11.12
✎
22:00
|
(0) Максимум(РегистрЦеныНаСкладах.Период)
|
|||
21
ВалераОшкин
16.11.12
✎
22:00
|
(0) > Чем можно заменить этот тормозной код выполняющийся в цикле
Переходом на платформу 8.2 |
|||
22
Andreyyy
16.11.12
✎
22:00
|
+(19) Но что интересно, у второй записи поле "DATE" одинаковая с первой.
|
|||
23
Andreyyy
16.11.12
✎
22:09
|
Дошло ! Последний документ формирует две записи, одна приход, другая расход, оттого и две. Как выбрать только последний приход ?
|
|||
24
Andreyyy
16.11.12
✎
22:14
|
Всем, спасибо "DEBKRED" спас.
|
|||
25
КонецЦикла
16.11.12
✎
22:14
|
:)
Быстро сообразил |
|||
26
Andreyyy
16.11.12
✎
22:23
|
Блин, беда не приходит одна.
Если убираю в фильтре товар, то запрос выдает только одну последнюю запись, а мне хотелось бы все по складу. ТекстЗапроса = " |select top 1 |$рег.Склад as Товар, |$рег.Поставщик as Поставщик, |$рег.Товар as Товар, |$рег.ТипЦеныНаСкладе as ТипЦеныНаСкладе, |$рег.Цена as Цена, |рег.DATE as Дата, |рег.TIME as Время |from $Регистр.ЦеныНаСкладах as рег |WHERE |$рег.Склад = :Склад AND |$рег.Поставщик = :Поставщик AND // |$рег.Товар = :Товар AND |рег.DEBKRED = 0 |order by рег.DATE DESC,рег.TIME DESC"; RecordSet.УстановитьТекстовыйПараметр("Склад", ВыбСклад); // RecordSet.УстановитьТекстовыйПараметр("Товар", ВыбТовар); RecordSet.УстановитьТекстовыйПараметр("Поставщик", ВыбПоставщик); Это можно как-то побороть и если можно то куда копать ? |
|||
27
Andreyyy
16.11.12
✎
22:41
|
Медленно в цикле выполняется, один запрос примерно секунду. Был бы благодарен за подсказку как выйти из положения.
|
|||
28
Andreyyy
17.11.12
✎
11:48
|
Однако опять подниму.
Не стал париться с (26), все выгружаю в таблицу значений, она уже отсортирована, остается найти первую строку с товаром и все классно. Возник вопрос как установить условие на позицию документа, в инете нашел только условия на виртуальные таблицы. |
|||
29
Mikeware
17.11.12
✎
13:45
|
(28) Если флаг БыстрыеДвижения - она уже есть. если флага нет - джойнь с журналом.
|
|||
30
Andreyyy
17.11.12
✎
14:21
|
Попробую переписать, поскольку и соединение сделал через ODBC, а там в DBF нельзя метод "УложитьСписокОбъектов" использовать, а нужно в таком случае через OLE DB. И таблицу брать виртуальную. Вобщем чем дальше в лес, тем больше дров. А такая мелочь нужна.
|
|||
31
Mikeware
18.11.12
✎
10:18
|
(30)"А такая мелочь нужна." тогда давай начинать с задачи, а не с твоего метода ее решения :-)))
|
|||
32
Andreyyy
20.11.12
✎
22:18
|
(31) Есть регистр "Склад,Товар,Цена - Количество". Когда делают перемещение на склад хотелось бы получить последнюю цену этого товара на этом складе. Периодические реквизиты справочника не рассматриваются. Такая вобщем тривиальная задача.
|
|||
33
Mikeware
21.11.12
✎
08:00
|
(32) Если у тебя документ при получении цены уже записан - тебе не требуется УложитьСписокбъектов, тебе надо джойнить с табчастью.
Как в запросе к дбф получить последние скопом я не знаю (у драйвера фокса свои фишки), в сиквеле я бы обернул в запрос с Макс(Дата)... гроуп бай номенклатура |
|||
34
Andreyyy
21.11.12
✎
11:40
|
(33) Не вариант соединением делать, поскольку обычно в новом документе требуется выполнять эту процедуру, а записывать заставлять пользователя тоже не гуд, может он передумает создавать документ.
Вобщем выкрутился как мог, спасибо за наводки. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |