1с как отсортировать справочник по реквизиту

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 47
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ


Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа » Внешние источники данных» и назовем его просто » Excel» .
https://helpf.pro/uploads/img


Битая ссылка, <Объект не найден>, Уникальный Идентификатор, GUID 72
Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: Объект не найден (84:bf5600145e3710ab11dda4c605dbe824) .
https://helpf.pro/uploads/img/_1-46z7I4U7Ww.png
В


Внешние обработки, печатные формы, обработки по заполнению табличных частей 3
Справочник «Внешние обработки, печатные формы, обработки по заполнению табличных частей» содержит список произвольных обработок, произвольных отчетов, дополнительных печатных форм, обработок для заполнения ТЧ объектов, обработок, подключаемых к отч


Внешняя печатная форма, дополнительные параметры для печати 5
Внешняя обработка (Печатная форма), содержащая: Необязательный реквизит « ДополнительныеПараметры » произвольного типа , которому будут передаваться дополнительные параметры примитивного типа в виде структуры.
https://helpf.pro/uploads/img/_1-Y74bX


Посмотреть все результаты поиска похожих

Отсортировать справочник по реквизиту

Я
   AXS

04.12.09 — 13:15

Как отсортировать справочник по реквизиту?

Имеется ввиду объект созданный методом СоздатьОбъект(«Справочник.ХХХХХХ»);

Вообще суть вопроса в том, что как я понял: прежде чем использовать НайтиПоРеквизиту(,,) надо справочник отсортировать по этому реквизиту…

Иначе следующая конструкция не работает —

Рекв = «xyzxyz»;

Справ = СоздатьОбъект(«Справочник.ХХХХХХ»);

Справ.ВыбратьЭлементы();

Найдено = Справ.НайтиПоРеквизиту(«МойРеквизит»,Рекв,1);

Если Найдено = 1 Тогда

   ТекЭ = Справ.ТекущийЭлемент();

   Сообщить(ТекЭ.Код);

КонецЕсли;

  

Партнерская программа EFSOL Oblako

   Изучаю1С8

1 — 04.12.09 — 13:15

Нужна галка в сво-вах реквизита, отбор и сортировка.

   ДенисЧ

2 — 04.12.09 — 13:15

Суть в том, что найденная суть — ерунда.

Достаточно у реквизита выставить галку «Сортировка»…

   Нуф-Нуф

3 — 04.12.09 — 13:15

что за бред

   AXS

4 — 04.12.09 — 13:16

Галка стоит…

   Изучаю1С8

5 — 04.12.09 — 13:16

Справ.ВыбратьЭлементы();

Найдено = Справ.НайтиПоРеквизиту(«МойРеквизит»,Рекв,1);

Это вообще бред

   skunk

6 — 04.12.09 — 13:16

в свойствах реквизита данного справочника поставить отбор и сортировка

   AXS

7 — 04.12.09 — 13:16

Да стоят же галки говорю

   palpetrovich

8 — 04.12.09 — 13:17

(7) И ЧТО(ой), не сортирует?

   Изучаю1С8

9 — 04.12.09 — 13:18

И что-бы искать не надо открывать выборку.

   Нуф-Нуф

10 — 04.12.09 — 13:18

а что автор вообще хочет?

   Ёпрст

11 — 04.12.09 — 13:19

(0) И чего, реквизит с типом СТРОКА у вас ?

   skunk

12 — 04.12.09 — 13:19

(7)а после того как поставил конфу сохранил?

   AXS

13 — 04.12.09 — 13:19

По умолчанию сортирова по коду… Как ПЕРЕсортировать не знаю…

   ДенисЧ

14 — 04.12.09 — 13:20

КАКОГО ТИПА РЕКВИЗИТ?

(13) не нужно тебе переСОРТИРовать…

   AXS

15 — 04.12.09 — 13:21

Не находит, собака… :(

   AXS

16 — 04.12.09 — 13:22

Тип искомого реквизита — СТРОКА

   ДенисЧ

17 — 04.12.09 — 13:22

(15) Попробуй кошку попросить, может она найдёт…

   AXS

18 — 04.12.09 — 13:23

to skunk — Галки там стоят уже полгода…

   Rie

19 — 04.12.09 — 13:25

(0) А ты уверен, что тебе нужно НайтиПоРеквизиту?
Может, тебе нужен ПорядокРеквизита? Или ВыбратьЭлементыПоРеквизиту?

   Ёпрст

20 — 04.12.09 — 13:26

(16) добивай реквизит поиска до длины реквизита в справочнике

   lals

21 — 04.12.09 — 13:27

внимательно посмотри текст примера

Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.

Пример:

Спр = СоздатьОбъект(«Справочник.Сотрудники»);

Спр.ИспользоватьДату(ДатаДок);

// Позиционируем созданный объект Спр по реквизиту

Спр.НайтиПоРеквизиту(«СерияПаспорта», «XXVII-OP», 1);

Если Спр.Выбран() > 0 Тогда

  Имя = Спр.Наименование;

Иначе

  Предупреждение(«Не найден сотрудник с таким паспортом!»);

КонецЕсли;

   lals

22 — 04.12.09 — 13:28

тоесть сразу выбираем (позиционируемся на данном элементе а затем если удачно выбрали тогда присваиваем перемнной значение из справочника

   palpetrovich

23 — 04.12.09 — 13:34

(21) а я так делал обычно

Если Спр.НайтиПоРеквизиту(«СерияПаспорта», «XXVII-OP», 1)=1 Тогда

  Имя = Спр.Наименование;

КонецЕсли;

(0) для строковых «МойРеквизит» и Рекв должны иметь одинаковую длину

   AXS

24 — 04.12.09 — 13:42

Спр.НайтиПоРеквизиту(«СерияПаспорта», «XXVII-OP», 1)  возвращает 0 хоть убей…

Добивал искомую строку пробелами до нужной длины — не помогло.
Пойти напиться что ли?…

   Изучаю1С8

25 — 04.12.09 — 13:43

(24) Это вы так шутите… Это вообще то пример типа..

«Добивал искомую строку пробелами до нужной длины — не помогло. »

руками добивал??

   AXS

26 — 04.12.09 — 13:44

Я имею ввиду что аналогичний алгоритм, (ясен перец с моими данными) не работает..

   AXS

27 — 04.12.09 — 13:45

Вот вся процедура:

Процедура ПриНачалеРедактированияСтроки()
   Перем СН;                  
   Если (Форма.ТекущаяКолонка() = «СерийныйНомер») Тогда
       ВвестиСтроку(СН,»Введите серийный номер»,25);
       Если ПустоеЗначение(СН) = 0 Тогда  
           СНки = СоздатьОбъект(«Справочник.СерийныеНомера»);
           СНки.ИспользоватьДату(ДатаДок);
           Найдено = СНки.НайтиПоРеквизиту(«СерийныйНомер»,СН+»      «,1);
           Сообщить(Строка(СН)+» найдено = «+Строка(Найдено));
           Если Найдено = 1 Тогда
               ТекСН = СНки.ТекущийЭлемент();
               Предупреждение(ТекСН.Товар);
           Иначе                          
               Предупреждение(«Серийник ‘»+СН+»‘ не найден!»);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

   Rie

28 — 04.12.09 — 13:47

(27) Добивай пробелы не константной строкой, а посмотри длину СН — и дополни пробелами (программно) до нужной.

   AXS

29 — 04.12.09 — 13:48

Это я пока так.. Для теста

   Rie

30 — 04.12.09 — 13:50

(29) А у тебя СерийныйНомер — периодический реквизит, что ли? Или зачем ИспользоватьДату() стоит?

   AXS

31 — 04.12.09 — 13:55

Кое что поправил — результата пока нет… Курим дальше…

Функция ДополнитьПробелами(Стр, Длина)

       Ост = Длина — СтрДлина(Стр);
   Для Сч = 1 По Ост Цикл
       Стр = Стр + » «;
   КонецЦикла;  
   Сообщить(Строка(СтрДлина(Стр)));
   Возврат Стр;

    КонецФункции

Процедура ПриНачалеРедактированияСтроки()
   Перем СН;                  
   Если (Форма.ТекущаяКолонка() = «СерийныйНомер») Тогда
       ВвестиСтроку(СН,»Введите серийный номер»,25);
       Если ПустоеЗначение(СН) = 0 Тогда
           СН = ДополнитьПробелами(СН, 25);
           СНки = СоздатьОбъект(«Справочник.СерийныеНомера»);  
           Найдено = СНки.НайтиПоРеквизиту(«СерийныйНомер»,СН,1);
           Сообщить(Строка(СН)+» найдено = «+Строка(Найдено));
           Если Найдено = 1 Тогда
               ТекСН = СНки.ТекущийЭлемент();
               Предупреждение(ТекСН.Товар);
           Иначе                          
               Предупреждение(«Серийник ‘»+СН+»‘ не найден!»);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

   Rie

32 — 04.12.09 — 14:03

(31) А что именно получаешь в результате? И зачем в ПриНачалеРедактированияСтроки выдавать Предупреждение?

   AXS

33 — 04.12.09 — 14:10

Я должен ввести серийник и получить Товар которому он принадлежит. Вообще будет обработка результата поиска и переход к следующей позиции.
Но пока так, чтобы хоть как то просигнализировать об успешном поиске…

   palpetrovich

34 — 04.12.09 — 14:13

AXS, предварительно скопируй реальное значение СН и в ВвестиСтроку(СН,»Введите серийный номер»,25) вставь из буфера

и вообще, кто тебе сказал что пробелы д.б. ссзади?

   AXS

35 — 04.12.09 — 14:21

Вводил руками, вставлял из буфера, считывал штрихкодером — один х.. не находит.
PS: Попробовал пробелы спереди добавлять тоже

Сейчас попробую с другим справочником поработать.

   palpetrovich

36 — 04.12.09 — 14:26

(35) мо у тебя строка неограниченной длины? ;))

   AXS

37 — 04.12.09 — 14:28

Длина реквизита СерийныйНомер = 25

   AXS

38 — 04.12.09 — 14:30

Кстати, серийники в справочнике разбиты на группы по дате поступления…

   AXS

39 — 04.12.09 — 14:37

Бл.. Переделал на справочник сотрудники — поиск работает!

Процедура ПриНачалеРедактированияСтроки()
   Перем СН;                  
   Если (Форма.ТекущаяКолонка() = «СерийныйНомер») Тогда
       ВвестиСтроку(СН,»Введите серийный номер»,25);
       Если ПустоеЗначение(СН) = 0 Тогда
           //СН = ДополнитьПробелами(СН, 25);
           СНки = СоздатьОбъект(«Справочник.Сотрудники»);  
           Найдено = СНки.НайтиПоРеквизиту(«РНН»,СН,1);
           Сообщить(Строка(СН)+» найдено = «+Строка(Найдено));
           Если Найдено = 1 Тогда
               ТекСН = СНки.ТекущийЭлемент();
               Предупреждение(ТекСН.Наименование);
           Иначе                          
               Предупреждение(«Серийник ‘»+СН+»‘ не найден!»);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Проблема в справочнике значит… Где покопать???

   Ёпрст

40 — 04.12.09 — 14:41

(39)переиндексируй базу.

   AXS

41 — 04.12.09 — 14:42

Разница между РНН и СерийныйНомер в том что у РНН НЕТ ГАЛОЧКИ «Отбор по реквизиту»
8)

   Ёпрст

42 — 04.12.09 — 14:42

А вообще,строить индекс по строке в 25 символов..это жестко..

   Ёпрст

43 — 04.12.09 — 14:43

(41) см. (6)

   palpetrovich

44 — 04.12.09 — 14:43

(39) ща спецом поставил 7-ку, нарисовал

Процедура НайтиСроковыйРеквизит()      

   СР = «»;

   Если ВвестиСтроку(СР,»Введите СроковыйРеквизит»,10) = 1 Тогда

       СпрТМЦ = СоздатьОбъект(«Справочник.ТМЦ»);

       Если СпрТМЦ.НайтиПоРеквизиту(«СроковыйРеквизит», СР, 1)=1 Тогда

           сообщить(«Нашел » + СпрТМЦ);

       КонецЕсли;      

   КонецЕсли;

КонецПроцедуры                  

не находит если впереди «СроковыйРеквизит» есть пробелы. В ВвестиСтроку( первые пробелы убираются автоматом видимо

в остальных случаях  — все прекрасно находится

   AXS

45 — 04.12.09 — 14:48

Ёпрст3 Вот именно РНН без галочки «Отбор по реквизиту», а находит же…

   Ёпрст

46 — 04.12.09 — 14:51

(45) см. (40)

   palpetrovich

47 — 04.12.09 — 14:52

(45) СП: НайтиПоРеквизиту(

блаблблабла

Метод можно использовать только для реквизитов с установленным признаком »Сортировка».

зы: что относительно «начальных» пробелов?

   AXS

48 — 04.12.09 — 14:59

При проверке базы получил:

Таблица — DH6407. Не сходится количество полей

Как узнать что за таблица? Как найти её в конфигурации

   ДенисЧ

49 — 04.12.09 — 15:04

(48) в 1cv7.dd посмотри

   Ёпрст

50 — 04.12.09 — 15:04

(48) Это шапка документа… открой словарь и посмотри (*.dd) что за документ.

ЗЫ: Нефик было подменять мд.

   AXS

51 — 04.12.09 — 15:06

Это не я подменял… Я только взялся за эту базу. Её до меня уже почакали

   palpetrovich

52 — 04.12.09 — 15:07

(48) гыыыыы

   Lepochkin

53 — 04.12.09 — 15:19

(51) Готовь 3 конверта

   AXS

54 — 04.12.09 — 15:20

Как открыть словарь. Что это вообще такое?

   Ёпрст

55 — 04.12.09 — 15:20

(54) уууу…
это текстовый файл.. блокнот на него натрави..

   Изучаю1С8

56 — 04.12.09 — 15:21

(54) Думаю тут пора вызывать спеца.

   Mikeware

57 — 04.12.09 — 15:21

(53) Прав…

   AXS

58 — 04.12.09 — 15:23

А имя у этого словаря есть — типа slovar.txt?

   AXS

59 — 04.12.09 — 15:23

Фигня — прорвёмся!

   ДенисЧ

60 — 04.12.09 — 15:24

(58) я для кого (49) писал? Все остальные это и так знают…

   Ёпрст

61 — 04.12.09 — 15:24

(58) не.. точно, готовь 3 конверта.

   Изучаю1С8

62 — 04.12.09 — 15:25

(53)(61) а это что за прикол с конвертами…? =)

   AeDen

63 — 04.12.09 — 15:26

(62) Приемнику.
1. Вали все на меня.
2. Вали все на железо.
3. готовь три конверта.

   Ёпрст

64 — 04.12.09 — 15:27

(62) старая притча про директора.. и 3 конверта..

   Изучаю1С8

65 — 04.12.09 — 15:28

(63) ыыы, забавно.

   Mikeware

66 — 04.12.09 — 15:28

(62) в яндексе забанили? :-)

   Lepochkin

67 — 04.12.09 — 15:28

Менеджер устроился на работу и принимает дела у увольняемого менеджера.
Тот ему говорит: «У меня в сейфе лежат три конверта. Когда у тебя начнуться проблемы открой первый конверт и все будет нормально. Если опять начнуться проблемы открой второй». Потом третий. Понятно?
Понятно. Новый менеджер доволен работой, дела идут отлично, периодически повышают и тут вдруг начинаются проблемы. Начальство недовольно, постоянно орет, выговоры, взыскания. Он в панике подбегает к столу вскрывает первый конверт, читает: «Вали все на меня!». Он тему просек,
приходит к начальству, говорит, что типа все косяки натворил предыдуший менеджер, а мне приходится его дерьмо разгребать. Прокатило, снова респект, повышения и т. п. Проходит время и снова начинают его гнобить.
Прибегает в кабинет, вскрывает второй конверт, читает: «Обещай людям все, что они хотят».
Начал обещать. И снова все пучком. Спустя какое-то время снова проблемы — лезет в сейф вскрывает третий конверт, а там написано: «Готовь три конверта».

   Изучаю1С8

68 — 04.12.09 — 15:32

   Mikeware

69 — 04.12.09 — 15:36

   Изучаю1С8

70 — 04.12.09 — 15:37

(69) ну так.. ты знал что искать =)

   Mikeware

71 — 04.12.09 — 15:37

(67) Первый вариант, который я слышал — в армии — про ротного.
1. «вали все на меня»
2. «Обещай исправиться»
3. «готовь три конверта»

   Lepochkin

72 — 04.12.09 — 15:39

(71) Суть то таже :-)

   v_rtex

73 — 04.12.09 — 15:40

(42) почему?

он же их просто отсортирует и всё

   AXS

74 — 04.12.09 — 16:42

Всё. Базу починил. Головняк с поиском откладываю на завтра.

   lals

75 — 04.12.09 — 17:12

(44) Так у него же по прежнему стоит

Найдено = СНки.НайтиПоРеквизиту(«РНН»,СН,1);

А надо сразу найти, а потом присваивать, твой код он не читал

   AXS

76 — 05.12.09 — 07:06

Всем доброе утро. Кажется я въехал в чём фишка. Когда в документах используется поле Справочник.СерийныеНомера отображается реквизит Наименование этого справочника. Так? А у меня в документах в таком случае отображается серийник. Рассуждая логически я предполагаю, что серийники сидят в реквизите Наименование. Но при попытке написать НайтиПоРеквизиту(«Наименование», СН, 1) я получаю ошибку типа неверный реквизит
Открываю справочник в конфигураторе — нет такого реквизита! Открываю форму списка — и что я вижу: Реквизит СерийныйНомер не используется (галочка снята), а наши серийники сидят в колонке с реквизитом Наименование…

Кто нибудь может меня просвятить что мне делать дальше, а то я уже зае…ся

Пожалуйста…

   AXS

77 — 05.12.09 — 07:46

Всё въехал — поскольку серийники сидят не в реквизите СерийныйНомер, а в Наименование, сделал ПоискПоНаименованию и пошёл пить пиво.

Бывшему писателю этой конфигурации — пламенный привет…

   Ковычки

78 — 05.12.09 — 07:51

(77) а чем плохо Наименование, зато всегда найдется

   Chai Nic

79 — 05.12.09 — 07:54

«Но при попытке написать НайтиПоРеквизиту(«Наименование», СН, 1) я получаю ошибку типа неверный реквизит»
Ну вот видите. Это от недостатка опыта. Наименование в справочнике — это не реквизит, а специальная сущность!

   AXS

80 — 05.12.09 — 09:47

(79) Ну учитывая, что опыта у меня всего несколько дней — случай не безнадёжный :)

   AXS

81 — 05.12.09 — 09:52

Теперь заключительный этап:
Функция СерийныйНом()
   Перем СН;        
       Если ВвестиСтроку(СН,Строка(ТМЦ),100) = 1 Тогда    
           СНки = СоздатьОбъект(«Справочник.СерийныеНомера»);
           Если СНки.НайтиПоНаименованию(СН,0,0) = 1 Тогда
               Сообщить(Строка(СН)+» найдено!»);  
               ТекСН = СНки.ТекущийЭлемент();
               Предупреждение(» «+ТекСН+РазделительСтрок+
                               » «+ТекСН.Товар);
               Если ТМЦ = ТекСН.Товар Тогда      
                   СерийныйНомер = ТекСН;
                   Возврат 1;                      
               Иначе
                   Предупреждение(«Братан! Ты не ту железяку взял! Верни на склад и возьми правильную!»);
                   Возврат 2;
               КонецЕсли;
           Иначе                          
               Предупреждение(«Серийник ‘»+СН+»‘ не найден!»);
                   Возврат 2;
           КонецЕсли;
       Иначе
           Возврат 0;
       КонецЕсли;
КонецФункции    

Процедура Серийники()
   НС = НомерСтроки;
   Если НС = 0 Тогда
       НС = 1;
   КонецЕсли;
   СВозврата = 2;
   Пока СВозврата <> 0 Цикл
       Если СВозврата = 1 Тогда
           НС = НС + 1;
       КонецЕсли;
       АктивизироватьСтроку(НС);  
       ПолучитьСтрокуПоНомеру(НС);
       СВозврата = СерийныйНом();
   КонецЦикла;        
КонецПроцедуры

Работа начинается с нажатия кнопки с процедурой Серийники()
Меня напрягает один момент — пока я не прерву цикл нажатием Отмена в окошке ВвестиСтроку() изменения НЕ ОТОБРАЖАЮТСЯ в табличной части…
Можно сделать так чтобы было видно в ТЧ как садится каждый серийник?

   Ковычки

82 — 05.12.09 — 09:52

форма.обновить

   AXS

83 — 05.12.09 — 09:55

(82) Не канает…

   AXS

84 — 05.12.09 — 09:57

Точнее канает только для первой строки

Так значит никак?..

Пойду погуглю тады…

Сортировка по реквизиту в форме списка

Как отсортировать на форме списка данные по реквизиту

Почему данные сортируются по любому реквизиту?

Сразу скажу, что не по всем реквизитам можно сортировать, например, нельзя сортировать по реквизиту с типом «ХранилищеЗначений». Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием». А для реквизитов ссылочного типа, необходимо явно разрешить доступность сортировки программно. Например:

ЭлементыФормы.СправочникСписок.НастройкаПорядка.Контрагент.Доступность = истина;

или для всех реквизитов


Для каждого ТекЭлем из ЭлементыФормы.СправочникСписок.НастройкаПорядка Цикл
     ТекЭлем.Доступность = Истина;
КонецЦикла;

причем в последнем случае сортировка будет даже у реквизитов со свойством «Индексировать» — «Не индексировать»

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

Описанные ниже методы могут применяться для форм списка любых объектов (СправочникСписок, ДокументСписок, РегистрСведенийСписок, ПланОбменаСписок и т.д.).

Для программного создания сортировки в форме списка можно использовать свойство расширения табличного поля списка НастройкаПорядка или свойство списка Порядок. Возможно также совместное использование этих свойств.

Свойство НастройкаПорядка используется для предоставления доступа к полям упорядочивания.

Свойство Порядок содержит объект, по которому осуществляется текущее упорядочивание элементов в списке.

Ниже приведён пример использования указанных свойств:

// Модуль формы списка
Процедура ПриОткрытии()
	// Добавляем возможность сортировки по реквизиту Цена
	ЭлементыФормы.Список.НастройкаПорядка.Цена.Доступность = Истина;
	// Добавляем возможность сортировки по реквизиту ЕдиницаИзмерения
	ЭлементыФормы.Список.НастройкаПорядка.ЕдиницаИзмерения.Доступность = Истина;
	// Устанавливаем текущую сортировку по реквизитам Валюта по убыванию и Цена по возрастанию
	Список.Порядок.Установить("Валюта Убыв, Цена Возр");
КонецПроцедуры

При открытии формы список будет упорядочен по Валюте по убыванию и по Цене по возрастанию:

Сортировка в форме списка по умолчанию

Если открыть форму настройки отбора и сортировки, то возможность изменения сортировки будет закрыта, так как программно установлено упорядочивание по полю Валюта, которое недоступно для интерактивной настройки порядка.

Настройки сортировки заблокированы от изменения

Если интерактивно изменить сортировку (нажатием на заголовок колонки, по которой возможно упорядочивание или через контекстное меню), то сортировка по Валюте более не будет доступна, так как её доступность не включена в НастройкеПорядка. В то же время есть возможность упорядочивания по ЕдиницеИзмерения, хотя эта колонка и не отображается на форме.

Доступные поля сортировкиНастройка сортировки

Упорядочивание возможно по любому реквизиту объекта, как отображаемому на форме, так и не отображаемому, за исключением реквизитов, имеющих тип Строка неограниченной длины.


19.05.2008


Отбор и сортировка данных в "1С:Предприятии 8.1"

Список — неотъемлемый атрибут отображения информации в любой конфигурации, созданной на платформе «1С:Предприятие 8.1». Для эффективной работы со списками, содержащими разнообразные данные, в программах на платформе «1С:Предприятие 8.1» реализованы удобные и мощные механизмы отбора и сортировки. Об особенностях их использования рассказывает В.В. Рыбалка, фирма «1С».

Содержание

  • Списки
  • Механизм сортировки
  • Механизм отбора
  • Механизмы отбора и сортировки на примерах
  • Полезные функции механизма отбора

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

Практически во всех списках можно использовать механизмы отбора (если это явно не запрещено разработчиком) и разнообразной сортировки (рис. 1). В программе эти механизмы неразрывно связаны друг с другом. Рассмотрим, как их использовать правильно и эффективно.

Рис. 1

Списки

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

Практически во всех списках можно использовать механизмы отбора (если это явно не запрещено разработчиком) и разнообразной сортировки (рис. 1). В программе эти механизмы неразрывно связаны друг с другом. Рассмотрим, как их использовать правильно и эффективно.

Рис. 1

Механизм сортировки

Для чего нужен механизм сортировки? Во-первых, он, как следует из названия, позволяет отсортировать список по нужному критерию.

Во-вторых, в платформе «1С:Предприятие 8.1» активно используется механизм быстрого поиска. Этот механизм позволяет быстро найти в каком-либо списке нужный элемент, набрав первые символы (рис. 2). Но в динамических списках (например, список элементов справочника или список документов) быстрый поиск работает только по реквизитам, по которым доступна сортировка.

Рис. 2

Посмотреть все доступные для сортировки реквизиты списка можно, открыв окно «Отбор и сортировка». Это окно, как правило, доступно на панели действий (рис. 3) либо в контекстном меню списка, открывающемся правой кнопкой мыши (рис. 4). В окне «Отбор и сортировка» нужно перейти на закладку «Сортировка», где показаны все доступные реквизиты, по которым возможна сортировка.

Рис. 3

Рис. 4

На рисунке 3 видно, что для списка документов «Реализации товаров и услуг» доступна сортировка по двум реквизитам: «Дата» и «Номер». Однако информативность окна сортировок этим не ограничивается. Здесь можно посмотреть, какая сортировка включена в данный момент (левая часть окна) и список всех доступных для сортировки реквизитов (правая часть). Тут же можно настроить нужную сортировку и ее порядок. Обратите внимание: текущий реквизит сортировки будет помечен в списке специальным символом — стрелочкой, обозначающей направление сортировки. Три примера различной сортировки (в т. ч. комбинированной) и способы ее отображения в списке показаны на рисунке 5.

Рис. 5

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

В каждом списке можно индивидуально сохранить нужную сортировку. Достаточно включить галочку «Использовать эту настройку сортировки при открытии» и нажать «ОК». Система запомнит настройку и при следующем открытии этого списка установит сохраненную сортировку.

Быстро отсортировать список по нужному реквизиту можно, щелкнув мышкой по шапке с названием этого реквизита.

Например, в нашем случае, можно щелкнуть по реквизиту «Дата» (включится сортировка дат по возрастанию, и можно будет использовать быстрый поиск по дате) или по реквизиту «Номер» (будет переключена сортировка по номерам по возрастанию, после чего можно быстро искать по номеру). Инвертировать сортировку тоже просто — достаточно повторно щелкнуть по тому же реквизиту в шапке списка.

Механизм отбора

Отбор — мощный механизм платформы «1С:Предприятие 8.1», который позволяет эффективно работать со списками, даже если в них содержится не один десяток или сотня тысяч элементов. Для начала рассмотрим работу механизма отбора в общем случае.

Практически везде, где есть список (как правило, в виде таблицы), можно использовать механизм отбора, который активируется либо соответствующей кнопкой на панели действий, либо в контекстно-зависимом меню списка (рис. 3 и 4). Если отбор у нужного списка возможен, откроется окно «Отбор и сортировка». В нем будут отображены все возможные виды доступных для отбора реквизитов. Список доступных элементов отбора зависит от того, где этот отбор будет использован. В общем случае нужно найти один или несколько необходимых элементов для отбора, указать значения и активировать настроенную комбинацию критериев.

Список возможных условий для того или иного вида отбора зависит от типа элементов, используемых в нем. Например, для чисел и дат будет доступно указание диапазонов, для строк — поиск подстроки (условия «Содержит»/»Не содержит»), а для элементов справочников — заполнение списков и анализ иерархии.

Если указать одновременно несколько критериев отбора, в списке будут отображены только такие элементы, которые удовлетворяют всем указанным критериям.

Механизмы отбора и сортировки на примерах

Попробуем решить несколько задач в демонстрационной базе («Бухгалтерия предприятия», редакция 1.6). Например, отобразим документы, сформированные для контрагента «Саймон и Шустер ООО» в журнале «Документы покупателей». Сразу оговоримся, что описывать будем стандартные для платформы «1С:Предприятие 8.1» правила и логику ведения отбора, без привязки к какой-либо конкретной конфигурации и дополнительным сервисным возможностям, в ней реализованным.

Итак, открываем журнал документов «Документы покупателей». В стандартном состоянии без включенного отбора на экран выводятся все документы всех покупателей (даже в демонстрационной базе это занимает не одну страницу).

Нам нужно быстро посмотреть все документы контрагента «Саймон и Шустер ООО». Реализуется задача следующим образом — открывается окно отбора, в элементе «Контрагент» выбирается контрагент «Саймон и Шустер ООО» из справочника (рис. 6) и нажимается «ОК». Задача решена (рис. 7).

Рис. 6

Рис. 7

Для быстрого использования нужного отбора достаточно сразу приступать к выбору нужного критерия. Ставить галочку напротив используемого отбора не нужно. Программа сделает это сама после того, как будет указан необходимый критерий.
Быстро применить настроенные критерии отбора можно, нажав комбинацию клавиш Ctrl+Enter*.

Примечание:
* Подробнее о «горячих» клавишах читайте в статье «Горячие» клавиши упростят работу в «1С:Предприятии 8».

Обратите внимание еще и на то, что при указании значений в элементах отбора (в нашем примере — контрагент «Саймон и Шустер ООО»), в большинстве случаев будет работать механизм быстрого подбора, широко распространенный в платформе «1С:Предприятие 8.1». В нашем примере достаточно было набрать первые символы названия контрагента или его код прямо в поле значения отбора, нажать Enter или Tab и система автоматически бы «угадала» нужный нам элемент справочника.

Имейте в виду — быстрый подбор существенно ускоряет выбор известных вам значений. Используйте его, где это возможно.

Теперь отобразим список номенклатуры, в наименованиях которых содержится слово «Чайник». Для этого открываем справочник «Номенклатура», вызываем окно отбора, в элементе «Наименование» выбираем условие сравнения «Содержит» и указываем требуемое слово (рис. 8).

Рис. 8

Вид сравнения «Содержит» выбран не случайно. Именно он позволяет найти нужное слово (или его часть) в любом месте наименования номенклатуры. Если оставить вид сравнения «Равно», в списке будут отображены только такие элементы номенклатуры, которые называются точно так, как написан запрос. А таких в нашей демобазе нет (то есть не было бы отображено ни одного элемента).

Так как в нашей демобазе у номенклатуры есть реквизит «Полное наименование», оно присутствует в списке доступных отборов отдельной позицией. Но при этом в качестве условий сравнения доступно только «Содержит»/»Не содержит».
Причина в том, что реквизит «Полное наименование» в нашей демобазе — строка неограниченной длины.

Если искать не по наименованию, а по полному наименованию, галочку использования отбора по наименованию лучше снять. Иначе отбор будет использован и по наименованию, и по полному наименованию, что не всегда может оказаться необходимым (рис. 9).

Рис. 9

Для удобства работы с элементами справочника при использовании отборов лучше на время отключать отображение иерархии (рис. 10).

Рис. 10

В качестве третьей задачи просмотрим в журнале документов «Документы покупателей» только документы «Реализация товаров и услуг». Решение этой задачи продемонстрирует особенность одного из видов отбора, доступного только в журналах документов.

Открываем журнал «Документы покупателей» и указываем в элементе отбора «Вид документа» документ «Реализация товаров и услуг». Программа сама предоставляет возможность выбора определенного вида документа из тех, которые включены в данный журнал. Для этого есть и персональная кнопочка на панели действий (рис. 11).

Рис. 11

Аналогично отбору по виду документов платформа автоматически предложит элемент отбора «Структура подчиненности», если в конфигурации настроены взаимосвязи между документами.

Попробуем просмотреть в журнале документов «Документы покупателей» только документы «Счет-фактура» для контрагентов, находящихся в группе «Покупатели» справочника. Эта задача похожа на первую с тем лишь отличием, что мы не указываем конкретного контрагента, а анализируем счета-фактуры целой группы контрагентов, которые находятся в группе «Покупатели».

У задачи существует несколько способов реализации. Рассмотрим наиболее эффективный. Открываем журнал «Документы покупателей», указываем в элементе отбора «Вид документа» документ «Счет-фактура выданный». После этого в элементе отбора «Контрагент» указываем вид сравнения «В группе». Выбираем тип значения «Контрагенты» и открываем форму выбора контрагентов. В ней выбираем группу «Покупатели» (рис. 12).

Рис. 12

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

А теперь усложним задачу: просмотрим в журнале документов «Документы покупателей» только документы «Счет-фактура», но при этом нужно просмотреть документы и для покупателей, и для поставщиков. Решаем ее аналогично предыдущей, за исключением одного накладываемого критерия отбора.

Человеческим языком задача формулируется так: «отобразить все нужные документы по всем контрагентам, находящимся в группах справочника Покупатели, Поставщики, Поставщики на реализацию». Реализуется это просто — в условии отбора «Контрагент» выбираем «В группе из списка» (рис. 13). После этого становится доступным механизм заполнения списка, в который можно добавить нужные группы (или элементы) справочника. Причем список можно заполнить вручную. По аналогии с решением предыдущей задачи, найти нужную группу и выбрать ее, повторив это для каждого нового элемента списка.
Однако целесообразнее воспользоваться удобным механизмом подбора, который автоматически реализуется программой. С помощью подбора намного проще и быстрее заполнить список нужными составляющими. После того, как список заполнен, нажимаем «ОК» и активируем настроенные критерии отбора. Задача решена.

Рис. 13

Отличие условия отбора «В группе из списка» от условия «В списке» заключается в том, что в первом случае условие выполнится для всех элементов справочника, которые либо явно указаны в списке, либо находятся внутри указанных в списке групп. Второй же случай просто указывает программе сверяться со списком при отборе. То есть если вы укажете там группу, то в отбор попадет сама группа (как самостоятельный элемент справочника), а элементы, которые в нее входят, критерию отбора удовлетворять не будут. Решать задачу можно было и «в лоб» — выбрать условие «В списке» и при помощи подбора добавить туда все элементы, содержащиеся в необходимых группах.

Условия отбора «Не в списке» и «Не в группе из списка» позволяют указать нужные наборы данных, которые в отбор попадать не должны. То есть решать задачу можно было бы и от обратного — указать «Не в группе из списка» и добавить туда все группы справочника, кроме трех необходимых (Покупатели, Поставщики, Поставщики на реализацию).

И, наконец, отобразим в документе «Реализация товаров и услуг» с номером ТДН00002 в табличной части только номенклатуру, содержащую в наименованиях слово «СТИНОЛ». Эта задача, позволит увидеть универсальность самого механизма отбора, а также насколько разнообразно может быть его использование. Задача основана на реальных ситуациях, когда, например, в табличной части накладной несколько сотен (а то и тысяч) строк и надо быстро проанализировать ее состав. В нашей демобазе есть документ «Реализация товаров и услуг» с номером ТДН00002, у которого в табличной части есть несколько строк. Несмотря на то что в документе кнопок использования отборов не наблюдается, вызов отбора доступен через контекстное меню (правая кнопка мыши).

Далее накладываем критерии отбора в разрезе Номенклатуры. Тут же возникает другой вопрос — как отобрать «СТИНОЛ», если условия выбора номенклатуры довольно сильно ограничены (доступно «Равно», «Не равно», «В списке» и «Не в списке»). Решить задачу можно и при таких условиях. Выбираем условие «В списке», открываем уже знакомое окно заполнения списка, используем подбор номенклатуры (рис. 14, 1). В списке номенклатуры может быть большое количество элементов, поэтому не будем искать глазами нужные позиции. Воспользуемся отбором в списке номенклатуры, указав условие отбора «Содержит» для наименования номенклатуры (рис. 14, 2).

Рис. 14

После этого остается только добавить отобранные позиции в список отбора для документа и применить критерии отбора.

Полезные функции механизма отбора

Рассмотрим еще несколько моментов, связанных так или иначе с отборами в системе «1С:Предприятие 8.1».

В списках объектов конфигурации, где используется привязка к датам (например, списки документов), и в журналах документов можно использовать быстрый отбор по диапазону дат. Для этого достаточно нажать соответствующую кнопку «Настройка периода» на панели действий (или выбрать в контекстном меню) (рис. 15). Таким способом можно в каждом списке индивидуально регулировать критерий отображения элементов по датам.

Рис. 15

Быстро установить отбор по значению в текущей ячейке списка можно, нажав на кнопку «Отбор по значению в текущей колонке» (рис. 16). При нажатии на эту кнопку будет установлен отбор по текущему значению в колонке. Эта функция работает только для тех колонок, по реквизитам которых можно устанавливать отборы. Если в списке уже используется какой-либо отбор, новый будет присоединен к нему. Причем кнопка становится активной для данной колонки. Отменить такой отбор можно аналогично — «отжав» кнопку в соответствующей колонке.

Рис. 16

Еще одно полезное свойство механизма отборов — ведение истории отборов (рис. 17). Программа запоминает, какие отборы были установлены, поэтому можно быстро вернуться к какому-либо из них, просто выбрав его из выпадающего списка. К слову, в окне «Отбор и сортировка» обратите внимание на кнопку «Отборы» (рис. 6). Нажав на эту кнопку, вы попадете в интерфейс, в котором можно сохранять и восстанавливать настройки отборов, чтобы в последствие можно было к ним вернуться (рис. 18).

Рис. 17

Рис. 18

И последняя функция — это отмена всех отборов (рис. 19). Нажатием кнопки «Отключить отбор» отключаются все отборы, установленные в списке. Аналогичного действия можно добиться, открыв окно «Отбор и сортировка» и сняв галочки напротив всех активных элементов.

Рис. 19

В программе также есть возможность быстрого поиска по номеру документа в списках документов или в журналах. Вызывается эта возможность кнопкой «Поиск по номеру» (рис. 20) и позволяет найти нужный документ, гибко настроив параметры поиска. Найденные документы по указанным критериям отображаются в нижней части окна этого сервиса, и можно перейти к нужному документу.

Рис. 20

Поделиться с друзьями:

Подписаться на комментарии

Отправить на почту

Печать

Написать комментарий

Устанавливает порядок выборки по возрастанию значения указанного реквизита

Синтаксис

Метод ПорядокРеквизита() имеет следующий синтаксис:

ПорядокРеквизита(ИмяРеквизита)

А также альтернативный англоязычный синтаксис:

OrderByAttribute(Name)

Параметры

Описание параметров метода ПорядокРеквизита():

Имя параметра Тип Описание
ИмяРеквизита Строка строка с именем реквизита справочника
Жирным шрифтом выделены обязательные параметры

Описание

Метод ПорядокРеквизита() устанавливает порядок выборки элементов справочника по возрастанию значения указанного реквизита.

Метод доступен только для объектов, созданных функцией СоздатьОбъект(). Его следует использовать до вызова методов ВыбратьЭлементы() и ВыбратьЭлементыПоРеквизиту(), фактически открывающих выборку.

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

Внимание! Метод можно использовать только для реквизитов с установленным признаком Сортировка

Пример использования

Пример кода с использованием метода ПорядокРеквизита():

//выборка контрагентов в порядке инн
Справочник = СоздатьОбъект("Справочник.Контрагенты");
Справочник.ПорядокРеквизита("ИНН");
Справочник.ВыбратьЭлементы();
Пока Справочник.ПолучитьЭлемент() = 1 Цикл
	Сообщить(Справочник.ПолноеНаименование() + " - " + Справочник.ИНН);
КонецЦикла;
//Результат:
// ПОКУПАТЕЛИ -             
// ПОКУПАТЕЛИ/Астра -             
// ПОКУПАТЕЛИ/Азалия - 110000000001
// ПОКУПАТЕЛИ/Бегония - 110000000002
// ПОСТАВЩИКИ -             
// ПОСТАВЩИКИ/Василек - 110000000003
// ПОСТАВЩИКИ/Гвоздика - 110000000004

Читайте также:

  1. Метод Справочник.ПорядокКодов()
  2. Метод Справочник.ПорядокНаименований()
  3. Метод Справочник.ОбратныйПорядок()

Поделиться страницей в соц.сетях

Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа, то необходимо явно разрешить для него доступность сортировки. Например:

Код 1C v 8.х

 ЭлементУП=ЭлементыФормы.СправочникСписок.НастройкаПорядка.Найти("Реквизит1");
      
Если ЭлементУП<>Неопределено Тогда
ЭлементУП.Доступность=Истина;
КонецЕсли;

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Понравилась статья? Поделить с друзьями:
  • Acura автомобилестроительные компании японии
  • 1с как по ссылке получить реквизит документа
  • Ярославская медицинская компания нагорная 9
  • Юристы в сфере бизнеса корпоративные юристы
  • Aig life страховая компания официальный сайт