Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 18:45

Четверг. Вопрос 5

Автор mixqn, 14 мар 2013, 00:41

0 Пользователей и 1 гость просматривают эту тему.

temsan

ВЫБРАТЬ
| КОЛИЧЕСТВО(СправочникВспом.Ссылка) КАК НомерСтроки,
| Справочник.Ссылка
|ИЗ
| Справочник.Справочник КАК Справочник
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Справочник КАК СправочникВспом
| ПО Справочник.Ссылка >= СправочникВспом.Ссылка
|
|СГРУППИРОВАТЬ ПО
| Справочник.Ссылка

Smile

ВЫБРАТЬ
       |   КОЛИЧЕСТВО(Контрагенты1.Ссылка) КАК НомерСтроки,
       |   Контрагенты.Ссылка КАК Контрагент
       |ИЗ
       |   Справочник.Контрагенты КАК Контрагенты
       |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
       |      ПО Контрагенты.Наименование >= Контрагенты1.Наименование
       |
       |СГРУППИРОВАТЬ ПО
       |   Контрагенты.Ссылка
       |
       |УПОРЯДОЧИТЬ ПО
       |   Контрагенты.Наименование

Соединяем набор записей с таким же набором записей

Escander

Цитата: mixqn от 14 мар 2013, 00:41Необходимо составить запрос, в котором будут пронумерованы по порядку выбранные записи любого справочника.

      "ВЫБРАТЬ
      |   Номенклатура.Ссылка,
      |   1 КАК Номер
      |ПОМЕСТИТЬ ВременныеДанные
      |ИЗ
      |   Справочник.Номенклатура КАК Номенклатура
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |   ВременныеДанные.Ссылка,
      |   СУММА(ВременныеДанные1.Номер) КАК Номер
      |ИЗ
      |   ВременныеДанные КАК ВременныеДанные
      |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременныеДанные КАК ВременныеДанные1
      |      ПО ВременныеДанные.Ссылка >= ВременныеДанные1.Ссылка
      |
      |СГРУППИРОВАТЬ ПО
      |   ВременныеДанные.Ссылка";

Boulala

"ВЫБРАТЬ
| Спр.Ссылка КАК Ссылка,
| СУММА(1) КАК Порядок
|ИЗ
| Справочник." + ИмяСправочника + " КАК Спр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник." + ИмяСправочника + " КАК Спр1
| ПО Спр.Ссылка >= Спр1.Ссылка
|
|СГРУППИРОВАТЬ ПО
| Спр.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Порядок"


Суть решения состоит в том, чтобы соединением по уникальному ключу (ссылке) размножить количество записей в результирующем запросе.
После этого достаточно свернуть по уникальному ключу, а получившиеся количество полей посчитать (либо суммой как в примере, либо количество ссылок посчитать).

TimonChD

Вот пример для справочника "Номенклатура":

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    КОЛИЧЕСТВО(Номенклатура_1.Ссылка) КАК Номер
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура_1
        ПО Номенклатура.Наименование >= Номенклатура_1.Наименование     

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

УПОРЯДОЧИТЬ ПО
    Номенклатура.Наименование

Соединяем таблицу саму с собой довольно хитрым способом. По правой таблице подсчитываем количество номенклатуры с наименованием меньше текущего левого, используя группировку.

SVGLVV

Например, для справочника "Организации" можно написать запрос:

ВЫБРАТЬ
Т1.Ссылка КАК Организация,
КОЛИЧЕСТВО(Т2.Ссылка) КАК НомерСтроки
ИЗ
Справочник.Организации КАК Т1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Организации КАК Т2
ПО Т1.Наименование >= Т2.Наименование

СГРУППИРОВАТЬ ПО
Т1.Ссылка

УПОРЯДОЧИТЬ ПО
Т1.Наименование

kilelena

ВЫБРАТЬ
   Контрагенты.Наименование,
   КОЛИЧЕСТВО(Контрагенты1.Наименование) КАК НомерПоПорядку
ИЗ
   Справочник.Контрагенты КАК Контрагенты
      ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
      ПО Контрагенты.Наименование >= Контрагенты1.Наименование

СГРУППИРОВАТЬ ПО
   Контрагенты.Наименование

УПОРЯДОЧИТЬ ПО
   НомерПоПорядку

saleksvik

ВЫБРАТЬ
   Справочник1.Ссылка,
   КОЛИЧЕСТВО(Справочник2.Ссылка) КАК Номер
ИЗ
   Справочник.Контрагенты КАК Справочник1
      ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Справочник2
      ПО Справочник1.Наименование >= Справочник2.Наименование

СГРУППИРОВАТЬ ПО
   Справочник1.Ссылка

УПОРЯДОЧИТЬ ПО
   Номер

В условии соединения таблиц используется поле "Наименование", по которому будут упорядочены записи.

igordynets

Необходимо составить запрос, в котором будут пронумерованы по порядку выбранные записи любого справочника.
Рассмотрим построение запроса на примере справочника Номенклатура (нижесказанный метод можно применить для любого справочника). Поступим следующим образом: соединим таблицу саму с собой довольно хитрым способом. По правой таблице подсчитываем количество номенклатуры с наименованием меньше текущего левого, используя группировку.
<code>
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    КОЛИЧЕСТВО(Номенклатура_1.Ссылка) КАК Номер
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура_1
        ПО Номенклатура.Наименование >= Номенклатура_1.Наименование      // Условие сортировки для нумерации

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

УПОРЯДОЧИТЬ ПО
    Номенклатура.Наименование
</code>
В результате выполнения запроса получим пронумерованные элементы справочника.

lobster13

На примере справочника номенклатура:
ВЫБРАТЬ
   Номенклатура.Наименование,
   КОЛИЧЕСТВО(*) КАК Номер
ИЗ
   Справочник.Номенклатура КАК Номенклатура,
   Справочник.Номенклатура КАК Номенклатура1
ГДЕ
   Номенклатура.Ссылка > Номенклатура1.Ссылка

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

УПОРЯДОЧИТЬ ПО
   НОмер

Теги:
Рейтинг@Mail.ru

Поиск