gifts2017

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

Опубликовал Pablo Escobar (tiwolf) в раздел Обработки - Ценообразование, прайсы

Недостающая для многих "счастливых" обладателей конфигурации "Управление торговлей", 11 редакции обработка, позволяющая осуществить модификацию таб. части документов.

Итак.

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

   
Отказ = Ложь;

    Если
Отказ Тогда
        Возврат;
    КонецЕсли;

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

    КонецЕсли;

КонецПроцедуры
// ОбработкаВыбора()

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

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

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

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

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

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

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

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

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

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

        КонецЕсли;

    КонецЦикла;

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

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

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

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

        Иначе

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

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

        КонецЕсли;

    КонецЦикла;


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

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

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

        КонецЕсли;

    КонецЦикла;

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

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

    КонецЦикла;

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

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

 

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

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

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

       ...

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

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

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

 

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

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

P.S.

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

 

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Гуляев (gavrikprog) 01.03.12 16:06
Приложенная обработка НЕ ВНЕШНЯЯ, сделать ее таковой не представляется возможным, исходя из того, что это не обработка заполнения, а обработка изменения имеющейся в таб. части информации.


Сомнительное утверждение
Проверять пока нет желания, но из того что знаю - вероятность > 50 процентов
2. Дэн Счастливый (happyden) 28.03.12 12:44
Вещь, прикрутил к 11.0.7.21 - юзеры пищат от счастья :)
3. Евгений Мазай (salus) 14.08.12 20:53
Что за ссылки???

{Обработка.автОбработкаТабличнойЧастиТовары.Форма.Форма.Форма(519,54)}: Переменная не определена (ОбработкаТабличнойЧастиТоварыКлиентСервер)
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", <<?>>ОбработкаТабличнойЧастиТоварыКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект));
4. Дима Алексеенко (lonedog) 07.09.12 12:33
Что за ссылки???
+1


{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(5790,13)}: Переменная не определена (ОбработкаТабличнойЧастиТоварыКлиентСервер)
<<?>>ОбработкаТабличнойЧастиТоварыКлиентСервер.ЗаполнитьСуммуВсегоВСтрокеТаблицы(СтрокаТовар, Объект.ЦенаВключаетНДС); (Проверка: Сервер)
5. Дима Алексеенко (lonedog) 07.09.12 17:44
Прикрутил к 11.0.8.8 пришлось закомментировать пару процедур:

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

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

 Элементы.КартинкаНесколькоСкладов.Картинка =   ОбщегоНазначенияУТКлиентСервер.ПолучитьКартинкуНесколькоСкладов(Объект.Товары, СкладГруппа);
...Показать Скрыть


и так еще по мелочи...
да еще пришлось прикрутить пересчет суммы с НДС
пока опробовал на документе "Поступления товаров услуг"
6. Ольга (_n26__) 29.01.13 11:56
Спасибо! Очень пригодилось!
7. Открытые бизнес-решения Общество с ограниченной ответственностью (Open-BS) 26.03.13 15:14
Огромное спасибо! Вы сэкономили мне часов 5 кодинга :)
8. Татьяна (svetanik) 11.11.13 06:45
Действительно, очень своевременная обработка, т.к. мои бухгалтера привыкли на документами "куражиться", добиваясь нужного результата... А в УТ11 с удивлением не обнаружили такой возможности. Недоработочка разработчиков. Спасибо, что исправили!
9. Сергей Шаганов (akvatorg) 09.12.14 11:54
{Форма.Форма.Форма(116,3)}: Переменная не определена (ОбработкаТабличнойЧастиТоварыСервер)
<<?>>ОбработкаТабличнойЧастиТоварыСервер.ОбработатьСтрокуТЧСервер(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); (Проверка: Сервер)
10. Яна Афанасьева (child1983) 08.01.15 09:26
Было бы неплохо и для Бухгалтерии 3.0 такую обработку
очень пригодилась бы когда работают от обратного сначала реализацию делают, а на ее основании потом поступление и нужны цены ниже
11. Максим Горбачев (Tangram) 26.01.15 12:17
Оч. полезная обработка. Но при подключении к 11.1.7 пришлось практически все вызовы общих модулей переделывать, все имена поменялись.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа