Здравствуйте!
В номенклатуре, есть много объектов помеченных на удаление.
Можно ли их как то скрыть, что бы они не участвовали в отборе?
Удалить не получается, цепляется за всякие другие документы.
(8) RDC,
Пример кода где тебе не нужно чтобы он искался.
Если по списку справочника ищешь, поставь первый символ какойнить в наименовании и не будет искаться при наборе символов.
(9) bitnike, в принципе так и есть. У нас везде стоят буквы я. Но сейчас у нас уже помеченных на удаление "яшек" больше чем актуальных товаров. И это здорово тормозит поиск.
(10) RDC, Это же помойка, а не справочник номенклатуры, когда помеченных больше обычных элементов. А учет нормально ведется, это вообще нормально? Если период большой в базе уже, может свернуть ее и цепляться при удалении незачто будет.
Предлагаю самый простой вариант. Создать папку. Назвать ее "Удаленные" и обработкой или ручками перенести туда все помеченные на удаление. Это самый простой способ.
(2) shomo, Иногда поиск нужно вести по всему справочнику (по коду или наименованию) так как группы не помнишь.
В дополнение к отдельной папке еще добавляю "я_" к коду и/или наименованию спереди. Все падает на дно списка и не мешает нормальному выбору.
Извиняюсь, мой "велосипед" уже был предложен:)
(13) dusha0020, тогда уже необходимо применять ИспользоватьСписокЭлементовЮ предварительно отобрав нужные элементы справочника( в нашем случае - не помеченные на удаление). И увидим мы только непомеченные, и от бор будет только из непомеченных на удаление.
(14) shomo, Немного геморройно так будет. Само формирование списка будет занимать достаточно много времени, а проблема еще в том что там у них тормозит все. Я бы это делал тогда через СохранитьЗначение() некой переменной, которая бы заполнялась при старте системы 1 раз и обновлялась(перезаписывалась) при удалении/добавлении элементов справочника. Тогда на формирование списка будет потрачено время только один раз и все в дальнейшем будет работать быстро через ВосстановитьЗначение() этого списка и установку его в форме.
Но (11) - это тоже достаточно быстро и не нужно писать процедуры заполнения и обновления списка. Так что пусть уж автор сабжа выбирает или поэксперементирует двумя способами.
Можно добавить новый реквизит ПомеченНаУдаление и заполнить 1 для тех у кого стоит пометка и 0 у кого не стоит. При открытии списка справочника устанавливать отбор у кого ПомечанНаУдаление = 0
Соглашусь с shomo, создать папку и переместить туда. Смысл поиска без группировки по группам, там весь список вывалится, и помеченные и с я. А остальное все разложить по группам. Можно "Быстрый поиск .." реализовать, на данном сайте вопрос уже решался.
(19) victorkim64, полностью согласен. (16) - лучшее, а главное самое быстрое, другие будут гораздо медленнее. Единственный минус - отбором по другому реквизиту не воспользуешься.
Как я понимаю, надо чтобы в поиске номенклатуры по подстроке наименования не выбирались элементы, помеченные на удаление? Смотрим обработку, которая занимается поиском. У меня это "Обработка.ВыборИзСправочникаПоПодстроке". Находим там процедурку "ПоискПоПодстроке", исправляем текст запроса таким вот образом:
Теперь помеченные на удаление не попадают в список выбора.
По-хорошему, надо бы сделать галочку "Включать помеченные на удаление" на форме поиска и текст запроса несколько подправить:
Самый красивый вариант = самый сложный.
Перенести все в новую базу.(Итоги, справочники, ...). Я переносил тмц по которым был оборот последние 6 месяев.
Сразу скажу задача не очень простая, но очень полезная.
Требует адекватного главного бухгалтера и вашего с гл.бухом времени.
Есть типовые обработки по загрузке-выгрузке справочников и документов.
После переноса метите на удаление все элементы справочника ТМЦ и вас удалится весь старый товар (по которому нет остатков и кот. не использовался в документах). Какой период документов переносить можете решить только Вы исходя из специфики предприятия (3мес, 6мес, год).
Самое забавное это сальдо. Поэтому его желательно брать на тот период который уже закрыт.
Вам придется потренироваться для начала, а потом потратить выходные на перенос.
Переносить или нет решать Вам. Решающую роль в этом вопросе играет размер базы и скорость ее работы.
При этом я бы воспользовался советом старый товар забрасывать в отдельную папку. (проще смотреть есть ли висяки на складе). Одним словом вариантов было предложено достаточно. Выбор за Вами! ))
Я делал Обработку при начале работы системы которая устанавливала в помеченной Номенклатуре признак "не включать в прайс". А в справочнике номенкллатура при открытии() устанавливал отбор "не включать в прайс" = 0
можно в форме выбора/списка (где надо исключить помеченные на удаление) добавить в процедуру ПриОткрытии()
СправочникСписок.Отбор.ПометкаУдаления.Значение = Ложь;
СправочникСписок.Отбор.ПометкаУдаления.Использование = Истина;
ну и на форму вынести в таблицу колону - ПометкаУдаления
(34) Так развернуто прямо в статье, только парой абзацев выше:
Чтобы реализовать этот режим показа товаров в списке, в справочник номенклатуры мы добавим индексируемое поле "Показ", которое говорит системе 1С, показывать ли данный элемент в форме списка, или нет. Чтобы этот режим возымел действие, в форме списка справочника мы используем метод УстановитьОтбор() по реквизиту - и тогда скроются все ненужные пользователю элементы из списка. Пример реализации - см. там же.
Установку и сброс признака Показ мы будем производить в глобальном модуле, просто добавив пару строчек кода в обработчик, который проставляет в справочник остатки товара. Если остаток нулевой (или, хуже того, отрицательный), то многие пользователи пожелают это скрыть из показа. :-) На форме списка есть флажок, который позволяет включать и выключать показ скрываемых элементов номенклатуры.
Надеюсь, теперь понятно? Если нет, то совсем просто: вводим в справочник поле "Показ" и при необходимости устанавливаем по нему отбор. Значением поля управляем в предопределенной процедуре глобального модуля ПриУдаленииЭлемента().
Минусы такого решения очевидны, но не обязательно они будут вам мешать: если нужны другие отборы, то получаем фигвам.
Есть ещё вот такой вариант http://infostart.ru/public/146525/ и даже работает, но как-то "криво". Во первых почему то пропала возможность добавлять новые элементы, и поиск при наборе на клавиатуре названия номенклатуры производится не по всему справочнику, и притормаживает.
ToySQL В помощь для SQL базы
Там есть функция ДобавитьЗамену (для замены запросов)
...
лФильтр = "ISMARK = 0";
флАктивна = 1;
z1c = "Sel ect COUNT(*) fr om SC33(NOLOCK) where PARENTID=? and ((ISFOLDER=? and CODE=? and ROW_ID<=?) or (ISFOLDER=? and CODE<?) or (ISFOLDER<?))";
new = "Select COUNT(*) fr om SC33(NOLOCK) wh ere PARENTID=? and "+лФильтр+" and ((ISFOLDER=? and CODE=? and ROW_ID<=?) or (ISFOLDER=? and CODE<?) or (ISFOLDER<?))";
Компонента.ДобавитьЗамену(z1c, new, флАктивна);
...
у нас в базе просто время от времени делается свертка. Выделяется отдельная база по прошлому периоду а в актуальной остаются остатки на начало и справочники - тут уже можно удаление запускать - лишние помеченные уйдут.
и переносить ничего не надо и база меньше и старые данные можно найти (просто в отдельной базе)
Мы обычно вместо стандартного выбора из справочника используем подбор обработкой. Этот подбор вызывается вместо формы списка/выбора справочника. В обработке просто на форме таблица значений. При открытии ее заполняем как нам угодно и видим только то, что нужно. И никаких танцев с бубном вокруг справочника и ВК.
(42) kiser, а сколько у вас строк в ТЗ получается? сколько пользователей через RDP работает и какой размер базы?
(1) может вместо того, чтобы "мучать" 1С - придумать стандартизацию самой работы, если у вас ТАКОЕ количество удаленных позиций?
(43) Frogger1971, баз много, объемы и количество пользователей тоже разное. Размер ТЗ значения не имеет, т.к. она заполняется 1 раз и потом скролится быстро уже заполненная.
Главное чтобы работали именно через RDP.
В любом случае если в подборе, будь то форма списка справочника, или еще что-то нужно видеть остатки то без запросок к бух. итогам и/или регистрам не обойтись. И в этом случае заполнить ТЗ 1 раз при открытии и показать готовую получается более производительно, чем в форме списка справочнника делеть текстовую колонку для остатков с функцией возвращающей этот остаток при любом движении в форме.
Ну и плюс влякие плюшки с любыми отборами и фильтрами при заполнении ТЗ.
Можно не скрывать, а, завести в справочнике реквизит для сортировки. Назвать, например, ЗначениеСортировки. Заполнять его регламентной процедурой ночью, ну и при изменении пометки на удаление. Что бы все помеченные уползли в конец списка.
Если кому еще актуально, визуально скрыть элементы справочника помеченные на удаление для обычной формы:
Процедура ПриОткрытии()
ЭтаФорма.ЭлементыФормы.СправочникСписок.НастройкаОтбора.ПометкаУдаления.Доступность = Истина;
ЭтаФорма.Отбор.ПометкаУдаления.Использование = Истина;
КонецПроцедуры
Лучше самый простой способ - папка (которую тоже можно скрыть, да хоть тоже пометить на удаление), элементам добавить символ впереди типа: яя_. И все. Нафиг все навороты, обработчики, тем более внешние компоненты - это все лютые просадки по производительности! В форме выбора скрыть папку, как написал в комментарии выше (В условном оформлении: отображение и видимость - условие - Пом.Уд. = Истина, поля - пусто) - и все, и нечего ковыряться в одном месте