Обработка табличной части "Товары" для 8.2 (управляемая форма)

Итак.

Почему-то разработконфигурациичики 11-ой редакции конфигурации "Управление торговлей" решили, что данная обраб внешние компонентыотка не особо востребована и не стали заморачиваться с ее включением в доступный функционал. Как показывает практика, да и по опыту исследования отзывов пользователей, такое исключение оказалось серьезным упущением. На infostarte подобного функционала не обнаружил, и когда заказчик попросил внедрить обраб внешние компонентыотку, которая была в торговых (да и других) конфигурациях на платфорконсоль отчетов мотчетые 7.7, 8.0, 8.1, был вынужден взяться за кисти и краски.

На суд общественности предлагаю то, что удалось сваять. Думаю удастся кому-нибудь помочь и облегчить сосуществование с управляемыми формами в торговле.

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

Обработконфигурациика разрабатывалась на платфорконсоль отчетов мотчетые 8.2.13.219.

 

Возможности, включенную в обраб внешние компонентыотку (обраб внешние компонентыотчики):

  • - Изменить цены на %,
  • - Распределить сумму по суммам,
  • - Распределить сумму по количеству,
  • - Установить ставку НДС,
  • - Установить ручную скидку, %,
  • - Округлить цены до,
  • - Удалить помеченные строки,
  • - Добавить из документа.

Это тот функционал, который потребовался заказчику. Обработконфигурациичик "Добавить из документа" заказчика особо интересовал, но решил включить и его из спортивного интереса. Дополнение и модификация функционала  исключительно приветствуется.

Особенности такие:

1) форма обраб внешние компонентыотки открывается в модальном режиме,

2) идентификация и сопоставление строк исходной таб. части и новой осуществляется по реквизиту "НомерСтроки", для новых строк, добавленных в режиме "Добавить из документа" этот реквизит будет иметь значение на 1 большее исходного количества строк в табличной части,

3) в форме обраб внешние компонентыотки редактирование строк недоступно (этим можно заняться в основной форме документа), из стандартных действий с табличной частью есть возможность Удаления и Упорядочивания,

4) Система запоминает последнее использованное в обраб внешние компонентыотке действие и предлагает именно его при повторном открытии обраб внешние компонентыотки.

Теперь касаемо того, как вызвать эту внедренную в метаданные обраб внешние компонентыотку из документов системы...

1) В форму документов, требующих изменения механизмами, заложенными в обраб внешние компонентыотку, добавляется в командную панель товаров Кнопка с обраб внешние компонентыотчиком вида:

&НаКлиенте
Процедура автИзменитьТабличнуюЧасть(Команда)

   
Отказ = Ложь;

    Если
Отказ Тогда
        Возврат программу 1С ;
    Конец управленияЕсли;

   
ПараметрЗаголовок = НСтр("ru = 'Изменение табличной части товаров в %Документ%'");
    Если
ЗначениеЗаполнено(Объект.Ссылка) Тогда
       
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", Объект.Ссылка);
    Иначе
       
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", "заказе клиента");
    Конец управленияЕсли;

   
ПараметрыФормы = Новый Структура;

   
ПараметрыФормы.Вставить("ЦенаВключаетНДС",      Объект.ЦенаВключаетНДС);

   
ПараметрыФормы.Вставить("Товары",               Объект.Товары);

   
ПараметрыФормы.Вставить("Заголовок",            ПараметрЗаголовок);

   
ОткрытьФорму("Обработконфигурациика.автОбработконфигурациикаТабличнойЧастиТовары.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);

Конец управленияПроцедуры
// автИзменитьТабличнуюЧасть()

 

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

 

2) Результат обраб внешние компонентыотки, возвращаемый в документ, естественно, следует обраб внешние компонентыотать в событии "ОбработконфигурациикаВыбора" формы:

&НаКлиенте
Процедура ОбработконфигурациикаВыбора(ВыбранноеЗначение, ИсточникВыбора)

    Перем
ВыполняемаяОперация;

    Если
ИсточникВыбора.ИмяФормы = "Обработконфигурациика.автОбработконфигурациикаТабличнойЧастиТовары.Форма.Форма" Тогда

        //-->
       
автОбработконфигурациикаВыбораЗаполненияТЧТовары(ВыбранноеЗначение);

    Конец управленияЕсли;

Конец управленияПроцедуры
// ОбработконфигурациикаВыбора()

&НаКлиенте
Процедура автОбработконфигурациикаВыбораЗаполненияТЧТовары(ВыбранноеЗначение)

    //-->
   
автОбработконфигурациикаВыбораЗаполненияТЧТоварыНаСервере(ВыбранноеЗначение);

Конец управленияПроцедуры
// автОбработконфигурациикаВыбораЗаполненияТЧТовары()

&НаСервере
Процедура автОбработконфигурациикаВыбораЗаполненияТЧТоварыНаСервере(ВыбранноеЗначение)

   
ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);

   
КолВоСтрокИсх = Объект.Товары.Количество();

   
МассивУдалить = Новый Массив;

    Для Каждого
СтрокаТовар Из Объект.Товары Цикл

        Если
ТаблицаТоваров.Найти(СтрокаТовар.НомерСтроки, "НомерСтрокиТЧ") = Неопределено Тогда

           
МассивУдалить.Добавить(СтрокаТовар);

        Конец управленияЕсли;

    Конец управленияЦикла;

    Для каждого
СтрокаТовара Из ТаблицаТоваров Цикл

        Если
СтрокаТовара.НомерСтрокиТЧ > КолВоСтрокИсх Тогда

           
СтрокаТовараТЧ = Объект.Товары.Добавить();

           
ЗаполнитьЗначенияСвойств(СтрокаТовараТЧ, СтрокаТовара);

        Иначе

           
СтрокаТовараТЧ = Объект.Товары.Получить(СтрокаТовара.НомерСтрокиТЧ - 1);

           
ЗаполнитьЗначенияСвойств(СтрокаТовараТЧ, СтрокаТовара, "Цена, Сумма, СтавкаНДС, СуммаНДС, ПроцентРучнойСкидки, СуммаРучнойСкидки, ПроцентАвтоматическойСкидки, СуммаАвтоматическойСкидки");

        Конец управленияЕсли;

    Конец управленияЦикла;


    Для Каждого
СтрокаТовар Из Объект.Товары Цикл

        Если
МассивУдалить.Найти(СтрокаТовар) = Неопределено Тогда

           
ОбработконфигурациикаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьСуммуВсегоВСтрокеТаблицы(СтрокаТовар, Объект.ЦенаВключаетНДС);

        Конец управленияЕсли;

    Конец управленияЦикла;

    Для Каждого
ЭлМас Из МассивУдалить Цикл

       
Объект.Товары.Удалить(ЭлМас);

    Конец управленияЦикла;

   
ОбработконфигурациикаТабличнойЧастиТоварыСервер.ЗаполнитьТипНоменклатурыВТаблице(Объект.Товары);
   
ПродажиКлиентСервер.РассчитатьИтоговыеПоказателиЗаказа(Объект, ЭтаФорма);
   
ОбработконфигурациикаТабличнойЧастиТоварыСервер.ЗаполнитьПризнакИспользованияХарактеристик(Объект.Товары);
   
Элементы.КартинкаНесколькоСкладов.Картинка =    ОбщегоНазначенияУТКлиентСервер.ПолучитьКартинкуНесколькоСкладов(Объект.Товары, СкладГруппа, Истина);

Конец управленияПроцедуры
// автОбработконфигурациикаВыбораЗаполненияТЧТовары()

 

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

  • - для приходных документов в перечне свойств процедуры "ЗаполнитьЗначенияСвойств" убираются "ПроцентАвтоматическойСкидки", "СуммаАвтоматическойСкидки", в виду отсутствия соответствующих реквизитов в таб. части "Товары";
  • - последние строки процедуры настраиваются под каждый конкретный документ индивидуально.

Например, для документа "РеализацияТоваровУслуг" концовка будет следующая:

       ...

    ОбработконфигурациикаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьСуммуВсегоВТаблице(Объект.Товары, Объект.ЦенаВключаетНДС);
   
ПродажиКлиентСервер.РассчитатьИтоговыеПоказателиРеализации(Объект, ЭтаФорма);
   
ОбработконфигурациикаТабличнойЧастиТоварыСервер.ЗаполнитьПризнакИспользованияХарактеристик(Объект.Товары);
   
ОбработконфигурациикаТабличнойЧастиТоварыСервер.ЗаполнитьТипНоменклатурыВТаблице(Объект.Товары);
   
Элементы.КартинкаНесколькоСкладов.Картинка = ОбщегоНазначенияУТКлиентСервер.ПолучитьКартинкуНесколькоСкладов(Объект.Товары, СкладГруппа);

Для документа "ПоступлениеТоваровУслуг" концовка будет следующая:

    ОбработконфигурациикаТабличнойЧастиТоварыСервер.ЗаполнитьТипНоменклатурыВТаблице(Объект.Товары);
   
ЗакупкиКлиентСервер.РассчитатьИтоговыеПоказателиПоступления(Объект, ЭтаФорма);
   
ОбработконфигурациикаТабличнойЧастиТоварыСервер.ЗаполнитьПризнакИспользованияХарактеристик(Объект.Товары);
   
Элементы.КартинкаНесколькоСкладов.Картинка = ОбщегоНазначенияУТКлиентСервер.ПолучитьКартинкуНесколькоСкладов(Объект.Товары, СкладГруппа);

 

У себя внедрял вызов этой обраб внешние компонентыотки в документы:

  • - Заказ клиента,
  • - Заказ поставщику,
  • - Коммерческое предложение клиенту,
  • - Поступление товаров услуг,
  • - Реализация товаров услуг.

P.S.

Спасибо за внимание, удачных внедрений.

 

Скриншоты


Обработчик "Добавить из документа"

Выбор списка документов с товарами для добавления

и другие обработчики

Файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка табличной части товары для 8.2
.epf 21,55Kb
274
.epf 21,55Kb 274 Скачать

Полная версия

© ООО "Инфостарт", 2006-2023 www.infostart.ru