новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Ввод на основании - через расширение.

  • Добавить свою публикацию
  • для этого требуется регистрация

Добрый день. Постановка задачи - создать возможность ввести на основании счета покупателю - счета поставщику. Было принято решение это делать через расширение.

В расширении была создана такая внешняя команда:

Изображение

С таким тексом модуля команды:

 

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

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

 В модуле документа СчетаНаОплатуПоставщика была добавлена процедура:

 

&После("ОбработкаЗаполнения")
Процедура ЕВ_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		Если ДанныеЗаполнения.Свойство("Основание") Тогда
			Если ТипЗнч(ДанныеЗаполнения.Основание) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда
				ЗаполнитьПоСчетуПокупателю(ДанныеЗаполнения.Основание);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;

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

 Далее в процедуре "ЗаполнитьПоСчетуПокупателю" были прописаны алгоритмы заполнения документа.

На этом все, для некоторых документов вероятнее всего нужно будет прописать алгоритм создания команды ввода на основании в модуле менеджера объекта, в данном случае это не потребовалось.

 

Т.к есть ввод на основании, то не плохо бы сделать и вывод документа в структуру подчиненности, подумал я и сделал)

В расширение была заимствована общая форма "СтруктураПодчиненности".

В ней прописана такая процедура:

 

&Вместо("ОбъектыПоКритериюОтбора")
Функция ЕВ_ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора)

Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда
Возврат Неопределено;
КонецЕсли;

УстановитьПривилегированныйРежим(Истина);

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СвязанныеДокументы.Ссылка КАК Ссылка
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СвязанныеДокументы
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СчетНаОплатуПоставщика.Ссылка
|ИЗ
| Документ.СчетНаОплатуПоставщика КАК СчетНаОплатуПоставщика
|ГДЕ
| СчетНаОплатуПоставщика.ЕВ_ДокументОснование = &ЗначениеКритерияОтбора
| И НЕ СчетНаОплатуПоставщика.Ссылка = &ЗначениеКритерияОтбора
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СчетНаОплатуПоставщика.ЕВ_ДокументОснование
|ИЗ
| Документ.СчетНаОплатуПоставщика КАК СчетНаОплатуПоставщика
|ГДЕ
| СчетНаОплатуПоставщика.Ссылка = &ЗначениеКритерияОтбора
| И НЕ СчетНаОплатуПоставщика.ЕВ_ДокументОснование = &ЗначениеКритерияОтбора";

Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ЗначениеКритерияОтбора);
Возврат Запрос.Выполнить().Выгрузить();

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

 Как видно из запроса, в качестве места где хранится документ основание, я использовал новый реквизит "ЕВ_ДокументОснование", причем он был добавлен непосредственно в конфигурацию, это было согласованно с закачиком. Данный вариант был выбран как наиболее надежный. 

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


Ну и если предусмотреть дальнейшее развитие, т.е добавление нескольких документов, то стоит немного пересмотреть запрос и анализировать переменную "ЗначениеКритерияОтбора"

 

P.S Надеюсь статья будет вам полезна.

 

 
0
Еще от автора
≡ к списку статей