Подбор номенклатуры (8.1, УТ 10.3, ДОРАБОТАН, ОБНОВЛЕН 09.11.09)


Доработан более дружественный и гибкий интерфейс стандартного подбора номенклатуры для УТ 10.3.

Доработки для типовой обработки «Подбор номенклатуры» конфигурации «Управление торговлей 10.3» версии конфигурации не ниже 10.3.6.8  Обработка может подключаться к табличным частям документов и доступна через подменю табличной части «Заполнить».

Описание доработок

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

Добавлены следующие возможности:

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

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

ПОРЯДОК ПОДКЛЮЧЕНИЯ НА СТАНДАРТНУЮ КНОПКУ «ПОДБОР» В ДОКУМЕНТАХ:

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

Итак начнем:

  1. Скачайте Конфигурацию «Универсальные механизмы»

  2. Сохраните базу!!!

  3. Объедините скачанную конфигурацию с Вашей с помощью пункта меню конфигуратора (Конфигурация > Сравнить, объединить с конфигурацией из файла). В открывшемся окне отключите все объединения и включите только объединение(добавление) справочника ДополнительныеНастройки

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

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

  5. Открываем справочник «Дополнительные настройки» через меню «Операции» > Справочник… (по вашему желанию Вы можете добавить его в интерфейсы) и выбираем для предопределенного элемента с наименованием «Обработка подбора номенклатуры» только что добавленную нами обработку.

  6. Создаем новый общий модуль (либо используем уже существующий) и добавляем в него функцию:

  7. Функция ПолучитьФормуВнешнейОбработки(Объект, ВнешняяОбработка, ИмяФормы, Владелец, КлючУникальности, Обновлять = Ложь) Экспорт

        Если ТипЗНЧ(ВнешняяОбработка) = Тип(«СправочникСсылка.ВнешниеОбработки») Тогда
           
    ИмяФайла = КаталогВременныхФайлов()+«ExtForm»+ВнешняяОбработка.Код+«.epf»; // для простоты отладки

            Если ФайлСуществует(ИмяФайла) И Обновлять Тогда
                Попытка
                   
    ОткрытаяФорма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла, ИмяФормы, Владелец, Владелец);
                    Если
    ОткрытаяФорма.Открыта() Тогда
                       
    ОткрытаяФорма.Закрыть();
                    КонецЕсли;
                   
    УдалитьФайлы(ИмяФайла);
                Исключение
                   
    // значит форма не открыта
               
    КонецПопытки;
            КонецЕсли;

            Если НЕ ФайлСуществует(ИмяФайла) Тогда
               
    ОбъектВнешнейФормы = ВнешняяОбработка.ПолучитьОбъект();

                Если ОбъектВнешнейФормы = Неопределено Тогда
                   
    Сообщить(«Ошибка получения внешней обработки заполнения табличной части документа. Возможно обработка была удалена», СтатусСообщения.Важное);
                    Возврат Неопределено;
                КонецЕсли;

                ДополнительныеПараметры = Неопределено;
               
    МетаданныеОбъекта = Объект.Метаданные();
               
    СсылкаОбъекта = Неопределено;
                Если
    Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
                   
    СсылкаОбъекта = Документы[МетаданныеОбъекта.Имя].ПустаяСсылка();
                ИначеЕсли
    Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда
                   
    СсылкаОбъекта = Справочники[МетаданныеОбъекта.Имя].ПустаяСсылка();
                КонецЕсли;

                ДвоичныеДанные = ОбъектВнешнейФормы.ХранилищеВнешнейОбработки.Получить();
               
    ДвоичныеДанные.Записать(ИмяФайла);

                Попытка
                    Обработка = ВнешниеОбработки.Создать(ИмяФайла);
                Исключение
                   
    Сообщить(«Ошибка исполнения внешней обработки табличной части документа.»+Символы.ПС+ОписаниеОшибки(), СтатусСообщения.Важное);
                    Возврат Неопределено;
                КонецПопытки;

                // Передать внешней обработке дополнительные параметры
               
    Если ДополнительныеПараметры <> Неопределено Тогда
                   
    // Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
                   
    Если НЕ Обработка.Метаданные().Реквизиты.Найти(«ДополнительныеПараметры») = Неопределено Тогда
                       
    Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
                    КонецЕсли;
                КонецЕсли;

                Попытка
                    ПолученнаяФорма = Обработка.ПолучитьФорму(ИмяФормы, Владелец, Владелец);
                    Возврат
    ПолученнаяФорма;
                Исключение
                   
    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, «Ошибка получения формы!»);
                    Возврат Неопределено;
                КонецПопытки;

            Иначе

                Попытка
                    ПолученнаяФорма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла, ИмяФормы, Владелец, Владелец);
                    Возврат
    ПолученнаяФорма;
                Исключение
                   
    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, «Ошибка получения формы!»);
                    Возврат Неопределено;
                КонецПопытки;

            КонецЕсли;

        КонецЕсли;

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

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

        // Открываем форму подбора.
       
    ФормаПодбора = Обработки.ПодборНоменклатуры.ПолучитьФорму(«ОсновнаяФорма», ФормаДокумента, ФормаДокумента);
       
    // ДОБАВЛЕНО (#Ваш комментарий#) начало
        // заменяем форму на внешнюю
       
    ВнешняяОбработка = Справочники.ДополнительныеНастройки.ПодборНоменклатуры.Значение;
        Если
    ЗначениеЗаполнено(ВнешняяОбработка) Тогда
           
    ВнешняяФормаПодбора = _ВашОбщийМодуль_.ПолучитьФормуВнешнейОбработки(ФормаДокумента.ЭтотОбъект ,ВнешняяОбработка, «ОсновнаяФорма», ФормаДокумента, ФормаДокумента, Истина);
            Если
    ВнешняяФормаПодбора <> Неопределено Тогда
               
    ФормаПодбора = ВнешняяФормаПодбора;
            КонецЕсли;
        КонецЕсли;
       
    // ДОБАВЛЕНО (#Ваш комментарий#) окончание
       
    ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметров;
       
    ФормаПодбора.Открыть();

    Где     — код 1С

ПЛЮСЫ:

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

КОД ОТКРЫТ. Буду благодарен за критику и помощь.

77 Comments

  1. Поручик

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

    Reply
  2. Арчибальд

    А подбор номенклатуры! Перед обедом вообще смотреть нельзя :)))

    Reply
  3. WiseSnake

    (1) Спасибо. Старался…

    (2) Специально подбирал ))))) Чтобы вкуснее выглядело 😉

    Чего остальные молчат? Тестируют :)? Может что не получается, так Вы не стесняйтесь )

    Reply
  4. Арчибальд

    (3) Ну так рано еще… А мне потестировать нечем 😐

    Reply
  5. rdv

    Для УПП подойдет?

    Reply
  6. WiseSnake

    На УПП не тестировал…

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

    Reply
  7. Шёпот теней

    … мне кажется хороший продукт и для магазина …

    … только вот подключение и следовательно тестирование — слишком хлопотное дело …

    … поэтому не все программисты оценят а про пользователей и говорить не приходится

    … поэтому мне кажется стоит упростить процедуру тестирования …

    … ВОТтакМНЕкажется …

    … УДАЧИ …

    Reply
  8. Шёпот теней

    … хм … работет гораздо дольше штатной … ?

    Reply
  9. Alex_IT

    А чем стандартное отображение цен и остатков в подборе не устраивает?

    Reply
  10. WiseSnake

    (7) Этот механизм можно подключить параллельно с типовым, то есть если что-то не сработает, то всегда можно использовать типовой… Это доработка работает как вы понимаете на реальном предприятии и уже как основная 🙂

    (8) Так как я старался максимально оставить типовую обработку, то в запрос не стал лезть, по этому пересчет единиц уже идет после формирования номенклатуры. Если объем выводимой информации большой то возможны тормоза. На моей базе это не ощущается. Если будет достаточный интерес и претензии к скорости могу изменить…

    (9) Неудобством и недостаточным функционалом. Например я хочу видеть остатки не в штуках а коробах, потому что выписка идет в коробах и каждый раз делить на количество штук в коробе нереально…

    Reply
  11. whitedog

    Все функции относительно групп работают только в подборе по остаткам; в подборе по остаткам и ценам ничего не работает.

    Reply
  12. WiseSnake

    (11) Спасибо! Сейчас потестил… Действительно присутствуют косяки.

    Reply
  13. fuxic

    =)) как мило. да только надо еще добавить дополнительные отборы, сортировки с помощью построителя по выбранным режимам подбора и будет клиенту счастье

    Reply
  14. KatyS

    Спасибо! Особо порадовало сворачивание дерева и цветовое оформление.))

    Reply
  15. WiseSnake

    (13) Какие например?

    (14) Рад, что моя работа приносит пользу…

    Reply
  16. mr zafod

    все конечно очень даже… а вы не читали документацию к 8.2? почитайте, обратите внимание на построение динамических списков и попробуйте компоновкой данных — работать будет гораздо быстрее. и еще один совет, если позволите — как упростить жизнь при подборе с единицами измерения — ну попробуйте через ВТ в запрос передать номенклатуру с единицами и коэфф. и только для них пересчитывайте в единицы документа, для остальных — ед.хран. просто пересчет и ВЫРАЗИТЬ КАК ЧИСЛО(15,3) — помоему так в запросе — работает очень тяжело.

    Reply
  17. WiseSnake

    (16) Документацию для 8.2 не читал. Я еще толком не начинал кодить на 8.2… Если ткнете носом где почитать, буду благодарен… И почему в таком случае для 8.2 есть волшебная документация по построению волшебных динамических списков, а для 8.1 нет?

    Признаюсь честно:

    1. Пересчет в другую ЕИ был сделан еще на 8.0 в то время когда ВТ не было и в помине. Переделывать было лень… За критику спасибо.

    2. Все написано очень сумбурно… Если честно может я туповат, но я ничего не понял… Хотя бы это:

    > для остальных — ед.хран. просто пересчет и ВЫРАЗИТЬ КАК ЧИСЛО(15,3) — помоему так в запросе — работает очень тяжело.

    Что работает тяжело, как Вы советует сделать то? Зачем тире в предложении?

    Или это:

    > попробуйте компоновкой данных — работать будет гораздо быстрее

    Непонятно зачем компоновкой то? Запроса по моему выше крыши в данном случае… Или Вы что то другое имели ввиду?

    Reply
  18. zenz

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

    Reply
  19. rinatkin

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

    Reply
  20. WiseSnake

    (19) Это есть и в типовой Подбор: «По остаткам номенклатуры»

    Reply
  21. mr zafod

    (16)

    0. Документация в комплекте с платформы. Но тут даже и не это важно. Попробуйте сделать тяжелый запрос с отборами и группировками в построителе и СКД без вывода в таб.док. и посмотрите разницу в скорости исполнения.

    2. Идея в следующем : для номенклатуры, уже содержащейся в документе, пересчитывать в единицы документа, для остальной номенклатуры выводить в ед.хранения — так для остальной номенклатуры вы экономите на 2-ух операциях : умножения на коэффициент и приведения к виду ЧИСЛО(15,3)

    Reply
  22. vlasta

    C виду нормальненько. Было бы неплохо добавить, чтобы автоматически формировались накладные при одновременной отгрузке с разных складов

    Reply
  23. WiseSnake

    (21) 0. Смешно, но я давно уже все пишу в СКД, только не пойму какое отношение СКД имеет к данной разработке, я вообще запросы не трогал…

    2. Вы не поняли сути разработки!

    >>Для номенклатуры, уже содержащейся в документе, пересчитывать в единицы документа, для остальной номенклатуры выводить в ед.хранения

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

    Reply
  24. WiseSnake

    (22) С разных складов можно выписывать одной накладной УТ это позволяет. И кстати разработка более удобно работает с этим функционалом, потому что склад можно менять прямо в форме подбора

    Reply
  25. MRAK

    (23) видимо, он имеет ввиду, что выбирать данные запросом и отображать в форме с помощью СКД эффективнее…

    Reply
  26. WiseSnake

    (25) Согласен, что выбирать данные запросом эффективнее, но в (17) я ответил почему именно так сделано. Со временем может переделаю (или кто нибудь решит переделать). И ИМХО такой простой запрос написать и в конструкторе 2 сек, СКД тут нет необходимости…

    Reply
  27. Ish_2

    (25) Эту шараду так и не разгадал :

    «Попробуйте сделать тяжелый запрос с отборами и группировками в построителе и СКД без вывода в таб.док. и посмотрите разницу в скорости исполнения.»

    Очевидно (21) полагает что в СКД возможно обрашение к результату компоновки без ПроцессораВывода, вид которого и определяет куда будет выводиться результат компоновки (но не запроса) в коллекциюЗначений или ТабличныйДокумент.

    Вся тяжесть вычислений в СКД ложится как раз на ПроцессорВывода.

    А использовать СКД для того чтобы отображать данные на форме — эта шутка заслуживает плюса.

    Reply
  28. mr zafod

    (27) Да, вы правильно поняли, в СКД возможно обращение к результатам компановки без вывода в тд, но с определенным набром отборов и группировок, которые будут выполнены быстрее, чем группировки и отборы самого запроса + использование связанных наборов данных для загрузки в СКД таблицы номенклатуры, единиц и коэффициентов для пересчета остатков в единицы документа.

    Reply
  29. WiseSnake

    (27) Точно… Кажется и я допер что имелось ввиду… Кстати, я часто применяю СКД, чтобы «красиво» построить ДеревоЗначений, для вывода в форму, но для того чтобы строить ТаблицуЗначений с помощью СКД, до этого еще не доходило…

    Reply
  30. Ish_2

    (28) Честно сказать, снова не понял ни слова.

    Если Вы вытаскиваете данные из сформированного макета компоновки , то приведите пример того как Вы обращаетесь к Макету Компоновки и вытаскиваете оттуда нужные данные.

    Пока мне ничего неизвестно про такие операции я использую стандартный подход : для получения любых данных из СКД используется ПроцессораВывода

    того или иного вида.

    Reply
  31. WiseSnake

    (28) Давайте разберемся, пожалуйста:

    У меня список номенклатуры которую надо пересчитать

    То есть Вы предлагаете в СКД запихнуть отбор по это номенклатуре и вывести в ТЗ? Я правильно понял?

    ИМХО загрузка этой таблицы в МенеджерВременныхТаблиц + обычный запрос будет работать быстрее. Вы так не считаете?

    Reply
  32. Ish_2

    (29) Слишком туманно. (28) утверждает , что получает данные из СКД минуя ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.

    Reply
  33. Ish_2

    (32) Преимущество СКД в скорости проявляется когда используется соединение несколько наборов данных и отчет содержит группировки по строкам и колонкам (в настройках СКД Объект «Таблица»).

    Примером такого отчета может служить «ОборотыСчета» .

    В типовой БП 1.6 он реализован «вручную».

    Простое сравнение с таким же отчетом построенном на СКД показывает : применение СКД дает значительный выигрыш во времени.

    А вот о каком преимуществе говорится в (28) не понимаю.

    И чем плох обычный запрос в случае со списком номенклатуры тоже непонятно.

    Reply
  34. mr zafod

    (30) Да, именно процессор вывода в ТЗ.

    (31) Вот как нужно передать вашу «ВТ» в процессор компоновки :

    ПроцессорКомпоновкиДанных.Инициализировать(<Макет>, <Внешние наборы данных>, <Данные расшифровки>, <Возможность использования внешних функций>)

    Параметры:

    <Макет> (обязательный)

    Тип: МакетКомпоновкиДанных. Макет, для которого будет выполняться компоновка.

    <Внешние наборы данных> (необязательный)

    Тип: Структура. Ключ структуры соответствует имени внешнего набора данных. Значение структуры — внешнему набору данных.

    Вот здесь нужно передать как <Внешние наборы данных>

    Правильно построеная схема КД и вывод из нее для получения ТЗ или ДЗ актуален только если обычный запрос использует ВТ, много вложенных таблиц, внешних соединений, отборов или группировок.

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

    Reply
  35. Ish_2

    (35) Ну, слава Богу , ПроцессорВывода всё-таки используется.

    Ваше предложение о возможности использовании ВнешнегоНабораДанных носит

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

    Я даже думаю , что применение СКД в данном конкретном случае — нелепо.

    Reply
  36. WiseSnake

    (35) Просто сумбурно это все было сделано, причем тут 8.2 я вообще не догнал :). Конечно я знаю о всех возможностях описанных в (35), но к данной задаче СКД применять нецелесообразно!

    Если конечно полностью переделывать подбор(что я, кстати, возможно буду делать, есть план сделать АРМ оператора) то да, учту Ваши пожелания :).

    >Я понимаю, что такой способ реализовать гораздо тяжелее

    Да нет вроде, все довольно просто, особых проблем не заметил, даже наоборот…

    >не секрет, что стандартный — это головная боль

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

    Reply
  37. WiseSnake

    Извиняюсь, глюки, сообщения по 2 раза добавляются :(((((((((((((

    Reply
  38. mr zafod

    (36) Да, имелось ввиду не стандартное решение : при получении данных списка запросом по остаткам и ценам. Целесообразность такого метода в использовании СКД как источника заполнения ТЗ/ДЗ номенклатуры без использования динамического списка справочника. Ведь единственное приемущество справочника — получение данных порциями, но и в СКД можно ограничить количество получаемых данных. И именно это является основной сложностью. Использование внешнего набора абсолютно адекватно и отработает быстрее ВТ. В ВТ нужно еще и индексы нужно указать — потратить время и память.

    (37) причем тут 8.2 я вообще не догнал??? Построение динамических списков типа номенклатурного выполняется по запросу описанному через СКД. Там можно для объекта СправочникСписок в его свойствах указать, что при получении его данных нужно читать еще и остатки с ценами. Посмотрите. Даже в демо конф. есть примеры.

    Reply
  39. WiseSnake

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

    Вот Ваша цитата по 8.2 из (16) поста:

    >все конечно очень даже… а вы не читали документацию к 8.2? почитайте, обратите внимание на построение динамических списков

    И с чего Вы решили, что я знаю СКД хуже Вас?

    Reply
  40. mr zafod

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

    Reply
  41. WiseSnake

    (42) Тогда это из (40) как понять?

    «(37) причем тут 8.2 я вообще не догнал??? Построение динамических списков типа номенклатурного выполняется по запросу описанному через СКД. Там можно для объекта СправочникСписок в его свойствах указать, что при получении его данных нужно читать еще и остатки с ценами. Посмотрите. Даже в демо конф. есть примеры.»

    Reply
  42. WiseSnake

    +43 У меня такое ощущение, что мы говорим на разных языках!!!

    Reply
  43. Ish_2

    (40) Я всё -таки попытаюсь понять . Вынужден строить предположения .

    Итак , правильно ли я понял :

    Стандартный подход предполагает :

    получение ВТ с номенклатурой из данных списка и затем запрос с левым соединением с таблицами остатков и цен.

    Вы предлагаете :

    Составить СхемуКомпоновкиДанных в которой указать внешний набор данных

    (данные списка) и внутренние наборы данных Таблицы остатков и цен.

    В этой схеме указать аналогичное левое соединение между внешним набором

    и таблицами цен и остатков.

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

    Так ?

    Reply
  44. mr zafod

    (45)Да, подход примерно такой. Дословно предлагается эмулировать получение данных динамического списка (т.е. последовательного чтения из БД). Т.к. полученные данные списка не сохраняются в кэше объектов, то чтение происходит постоянно, даже если вы отмените автообновление списка, он все равно будет перечитывать данные из БД, повесте точку прерывания в ПриПолученииДанных и уберите фокус с формы, потом вернитесь, у неё список перечитается. Плюс при каждом получении данных необходимо выполнять запрос к остаткам/ценам, если в запрос мы добавим ВТ и отборы — перегрузим запрос. Т.е. в итоге у нас 2 запроса — один, не контролируемый, запрос к справочнику номенклатура, его система выполняет сама, второй к таблицам регистров.

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

    Я могу вам на более подробных примерах показать приемущество СКД.

    Reply
  45. Ish_2

    (46) СКД. Попробую понять.

    Перед началом работы формы подбора (ПередОткрытием) Вы предлагаете в СКД сформировать МакетКомпоновки . Наборы данных в СКД при этом :

    ВнешнийНаборДанных, ТаблицаОстатков, ТаблицаЦен.

    Используется левое соединение.

    ПроцессорКомпоновки при этом не инициализируется.

    Соотвественно ПроцессорВывода не запускается.

    Далее . При событии ПриПолученииДанных получаем список номенклатуры и запихиваем его во ВнешнийНаборДанных , инициализируем ПроцессорКомпоновки и затем запускаем ПроцессорВывода.

    Так ?

    Reply
  46. WiseSnake

    Господа!!! Давайте не будем засорять сабж! Данное обсуждение имеет крайне косвенное отношение к моей разработке.

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

    Reply
  47. Ish_2

    (48) Я извиняюсь. Но предполагаю , что вариант с использованием СКД ,

    как раз имеет самое прямое отношение к теме автора.

    Предполагаю даже, что mr zafod ПРАВ и использование СКД для получения данных в форме подбора более эффективно чем «ручной» запрос с ВТ.

    Reply
  48. WiseSnake

    (49) Перечитайте внимательно (17), я еще хочу сохранить возможность простого обновления подбора.

    Reply
  49. Ish_2

    (50) Ага. Перечитал.

    Согласен , что mr zafod очень косноязычен.

    Согласен , что процедура обновления еще будет дорабатываться.

    Простое обновление — это что ? По кнопке запускать запрос на получение цен и остатков и обновлять список номенклатуры ?

    Reply
  50. WiseSnake

    (51) Я тоже немного костноязычен 😉

    Простое обновление это обновление до возможностей типовой обработки.

    Например пришло обновление типовой обработки, чтобы мне проще было подлить изменения. Сделано много не так как я хотел, так как начинал дорабатывать не я. Если я начну переделывать функционал подбора, то ИМХО мне проще написать обработку заново и как мне хочется…

    Хотя ))))… лана я подумаю и учту Ваши пожелания, спасибо за критику! )))

    Reply
  51. PowerBoy

    +1000 Добавил юбилейный! Поздравляю!

    Reply
  52. WiseSnake

    Спасибо! Но Инфостарт дело хитрое 🙂 и до 1000 еще я не дотянул (((

    Reply
  53. Ish_2

    (52) Я извиняюсь. Но вариант с использованием СКД , с трудом понятый и описанный в (47), всё-таки хуже ,чем обычный — с использованием запроса с ВТ в процедуре ПриПолученииДанных().

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

    Это не есть хорошо.

    Reply
  54. WiseSnake

    (55) Еще раз перечитал (45), (47) (кстати на 47 mr zafod так и не ответил) и…ужаснулся… Вообще то я оказывается не так все понимал. Я то в голове продумывал свой вариант:

    То есть выполнение СКД вместо Запрос + Выгрузка в ТЧ….

    Если честно я так и не догнал как хочет сделать mr zafod, но если Вы, уважаемый Ish_2, правы то:

    1. mr zafod наверно совсем забыл об актуальности данных (за то время пока делается подбор остатки, как пример, могут изменится так что …пипец)

    2. Зачем мне «колбасить» всю номенклатуру при открытии подбора, для того чтобы подобрать 1 строчку номенклатуры? + если у меня стоит уже нужная группа(а обычно так и бывает) то я выполню это в 10-100 раз быстрее чем вариант 47…

    P.S. Вообщем жесть…

    Reply
  55. Мастер1С

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

    Reply
  56. WiseSnake

    (57) Спасибо! Вижу для многих критично. Буду оптимизировать

    Reply
  57. Floid

    Ошибка при выполнении файловой операции ‘C:Program Files1cv81ПодборНоменклатуры1_5.epf’

    по причине:

    Неверный формат хранилища данных ‘file://C:/Program Files/1cv81/ПодборНоменклатуры1_5.epf’

    «Управление торговлей», редакция 10.3 (10.3.8.9)

    Reply
  58. Floid

    не то скопировал… пишет выбраный файл не является внешней обработкой

    {Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(189)}: Ошибка при вызове метода контекста (Создать): Ошибка при выполнении файловой операции ‘C:Program Files1cv81ПодборНоменклатуры1_5.epf’

    Reply
  59. hawk

    Хорошая вещь, почти то что нужно (нужны были чистые остатки без иерархии) это как раз я посмотрел работает на половину в остатках работает, а в остатках и ценах нет. Планируете доработать?

    Reply
  60. WiseSnake

    Обновлена обработка. Описано подключение на стандартную кнопку «Подбор» в документах

    Reply
  61. WiseSnake

    Обновлено описание…

    (60) Какой релиз? платформа?

    (61) Я в принципе уже дорабатывал. Вот только не помню исправлял Вашу проблему или нет 😳 . Если вы скачаете новую версию и проверите, буду Вам очень признателен…

    Reply
  62. Поручик

    Скачал новую версию, при открытии и работе тормозит на нашей базе. Клиент-сервер, в справочнике порядка 20 тыс. позиций. Причём пробовал сегодня, в базе кроме меня никого не было.

    Reply
  63. WiseSnake

    (64) Ну о том, что разработка тормозит на больших базах говорилось и ранее. Новая версия, насколько я помню, не отличается от той что лежала ранее принципом сбора данных. Может быть вы просто открываете по всему справочнику? (с включенным режимом без групп)?? Что я еще могу сказать у меня база около 10тыш позиций скуль, да тормозит чуть больше чем стандартная, но не критично.

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

    Reply
  64. Поручик

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

    Reply
  65. WiseSnake

    (66) Ну так выложи…

    Reply
  66. Поручик

    Толку не будет, конфа сильно моденная.

    Reply
  67. Flashlike

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

    Reply
  68. aleks123321

    Спасибо за разработку. Безусловно [+]

    Reply
  69. margo2007

    Стандартный подбор слишком нагроможден.

    Хотелось бы такой, как этот, по проще.

    Reply
  70. volodya_gold

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

    Reply
  71. kodblack

    при сохранение конфигурации выдает

    {ОбщийМодуль.Подборр(6,14)}: Процедура или функция с указанным именем не определена (ФайлСуществует)

    Если <<?>>ФайлСуществует(ИмяФайла) И Обновлять Тогда (Проверка: Толстый клиент (обычное приложение))

    {ОбщийМодуль.Подборр(18,17)}: Процедура или функция с указанным именем не определена (ФайлСуществует)

    Если НЕ <<?>>ФайлСуществует(ИмяФайла) Тогда (Проверка: Толстый клиент (обычное приложение))

    Подскажите как быть????

    Reply
  72. Morokola

    {ОбщийМодуль.Подбор.Модуль(6,14)}: Процедура или функция с указанным именем не определена (ФайлСуществует)

    Если <<?>>ФайлСуществует(ИмяФайла) И Обновлять Тогда (Проверка: Толстый клиент (обычное приложение))

    {ОбщийМодуль.Подбор.Модуль(18,17)}: Процедура или функция с указанным именем не определена (ФайлСуществует)

    Если НЕ <<?>>ФайлСуществует(ИмяФайла) Тогда (Проверка: Толстый клиент (обычное приложение))

    Та же ошибка что и в 73. Что делать? В чем причина?

    Reply
  73. ВРедная

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

    Спасибо автору.

    Reply
  74. serg1974

    Обработка сделана очень качественно — спасибо — на 1с82 КА (комплексная!) заработала — простой авторегистрацией, через меню «заполнить» удобнее — тем что у пользователя остается выбор.

    WiseSnake — РЕСПЕКТ!!!

    Reply
  75. laf

    Спасибо за обработку. Непонятно, почему в последних версиях 1с нет возможности работать в подборах «безИерархии» и «БезГрупп». Ведь в 7-ке эти возможности были изначально, было Супер-удобно.

    Reply
  76. Agkorepanov

    Слишком сильно тормозит.

    Reply
  77. WiseSnake

    (78) Agkorepanov, Это давно уже все устарело.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *