1С расширения: изменение формы "Отчета производства за смену" BAS Бухгалтерия 2.1

Задача: добавить в документ "Отчет производства за смену" кнопку заполнения по ТЧ других документов

В конфигурации BAS Бухгалтерия для Украины 2.1 в документе "Списание товаров" используется обработка ИзменениеТаблицыТоваров, с помощью которой можно удобно подобрать номенлатуру из другого документа. Необходимо добавить аналогичную кнопку в документ "Отчет производства за смену".

Обработка "Изменение таблицы товаров"

Поскольку конфигурация находится на поддержке, попробуем сделать это с помощью механизма расширений.

Создаем расширение и заимствуем в него документы

Необходимо создать новое расширение и добавить в него форму документа "Отчет производства за смену". Для нового расширения очищаем реквизит "Основные роли":

Новое расширение конфигурации

В форме необходимо добавить новую команду ДобавитьДанныеТабЧасти и разместить ее на форме.

Открываем обработку и передаем в нее параметры

При вызове этой команды, в модуле формы необходимо сформировать структуру параметров, открыть форму обработки Обработка.ИзменениеТаблицыТоваров и передать ей структуру. После чего необходимо обработать оповещение о закрытии формы обработки.

//Модуль формы документа "ОтчетПроизводстваЗаСмену" 
&НаСервере
Функция ПоместитьМатериалыВоВременноеХранилищеНаСервере()

	Возврат ПоместитьВоВременноеХранилище(Объект.Материалы.Выгрузить(), УникальныйИдентификатор);

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


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

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

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

КонецПроцедуры // ОбработкаОповещенияОбработкиТабличнойЧастиТоварыНаСервере



&НаКлиенте
Процедура РасшЗаполнениеТЧ_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник)

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

КонецПроцедуры

Редактируем форму обработки

В целом задача решена, однако, в открываемом окне обработки есть лишние столбцы, которые, по возможности, хотелось бы убрать. Для этого позаимствуем форму обработки в расширение и дополним процедуру ИнициализироватьРеквизитыФормы:

&После("ИнициализироватьРеквизитыФормы")
Процедура РасшЗаполнениеТЧ_ИнициализироватьРеквизитыФормы()
	Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену") Тогда
		ПоказыватьКоличество = Истина;	
		ПоказыватьСкидки = Ложь;
		Элементы.ТоварыСуммаБезСкидки.Видимость = Ложь;
		Элементы.ТоварыСуммаСкидки.Видимость = Ложь;
	КонецЕсли; 
КонецПроцедуры

Подключаем расширение и проверяем

Подключим расширение в пользовательском режиме:

Подключение расширения в пользовательском режиме

Проверка:

Проверка расширения


Похожие материалы

Комментарии