Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
02 окт 2022, 12:50

Работа по всему столбцу, а не по тек. строке

Автор FreshBreeze, 14 сен 2022, 16:03

0 Пользователей и 1 гость просматривают эту тему.

FreshBreeze

В данный момент программа работает так
Навел на строку, выбрал номенклатуру, нажал записать , записалась скидка
Нужно нажал записать и все не заполненные скидки записались

LexaK

FreshBreeze, вставьте текст кода в виде текста (вот здесь кнопочка с картинкой 1С)
так удобнее по вашему же тексту править
если помогло нажмите: Спасибо!

FreshBreeze

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



КонецФункции
&НаКлиенте
Процедура Расчитать3(Команда)
   
   ТекСтрока =  Элементы.СписокТоваров.ТекущиеДанные;
   ТекСтрока.Скидка = Расчитать3НаСервере(ТекСтрока.Номенклатура);
   Для каждого Скидка из СписокТоваров.Цикл
      
   
   //Расчитать3НаСервере(ТекСтрока.Номенклатура);
КонецПроцедуры

FreshBreeze

Цитата: LexaK от 14 сен 2022, 16:13FreshBreeze, вставьте текст кода в виде текста (вот здесь кнопочка с картинкой 1С)
так удобнее по вашему же тексту править
прислал

LexaK

FreshBreeze, вот небольшие но очень понятные доработки (не самый оптимальный вариант)
попробуйте их проанализировать (если получится то и оптимизировать)
(да, и могут быть ошибки/опечатки, поправьте)
&НаСервере
Функция Расчитать3НаСервере(Номенклатура)
   //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   РегСкидкиСрезПоследних.Скидка КАК Скидка
      |ИЗ
      |   РегистрСведений.РегСкидки.СрезПоследних(&дата, Номенклатура = &Номенклатура) КАК РегСкидкиСрезПоследних";
   
   Запрос.УстановитьПараметр("дата", Объект.дата);
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл   
      Возврат ВыборкаДетальныеЗаписи.скидка;
      // Вставить обработку выборки ВыборкаДетальныеЗаписи
  Иначе
  //если данных в запросе нет, возвращаем 0
      Возврат 0;//добавлено, по возможности надо возвращать то что ожидается (здесь Число)
   КонецЦикла;
   
   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА



КонецФункции
&НаКлиенте
Процедура Расчитать3(Команда)
   
   //ТекСтрока =  Элементы.СписокТоваров.ТекущиеДанные;
   //ТекСтрока.Скидка = Расчитать3НаСервере(ТекСтрока.Номенклатура);
   //Для каждого Скидка из СписокТоваров.Цикл
     
   ЗаполнитьСкидкиНаСервере();
   
   //Расчитать3НаСервере(ТекСтрока.Номенклатура);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьСкидкиНаСервере()

//проверьте как в объекте точно называется табличная часть список товаров
Для каждого лкСтр Из Объект.СписокТоваров Цикл
Если лкСтр.Скидка = 0 Тогда
//по условию перезаполняем только нулевые скидки
лкСтр.Скидка = Расчитать3НаСервере(лкСтр.Номенклатура);
//здесь еще можно добавить команды по расчете Суммы в строке с учетом скидки, СуммуНДС и др.
Если лкСтр.Скидка = 0 Тогда
//добавлен вывод сообщения об отсутствии скидки, если не нужна можно закоментарить
Сообщить("Для товара:" + лкСтр.Номенклатура + " - не задана скидка!");
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры
если помогло нажмите: Спасибо!

FreshBreeze

LexaK,

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл   
      Возврат ВыборкаДетальныеЗаписи.скидка;
      // Вставить обработку выборки ВыборкаДетальныеЗаписи
  Иначе
      //если данных в запросе нет, возвращаем 0
      Возврат 0;//добавлено, по возможности надо возвращать то что ожидается (здесь Число)
   КонецЦикла;

что то цикл не очень удачно построен, а в остальном все идеально

LexaK

да опечатка, замените на это
Если ВыборкаДетальныеЗаписи.Следующий() Тогда //Цикл   
      Возврат ВыборкаДетальныеЗаписи.скидка;
      // Вставить обработку выборки ВыборкаДетальныеЗаписи
  Иначе
      //если данных в запросе нет, возвращаем 0
      Возврат 0;//добавлено, по возможности надо возвращать то что ожидается (здесь Число)
   КонецЕсли;
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск