7.7 Убрать строки в номенклатуре где нет остатка ТИС 9.2

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем SerzhM, 21 июл 2013.

  1. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Добрый день!! Требуется помощь 1с 7.7 ТиС 9.2 есть два склада, 1 и 2 . Требуется чтобы при подборе номенклатуры показывалась номенклатура только одного склада а то продавцу не удобно. Заранее спасибо
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Проще свего - через доп. реквизит справочника. Если анализировать остатки - будут наблюдаться тормоза
  3. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    База не большая примерно 1000 позиций. В справочнике номенклатура задать новый реквизит а дальше писать отбор
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Да.
    + разработать механизм автозаполнения этого реквизита
  5. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Не нужно дублировать темы!

    По вопросу - можно использовать и динамический список, если элементов не много (метод списка справочника "ИспользоватьСписокЭлементов()")

  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    А отбор в этот список Запросом? Для 1000 элементов + база не маленькая будут тормоза. Все конечно зависит от объема документаоборота. Если он маленький - можно мирится. А если 1000 отгрузок в день? Довольно серьезная нагрузка получается.
  7. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Вчера пол ночи просидел и написал вот что
    Все изменения делаем в форме списка "ДляПодбора" справочника "Номенклатура"

    1) на форму диалога кидаем флажок "Наличие" с формулой:
    Код:
    ИзменениеФильтра(Родитель)
    2) в модуль внедряем процедуру: (я ее поставил перед процедурой ПересчетРегистров)

    Код:
    //******************************************************************************
    Процедура ИзменениеФильтра(Группа,Щас=0)
    Перем СписокТоваров, СпрТовары;
    СохранитьЗначение("НаличиеВПодборе",Наличие);
    Если НЕ((ИерархическийСписок() = 1) или (Щас=1)) Тогда
    возврат
    КонецЕсли;
    Если (Наличие = 1) Тогда
    // Получим список товаров группы
    СписокТоваров = СоздатьОбъект("СписокЗначений");
    СпрТовары = СоздатьОбъект("Справочник.Номенклатура");
    СпрТовары.ИспользоватьРодителя(Группа);
    СпрТовары.ВключатьПодчиненные(0);
    СпрТовары.ВыбратьЭлементы();
    Пока СпрТовары.ПолучитьЭлемент() = 1 Цикл
    Если (СпрТовары.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Услуга) и (СпрТовары.ВидНоменклатуры <> Перечисление.ВидыНоменклатуры.Работа) и (СпрТовары.ЭтоГруппа()=0) Тогда
    ТовОстаток = 0; ТовОстатокПоФирме = 0;
    глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, СпрТовары.ТекущийЭлемент(), СпрТовары.ОсновнаяЕдиница, ОстаткиТМЦ, ТовОстаток, ТовОстатокПоФирме, Склад, Резервы, 1);
    Если ПоказыватьОстатокПоФирме = 0 Тогда
    ТовОстатокПоФирме = 0;
    КонецЕсли;
    Если (ТовОстаток<>0) или (ТовОстатокПоФирме<>0) Тогда
    СписокТоваров.ДобавитьЗначение(СпрТовары.ТекущийЭлемент());
    КонецЕсли;
    Иначе
    СписокТоваров.ДобавитьЗначение(СпрТовары.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    ИспользоватьСписокЭлементов(СписокТоваров);
    Иначе
    ИспользоватьСписокЭлементов();
    КонецЕсли;
    КонецПроцедуры
    3) В процедуру ПересчетРегистров() в конце добавляю строку:
    Код:
    ИзменениеФильтра(Родитель); 
    4) В процедуру ОбработкаКликаПоТаблице() после строк
    Код:
    ИначеЕсли ТаблицаПодбора.ТекущаяКолонка()="Номенклатура" Тогда
    
    // открывает многострочную часть на выбранном в таблице значений Номенклатуры
    АктивизироватьОбъект(ТаблицаПодбора.Номенклатура); 
    добавляю строку:
    Код:
    ИзменениеФильтра(ТаблицаПодбора.Номенклатура.Родитель); 
    5) В процедуру ПриОткрытии() в конце добавляю строку:
    Код:
    наличие = Число(ВосстановитьЗначение("НаличиеВПодборе")); 
    6) В конце модуля добавил две процедуры:
    Код:
    Процедура ПриСменеИерархии(Способ)
    
    если способ=0 тогда наличие=0 конецесли;
    ИзменениеФильтра(Родитель, способ);
    
    КонецПроцедуры
    
    //******************************************************************************
    Процедура ПриВыбореРодителя(Элемент)
    
    ИзменениеФильтра(Элемент);
    
    КонецПроцедуры
    
    И вот где-то допустил ошибку
    Последнее редактирование модератором: 27 фев 2014
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Вы все усложнили... При наличии реквизита достаточно применить метод
    УстановитьОтбор(<ИмяОтбора>,<ЗначениеОтбора>)
  9. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Чувствую метод простой, но написать никак не получается помогите с написанием
    Создал новый реквизит Наличие поставил флажок отбор
    а вот дальше сижу туплю. Помогите с кодом плиз!!!!
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Процедура ПриОткрытии()
    ...
    УстановитьОтбор("ИмяВашегоРеквизита",1); //отобразаятся все элементы у которых значение реквизита=1
    ....
    КонецПроцедуры
  11. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Скорее всего я жалкий юзер!! Еще раз мне надо сделать отбор номенклатуры в Подборе при работе с Чек ККМ по остаткам на складе.
    Если ТовОстаток >0 то номенклатура данного элемента показывается
    иначе номенклатура не показывается
    Возможно ли это сделать
    1) без создания нового реквизита
    2)прям в модуле ДляПодбора

    Помогите!
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Можно! К тормозам готовы? Тупо сформируйте отчет по остатка. Посмотрите сколько формируется. Столько же у вас будет открываться форма подбора. Согласны?
  13. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Сек 20 формируется отчет. Я бы хотел попробовать
    А насчет реквизита - получается тоже самое что и включение в прайс???
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Примерно как с прайсом.
  15. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Ну запрос будет строится, наверное, не по всем остаткам? А только по определенному складу, по определенной группе номенклатуры (возможно будут заданы и другие фильтры). К тому же, делать нужно не запросом (как отчет), а просто читать остатки регистра на ТА. Это еще сократит время обработки.

    Считаю, что данный метод для такой задачи вполне приемлем.
  16. Кронус
    Offline

    Кронус

    Регистрация:
    26 фев 2014
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Отбор должен проходить по определенному складу (склад2). И даже по определенной группе
    Можно поподробнее, как мне это сделать через остатки регистра. Заранее благодарен
  17. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Тут синтакс-помощник и поиск по конфигурации должны помочь. Смотрите объект "Регистр", методы "УстановитьФильтр()" и "ВыгрузитьИтоги()".

    Алгоритм примерно следующий:
    1. В форме списка справочника обрабатываем событие "ПриВыбореРодителя()" (предопределенная процедура). В качестве параметра передается новый родитель.
    2. Формируем список значений (простым перебором по полученному родителю, без захода в подчиненные группы) элементов номенклатуры (метод объекта справочника "ВыбратьЭлементы()", с учетом иерархии "ИспользоватьРодителя()").
    3. Создаем объект "Регистр" для получения остатков и "ТаблицаЗначений" для выгрузки результата.
    4. Для регистра задаем фильры (список номенклатуры, склад, возможно есть и другие значения) методом "УстановитьФильтр()".
    5. Выгружаем остатки регистра в таблицу методом "ВыгрузитьИтоги()".
    6. Колонку номенклатуры в таблице итогов выгружаем в список значений (метод ТЗ "Выгрузить()").
    7. Используем полученный список для отображения элементов в списке справочника (метод "ИспользоватьСписокЭлементов()").
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    небольшая проблема возможно возникнет с группами...

Поделиться этой страницей