Имя: Пароль:
1C
1С v8
v8: Вызов процедуры в Модуле Формы из Модуля Объекта
,
0 selestos
 
03.07.13
23:33
1.Вот что за код в модуле Объекта


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


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



2.После вызываю эту процедуру в Модуле Формы


&НаКлиенте
Процедура Заблокировать(Команда)
   БлокированиеТовара();
КонецПроцедуры





3.Выдает Ошибку что процедура не определена

{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(6,2)}: Процедура или функция с указанным именем не определена (БлокированиеТовара)
<<?>>БлокированиеТовара(); (Проверка: Тонкий клиент)




как я понял ошибка и за того что сначала нужно преобразовать с помощью процедуры ДанныеФормыВЗначение()

Но как это делается никак не могу понять, сам я начинающий, если кто знает опишите подробно что нужно делать относительно моего задания
1 zak555
 
03.07.13
23:36
&НаКлиенте
Процедура Заблокировать(Команда)
   БлокированиеТовараНаСервере();
КонецПроцедуры

&НаСервере
Процедура БлокированиеТовараНаСервере()
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
   ОбъектДляСервера.БлокированиеТовара();
КонецПроцедуры
2 zak555
 
03.07.13
23:37
кстати, что за объект ?
3 selestos
 
03.07.13
23:57
Это Документ <<РасходнаяНакладная>> делает Движение по Регистру накопления <<БлокировкаТовара>>

Смысл в том что процедура не называется <<обработкаЗаполнения>> ---тогда создается ситуация при который документ не проведен но движения у него есть
Это важно в случае работы с большими документами, Пока пользователь заполняет такой документ, его коллеги могут перехватить товар. И при проведении документа может вдруг выяснится, что отпустить половину номенклатурных позиций уже невозможно.Они отданы другим покупателям
именно поэтому еще на этапе заполнения документа полезно каким-то образом блокировать товар, причем в указанных в документе количествах
4 zak555
 
03.07.13
23:59
(3) вынеси в модуль менеджера БлокированиеТовара
5 zak555
 
04.07.13
00:01
и из менеджера вызывай проведение документа
6 selestos
 
04.07.13
00:06
нет так не канает
в модуле менеджера уже не вдет табличную часть товары из которого заполняется регистр
В задание указанно что Именно из модуля объекта должен быть вызов
7 zak555
 
04.07.13
00:08
> уже не вдет табличную часть товары

переведи


в каком задании ?
8 selestos
 
04.07.13
00:09
ДанныеФормыВзначение ()
что-то в этом роде но как применить эту процедуру и преобразовать без понятия
9 zak555
 
04.07.13
00:10
ты опиши сначала, что нужно сделать
10 selestos
 
04.07.13
00:12
Нужно вызвать эту процедуру из Модуля Объекта<<БлокированиеТовара()>>  в Модуле Формы
11 zak555
 
04.07.13
00:14
&НаСервере
Процедура БлокированиеТовараНаСервере()
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
   ОбъектДляСервера.БлокированиеТовара();
   ОбъектДляСервера.Проведен = Истина; ОбъектДляСервера.Записать(); // =)
КонецПроцедуры
12 zak555
 
04.07.13
00:14
(10) зачем ?
13 zak555
 
04.07.13
00:14
нажми на кнопку провести
14 selestos
 
04.07.13
00:26
{Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(10)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
по причине:
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
15 selestos
 
04.07.13
00:26
просмотрел сейчас
извини что та долго
16 selestos
 
04.07.13
00:28
да я понял
17 selestos
 
04.07.13
00:28
классно спасибо
18 selestos
 
04.07.13
18:00
Zak555 спасибо за наводку, я подправил теперь все работает
вот код который получился

&НаСервере
Процедура БлокированиеТовараНаСервере()
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
   ОбъектДляСервера.БлокированиеТовара();
  ЗначениеВРеквизитФормы(ОбъектДляСервера,"Объект");

КонецПроцедуры
19 zak555
 
04.07.13
23:10
только неясно
зачем тебе делать движения по кнопке
20 zak555
 
04.07.13
23:11
и ещё флаг выставлять
21 selestos
 
05.07.13
16:39
Это для непроведенных товаров, чтоб узнать разные данные Исходя из регистра НакопленияОстаток прежде чем принять решения распределения номенклатурв
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.