gifts2017

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

Опубликовал Алексей Коробов (WiseSnake) в раздел Обработки - Обработка документов

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

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

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

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

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

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

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

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

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

Итак начнем:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            Иначе

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

            КонецЕсли;

        КонецЕсли;

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

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

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



    Где     - код 1С

ПЛЮСЫ:

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

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

Скачать файлы

Наименование Файл Версия Размер
ПодборНоменклатуры1_7.epf 1022
.epf 148,95Kb
14.09.14
1022
.epf 148,95Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Ожерельев (Поручик) 08.09.09 11:02
С виду гламурненько. За открытый код плюс.
2. Александр Рытов (Арчибальд) 08.09.09 13:11
А подбор номенклатуры! Перед обедом вообще смотреть нельзя :)))
3. Алексей Коробов (WiseSnake) 08.09.09 13:20
(1) Спасибо. Старался...
(2) Специально подбирал ))))) Чтобы вкуснее выглядело ;)

Чего остальные молчат? Тестируют :)? Может что не получается, так Вы не стесняйтесь )
4. Александр Рытов (Арчибальд) 08.09.09 13:24
(3) Ну так рано еще... А мне потестировать нечем :|
5. rdv (rdv) 09.09.09 05:56
6. Алексей Коробов (WiseSnake) 09.09.09 06:28
На УПП не тестировал...
По идее должно подойти, возможно придется незначительно доработать...
7. Александр Шишкин (Шёпот теней) 09.09.09 08:43
... мне кажется хороший продукт и для магазина ...
... только вот подключение и следовательно тестирование - слишком хлопотное дело ...
... поэтому не все программисты оценят а про пользователей и говорить не приходится
... поэтому мне кажется стоит упростить процедуру тестирования ...
... ВОТтакМНЕкажется ...
... УДАЧИ ...
8. Александр Шишкин (Шёпот теней) 09.09.09 08:57
... хм ... работет гораздо дольше штатной ... ?
9. Alex_IT (Alex_IT) 09.09.09 09:37
А чем стандартное отображение цен и остатков в подборе не устраивает?
10. Алексей Коробов (WiseSnake) 09.09.09 12:03
(7) Этот механизм можно подключить параллельно с типовым, то есть если что-то не сработает, то всегда можно использовать типовой... Это доработка работает как вы понимаете на реальном предприятии и уже как основная :)
(8) Так как я старался максимально оставить типовую обработку, то в запрос не стал лезть, по этому пересчет единиц уже идет после формирования номенклатуры. Если объем выводимой информации большой то возможны тормоза. На моей базе это не ощущается. Если будет достаточный интерес и претензии к скорости могу изменить...

(9) Неудобством и недостаточным функционалом. Например я хочу видеть остатки не в штуках а коробах, потому что выписка идет в коробах и каждый раз делить на количество штук в коробе нереально...
11. WhiteDog (whitedog) 09.09.09 12:12
Все функции относительно групп работают только в подборе по остаткам; в подборе по остаткам и ценам ничего не работает.
12. Алексей Коробов (WiseSnake) 09.09.09 12:22
(11) Спасибо! Сейчас потестил... Действительно присутствуют косяки.
13. Алекс Климанов (fuxic) 09.09.09 14:10
=)) как мило. да только надо еще добавить дополнительные отборы, сортировки с помощью построителя по выбранным режимам подбора и будет клиенту счастье
14. Екатерина Смирнова (KatyS) 09.09.09 14:41
Спасибо! Особо порадовало сворачивание дерева и цветовое оформление.))
15. Алексей Коробов (WiseSnake) 09.09.09 14:58
(13) Какие например?

(14) Рад, что моя работа приносит пользу...
16. Roman Biblbox (mr zafod) 09.09.09 20:17
все конечно очень даже... а вы не читали документацию к 8.2? почитайте, обратите внимание на построение динамических списков и попробуйте компоновкой данных - работать будет гораздо быстрее. и еще один совет, если позволите - как упростить жизнь при подборе с единицами измерения - ну попробуйте через ВТ в запрос передать номенклатуру с единицами и коэфф. и только для них пересчитывайте в единицы документа, для остальных - ед.хран. просто пересчет и ВЫРАЗИТЬ КАК ЧИСЛО(15,3) - помоему так в запросе - работает очень тяжело.
17. Алексей Коробов (WiseSnake) 10.09.09 00:01
(16) Документацию для 8.2 не читал. Я еще толком не начинал кодить на 8.2... Если ткнете носом где почитать, буду благодарен... И почему в таком случае для 8.2 есть волшебная документация по построению волшебных динамических списков, а для 8.1 нет?
Признаюсь честно:
1. Пересчет в другую ЕИ был сделан еще на 8.0 в то время когда ВТ не было и в помине. Переделывать было лень... За критику спасибо.
2. Все написано очень сумбурно... Если честно может я туповат, но я ничего не понял... Хотя бы это:
> для остальных - ед.хран. просто пересчет и ВЫРАЗИТЬ КАК ЧИСЛО(15,3) - помоему так в запросе - работает очень тяжело.

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

Или это:
> попробуйте компоновкой данных - работать будет гораздо быстрее

Непонятно зачем компоновкой то? Запроса по моему выше крыши в данном случае... Или Вы что то другое имели ввиду?
18. Евгений (zenz) 10.09.09 01:47
Косяк с ценами - цена базовой ед. проставляется деленная на коэфициент еденицы для отчетов.
19. Ринат (rinatkin) 10.09.09 12:44
Было бы удобно иметь отбор по количеству, чтобы в списке была видна только номенклатура, которая есть на складе
20. Алексей Коробов (WiseSnake) 10.09.09 13:09
(19) Это есть и в типовой Подбор: "По остаткам номенклатуры"
21. Roman Biblbox (mr zafod) 10.09.09 16:38
(16)
0. Документация в комплекте с платформы. Но тут даже и не это важно. Попробуйте сделать тяжелый запрос с отборами и группировками в построителе и СКД без вывода в таб.док. и посмотрите разницу в скорости исполнения.
2. Идея в следующем : для номенклатуры, уже содержащейся в документе, пересчитывать в единицы документа, для остальной номенклатуры выводить в ед.хранения - так для остальной номенклатуры вы экономите на 2-ух операциях : умножения на коэффициент и приведения к виду ЧИСЛО(15,3)
22. Людмила Черненкова (vlasta) 10.09.09 17:05
C виду нормальненько. Было бы неплохо добавить, чтобы автоматически формировались накладные при одновременной отгрузке с разных складов
23. Алексей Коробов (WiseSnake) 10.09.09 18:00
(21) 0. Смешно, но я давно уже все пишу в СКД, только не пойму какое отношение СКД имеет к данной разработке, я вообще запросы не трогал...
2. Вы не поняли сути разработки!
>>Для номенклатуры, уже содержащейся в документе, пересчитывать в единицы документа, для остальной номенклатуры выводить в ед.хранения

Оператору по большому счету плевать на ту номенклатуру которую она подобрала... Она ее уже отработала. Ей надо знать количество, например в коробах, чтобы оценить сколько нужно выписать конкретному клиенту.
24. Алексей Коробов (WiseSnake) 10.09.09 18:02
(22) С разных складов можно выписывать одной накладной УТ это позволяет. И кстати разработка более удобно работает с этим функционалом, потому что склад можно менять прямо в форме подбора
25. Роман Ершов (MRAK) 10.09.09 19:20
(23) видимо, он имеет ввиду, что выбирать данные запросом и отображать в форме с помощью СКД эффективнее...
26. Алексей Коробов (WiseSnake) 10.09.09 19:37
(25) Согласен, что выбирать данные запросом эффективнее, но в (17) я ответил почему именно так сделано. Со временем может переделаю (или кто нибудь решит переделать). И ИМХО такой простой запрос написать и в конструкторе 2 сек, СКД тут нет необходимости...
27. Игорь Исхаков (Ish_2) 10.09.09 20:15
(25) Эту шараду так и не разгадал :

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

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

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

28. Roman Biblbox (mr zafod) 10.09.09 20:39
(27) Да, вы правильно поняли, в СКД возможно обращение к результатам компановки без вывода в тд, но с определенным набром отборов и группировок, которые будут выполнены быстрее, чем группировки и отборы самого запроса + использование связанных наборов данных для загрузки в СКД таблицы номенклатуры, единиц и коэффициентов для пересчета остатков в единицы документа.
29. Алексей Коробов (WiseSnake) 10.09.09 20:45
(27) Точно... Кажется и я допер что имелось ввиду... Кстати, я часто применяю СКД, чтобы "красиво" построить ДеревоЗначений, для вывода в форму, но для того чтобы строить ТаблицуЗначений с помощью СКД, до этого еще не доходило...
30. Игорь Исхаков (Ish_2) 10.09.09 20:53
(28) Честно сказать, снова не понял ни слова.
Если Вы вытаскиваете данные из сформированного макета компоновки , то приведите пример того как Вы обращаетесь к Макету Компоновки и вытаскиваете оттуда нужные данные.
Пока мне ничего неизвестно про такие операции я использую стандартный подход : для получения любых данных из СКД используется ПроцессораВывода
того или иного вида.

31. Алексей Коробов (WiseSnake) 10.09.09 20:55
(28) Давайте разберемся, пожалуйста:
У меня список номенклатуры которую надо пересчитать
То есть Вы предлагаете в СКД запихнуть отбор по это номенклатуре и вывести в ТЗ? Я правильно понял?

ИМХО загрузка этой таблицы в МенеджерВременныхТаблиц + обычный запрос будет работать быстрее. Вы так не считаете?
33. Игорь Исхаков (Ish_2) 10.09.09 21:01
(29) Слишком туманно. (28) утверждает , что получает данные из СКД минуя ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.
34. Игорь Исхаков (Ish_2) 10.09.09 21:30
(32) Преимущество СКД в скорости проявляется когда используется соединение несколько наборов данных и отчет содержит группировки по строкам и колонкам (в настройках СКД Объект "Таблица").
Примером такого отчета может служить "ОборотыСчета" .
В типовой БП 1.6 он реализован "вручную".
Простое сравнение с таким же отчетом построенном на СКД показывает : применение СКД дает значительный выигрыш во времени.

А вот о каком преимуществе говорится в (28) не понимаю.
И чем плох обычный запрос в случае со списком номенклатуры тоже непонятно.
35. Roman Biblbox (mr zafod) 10.09.09 21:37
(30) Да, именно процессор вывода в ТЗ.
(31) Вот как нужно передать вашу "ВТ" в процессор компоновки :
ПроцессорКомпоновкиДанных.Инициализировать(<Макет>, <Внешние наборы данных>, <Данные расшифровки>, <Возможность использования внешних функций>)
Параметры:
<Макет> (обязательный)
Тип: МакетКомпоновкиДанных. Макет, для которого будет выполняться компоновка.
<Внешние наборы данных> (необязательный)
Тип: Структура. Ключ структуры соответствует имени внешнего набора данных. Значение структуры - внешнему набору данных.

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

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

Я вам оставил просто предложение или, если хотите, пожелание. Я понимаю, что такой способ реализовать гораздо тяжелее и оч.часто я и сам использую прямые конструкции, но если вы серьезно решили перекопать подбор(не секрет, что стандартный - это головная боль) то посмотрите в сторону СКД.
36. Игорь Исхаков (Ish_2) 10.09.09 21:46
(35) Ну, слава Богу , ПроцессорВывода всё-таки используется.
Ваше предложение о возможности использовании ВнешнегоНабораДанных носит
самый общий характер . И совсем необязательно приведет к улучшению быстродействия в данном конкретном случае , приведенном в (32).
Я даже думаю , что применение СКД в данном конкретном случае - нелепо.
37. Алексей Коробов (WiseSnake) 10.09.09 21:53
(35) Просто сумбурно это все было сделано, причем тут 8.2 я вообще не догнал :). Конечно я знаю о всех возможностях описанных в (35), но к данной задаче СКД применять нецелесообразно!
Если конечно полностью переделывать подбор(что я, кстати, возможно буду делать, есть план сделать АРМ оператора) то да, учту Ваши пожелания :).

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

>не секрет, что стандартный - это головная боль
Ну вот я и выложил разработку, потому что в моем варианте, лично для меня, он перестал быть головной болью...
39. Алексей Коробов (WiseSnake) 10.09.09 21:54
Извиняюсь, глюки, сообщения по 2 раза добавляются :(((((((((((((
40. Roman Biblbox (mr zafod) 10.09.09 22:17
(36) Да, имелось ввиду не стандартное решение : при получении данных списка запросом по остаткам и ценам. Целесообразность такого метода в использовании СКД как источника заполнения ТЗ/ДЗ номенклатуры без использования динамического списка справочника. Ведь единственное приемущество справочника - получение данных порциями, но и в СКД можно ограничить количество получаемых данных. И именно это является основной сложностью. Использование внешнего набора абсолютно адекватно и отработает быстрее ВТ. В ВТ нужно еще и индексы нужно указать - потратить время и память.
(37) причем тут 8.2 я вообще не догнал??? Построение динамических списков типа номенклатурного выполняется по запросу описанному через СКД. Там можно для объекта СправочникСписок в его свойствах указать, что при получении его данных нужно читать еще и остатки с ценами. Посмотрите. Даже в демо конф. есть примеры.
41. Алексей Коробов (WiseSnake) 10.09.09 22:28
(40) Давайте Вы не будете меня путать, пожалуйста. Излагайте Ваши мысли более понятным языком, уважайте других

Вот Ваша цитата по 8.2 из (16) поста:
>все конечно очень даже... а вы не читали документацию к 8.2? почитайте, обратите внимание на построение динамических списков

И с чего Вы решили, что я знаю СКД хуже Вас?
42. Roman Biblbox (mr zafod) 10.09.09 22:31
(41) Не вижу никакой путаницы я все ясно изложил : обратите внимание на построение динамических списков 8.2
43. Алексей Коробов (WiseSnake) 10.09.09 22:36
(42) Тогда это из (40) как понять?

"(37) причем тут 8.2 я вообще не догнал??? Построение динамических списков типа номенклатурного выполняется по запросу описанному через СКД. Там можно для объекта СправочникСписок в его свойствах указать, что при получении его данных нужно читать еще и остатки с ценами. Посмотрите. Даже в демо конф. есть примеры."
44. Алексей Коробов (WiseSnake) 10.09.09 22:37
+43 У меня такое ощущение, что мы говорим на разных языках!!!
45. Игорь Исхаков (Ish_2) 10.09.09 22:53
(40) Я всё -таки попытаюсь понять . Вынужден строить предположения .
Итак , правильно ли я понял :

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

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

Вы считатете , что при использовании СКД экономится время на создание ВТ и идет обращение напрямую к данным списка . Поэтому такой подход оправдан ?
Так ?
46. Roman Biblbox (mr zafod) 11.09.09 06:53
(45)Да, подход примерно такой. Дословно предлагается эмулировать получение данных динамического списка (т.е. последовательного чтения из БД). Т.к. полученные данные списка не сохраняются в кэше объектов, то чтение происходит постоянно, даже если вы отмените автообновление списка, он все равно будет перечитывать данные из БД, повесте точку прерывания в ПриПолученииДанных и уберите фокус с формы, потом вернитесь, у неё список перечитается. Плюс при каждом получении данных необходимо выполнять запрос к остаткам/ценам, если в запрос мы добавим ВТ и отборы - перегрузим запрос. Т.е. в итоге у нас 2 запроса - один, не контролируемый, запрос к справочнику номенклатура, его система выполняет сама, второй к таблицам регистров.
Теперь СКД. Получение данных можно сделать одним запросом. Можно выбрать данные только из регистров, не обращаясь к таблице справочника вообще и получить и номенкл. и остатки и цены. На основании ПроцессораВывода выводить данные в ТЗ или ДЗ с группировкой по иерархии, со складами и ценами в колонках. Т.е. возможности предоставить пользователю информацию гораздо больше, а время затраченное на обработку вывода будет меньше чем даже на стандартный метод : при получении данных запихать номенклатуру в запрос, потом пройти по результату, найти соответств. строки списка и туда чисто интерфейсно записать полученные данные.

Я могу вам на более подробных примерах показать приемущество СКД.
47. Игорь Исхаков (Ish_2) 11.09.09 10:29
(46) СКД. Попробую понять.

Перед началом работы формы подбора (ПередОткрытием) Вы предлагаете в СКД сформировать МакетКомпоновки . Наборы данных в СКД при этом :
ВнешнийНаборДанных, ТаблицаОстатков, ТаблицаЦен.
Используется левое соединение.
ПроцессорКомпоновки при этом не инициализируется.
Соотвественно ПроцессорВывода не запускается.

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

Так ?
48. Алексей Коробов (WiseSnake) 11.09.09 13:08
Господа!!! Давайте не будем засорять сабж! Данное обсуждение имеет крайне косвенное отношение к моей разработке.

Перенесите пожалуйста обсуждение в форум, личку или еще лучше mr zafod напишите полноценную статью с описанием преимуществ и замерами производительности. Вот тогда это не будет бесполезной тратой времени! И Ваши знания оценят по достоинству!
49. Игорь Исхаков (Ish_2) 11.09.09 13:15
(48) Я извиняюсь. Но предполагаю , что вариант с использованием СКД ,
как раз имеет самое прямое отношение к теме автора.

Предполагаю даже, что mr zafod ПРАВ и использование СКД для получения данных в форме подбора более эффективно чем "ручной" запрос с ВТ.
50. Алексей Коробов (WiseSnake) 11.09.09 13:21
(49) Перечитайте внимательно (17), я еще хочу сохранить возможность простого обновления подбора.
51. Игорь Исхаков (Ish_2) 11.09.09 13:30
(50) Ага. Перечитал.
Согласен , что mr zafod очень косноязычен.
Согласен , что процедура обновления еще будет дорабатываться.

Простое обновление - это что ? По кнопке запускать запрос на получение цен и остатков и обновлять список номенклатуры ?
52. Алексей Коробов (WiseSnake) 11.09.09 14:07
(51) Я тоже немного костноязычен ;)

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

Хотя ))))... лана я подумаю и учту Ваши пожелания, спасибо за критику! )))
53. Александр Окулов (PowerBoy) 15.09.09 07:11
+1000 Добавил юбилейный! Поздравляю!
54. Алексей Коробов (WiseSnake) 15.09.09 08:34
Спасибо! Но Инфостарт дело хитрое :) и до 1000 еще я не дотянул (((
55. Игорь Исхаков (Ish_2) 20.09.09 13:18
(52) Я извиняюсь. Но вариант с использованием СКД , с трудом понятый и описанный в (47), всё-таки хуже ,чем обычный - с использованием запроса с ВТ в процедуре ПриПолученииДанных().
Потому что, в (47) предлагается сделать всего одно тяжелое обращение к базе в начале работы Подбора ,а затем лишь фильтровать результат этого обращения для заполнения текущего динамического списка номенклатуры.
Это не есть хорошо.
56. Алексей Коробов (WiseSnake) 20.09.09 14:23
(55) Еще раз перечитал (45), (47) (кстати на 47 mr zafod так и не ответил) и...ужаснулся... Вообще то я оказывается не так все понимал. Я то в голове продумывал свой вариант:
То есть выполнение СКД вместо Запрос + Выгрузка в ТЧ....

Если честно я так и не догнал как хочет сделать mr zafod, но если Вы, уважаемый Ish_2, правы то:
1. mr zafod наверно совсем забыл об актуальности данных (за то время пока делается подбор остатки, как пример, могут изменится так что ...пипец)
2. Зачем мне "колбасить" всю номенклатуру при открытии подбора, для того чтобы подобрать 1 строчку номенклатуры? + если у меня стоит уже нужная группа(а обычно так и бывает) то я выполню это в 10-100 раз быстрее чем вариант 47...

P.S. Вообщем жесть...
57. Виктор Рыков (Мастер1С) 20.09.09 18:20
Идея хорошая, но, на мой взгляд, пострадала реализация. На базе с большим количеством номенклатуры (порядка 200 тыс.) существенно тормозит.
58. Алексей Коробов (WiseSnake) 20.09.09 19:09
(57) Спасибо! Вижу для многих критично. Буду оптимизировать
59. Андрей (Floid) 03.10.09 22:35
Ошибка при выполнении файловой операции 'C:\Program Files\1cv81\ПодборНоменклатуры1_5.epf'
по причине:
Неверный формат хранилища данных 'file://C:/Program Files/1cv81/ПодборНоменклатуры1_5.epf'

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

60. Андрей (Floid) 03.10.09 22:40
не то скопировал... пишет выбраный файл не является внешней обработкой
{Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(189)}: Ошибка при вызове метода контекста (Создать): Ошибка при выполнении файловой операции 'C:\Program Files\1cv81\ПодборНоменклатуры1_5.epf'
61. Hawk (hawk) 30.10.09 19:25
Хорошая вещь, почти то что нужно (нужны были чистые остатки без иерархии) это как раз я посмотрел работает на половину в остатках работает, а в остатках и ценах нет. Планируете доработать?
62. Алексей Коробов (WiseSnake) 09.11.09 12:07
Обновлена обработка. Описано подключение на стандартную кнопку "Подбор" в документах
63. Алексей Коробов (WiseSnake) 19.11.09 14:54
Обновлено описание...

(60) Какой релиз? платформа?
(61) Я в принципе уже дорабатывал. Вот только не помню исправлял Вашу проблему или нет :oops: . Если вы скачаете новую версию и проверите, буду Вам очень признателен...
64. Сергей Ожерельев (Поручик) 22.11.09 22:34
Скачал новую версию, при открытии и работе тормозит на нашей базе. Клиент-сервер, в справочнике порядка 20 тыс. позиций. Причём пробовал сегодня, в базе кроме меня никого не было.
65. Алексей Коробов (WiseSnake) 23.11.09 01:01
(64) Ну о том, что разработка тормозит на больших базах говорилось и ранее. Новая версия, насколько я помню, не отличается от той что лежала ранее принципом сбора данных. Может быть вы просто открываете по всему справочнику? (с включенным режимом без групп)?? Что я еще могу сказать у меня база около 10тыш позиций скуль, да тормозит чуть больше чем стандартная, но не критично.
+ ко всему сказанному код открыт и каждый может оптимизировать обработку, если поделится еще и с сообществом то респект и уважуха. Лично у меня пока на это времени нет и в ближайшее время не предвидится.
66. Сергей Ожерельев (Поручик) 23.11.09 21:20
Могу открыть тайну: у нас до сих пор используется подбор УТ 10.2, портированный и жутко доработанный автором этих строк, причём с минимальной тормознутостью.
67. Алексей Коробов (WiseSnake) 24.11.09 01:24
68. Сергей Ожерельев (Поручик) 24.11.09 18:31
Толку не будет, конфа сильно моденная.
69. Evgeniy (Flashlike) 20.01.10 19:20
На мой взгляд очень удобно было бы, если дерево разместить слева. А не сверху.
70. А Б (aleks123321) 18.01.11 09:05
Спасибо за разработку. Безусловно [+]
71. margo2007 (margo2007) 03.12.11 15:13
Стандартный подбор слишком нагроможден.
Хотелось бы такой, как этот, по проще.
72. volodya (volodya_gold) 01.03.12 14:21
Использовал эту обработку некоторое время. Есть свои плюсы. Но всеже большей частью стандартный подбор.
73. Андрей Ефим (kodblack) 17.07.12 14:34
при сохранение конфигурации выдает
{ОбщийМодуль.Подборр(6,14)}: Процедура или функция с указанным именем не определена (ФайлСуществует)
Если <<?>>ФайлСуществует(ИмяФайла) И Обновлять Тогда (Проверка: Толстый клиент (обычное приложение))
{ОбщийМодуль.Подборр(18,17)}: Процедура или функция с указанным именем не определена (ФайлСуществует)
Если НЕ <<?>>ФайлСуществует(ИмяФайла) Тогда (Проверка: Толстый клиент (обычное приложение))
Подскажите как быть????
74. Selishev Konstantin (Morokola) 23.08.12 13:35
{ОбщийМодуль.Подбор.Модуль(6,14)}: Процедура или функция с указанным именем не определена (ФайлСуществует)
Если <<?>>ФайлСуществует(ИмяФайла) И Обновлять Тогда (Проверка: Толстый клиент (обычное приложение))
{ОбщийМодуль.Подбор.Модуль(18,17)}: Процедура или функция с указанным именем не определена (ФайлСуществует)
Если НЕ <<?>>ФайлСуществует(ИмяФайла) Тогда (Проверка: Толстый клиент (обычное приложение))
Та же ошибка что и в 73. Что делать? В чем причина?
75. Ольга (ВРедная) 19.11.12 13:57
Можно подключить как внешнюю, без изменения конфигурации и добавления модулей. Для вызова подбора, правда, прийдется выбирать меню "Заполнить" - "Подбор номенклатуры", зато без ошибок и изменения конфы.

Спасибо автору.
76. Сергей Аблаев (serg1974) 08.04.13 11:04
Обработка сделана очень качественно - спасибо - на 1с82 КА (комплексная!) заработала - простой авторегистрацией, через меню "заполнить" удобнее - тем что у пользователя остается выбор.

WiseSnake - РЕСПЕКТ!!!
77. Lubov Filippova (laf) 28.01.15 03:30
Спасибо за обработку. Непонятно, почему в последних версиях 1с нет возможности работать в подборах "безИерархии" и "БезГрупп". Ведь в 7-ке эти возможности были изначально, было Супер-удобно.
78. Антон (Agkorepanov) 11.02.16 18:25
Слишком сильно тормозит.
79. Алексей Коробов (WiseSnake) 11.02.16 22:18
(78) Agkorepanov, Это давно уже все устарело.