Имя: Пароль:
1C
1C 7.7
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) Не вариант соединением делать, поскольку обычно в новом документе требуется выполнять эту процедуру, а записывать заставлять пользователя тоже не гуд, может он передумает создавать документ.
Вобщем выкрутился как мог, спасибо за наводки.