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

получение значение из реквизита табличной части на сервере

Автор maxipunchik, 01 фев 2015, 15:59

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

maxipunchik

Приветствую товарищи знатоки. Вопрос такой. Есть документ (Реализация) с табличной частью (товары) с реквизитами наименование и количество. Появилась необходимость в событии реквизита Количество ПриИзменении получить значение этого реквизита, которое записано на сервере. Как это реализовать?

Besart

Если документ записан, то через ссылку на документ.

maxipunchik

Цитата: Besart от 01 фев 2015, 20:17
Если документ записан, то через ссылку на документ.
а как мне именно к нужной строке обратиться? Строка то не одна в тч, а текущиеданные и текущийэлемент на сервере не работают.

Besart

По номеру строки или через найти строки с отбором.

cska-fanat-kz

в связи с чем "появилась необходимость"?
цель какая?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

maxipunchik

Цитата: cska-fanat-kz от 02 фев 2015, 08:23
в связи с чем "появилась необходимость"?
цель какая?
Цель была сделать так, чтобы количество нельзя было вопервых поставить большее чем остаток на складе и вовторых чтобы новое значение не могло бы увести текущие остатки в минус вследствии изменения ранее проведенных документов. При этом, если такое случается, то должно выводиться сообщение об ошибке и текущее значение менялось бы на сохраненное на сервере.
Сегодня с грехом пополам сам дошел что нужно сделать, может немного коряво и длинно, но уж как смог, я пока новичок. Выкладываю код, может кому пригодится
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
НачальноеЗначение = ПолучитьНачальноеЗначениеКоличества(Объект.Ссылка,Элементы.Товары.ТекущаяСтрока);   
   ТекущийОстатокНаСкладе = ПолучениеТекущихДанныхРегистра(Элементы.Товары.ТекущиеДанные.Материал,Элементы.Товары.ТекущиеДанные.НаборСвойств,ТекущаяДата());
   ОстатокНаСкладе = ПолучениеДанныхРегистра (Элементы.Товары.ТекущиеДанные.Материал,Элементы.Товары.ТекущиеДанные.НаборСвойств,Объект.Дата);
   Если ТекущийОстатокНаСкладе - (Элементы.Товары.ТекущиеДанные.Количество - НачальноеЗначение) < 0 Тогда
         Сообщить("Ошибка введения данных, конечный остаток на складе не может быть меньше нуля");
         Элементы.Товары.ТекущиеДанные.Количество = НачальноеЗначение;
   ИначеЕсли Элементы.Товары.ТекущиеДанные.Количество > ОстатокНаСкладе Тогда
   Сообщить("На Складе осталось только "+ОстатокНаСкладе+" штук");   
   Элементы.Товары.ТекущиеДанные.Количество = ОстатокНаСкладе;
КонецЕсли;

РаботаСоСтрокамиДокумента.Сумма(Элементы.Товары.ТекущиеДанные);
КонецПроцедуры

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

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

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

cska-fanat-kz

зачем эти выкрутасы?
зачем изобретать велосипед?

1. остатки проверяются при проведении
2. заполнение тч по остатку на складе делается через подбор

ВСЕ!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

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

Рейтинг@Mail.ru

Поиск