kb-personal/src/content/docs/knowledge-base/Общие/Подключаемые команды/Добавление команд заполнения.md
wakadakawaka 1cdfa246b3 new
2025-08-24 21:37:33 +05:00

6.7 KiB
Raw Blame History

title, slug
title slug
Добавление команд заполнения общие-подключаемые-команды/добавление-команд-заполнения

Общий модуль ЗаполнениеОбъектовПереопределяемый

Процедура ПриОпределенииОбъектовСКомандамиЗаполнения(Объекты) Экспорт
	
	Объекты.Добавить(Метаданные.Документы.ЗаказПоставщику);
	
КонецПроцедуры

Модуль менеджера объекта

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

		// Обработчик в модуле формы
		Команда = КомандыЗаполнения.Добавить();
		Команда.Идентификатор = "ЗаполнитьПоНесколькимЗаказам";
		Команда.МножественныйВыбор = Ложь;
		Команда.ВидимостьВФормах = "ФормаДокумента";
		Команда.Представление = "По нескольким заказам";
		Команда.РежимЗаписи = "НеЗаписывать";
		Команда.ИмяФормы = "ФормаОбъекта";
		Команда.Обработчик = "Подключаемый_ЗаполнитьПоНесколькимЗаказам"; 
		Команда.Порядок = 3;

	КонецЕсли;

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

Пример обработчика в модуле менеджера

Его также можно разместить и в модуле формы, и в общем модуле

&НаСервере
Процедура Подключаемый_ЗаполнитьПоПредущемуЗаказу(ПараметрКоманды, ПараметрыВыполнения) Экспорт
	
	Источник = ПараметрыВыполнения.Источник; // Тут Источник - основной реквизит формы. "Объект"
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ЗаказПоставщику.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ втПредыдущийЗаказ
		|ИЗ
		|	Документ.ЗаказПоставщику КАК ЗаказПоставщику
		|ГДЕ
		|	ЗаказПоставщику.Контрагент = &Контрагент
		|	И ЗаказПоставщику.Проведен
		|	И &УсловиеПоСсылке
		|
		|УПОРЯДОЧИТЬ ПО
		|	ЗаказПоставщику.Дата УБЫВ
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
		|	ЗаказПоставщикуТовары.Количество КАК Количество,
		|	ЗаказПоставщикуТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
		|	ЗаказПоставщикуТовары.Цена КАК Цена,
		|	ЗаказПоставщикуТовары.Сумма КАК Сумма,
		|	ЗаказПоставщикуТовары.СтавкаНДС КАК СтавкаНДС,
		|	ЗаказПоставщикуТовары.СуммаНДС КАК СуммаНДС,
		|	ЗаказПоставщикуТовары.СуммаВсего КАК СуммаВсего
		|ИЗ
		|	Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПредыдущийЗаказ КАК втПредыдущийЗаказ
		|		ПО ЗаказПоставщикуТовары.Ссылка = втПредыдущийЗаказ.Ссылка";
	
	Запрос.УстановитьПараметр("Контрагент", Источник.Контрагент);
	
	Если ЗначениеЗаполнено(ПараметрКоманды) Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоСсылке", "ЗаказПоставщику.Ссылка <> &Ссылка");
		Запрос.УстановитьПараметр("Ссылка", ПараметрКоманды);
	Иначе                                                                                   
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоСсылке", "ИСТИНА");
	КонецЕсли;
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	Источник.Товары.Очистить();
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = Источник.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
	КонецЦикла;
	
КонецПроцедуры