[ Вопрос дня ] Как реализовать подбор одновременно нескольких позиций товара с ценой в документ?

Доброго дня, коллеги!

Обращаться к типовым решениям и вникать в подходы реализации, которые применяют разработчики 1С, бывает полезно. Так тренер курса Подготовка к аттестации 1С:Специалист по платформе 1С:Предприятие 8.3 на вопрос слушателя по теме “Форма подбора товаров в табличную часть документа” привел в пример фрагменты кода из типового решения.

Вопрос

Добрый день! В одной из задач нужно организовать хранение продажных цен деталей в разрезе типов цен. В документе «Расходная накладная» необходимо иметь возможность указывать тип цен, по которым осуществляется отпуск товара. В форме выбора деталей, для каждой детали, дополнительно необходимо отображать ее цену, а также текущий остаток на складе. При выборе детали в документ должна добавляться не только сама деталь, но и соответствующая цена. Вопрос – как сделать заполнение номенклатуры и цены при переносе одновременно нескольких позиций в документ. Номенклатура перенесется, а Цена?

Ответ

Для этого можно применить подход, реализованный в УТ 11 – при начале перетаскивания из поля-отправителя переопределить, какие данные перетаскиваются (сформировать массив структур, состоящий из номенклатуры и цены). Эти данные будут доступны в поле-получателе, тогда можно будет искать в корзине по паре Номенклатура+Цена. Таким образом, для таблицы формы Список создаем обработчик события НачалоПеретаскивания, в котором из перетаскиваемых строк динамического списка извлекаем номенклатуру и цену:

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

После этого в обработчик события Перетаскивание для таблицы формы Корзина в качестве параметра придет не сама перетаскиваемая номенклатура, а структура, которую мы сформировали выше:

&НаКлиенте
Процедура КорзинаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
   
    Для каждого ПараметрыТовара Из ПараметрыПеретаскивания.Значение Цикл
       
        НайденныеСтроки = Корзина.НайтиСтроки(Новый Структура("Номенклатура, Цена", ПараметрыТовара.Номенклатура, ПараметрыТовара.Цена));
        Если НайденныеСтроки.Количество() > 0 Тогда
            НайденныеСтроки[0].Количество = НайденныеСтроки[0].Количество + 1;
        Иначе
            НоваяСтрока = Корзина.Добавить();
            НоваяСтрока.Номенклатура = ПараметрыТовара.Номенклатура;
            НоваяСтрока.Цена = ПараметрыТовара.Цена;
            НоваяСтрока.Количество = 1;
        КонецЕсли;
       
    КонецЦикла;
   
КонецПроцедуры

Добавить комментарий

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

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.