При заполнении ТЧ документа через форму внешней обработки не могу получить значение объекта

1. sajmon45 26.01.21 10:39 Сейчас в теме
При заполнении ТЧ документа через форму внешней обработки не могу получить значение объекта "КоличествоЖивотных" всегда пишет 0
Перем ОбъектЗаполнения Экспорт;

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	
	Если ВладелецФормы.Объект.Ссылка.ОС.Количество() > 0 Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Табличная часть будет перезаполнена. Продолжить?", РежимДиалогаВопрос.ДаНет,,,);
	Иначе
		Если НЕ ЗначениеЗаполнено(Объект.Документ) Тогда
			Объект.Документ = ВладелецФормы.Объект.Ссылка;
		КонецЕсли;
		ОбъектЗаполнения=Объект.Документ;
		
		П = Новый Структура;
		
		П.Вставить("НашПараметр", ВладелецФормы.Объект.Ссылка);
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтаФорма);
		
		ЗакрытиеФормы = Новый ОписаниеОповещения
		("ЗаполнениеПоВыбраннымПараметрам", ЭтаФорма); // Название процедуры, которая будет выполняться после закрытия формы "ЗапросПараметров"
		ЗапросПараметров = ОткрытьФорму("ВнешняяОбработка.ЗаполнениеТЧОС.Форма.Форма",  П,ОбъектЗаполнения,,,,ЗакрытиеФормы,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопрос(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Если НЕ ЗначениеЗаполнено(Объект.Документ) Тогда
			Объект.Документ = ВладелецФормы.Объект.Ссылка;
		КонецЕсли;
		ОбъектЗаполнения=Объект.Документ;
		
		П = Новый Структура;
		П.Вставить("НашПараметр", ВладелецФормы.Объект.Ссылка);
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтаФорма);
		
		ЗакрытиеФормы = Новый ОписаниеОповещения
		("ЗаполнениеПоВыбраннымПараметрам", ЭтаФорма); // Название процедуры, которая будет выполняться после закрытия формы "ЗапросПараметров"
		ЗапросПараметров = ОткрытьФорму("ВнешняяОбработка.ЗаполнениеТЧОС.Форма.Форма",  П,ОбъектЗаполнения,,,,ЗакрытиеФормы,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	КонецЕсли; 
		
	
КонецПроцедуры // ()


&НаКлиенте
Процедура ЗаполнениеПоВыбраннымПараметрам(Результат, Параметры) Экспорт
    Если НЕ ЗначениеЗаполнено(Результат) Тогда
        Возврат; // Пользователь не стал указывать параметры, останавливаем работу
	КонецЕсли;
	//Всегда 0 выходит
	Сообщить(Объект.КоличествоЖивотных);
	//
    ОбъектЗаполнения = ЗаполнениеНаСервере(ОбъектЗаполнения, Результат); // Результат содержит структуру, полученную из формы "ЗапросПараметров"
    Если НЕ ВладелецФормы=Неопределено Тогда
        ВладелецФормы.Прочитать(); // Если обработка вызывалась из документа, то нужно перечитать изменения, чтобы пользователь видел результат обработки
    КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
4. aezdakov 6 26.01.21 11:19 Сейчас в теме
(3)ФормаКлиентскогоПриложения (ClientApplicationForm)
Закрыть (Close)
Синтаксис:
Закрыть(<ПараметрЗакрытия>)
Параметры:
<ПараметрЗакрытия> (необязательный)
Тип: Произвольный.
Параметр закрытия формы, открытой в модальном режиме. Это значение будет возвращено как результат метода, открывающего форму модально.
В режиме отказа от модальности параметр передается в процедуру, описанную параметром ОписаниеОповещенияОЗакрытии метода ОткрытьФорму или свойством формы ОписаниеОповещенияОЗакрытии.
Значение по умолчанию: Неопределено.

Как понимаю выполнить Вы вызываете метод закрыть, в котором надо передать параметром результат работы формы. Банально:
Закрыть(КоличествоЖивотных);
А в функции обработки оповещения "ЗаполнениеПоВыбраннымПараметрам" в таком случае:
Если НЕ ЗначениеЗаполнено(Результат) Тогда
КоличествоЖивотных = Результат;
Возврат; // Пользователь не стал указывать параметры, останавливаем работу
КонецЕсли;

Переменные, объявленные внутри функций/процедур существуют только внутри этих функций/процедур. Реквизиты формы, существуют только в пределах самой формы, даже если Вы создадите в другой форме-потомке такой же реквизит, то это будет новый реквизит и если Вы явно не будете прописывать и передавать значения, то само собой у Вас ничего заполняться не будет. Всё остальное это ньюансы. 1С ничего нового не изобретала, правила программирования идентичны другим языкам программирования.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 26.01.21 10:56 Сейчас в теме
(1) Где происходит присваивание значения реквизиту обработки заполнения? Если ничего не присваивать, то 0 будет.
3. sajmon45 26.01.21 11:00 Сейчас в теме
(2) Я ввожу данное значение на форме, после этого нажимаю кнопку выполнить
Прикрепленные файлы:
5. aezdakov 6 26.01.21 11:21 Сейчас в теме
(3)В 1С есть встроенная справка, выделяете глобальную функцию (не путать с функциями, которые Вы объявили сами) и нажимаете ctrl+F1 и читаете.
4. aezdakov 6 26.01.21 11:19 Сейчас в теме
(3)ФормаКлиентскогоПриложения (ClientApplicationForm)
Закрыть (Close)
Синтаксис:
Закрыть(<ПараметрЗакрытия>)
Параметры:
<ПараметрЗакрытия> (необязательный)
Тип: Произвольный.
Параметр закрытия формы, открытой в модальном режиме. Это значение будет возвращено как результат метода, открывающего форму модально.
В режиме отказа от модальности параметр передается в процедуру, описанную параметром ОписаниеОповещенияОЗакрытии метода ОткрытьФорму или свойством формы ОписаниеОповещенияОЗакрытии.
Значение по умолчанию: Неопределено.

Как понимаю выполнить Вы вызываете метод закрыть, в котором надо передать параметром результат работы формы. Банально:
Закрыть(КоличествоЖивотных);
А в функции обработки оповещения "ЗаполнениеПоВыбраннымПараметрам" в таком случае:
Если НЕ ЗначениеЗаполнено(Результат) Тогда
КоличествоЖивотных = Результат;
Возврат; // Пользователь не стал указывать параметры, останавливаем работу
КонецЕсли;

Переменные, объявленные внутри функций/процедур существуют только внутри этих функций/процедур. Реквизиты формы, существуют только в пределах самой формы, даже если Вы создадите в другой форме-потомке такой же реквизит, то это будет новый реквизит и если Вы явно не будете прописывать и передавать значения, то само собой у Вас ничего заполняться не будет. Всё остальное это ньюансы. 1С ничего нового не изобретала, правила программирования идентичны другим языкам программирования.
6. SlavaKron 26.01.21 11:35 Сейчас в теме
(4)
Реквизиты формы, существуют только в пределах самой формы, даже если Вы создадите в другой форме-потомке такой же реквизит, то это будет новый реквизит и если Вы явно не будете прописывать и передавать значения

На самом деле, возможно такое, что один и тот же объект является реквизитом разных форм, при чем не копия, а именно один экземпляр в памяти.
8. aezdakov 6 26.01.21 12:20 Сейчас в теме
(6) Поэтому я и написал, что всё остальное - это нюансы
7. sajmon45 26.01.21 11:40 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот