Как в подборе убрать пустые позиции 1с

Обновлено: 05.07.2024

Для того чтобы получить вышеуказанный указанный результат необходимо:
1. Определяем элементы справочника, которые необходимо показать пользователю.
2. При открытии формы выбора устанавливаем отбор по элементам из п.п.1
3. Определяем ГРУППЫ СПРАВОЧНИКА, которые НЕ ЯВЛЯЮТСЯ РОДИТЕЛЕМ для элементов из п.п.1
4. При открытии формы ч ерез условное оформление убираем видимость групп справочника из п.п. 3

Самым "толстым" моментов в этой схеме является п.п.3 "Определяем ГРУППЫ СПРАВОЧНИКА, которые НЕ ЯВЛЯЮТСЯ РОДИТЕЛЕМ". Но для решения этой задачи был использован способ описанный ildarovich в статье Транзитивное замыкание запросом. После небольшой доработки ф-ии из этой статьи c легкостью можно получить группы справочника, которые не имеют никакого отношения к показываемым элементам справочника:

Стоит отметить что приведенная функция работает достаточно шустро. Приведенная в статье функция не учитывает одну ситуацию - наличие в списке справочника ПУСТЫХ ГРУПП т.е. групп, у которых нет ни одного элемента. Но эту ситуацию легко обыграть, но при этом будет одно лишнее ображение к Справочнику для получения всех групп. В статье находтся выгрузка базы, в которой на примере одного справочника показан принцип работы вышеописанного способа.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(1) shevelyov,
Главное отличие видно даже из постановки задачи: у вас "Когда требуется открыть список справочника с отбором, например,ПО ОПРЕДЕЛЕННО ГРУППЕ", а у меня "при открытии формы выбора накладываются определенные УСЛОВИЯ НА ЭЛЕМЕНТЫ СПРАВОЧНИКА". Т.е. вы сразу знаете какие группы д.б. видны, а я их еще определяю исходя из иерархии справочника и накладываемых условия отбора на элементы справочника.

Кроме того если вам надо показать огурцы, которые будут находиться в
-Группа "Овощи и фрукты"
-- Группа "Овощи"
--- Группа "Огурцы"
В вашем случаем пользователь будет видеть ТОЛЬКО группу "Огурцы", а в моем случаем будет видна вся иерархиям полностью вплоть до группы "Огурцы".

В "такси" ведет себя не адекватно. Пропадает заголовок таблицы списка.

Очень сложно. Зачем?
Вся фишка заключается в том, что отбор компоновки дин списка и даже прямое условие дин списка в условии ГДЕ не справляется со скрытием ненужных групп.

То есть такой код динамического списка не работает

Чтобы скрыть группы надо перетащить условие фильтрации из ГДЕ в JOIN

Переданный в форму отбор достаточно превратить в параметры дин списка.
Каменный цветок сразу получится.

(7) ваше предложение это работающее решение или это концепция?

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

форма выбора в режиме просмотра "Дерево" ничего не показывает, а вот в режиме просмотра "Список" показывает ТОЛЬКО элементы (группы справочника не видны) по условию

(8) не концепция. вполне себе работает для верхнего уровня иерархии. Насчет старта с промежуточного - не было такой задачи :-)

По поводу только элементов - это решение для тех, кому не страшно разрешить реквизит фильтрации для группы, и далее заполнить его нужными данными. Иначе, как вы заметили, групп не будет видно. Тут, как говорится, "Вам шашечки или ехать".
Согласен, что такое вмешательство в конфигурацию не всем понравится, для кого-то вообще жирный минус, но тут как раз можно вашу транзитивность попробовать сюда доцепить и отпадет необходимость в условном оформлении. UPD 1: или просто добавить непосредственных родителей фильтрованных элементов в фильтр соединения. Необязательно вложенный запрос же, наверное можно же и врем таблицу в соединение пихнуть. В каком то релизе временные таблице в дин списке уже сделали кажись.

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

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

Для того чтобы получить вышеуказанный указанный результат необходимо:
1. Определяем элементы справочника, которые необходимо показать пользователю.
2. При открытии формы выбора устанавливаем отбор по элементам из п.п.1
3. Определяем ГРУППЫ СПРАВОЧНИКА, которые НЕ ЯВЛЯЮТСЯ РОДИТЕЛЕМ для элементов из п.п.1
4. При открытии формы ч ерез условное оформление убираем видимость групп справочника из п.п. 3

Самым "толстым" моментов в этой схеме является п.п.3 "Определяем ГРУППЫ СПРАВОЧНИКА, которые НЕ ЯВЛЯЮТСЯ РОДИТЕЛЕМ". Но для решения этой задачи был использован способ описанный ildarovich в статье Транзитивное замыкание запросом. После небольшой доработки ф-ии из этой статьи c легкостью можно получить группы справочника, которые не имеют никакого отношения к показываемым элементам справочника:

Стоит отметить что приведенная функция работает достаточно шустро. Приведенная в статье функция не учитывает одну ситуацию - наличие в списке справочника ПУСТЫХ ГРУПП т.е. групп, у которых нет ни одного элемента. Но эту ситуацию легко обыграть, но при этом будет одно лишнее ображение к Справочнику для получения всех групп. В статье находтся выгрузка базы, в которой на примере одного справочника показан принцип работы вышеописанного способа.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(1) shevelyov,
Главное отличие видно даже из постановки задачи: у вас "Когда требуется открыть список справочника с отбором, например,ПО ОПРЕДЕЛЕННО ГРУППЕ", а у меня "при открытии формы выбора накладываются определенные УСЛОВИЯ НА ЭЛЕМЕНТЫ СПРАВОЧНИКА". Т.е. вы сразу знаете какие группы д.б. видны, а я их еще определяю исходя из иерархии справочника и накладываемых условия отбора на элементы справочника.

Кроме того если вам надо показать огурцы, которые будут находиться в
-Группа "Овощи и фрукты"
-- Группа "Овощи"
--- Группа "Огурцы"
В вашем случаем пользователь будет видеть ТОЛЬКО группу "Огурцы", а в моем случаем будет видна вся иерархиям полностью вплоть до группы "Огурцы".

В "такси" ведет себя не адекватно. Пропадает заголовок таблицы списка.

Очень сложно. Зачем?
Вся фишка заключается в том, что отбор компоновки дин списка и даже прямое условие дин списка в условии ГДЕ не справляется со скрытием ненужных групп.

То есть такой код динамического списка не работает

Чтобы скрыть группы надо перетащить условие фильтрации из ГДЕ в JOIN

Переданный в форму отбор достаточно превратить в параметры дин списка.
Каменный цветок сразу получится.

(7) ваше предложение это работающее решение или это концепция?

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

форма выбора в режиме просмотра "Дерево" ничего не показывает, а вот в режиме просмотра "Список" показывает ТОЛЬКО элементы (группы справочника не видны) по условию

(8) не концепция. вполне себе работает для верхнего уровня иерархии. Насчет старта с промежуточного - не было такой задачи :-)

По поводу только элементов - это решение для тех, кому не страшно разрешить реквизит фильтрации для группы, и далее заполнить его нужными данными. Иначе, как вы заметили, групп не будет видно. Тут, как говорится, "Вам шашечки или ехать".
Согласен, что такое вмешательство в конфигурацию не всем понравится, для кого-то вообще жирный минус, но тут как раз можно вашу транзитивность попробовать сюда доцепить и отпадет необходимость в условном оформлении. UPD 1: или просто добавить непосредственных родителей фильтрованных элементов в фильтр соединения. Необязательно вложенный запрос же, наверное можно же и врем таблицу в соединение пихнуть. В каком то релизе временные таблице в дин списке уже сделали кажись.

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

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

Стоит задача - открыть форму выбора справочника по определённой группе.

Вроде, всё просто, делаем отбор по иерархии:

В форме выбора в настройке списка видим требуемый отбор по группе "Огурцы":

отбор по иерархии

Однако сам список справочника выглядит неожиданно:

Список справочника только с отбором

Если открывать группы, видим, что элементы присутствуют только в группе "Огурцы", остальные группы пусты. Отбор работает, но от лишних "пустых" групп хотелось бы избавиться.

Я нашёл другой вариант условного оформления. Ниже вторая половина процедуры "ПриСозданииНаСервере" формы выбора справочника:

Данный код устанавливает параметр "Видимость" условного оформления динамического списка в значение "Нет" по следующему условию

Условие видимости групп справочника

Результат такого оформления ниже:

Результат

Видна только нужная группа, её подгруппы и их элементы. Что, собственно, и хотелось увидеть.

s hurik_shurik п редложил лучшее, более понятное решение (комментарий № 5):

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

есть только один недостаток ИМХО, выражение "НЕ В ИЕРАРХИИ" очень сильно нагружают СУБД (1) rozer, согласен, мой отбор по оформлению происходит заметно долго даже на глаз, мне самому не очень нравится моё решение, но придумать что-либо проще не удалось. Может, кто поделится более удачным решением? Топорный, но эффективный вариант: В реквизит группы или в РС записывать количество вложенных элементов (При записи номенклатуры или рег.заданием).
P.S. Но вроде и без реализации этой хотелки многие прекрасно живут.)

shevelyov,
Главное отличие от того что есть в публикации http://infostart.ru/public/311136/ видно даже из постановки задачи: у вас "Когда требуется открыть список справочника с отбором, например,ПО ОПРЕДЕЛЕННО ГРУППЕ", а там "при открытии формы выбора накладываются определенные УСЛОВИЯ НА ЭЛЕМЕНТЫ СПРАВОЧНИКА". Т.е. вы сразу знаете какие группы д.б. видны, а там они определяется исходя из иерархии справочника и накладываемых условия отбора на элементы справочника.

Кроме того если вам надо показать огурцы, которые будут находиться в
-Группа "Овощи и фрукты"
-- Группа "Овощи"
--- Группа "Огурцы"
В вашем случаем пользователь будет видеть ТОЛЬКО группу "Огурцы", а там будет видна вся иерархиям полностью вплоть до группы "Огурцы".

предложенный в этой статье вариант натолкнул меня на одну интересную мысль, решил проверить, вроде получилось:

Что интересно, без второй строки с "Отображать" система вела себя не адекватно..
А вообще смысл в том, что всем выключить видимость, а после по отбору "ВИерархии" включить.
Вот только не пойму, есть ли прирост в скорости по сравнению с "НЕ в ИЕРАРХИИ" (5) shurik_shurik, Замерил производительность обоих вариантов. Ваш, если и быстрее, то на десятитысячную секунды. Зато понятнее и проще. Включил Ваш код в статью. Надеюсь, Вы не против? Да, оказалось, что отбор по группе (строки 2-5 Вашего кода) излишен!

(6) "Да, оказалось, что отбор по группе (строки 2-5 Вашего кода) излишен!"

Это только пока в справочнике элементов относительно не много!

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

Так что да, не зря ИТС не рекомендует, но. Не понятно почему все-таки нет нормального способа скрыть группы.

(15) потому что отбор в режиме иерархии работает только на элементы. Сними режим в список и получишь что хотел. Вот Вам еще в копилку вариантов (правда он получается не совсем динамический, но эта проблема возникнет когда во время открытого списка, будут добавлять группы в корне справочнике или в группе выше от "ГруппаКонструктора"):

Скорость можете замерить. Я у себя визуально увидел реальную разницу в работе списка.
Даже если групп будет очень много, проще их хранить в памяти сервера и проверять, чем каждый раз дергать базу запросом "В ИЕРАРХИИ", который, кстати, тоже не может похвастаться быстродействием.
Вот с отбором в первых строках, тут нужно проверять более детально, в моем случае разницы с ним и без не заметил, для компактности убрал.
UPD Можно еще доработать на контроль уровня, поскольку если будет отбор не по корневой папке, тогда весь "этот разговор" разбивается об стенку. В "такси" ведет себя не адекватно. Пропадает заголовок таблицы списка. (0) У меня очень сильно тормозило.
помогло следующее: т.к. элементы (не-группы) успешно скрываются отбором, то нужно в условия условного оформления добавить, условие, чтобы оно накладывалось только на группы.
ИТС: Условное оформление формы
"Не рекомендуется использовать условное оформление для скрытия в таблице строк целиком. Использование условного оформления для скрытия строк может негативно влиять на производительность и приводить к некорректному отображению содержимого таблицы." (12) Если есть лучшее и более простое решение - буду рад ознакомиться.

(13) "лучшего и более простого решения" отбора групп в динамическом списке не существует.
Можно использовать РодительВерхнегоУровня таблицы формы.
Можно отказаться от иерархического отображения вообще.
Можно внутренними соединениями пошаманить.

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

Нашёл, как мне кажется "лучшее и более простое решение" вот тут: http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=560816
Добавил в динамический список группировку по полю "Родитель". Всё сразу заработало. Добавил в динамический список группировку по полю "Родитель". Всё сразу заработало.
Единственное, что мне помогло. Быстро и просто, без лишнего кода. Спасибо! А это разве дает иерархию? Они идут списком, но по родителю.

Если в группе "Диагностика анемий" в результате отбора будет пусто, Вы её всё равно будете видеть. В чём и проблема.

Кстати нет, если пометить все позиции в группе на удаление, она исчезает !
Так же если фильтр в выборке наложить. Группы - Гематологии нет (там все элементы помечены на удаление) Но здесь другая проблема, это кол-во уровней. Оно постоянно. И если уровень вложенности ниже максимального, то папка верхнего уровня получается пустой. А в данном примере 4.
То папка вложенности 2 в справочники, будет в данном варианте, как
<Пусто> - <Пусто> - <Имя1>-<Имя2> В примере настраивается видимость группы верхнего уровня. А я пробовала на вложенной группе. Попробовала все варианты из статьи - не видно группы. Оказалось чтобы она стала видна нужно чтобы моя группа была текущей. Если на ней спозиционироваться, то она видна. Если нет - настройка видимости конкретно ее при отключенной видимости остальных не помогает. Это если режим просмотра иерархический список Спасибо огромное братан:) я 4 часа сидел, замучался блин, а твой код моментально подошёл)

Просмотры 35620

Загрузки 0

Рейтинг 55

Создание 29.10.15 00:29

Обновление 29.10.15 00:29

№ Публикации 413242

Тип файла Нет файла

Конфигурация Не имеет значения

Операционная система Не имеет значения

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Не указано

Слушатели смогут начать работать и получать результат над своими проектами сразу после первого занятия. Выполнение проектов вовремя и в рамках бюджета. Основы ТОС. с 01 по 29 декабря 2021 г.

См. также

Идея или как сохранить ЦВЕТ, ШРИФТ, ОФОРМЛЕНИЕ пользователя Промо

Простой и оригинальный способ сохранять ЦВЕТОВУЮ СХЕМУ и ОФОРМЛЕНИЕ пользователей. Как сохранить ЦВЕТ

22.06.2015 24933 Tatitutu 12

[ПОТРАЧЕНО] Динамическая таблица формы

История одной разработки в далеком 2020 году.

15.10.2021 3413 rpgshnik 47

Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".

Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом). То вам - сюда.

08.10.2021 1481 e-9 13

Прогресс-бар в поле динамического списка

Изображаем прогресс-бары в колонке динамического списка

23.08.2021 2742 Yashazz 12

Хранение и редактирование дополнительных параметров в регламентированном отчете. Для начинающих. Промо

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

22.01.2014 21058 KapasMordorov 4

Перенос расшифровки в пользовательские настройки

Как перенести данные расшифровки в пользовательские настройки.

11.08.2021 685 scientes 1

1С и ODBC

ODBC (Open Database Connectivity) — это программный интерфейс, универсальное средство доступа к базам данных, разработанное для обмена между источниками (базами данных) разного типа. Данный интерфейс принято считать более низкоуровневым, чем библиотека ADOdb, однако причина эта кроется не в более низком качестве, но в том, что ODBC послужила своего рода фундаментом более поздней ADOdb – работу с последней поддерживают все типы баз, работающие и с первой. В данной статье мы расскажем о том, как взаимодействуют ODBC и 1С, а точнее, поговорим о механизме 1С ВнешнийИсточникДанных и его использовании с вышеупомянутым интерфейсом.

02.06.2021 1288 Koder_Line 5

Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах

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

07.04.2021 2067 Vlad_CK 9

Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a). Промо

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

09.04.2011 47329 mtv:) 75

Динамический список и поиск. неприятностей

Страх и ненависть в поиске по динамическому списку, или "Кое-что о неоптимальном отборе".

17.03.2021 4497 Yashazz 37

Отображение и редактирование в дереве большого количества настроек/параметров/опций программы, конфигурации, документа, справочника - без программного создания элементов формы

Очень много реквизитов (настроечные опции, параметры) у справочника или документа, и их все необходимо разместить на управляемую форму - лень! Хочется - добавил в метаданные и всё! В публикации отличное, простое и олдскульное решение с открытым кодом, научимся работать с ДанныеФормыДерево, ДеревомЗначений, сделаем быстрый поиск, создадим универсальный инструмент.

11.12.2020 1060 SizovE 6

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

Большое количество динамических списков на форме, большое количество условий, долгое интерактивное добавление условий, оформление по значению элементов справочников - всё это не позволяет использовать интерактивный режим назначения условного оформления динамического списка. В публикации с открытым кодом детально разберем программное решение назначения условного оформления, создадим универсальную функцию для оформления списка.

30.11.2020 6390 SizovE 4

Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. Промо

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

27.07.2012 32853 milkers 10

[mobile] Переносим HTML интерфейс на 1С

Разберем методы переноса HTML интерфейса на 1С на примере реализации нижнего меню для мобильного приложения. Сравним методы между собой. Данные методы можно применять не только для мобильной разработки, но и для веб-клиента и т.д

02.11.2020 8808 leobrn 78

Цветовая схема конфигуратора в стиле OneScript

Цветовая схема конфигуратора 1С максимально приближенная к стандартной цветовой схеме OneScript в VS Code.

01.10.2020 1385 DmitrySinichnikov 3

Рендеринг элементов управляемого интерфейса

Реализация отображения всего состояния формы проще, чем работа по изменениям. Однако использование идеи разделения алгоритмов на программные слои MVC и построения реактивных систем позволяет получить не только простые и масштабируемые решения, но и производительные интерфейсы. Рассмотрим примеры таких реализаций на основе использования фреймворка «Управление состоянием»: Информационная надпись, Заголовок формы, Свертываемая группа, Отключаемые панели.

22.09.2020 3906 kalyaka 5

Рабочее место кассира для touch-screen и программируемой клавиатуры продавца в «1С: Розница» Промо

Вашему вниманию предлагается текст одного из технических проектов «1С: Розница 8», он описывает процесс разработки интерфейса РМК, с которым, нынче, работают кассиры очень многих магазинов.

29.11.2012 48326 aavolkoff 50

Переопределение представления ссылочного значения

Переопределение представления ссылочного значения

17.09.2020 4951 sam441 15

[Общий модуль] Динамическое формирование интерфейса

Версия 2.0.0.1 + добавил GitHub

28.08.2020 13034 rpgshnik 74

Медленно формируются отчеты в БП 3, способ исправления

При формировании любых отчетов, но в особенности оборотно-сальдовой ведомости в бухгалтерии 3, очень долго формировался отчет, ПОЯВЛЯЛСЯ ЖЕЛТЫЙ КОТ, разумеется у бухгалтера невроз, да и у меня тоже. Что только ни делал: тестирование и исправление с пересчетом итогов, настройка SQL, отключение фоновых заданий, обновление платформы и конфигурации, а толку нет, регламентные операции по скулю тоже сделал. И что же сделал, а вот что:

21.07.2020 3044 VID1234 8

Бухгалтерия предприятия 3.0 интерфейс, аналогичный 1С:Бухгалтерии 7.7; Промо

Бухгалтерия предприятия, редакция 3.0, версия 3.0.14. Добавлена возможность использовать интерфейс, аналогичный 1С:Бухгалтерии 7.7;

20.09.2012 37963 dour-dead 18

Регистр сведений как дополнение объекта

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

19.05.2020 5099 Infector 14

Перенос инструкций из word во встроенную справку 1С с сохранением картинок и форматирования

Делюсь простым и удобным способом переноса справки/инструкций из ворда (и не только) во встроенную справку 1С с сохранением картинок и форматирования.

22.04.2020 5561 77dream77 21

Звездный рейтинг *****

Ранее я представил подсистему «Управление состоянием». К подсистеме был проявлен интерес, однако в рамках одной статьи аспекты её использования были представлены недостаточно полно. Более подробное рассмотрение использования подсистемы я планирую продолжить через публикацию отдельных учебные примеров. Это первая статья из цикла таких примеров.

06.04.2020 2708 kalyaka 3

Выбор вариантов отчета в "Управление торговлей" ред. 11 Промо

В УТ 11 в свойствах конфигурации задано хранилище вариантов отчетов. Исходя из этого, все отчеты будут использовать для своих вариантов именно это хранилище (если, конечно, в свойствах самого отчета не задано другое хранилище). По сути, все варианты для отчетов находятся в справочнике "Варианты отчетов", который заполняется при первом запуске системы. Вполне очевидно, что если Вы создаете свой отчет (внешний или внутренний) с несколькими вариантами, у Вас не будет возможности выбирать нужный вариант (переключаться между вариантами), т.к. в выше указанном справочнике нет никакой информации о вариантах созданного Вами отчета. В этой небольшой статье я покажу один из способов решения данной проблемы.

Работа с полем выбора

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

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

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

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

Представление значения, хранящегося в поле выбора

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

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

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

Связь поля выбора с данными

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

Особенности инициализации и использования списка выбора

Для правильного отображения в поле выбора данных, с которыми он связан, список выбора должен формироваться в теле модуля формы. Формировать список выбора для поля выбора в обработчике любого из событий формы – поздно. Это приведет к тому, что в поле выбора будет установлено значение "Неопределено", хотя в реквизите при этом может быть любое значение.

Такая ситуация возникает из-за того, что данные устанавливаются в элементы управления формы, связанные с ними, в процессе создания формы. А обработчики событий ПередОткрытием(), ПриОткрытии() вызываются после создания самой формы, в процессе инициализации ее визуальной части. Получается, что при создании формы полю выбора поставили некоторое значение в момент, когда его список выбора пустой. При этом, поскольку список выбора пустой, вместо устанавливаемого значения в поле выбора будет сохранено значение "Неопределено".

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

Использование поля выбора: пример 1

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

Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:

1. В начальном состоянии поле выбора - пустое, поле ввода содержит значение 0.

2. Выбираем в поле выбора в выпадающем списке строку с надписью "Один": в поле ввода помещается значение 1. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку "Один", значение для которой равно 1. Оно и отобразилось в поле ввода.

3. Выбираем в поле выбора в выпадающем списке строку с надписью "Два": в поле ввода помещается значение 2.

Перейдем в поле ввода и попробуем редактировать значения в нем:

1. Введем в поле ввода значение 3 и сойдем с поля ввода. В поле выбора запишется значение 3 и установится значение из соответствующей строки списка выбора поля выбора ("Три").

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

Использование поля выбора: пример 2

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

Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:

1. В начальном состоянии поле выбора и поле ввода - пустые:

2. Выбираем в поле выбора в выпадающем списке строку с надписью "Один": в поле ввода помещается значение. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку "Один", значение для которой равно ссылке на на элемент справочника Справочники.Номенклатура.Элемент1. Оно и отобразилось в поле ввода.

3. Выбираем в поле выбора в выпадающем списке строку с надписью "Два": в поле ввода помещается ссылка на элемент справочника Справочники.Номенклатура.Элемент2:

Перейдем в поле ввода и попробуем редактировать значения в нем:

1. Выберем в поле ввода значение Справочники.Номенклатура.Элемент1. В поле выбора запишется значение Справочники.Номенклатура.Элемент1 и установится значение из соответствующей строки списка выбора поля выбора ("Один").

2. Выберем в поле ввода значение Справочники.Номенклатура.Элемент2. В поле выбора запишется значение Справочники.Номенклатура.Элемент2 и установится значение из соответствующей строки списка выбора поля выбора ("Два").

3. Выберем в поле ввода значение Справочники.Номенклатура.Элемент3. В поле выбора значение Справочники.Номенклатура.Элемент3 записано не будет, поскольку оно не было добавлено в список выбора. Значением в поле ввода будет "Неопределено":

Использование поля выбора: пример 3

Пусть есть внешняя обработка, в которой создан реквизит Реквизит1 типа СправочникСсылка.Номенклатура. Во внешней обработке есть две формы: в первой устанавливается значение реквизита и по нажатию на кнопку открывается вторая форма.

В левой колонке - внешний вид первой формы внешней обработки. По нажатию на кнопку "Открыть форму" из поля ввода берется значение и сохраняется в реквизите внешней обработки, после чего открывается вторая форма:

В правой колонке - внешний вид второй формы внешней обработки. В ней размещены поле выбора и поле ввода; они оба связаны с реквизитом внешней обработки Реквизит1 по данным. Приведем текст модуля формы:

Мы видим,. что в модуле формы инициализируется список выбора для поля выбора: поле выбора может принимать значения Справочники.Номенклатура.Элемент1, Справочники.Номенклатура.Элемент2, Неопределено. При этом для двух первых значений явно указаны их представления - "Один" и "Два".

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

Значение реквизита - пустая ссылка:

В данном случае в поле ввода значением будет пустая ссылка на элемент справочника, а в поле выбора - Неопределено . Поскольку в списке выбора для поля выбора пустая ссылка на элемент справочника в значения не входит, ее установить нельзя - при установке значения в виде пустой ссылки поле выбора примет значение Неопределено .

Значение реквизита - одно из значений, имеющихся в списке выбора для поля выбора:

В данном случае и в поле ввода, и в поле выбора значением будет ссылка на Элемент1 справочника. При этом для представления значения поле выбора воспользуется представлением установленного значения из списка выбора - строкой "Один".

Значение реквизита в списке выбора для поля выбора отсутствует:

В данном случае в открываемой форме в поле выбора и поле ввода будет произведена попытка установить в качестве значения ссылку на Элемент3 справочника. В поле ввода такое значение будет нормально установлено, а вот в поле выбора после его установки сохранится значение Неопределено , поскольку ссылка на Элемент3 справочника в значения из списка выбора не входит.

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

Часто пользователи 1С встречаются с проблемой неактуальности той или иной номенклатуры, обычно её помечают на удаление и забывают о ней, так как она не участвует в дальнейшей работе. Но что делать если база номенклатуры составляет тысячи или десятки тысяч позиций. В этом случае пометкой на удаление не обойтись и появляется необходимость полного удаления позиций.


попадаем в раздел, где отражена вся номенклатура



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




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


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



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


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

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