Имя: Пароль:
1C
 
Как в запросе выбрать строки с № по №2 позицию
0 Skazy
 
03.06.11
15:46
Нужна помощь! Для передачи остатков товаров на сайт, нужно передавать данные постранично, т.е. по заданному кол-ву строк и с определенной строки. Можно ли, написать запрос, чтобы выбирать результат запроса с нужной позиции и нужное кол-во строк? Чтобы каждый раз не формировать все остатки на складе. Сортировка идет по артикулу товара, артикул 8 символов строка. У меня единственный вариант, выгружать остатки в талицу, в ней отбирать нужные позиции и отдавать. Но получается, каждый раз я получаю все остатки, т.е. теряю скорость... Спасибо. Извините, если сумбурно написал.... Пятница ;)
1 Сисой
 
03.06.11
15:49
Выгрузи остатки в ТЗ.
Добавь колонку и пронумеруй строки в цикле.
Далее менеджер временных таблиц и в цикле

ВЫБРАТЬ *
ИЗ МояТаблица
ГДЕ НомерСтроки МЕЖДУ &N1 И &N2
2 forforumandspam
 
03.06.11
15:50
Создай реквизит номенклатуре "порядок выгрузки" и получай остатки "где ПорядокВыгрузки = &ПорядокВыгрузки"
3 luckyluke
 
03.06.11
15:53
(0) ну первая идея которая мне пришла в голову, вложенный запрос Выбрать первые &НомерСтрокиНачало + &КолвоСтрокНаСтраницу ... упорядочить по Артикул, а из вложенного запроса Выбрать Первые &КолвоСтрокНаСтраницу ... Упорядочить По Артикул Убыв
4 Skazy
 
03.06.11
15:56
(1) Получается каждый раз заново формировать ВСЕ остатки!
(2) Хм.... У меня же остатки! Какой порядок в них ;)
(3) Если честно не понял.... Подробнее можно?
5 luckyluke
 
03.06.11
15:57
(4) в общем идея в том, что Первым вложенным обрезать кол-во строк номер позиции + кол-во строк на страницу для вывода, а внешним обрезать с конца кол-во на страницу.
6 acsent
 
03.06.11
15:58
Запоминаешь последнюю строку в 1 выборке и делаешь
ВЫБРАТЬ ПЕРВЫЕ N
///
ГДЕ
Строка > ТвояЗапомненнаяСтрока
7 acsent
 
03.06.11
15:58
Так делает 1С в динамических списках
8 Skazy
 
03.06.11
15:59
(6) В плане строка???? Так в запросе можно писать?
9 luckyluke
 
03.06.11
16:00
(5) Т.е. если надо с позиции 100 20 строк:
Выбрать Первые 20 *  Из (Выбрать Первые 120 ... ИЗ ... Упорядочить по Артикул Возр) Упорядочить по Артикул Убыв
что-то типа этого имел ввиду.
10 luckyluke
 
03.06.11
16:02
(6) кстати да, хороший вариант.
(8) ты упорядочиваешь по чем? По ссылке?
11 acsent
 
03.06.11
16:03
(10) Упорядочивать можно хоть по чему
12 acsent
 
03.06.11
16:03
Желательно чтобы поле упорядочивания было уникальным
13 luckyluke
 
03.06.11
16:03
(11) да кто ж спорит что можно, в том то и дело что (12)
14 forforumandspam
 
03.06.11
16:04
(4) Один раз заполни реквизит данными. Потом используй сколько надо.

   ЗаОдинРазВыгружать = 100;
   Выборка = Справочники.Номенклатура.Выбрать();
   Номер = 0;
   ПорядокВыгрузки = 1;
   Пока Выборка.Следующий() Цикл
       Если Выборка.ЭтоГруппа Тогда
           Продолжить;
       КонецЕсли;
       Номер = Номер + 1;
       Если Номер = ЗаОдинРазВыгружать Тогда
           ПорядокВыгрузки = ПорядокВыгрузки + 1;
           Номер + 1;
       КонецЕсли;
       Объект = Выборка.ПолучитьОбъект();
       Объект.ПорядокВыгрузки = ПорядокВыгрузки;
       Объект.Записать();
   КонецЦикла;


ВЫБРАТЬ
   ПартииТоваровНаСкладахОстатки.Номенклатура,
   ПартииТоваровНаСкладахОстатки.КоличествоОстаток
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, Номенклатура.ПорядокВыгрузки = &ПорядокВыгрузки) КАК ПартииТоваровНаСкладахОстатки
15 Skazy
 
03.06.11
16:42
Проблема в том, что мне нужно выбирать с определенной страницы, с определенной строки. Допустим в запросе остатков 100 строк. Значит, при выводе на сайт по 20 строк, получается 5 страниц для переходов. При выводе первой страницы, просто выбираем ПЕРВЫЕ 20. А как получить содержание 3 страницы? Сортировка товаров по артикулу. Уникальному
16 Skazy
 
03.06.11
16:43
(9) Я тоже так думаю... Только у нас строк много ;(
17 acsent
 
03.06.11
16:48
(13) Поле или список полей
18 mikecool
 
03.06.11
16:48
чет мне кажется, что пробежка по ТЗ будет лучше, чем резапрос в цикле
19 mikecool
 
03.06.11
16:48
+18 а вообще - надо мерять
20 Kashemir
 
03.06.11
18:55
ВЫБРАТЬ ПЕРВЫЕ 1000
   ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
   ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
   СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ОстаткиСНужнойДетализации
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстатки.Номенклатура,
   ПартииТоваровНаСкладахОстатки.Склад

ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ОстаткиСКлючемУникальности.Номенклатура,
   ОстаткиСКлючемУникальности.Склад,
   ОстаткиСКлючемУникальности.КоличествоОстаток,
   ОстаткиСКлючемУникальности.ИндексСтроки КАК ИндексСтроки,
   ВЫРАЗИТЬ((ОстаткиСКлючемУникальности.ИндексСтроки / 20 + 0.5) КАК ЧИСЛО(19, 0)) КАК НомерСтраницы_По20ЗаписейНаКаждую
ИЗ
   (ВЫБРАТЬ
       ОстаткиСНужнойДетализации.Номенклатура КАК Номенклатура,
       ОстаткиСНужнойДетализации.Склад КАК Склад,
       ОстаткиСНужнойДетализации.КоличествоОстаток КАК КоличествоОстаток,
       КОЛИЧЕСТВО(ОстаткиСНужнойДетализации1.Номенклатура) КАК ИндексСтроки
   ИЗ
       ОстаткиСНужнойДетализации КАК ОстаткиСНужнойДетализации
           ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиСНужнойДетализации КАК ОстаткиСНужнойДетализации1
           ПО (ОстаткиСНужнойДетализации.Номенклатура > ОстаткиСНужнойДетализации1.Номенклатура
                   ИЛИ ОстаткиСНужнойДетализации.Номенклатура = ОстаткиСНужнойДетализации1.Номенклатура
                       И ОстаткиСНужнойДетализации.Склад > ОстаткиСНужнойДетализации1.Склад)
   
   СГРУППИРОВАТЬ ПО
       ОстаткиСНужнойДетализации.Номенклатура,
       ОстаткиСНужнойДетализации.Склад,
       ОстаткиСНужнойДетализации.КоличествоОстаток) КАК ОстаткиСКлючемУникальности

УПОРЯДОЧИТЬ ПО
   ИндексСтроки
21 Kashemir
 
03.06.11
18:56
+ (20) "ПЕРВЫЕ 1000" из запроса забыл убрать
22 Alexandr Puzakov
 
03.06.11
19:56
Сообщить(Выборка[0].Номенклатура);
Сообщить(Выборка[1].Номенклатура);
Сообщить(Выборка[2].Номенклатура);

Дальше рассказывать?
23 Alexandr Puzakov
 
03.06.11
20:00
И вообще, есть такой метод НайтиСледующий().