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

1С 8.3 Подбор из справочника в табличную часть

Автор Александр Мун, 10 июл 2019, 11:01

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

Александр Мун

Добрый день!

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

Однако я понять не могу, как мне передать не только "Наименование" и "Количество", справочник "АвтосервисРаботы" имеет реквизит "Стоимость", а ТЧ документа "Работы" имеет реквизит "Цена".

Каким образом заполнить колонку "Цена" в ТЧ Документа путем такого подбора?


&НаКлиенте
Процедура Подбор(Команда)
ОткрытьФорму(
"Справочник.АвтосервисРаботы.ФормаВыбора",
Новый Структура("ЗакрыватьПриВыборе, РежимВыбора",
Ложь, Истина),
ЭтаФорма
, , , ,
Новый ОписаниеОповещения(
"ПриЗакрытииФормыПодбора",
ЭтаФорма,
"Подбор"),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца
);
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытииФормыПодбора(Рез, Доп) Экспорт

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) // Это событие формы (ОбработкаВыбора)!

ПоказатьВводЧисла(
Новый ОписаниеОповещения("ПриВводеЧисла",
ЭтаФорма,
ВыбранноеЗначение), ,
"Введите количество",
10,
0
);

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

&НаКлиенте
Процедура ПриВводеЧисла(Рез, Доп) Экспорт

НайденныеСтроки = Объект.Работы.НайтиСтроки(Новый Структура("Наименование", Доп));

Если НайденныеСтроки.Количество() = 0 Тогда
Ст = Объект.Работы.Добавить();
Ст.Наименование = Доп;
Ст.Количество = рез;
Иначе
НайденныеСтроки[0].Количество = НайденныеСтроки[0].Количество + рез;
КонецЕсли;

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

Александр Мун

Я дополнил код:

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


Теперь новый вопрос, если "ВыбранноеЗначение" уже было добавлено в ТЧ, как увеличить "Количество"? 
Добавлено: 10 июл 2019, 13:59


В общем пришлось попотеть, ниже полный код который работает как надо. Может кому пригодиться из новичков:


&НаКлиенте
Процедура Подбор(Команда)
ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина);
ОткрытьФорму("Справочник.АвтосервисРаботы.ФормаВыбора", ПараметрыПодбора, Элементы.Работы);
КонецПроцедуры

&НаКлиенте
Процедура РаботыТаблицаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПоказатьВводЧисла(
Новый ОписаниеОповещения("РаботыТаблицаОбработкаВыбораНаСервере",
ЭтаФорма,
ВыбранноеЗначение), ,
"Введите количество",
10,
0
);
КонецПроцедуры

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

Теги:

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

Рейтинг@Mail.ru

Поиск