Имя: Пароль:
1C
1С v8
Обращение к элементу формы Документа из Общего Модуля.Управляемое приложение
,
0 gabd_marat
 
19.05.16
23:11
Народ, в 1с новичок. Помогите пожалуйста, нужно взять значение из элемента формы Документа из Общего Модуля
1 Cyberhawk
 
19.05.16
23:13
Я не против
2 gabd_marat
 
19.05.16
23:18
Как это сделать не знаешь?
3 Cyberhawk
 
19.05.16
23:19
Наверное, знаю. Непонятно, что "это".
4 gabd_marat
 
19.05.16
23:19
&НаСервере
Функция РассчитатьОстаток(ЭлементТовар,ЭлементКоличество) Экспорт
    Организация = Документы.ПеремещениеТоваровМеждуСкладами.Организация;
    Форма = Документы.ПеремещениеТоваровМеждуСкладами.ПолучитьФорму("ПеремещениеТоваров");
    ЭлементФормыОрганизация = Форма.ЭлементФормы.Организация;
    СкладОтправитель = Документы.ПеремещениеТоваровМеждуСкладами.СкладОтправитель;
    ЭлементФормыСкладОтправитель = Форма.ЭлементФормы.СкладОтправитель;
    Остатки = РегистрыНакопления.ОстаткиТоваров;
    Количество = Остатки.Количество;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Товар",ЭлементТовар);
    Фильтр.Вставить("Организация",ЭлементФормыОрганизация);
    Фильтр.Вставить("Склад",ЭлементФормыСкладОтправитель);
    ТабОстатков = Остатки.Остатки(,Фильтр,"Товар,Организация,Склад",Количество);
    АктуальныйОстаток = ТабОстатков.Итог("Количество");
    ЗначенияРесурсов = АктуальныйОстаток - ЭлементКоличество;
    Возврат ЗначенияРесурсов.Остаток;
КонецФункции

Выдает ошибку : {ОбщийМодуль.РаботаСоСправочниками.Модуль(13)}: Поле объекта не обнаружено (Организация)
Организация = Документы.ПеремещениеТоваровМеждуСкладами.Организация;
5 gabd_marat
 
19.05.16
23:22
Нужно при изменении поля Количество ТЧ Документа выводить в поле Остаток Остаток Товара.
6 gabd_marat
 
19.05.16
23:23
Похоже я не правильно обращаюсь к элементу формы Документа. Подправте меня если знаете
7 Cyberhawk
 
19.05.16
23:25
У тебя не только эта ошибка в коде
8 Cyberhawk
 
19.05.16
23:25
(5) Кому нужно?
9 gabd_marat
 
19.05.16
23:32
Мне)) В в ТЧ Док.ПеремещениеТоваровМеждуСкладами при изменении Количества перемещаемого товара между складами, выводить текущий Остаток товара на складе отправителе.
10 gabd_marat
 
19.05.16
23:33
Изменил код :
&НаСервере
Функция РассчитатьОстаток(ЭлементТовар,ЭлементКоличество) Экспорт
    Остатки = РегистрыНакопления.ОстаткиТоваров;
    Количество = Остатки.Количество;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Товар",ЭлементТовар);
    Фильтр.Вставить("Организация",Документ.ПеремещениеТоваровМеждуСкладами.Организация);
    Фильтр.Вставить("Склад",Объект.Отправитель);
    ТабОстатков = Остатки.Остатки(,Фильтр,"Товар,Организация,Склад",Количество);
    АктуальныйОстаток = ТабОстатков.Итог("Количество");
    ЗначенияРесурсов = АктуальныйОстаток - ЭлементКоличество;
    Возврат ЗначенияРесурсов.Остаток;
КонецФункции

Выводит ошибку :
{ОбщийМодуль.РаботаСоСправочниками.Модуль(17,32)}: Переменная не определена (Документ)
    Фильтр.Вставить("Организация",<<?>>Документ.ПеремещениеТоваровМеждуСкладами.Организация); (Проверка: Сервер)
{ОбщийМодуль.РаботаСоСправочниками.Модуль(18,26)}: Переменная не определена (Объект)
    Фильтр.Вставить("Склад",<<?>>Объект.Отправитель); (Проверка: Сервер)
11 gabd_marat
 
19.05.16
23:34
Как можно обратиться к элементу формы документа из общего модуля , Народ кто-нибудь знает?
12 Сергиус
 
19.05.16
23:51
(0)У тебя что, элемент формы не связан с данными? Бери из базы то, что нужно.
13 hhhh
 
20.05.16
00:15
(11) вам надо наоборот как раз. Вы ведь меняете количество на форме. Поэтому вам надо как поменяете из этой формы вызвать общий модуль.
14 gabd_marat
 
20.05.16
00:29
Вот так я вызывал. Программный код изменил

Общий Модуль:

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


Модуль формы(ПриИзменении):

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    СтрокаТабличнойЧасти.Остаток = РаботаСоСправочниками.РассчитатьОстаток(ЭтотОбъект,СтрокаТабличнойЧасти.Товар,СтрокаТабличнойЧасти.Количество);
КонецПроцедуры

Пишет ошибка:
{Документ.ПеремещениеТоваровМеждуСкладами.Форма.ПеремещениеТоваров.Форма(4)}: Ошибка при вызове метода контекста (РассчитатьОстаток)
    СтрокаТабличнойЧасти.Остаток = РаботаСоСправочниками.РассчитатьОстаток(ЭтотОбъект,СтрокаТабличнойЧасти.Товар,СтрокаТабличнойЧасти.Количество);
по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'УправляемаяФорма'
15 gabd_marat
 
20.05.16
00:32
При использовании точки останова в компиляции, указывает на

СтрокаТабличнойЧасти.Остаток = РаботаСоСправочниками.РассчитатьОстаток(ЭтотОбъект,СтрокаТабличнойЧасти.Товар,СтрокаТабличнойЧасти.Количество);
16 hhhh
 
20.05.16
00:56
Вы неправильно понимаете слово ЭтотОбъект. ЭтотОбъект - это и есть форма. Зачем вы ее на сервер суете? Вот и ошибка поэтому.

так может

    Фильтр = Новый Структура;
    Фильтр.Вставить("Товар",Объект.Товар);
    Фильтр.Вставить("Организация",Объект.Организация);
    Фильтр.Вставить("Склад",Объект.СкладОтправитель);



СтрокаТабличнойЧасти.Остаток = РаботаСоСправочниками.РассчитатьОстаток(Фильтр,СтрокаТабличнойЧасти.Товар,СтрокаТабличнойЧасти.Количество);
17 gabd_marat
 
20.05.16
01:52
По условию задания все Запросы и вычисления должны быть в общем модуле, поэтому подумав данный выше код можно я отнес ни к тому ни к другому и поместил в модуль формы, как вы посоветовали, Теперь ругается на другую часть

{ОбщийМодуль.РаботаСоСправочниками.Модуль(17)}: Поле объекта не обнаружено (Количество)
    Количество = Остатки.Количество;
Посоветуйте , как исправить
18 exiter1
 
20.05.16
02:50
Что-то не совсем догоняю, что там в коде у тебя и в объектах документа.
Получается у документа есть реквизит "Организация" и табличная часть с реквизитами "Товар" и "Количество". Так?
Тогда на клиенте из модуля документа передаем в функцию на сервере необходимые данные:

Процедура ТоварыКоличествоПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    СтрокаТабличнойЧасти.Остаток = РаботаСоСправочниками.РассчитатьОстаток(Объект.СкладОтправитель,Объект.Организация,СтрокаТабличнойЧасти.Товар,СтрокаТабличнойЧасти.Количество);

А в общем модуле пишем так:
Функция РассчитатьОстаток(СкладОтправитель, Организация,ЭлементТовар,ЭлементКоличество) Экспорт
    Форма = Ссылка.ПолучитьФорму("ПеремещениеТоваров");
    ЭлементФормыОрганизация = Форма.ЭлементыФормы.Организация;
    ЭлементФормыСкладОтправитель = Форма.ЭлементыФормы.СкладОтправитель;
    Остатки = РегистрыНакопления.ОстаткиТоваров;
    Количество = Остатки.Количество;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Товар",ЭлементТовар);
    Фильтр.Вставить("Организация",Организация);
    Фильтр.Вставить("Склад",СкладОтправитель);
    ТабОстатков = Остатки.Остатки(,Фильтр,"Товар,Организация,Склад",Количество);
    АктуальныйОстаток = ТабОстатков.Итог("Количество");
    ЗначенияРесурсов = АктуальныйОстаток - ЭлементКоличество;
    Возврат ЗначенияРесурсов;
КонецФункции

КонецПроцедуры
19 exiter1
 
20.05.16
03:05
Пару строк еще нужно в функции убрать:

Функция РассчитатьОстаток(СкладОтправитель, Организация,ЭлементТовар,ЭлементКоличество) Экспорт
  
    Остатки = РегистрыНакопления.ОстаткиТоваров;
    Количество = Остатки.Количество;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Товар",ЭлементТовар);
    Фильтр.Вставить("Организация",Организация);
    Фильтр.Вставить("Склад",СкладОтправитель);
    ТабОстатков = Остатки.Остатки(,Фильтр,"Товар,Организация,Склад",Количество);
    АктуальныйОстаток = ТабОстатков.Итог("Количество");
    ЗначенияРесурсов = АктуальныйОстаток - ЭлементКоличество;
    Возврат ЗначенияРесурсов;
КонецФункции
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.