Добавление товаров поставщика в заказ поставщику. УТ 11.4

Клиент попросил кнопку, которая добавляет товары, когда-либо поставляемые поставщиком в документ заказ поставщику:

Работает медленно, потому что после добавления номенклатуры вызывается событие изменения номенклатуры. Код несложный:

&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

	...
	//Кнопка заказа товарами
	ИмяКоманды = "дор_ТоварыПоставщика";
	КомандаФормы = ЭтаФорма.Команды.Добавить(ИмяКоманды);
	КомандаФормы.Действие = ИмяКоманды;
	КомандаФормы.Заголовок = "Тов.Пост-ка";
	КомандаФормы.ИзменяетСохраняемыеДанные = истина;
	КомандаФормы.Отображение = ОтображениеКнопки.Текст;
	
	ПредЭлементКнопок = Элементы.ГруппаЦеныСкидки;
	Элемент = ЭтаФорма.Элементы.Вставить(ИмяКоманды, Тип("КнопкаФормы"), ПредЭлементКнопок.Родитель, ПредЭлементКнопок);
	Элемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
	Элемент.ИмяКоманды = ИмяКоманды;
	Элемент.Ширина = 6;
	Элемент.АвтоМаксимальнаяШирина = ложь;
	Элемент.РастягиватьПоГоризонтали = ложь;

	

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


&НаКлиенте
Процедура дор_ТоварыПоставщика(Команда) Экспорт
	М = дор_ТоварыПоставщикаПолучитьНаСервере(Объект.Контрагент);
	Для Каждого С Из М Цикл
		НСтр = Объект.Товары.Добавить();
		НСтр.Номенклатура = С.Номенклатура;
		Элементы.Товары.ТекущаяСтрока = НСтр.ПолучитьИдентификатор();
		ТоварыНоменклатураПриИзменении(Элементы.Товары);	
	КонецЦикла;
	ПоказатьПредупреждение(, "Добавлено: " + М.Количество() + " товаров поставщика!");
КонецПроцедуры

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



Платформа: 8.3.17.2171 Среда: УТ 11.4.13.46 Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 8

  1. RoRu:

    а мог бы просто заказ копировать заполненный

  2. rzd:

    Код похож на какой-то мазохизм

      • rzd:

        Потому. Получаем данные с сервера на клиент, чтобы вызвать сервер, да ещё и ПОСТРОЧНО.
        Ну и по мелочи: именование переменных это лютый ПЗДЦ, вызов функции без директивы по умолчанию на сервере вместо НаСервереБезКонтекста.

        • Мелочи жизни. Ты исходишь из перфекционизма, а надо исходить из бюджета клиента.

          • rzd:

            Из бюджета клиента — это твой универсальный ответ? Тогда это точно блог про айти-технологии?

          • Надо учитывать бюджет клиента. По крайней мере, если бюджет конечен.

Добавить комментарий для fixin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *