Доработки для типовой обработки "Подбор номенклатуры" конфигурации "Управление торговлей 10.3" версии конфигурации не ниже 10.3.6.8 Обработка может подключаться к табличным частям документов и доступна через подменю табличной части "Заполнить".
Описание доработок
Часто при подборе номенклатуры у пользователей возникают трудности в работе со стандартной обработкой подбора. А для программиста, который обычно не вникает в структуру номенклатуры и ему просто для тестирования необходимо подобрать номенклатуру в документ это "сущий ад". Данная разработка это попытка сделать интерфейс стандартной обработки подбора номенклатуры более дружественным и гибким.
Добавлены следующие возможности:
* Смена склада в форме подбора с автоматическим его изменением в документе.
* Смена типа цен в форме подбора (данная возможность автоматом отключена)
* Вывод остатка в единицах для отчетов или в базовых единицах измерения (часто удобно видеть остатки при подборе в тех единицах в которых привыкли бухгалтера\операторы)
* Вывод остатка с дробями или округленным до целых единиц.
* Кнопка "Свернуть дерево" - часто многие не пользуются деревом номенклатуры, выбирая номенклатуру как в справочнике в нижней части, возможность свернуть дерево позволяет значительно увеличить полезное пространство, сократив время на лишние движения.
* Кнопка "Без иерархии" - позволяет увидеть номенклатуру не только в текущей папке(группе), но и во вложенных папках(группах).
* Кнопка "Без групп" - Вывод номенклатуры в нижней части без папок(групп). При большой вложенности папок(групп) позволяет выводить больше полезной информации (включение возможно только при развернутом дереве)
* Чередование цветов и выделение свободного остатка жирным - удобные рюшечки.
В данной версии обработка может подключаться как внешняя обработка заполнения табличных частей к документам: "Реализация товаров и услуг", "Перемещение товаров", "Поступление товаров и услуг", "Заказ покупателя", "Заказ поставщику". Есть авторегистрация. В дальнейшем возможно подключение и к другим документам.
ПОРЯДОК ПОДКЛЮЧЕНИЯ НА СТАНДАРТНУЮ КНОПКУ "ПОДБОР" В ДОКУМЕНТАХ:
Предлагаемый мной способ может показаться громоздким, но это только на первый взгляд. Он проверен на практике и может пригодится не для одной задачи.
Итак начнем:
Функция ПолучитьФормуВнешнейОбработки(Объект, ВнешняяОбработка, ИмяФормы, Владелец, КлючУникальности, Обновлять = Ложь) Экспорт
Если ТипЗНЧ(ВнешняяОбработка) = Тип("СправочникСсылка.ВнешниеОбработки") Тогда
ИмяФайла = КаталогВременныхФайлов()+"ExtForm"+ВнешняяОбработка.Код+".epf"; // для простоты отладки
Если ФайлСуществует(ИмяФайла) И Обновлять Тогда
Попытка
ОткрытаяФорма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла, ИмяФормы, Владелец, Владелец);
Если ОткрытаяФорма.Открыта() Тогда
ОткрытаяФорма.Закрыть();
КонецЕсли;
УдалитьФайлы(ИмяФайла);
Исключение
// значит форма не открыта
КонецПопытки;
КонецЕсли;
Если НЕ ФайлСуществует(ИмяФайла) Тогда
ОбъектВнешнейФормы = ВнешняяОбработка.ПолучитьОбъект();
Если ОбъектВнешнейФормы = Неопределено Тогда
Сообщить("Ошибка получения внешней обработки заполнения табличной части документа. Возможно обработка была удалена", СтатусСообщения.Важное);
Возврат Неопределено;
КонецЕсли;
ДополнительныеПараметры = Неопределено;
МетаданныеОбъекта = Объект.Метаданные();
СсылкаОбъекта = Неопределено;
Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
СсылкаОбъекта = Документы[МетаданныеОбъекта.Имя].ПустаяСсылка();
ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда
СсылкаОбъекта = Справочники[МетаданныеОбъекта.Имя].ПустаяСсылка();
КонецЕсли;
ДвоичныеДанные = ОбъектВнешнейФормы.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Попытка
Обработка = ВнешниеОбработки.Создать(ИмяФайла);
Исключение
Сообщить("Ошибка исполнения внешней обработки табличной части документа."+Символы.ПС+ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат Неопределено;
КонецПопытки;
// Передать внешней обработке дополнительные параметры
Если ДополнительныеПараметры <> Неопределено Тогда
// Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
Если НЕ Обработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
КонецЕсли;
КонецЕсли;
Попытка
ПолученнаяФорма = Обработка.ПолучитьФорму(ИмяФормы, Владелец, Владелец);
Возврат ПолученнаяФорма;
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Ошибка получения формы!");
Возврат Неопределено;
КонецПопытки;
Иначе
Попытка
ПолученнаяФорма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла, ИмяФормы, Владелец, Владелец);
Возврат ПолученнаяФорма;
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Ошибка получения формы!");
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецФункции
-
Сохраните базу!!!
-
Объедините скачанную конфигурацию с Вашей с помощью пункта меню конфигуратора (Конфигурация > Сравнить, объединить с конфигурацией из файла). В открывшемся окне отключите все объединения и включите только объединение(добавление) справочника ДополнительныеНастройки
Примечание: В справочнике уже существует (как пример) все необходимое для подключения обработки, а конкретно - предопределенный элемент справочника через который мы будем находить нужную обработку
-
В режиме предприятия добавим текущую обработку подбора номенклатуры в справочник внешних печатных форм (Внешние печатные формы и обработки > Внешние обработки заполнения табличных частей). Не заполняем принадлежность (отказываемся от авторегистрирования), чтобы не было пункта в меню Заполнить.
-
Открываем справочник "Дополнительные настройки" через меню "Операции" > Справочник... (по вашему желанию Вы можете добавить его в интерфейсы) и выбираем для предопределенного элемента с наименованием "Обработка подбора номенклатуры" только что добавленную нами обработку.
-
Создаем новый общий модуль (либо используем уже существующий) и добавляем в него функцию:
- 7. Пока что все это никак не затрагивало типовую конфигурацию. Но без изменения типовой нам не обойтись. В процедуру "ОткрытьПодборНоменклатуры" Общего модуля "РаботаСДиалогами" нужно будет добавить код:
// Открываем форму подбора.
ФормаПодбора = Обработки.ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ФормаДокумента, ФормаДокумента);
// ДОБАВЛЕНО (#Ваш комментарий#) начало
// заменяем форму на внешнюю
ВнешняяОбработка = Справочники.ДополнительныеНастройки.ПодборНоменклатуры.Значение;
Если ЗначениеЗаполнено(ВнешняяОбработка) Тогда
ВнешняяФормаПодбора = _ВашОбщийМодуль_.ПолучитьФормуВнешнейОбработки(ФормаДокумента.ЭтотОбъект ,ВнешняяОбработка, "ОсновнаяФорма", ФормаДокумента, ФормаДокумента, Истина);
Если ВнешняяФормаПодбора <> Неопределено Тогда
ФормаПодбора = ВнешняяФормаПодбора;
КонецЕсли;
КонецЕсли;
// ДОБАВЛЕНО (#Ваш комментарий#) окончание
ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметров;
ФормаПодбора.Открыть();
Где - код 1С
ПЛЮСЫ:
1.Теперь Вы или другой программист уже не сможете поломать работу, поменяв код или изменив наименование добавленной нами внешней обработки. Данным методом можно любой элемент сделать предопределенным.
2. Простота управления. Вы в любой момент можете указать новую обработку или вернуть старый релиз не влезая в конфигурацию и не останавливая работу пользователей
КОД ОТКРЫТ. Буду благодарен за критику и помощь.