Обновление формы

1. user1008893 06.02.19 09:56 Сейчас в теме
Есть справочник номенклатуры. процедура ПередОткрытием и тут я добавила строчку
ПосчитатьОбъемы(Ссылка);
ЭтаФорма.Прочитать();

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

	ПосчитатьОбъемы(Ссылка);
	ЭтаФорма.Прочитать();
   
			   

	
	Кастомизация.ВыполнитьПроцедуруФункцию("ПС_ПередОткрытием", ЭтаФорма, Отказ, СтандартнаяОбработка);
	
       КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
15. user623969_dusa 06.02.19 12:04 Сейчас в теме
(1) почему перед открытием - кто вам сказал что перед открытием можно работать с элементами формы?? максимум с данными базы и единственное что можно сделать выбрать какую форму открыть

с элементами формы при открытии
17. user1008893 06.02.19 12:06 Сейчас в теме
18. user623969_dusa 06.02.19 12:07 Сейчас в теме
19. user1008893 06.02.19 12:18 Сейчас в теме
(18)ну сделала,все равно не копируются реквизиты,такие как номенклатурная группа,номенклатура и т.д.
22. lefthander 06.02.19 12:57 Сейчас в теме
(1)Что то я не понимаю, у модуля объекта есть предопределенная процедура - ПриКопировании, вот ее и используйте. В ней и задавайте какие реквизиты менять, а какие нет.
2. SedovSU@mail.ru 297 06.02.19 10:13 Сейчас в теме
А можете показать код процедуры ПосчитатьОбъемы(Ссылка). Просто если вы копируете элемент и параметр Ссылка у вас пустой и возможно у вас процедура не так ПосчитатьОбъемы как то не так работает.
3. user1008893 06.02.19 10:15 Сейчас в теме
(2)
Процедура ПосчитатьОбъемы(Ссылка) 

ЗапросОбъем=Новый Запрос; 
ЗапросОбъем.Текст= "ВЫБРАТЬ 
|    СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Вес) КАК Вес, 
|    ШаблоныСхемПакования.Владелец, 
|    СУММА(ШаблоныСхемПакованияТЧСостав.ШаблонУпаковки.Объем) КАК Объем, 
|    ШаблоныСхемПакования.Ссылка 
|ИЗ 
|    Справочник.ШаблоныСхемПакования.ТЧСостав КАК ШаблоныСхемПакованияТЧСостав 
|    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныСхемПакования КАК ШаблоныСхемПакования 
|    ПО ШаблоныСхемПакованияТЧСостав.Ссылка = ШаблоныСхемПакования.Ссылка 
|ГДЕ 
|    ШаблоныСхемПакования.Владелец = &Ссылка 
| 
|СГРУППИРОВАТЬ ПО 
|    ШаблоныСхемПакования.Владелец, 
|    ШаблоныСхемПакования.Ссылка" ; 
ЗапросОбъем.УстановитьПараметр("Ссылка", Ссылка); 
Выборка = ЗапросОбъем.Выполнить().Выбрать(); 

Пока Выборка.Следующий() Цикл 
Элемент = Выборка.Владелец.ПолучитьОбъект(); 
Элемент.Объем= Выборка.Объем; 
Элемент.Вес=Выборка.Вес; 
Элемент.Записать();
КонецЦикла;

КонецПроцедуры
Показать
4. SedovSU@mail.ru 297 06.02.19 10:22 Сейчас в теме
(3) Правильно ли я понимаю, что вы берете копируете элемент справочника ШаблоныСхемПакования. В нем есть табличная часть ТЧСостав, в это табличной части у вас есть реквизит Владелец который всегда равен ссылки на элемент ШаблоныСхемПакования??????? Сбросьте скрин справочника.
5. user1008893 06.02.19 10:25 Сейчас в теме
(4)да все правильно
Прикрепленные файлы:
6. SedovSU@mail.ru 297 06.02.19 11:35 Сейчас в теме
(5) Так еще раз. Вы копируете/изменяете/открываете справочники Номенклатура, по ссылке на элемент номенклатура ищется записи в справочнике ШаблоныСхемПакования. В справочнике ШаблоныСхемПакования естьреквизит Владелец который является ссылкой на справочник Номенклатуры. Весь расчет Объем и вес просходит в справочнике номенклатура. То есть реквизит Объем и вес это реквизиты Номенклатуры. Все так?
7. user1008893 06.02.19 11:40 Сейчас в теме
8. SedovSU@mail.ru 297 06.02.19 11:43 Сейчас в теме
Ну вот смотрите Вы когда скопировали элемент номенклатуры у него ссылка еще не готова - она пустая, и вы по пустой ссылке пытаетесь найти элемент в справочнике ШаблоныСхемПакования где поле Владелец равен пустой ссылки. Поэтому у вас ни чего не считается. Но если для этой новой номенклатуры создать ШаблоныСхемПакования то тогда все будет считаться. У вас ведь так все сейчас получается?
9. user1008893 06.02.19 11:47 Сейчас в теме
(8)У меня все правильно считается,и вес и объем,все записывается. Но только когда нажимаю на кнопку скопировать номенклатуру,то реквизиты очищаются,а раньше не очищались
10. SedovSU@mail.ru 297 06.02.19 11:49 Сейчас в теме
У вас справочник ШаблоныСхемПакования подчинен справочнику Номенклатура?
11. user1008893 06.02.19 11:50 Сейчас в теме
12. SedovSU@mail.ru 297 06.02.19 11:58 Сейчас в теме
У вас ни будет это ни как работать. Ввиду того что при копировании у вас получилась пустая ссылка - новая ссылка в справочнике ШаблоныСхемПакования нет такого элемента у которого бы поле Владелец имело бы значение вашей пустой ссылки. То есть при копировании Номенклатуры и у вас элемент справочника ШаблоныСхемПакования не копируется. Раньше у вас работала значит у вас не было подчинения Номенклатуры и ШаблоныСхемПакования
13. SedovSU@mail.ru 297 06.02.19 11:59 Сейчас в теме
Ну вот смотрите у меня есть Контраент у него куча договоров. Это два разных справочника: Контрагенты и Договоры. Один подчинен другому. При копировании Контрагента у меня же программа не может скопировать все договора. Это ведь разные сущности - разные таблицы
14. SedovSU@mail.ru 297 06.02.19 12:02 Сейчас в теме
И тем более смотрите. Есть номенклатура и два элемента справочника ШаблоныСхемПакования. В справочнике номенклатуры по какому ШаблоныСхемПакования будет вестись расчеты по первому или второму? Если же для одной номенклатуры всегда один элемент ШаблоныСхемПакования, то тогда перенесите функционал справочника ШаблоныСхемПакования в справочнике номенклатуры. И у Вас все будет в одном месте работать.
16. user1008893 06.02.19 12:06 Сейчас в теме
(14)вы меня не поняли. мне не надо чтобы копировались шаблоны.
Вот это так было,при копировании копируются и вот эти реквизиты. А сейчас они копируются пустыми
Прикрепленные файлы:
20. SedovSU@mail.ru 297 06.02.19 12:53 Сейчас в теме
(16) скорее всего / хотя наверное точно - вы перед открытием используете методо Перечитать. Ввиду того что сперва программа все скопировала как надо но потом вы вызвали метод перечитать - у вас они и очищаются в виду того что у объекта данные реквизиты пустые
21. SedovSU@mail.ru 297 06.02.19 12:54 Сейчас в теме
В процедуре перед открытием напишите так и все получится

Если Не ЭтоНовый() Тогда
ПосчитатьОбъемы(Ссылка);
ЭтаФорма.Прочитать();
КонецЕсли
23. lefthander 06.02.19 13:05 Сейчас в теме
(21)ЭтоНовый() доступен на сервере, в клиентской процедуре не прокатит
Все расчеты по объекту надо сделать либо при создании на сервере, если это новый, либо в процедуре ПриЧтенииНаСервере, если надо подтянуть что то из других объектах.
24. user1008893 06.02.19 13:07 Сейчас в теме
(21) спасибо,все сработало,только теперь хотят,чтобы не копировался объем и вес ,т.е. был 0
25. SedovSU@mail.ru 297 06.02.19 13:18 Сейчас в теме
(24) В этом же месте где у вас все заработало ставите - если это новый тогда объем = 0 или вес = 0. Второй вариант в модуле объекта есть процедура "Обработка заполнения" - в ней аналогично укажите объем = 0 и вес = 0
26. user1008893 06.02.19 14:00 Сейчас в теме
(25)Спасибо,уже все сделала))
Оставьте свое сообщение

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