нужна помощь разобраться в коде

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
нужна помощь разобраться в коде, Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ. Редакция 5 (5.0.05.08)
 
Возникла задача при записи элементов справочников Контрагентов и Автомобилей элемент записывался в группу справочника. которая определяется набором реквизитов этого элемента. Проще говоря нужно, что бы независимо от того в какой группе находится элемент до записи при записи его нужно переносить в конкретную группу.При этом должно происходить обновление списка справочника,с позиционированием на новое местоположение элемента.
В Подписке на событие изменил процедуру обработки. Для наглядности приведу код-он обрабатывает только справочник Автомобили:
Код
ЕСли ТипЗнч(ЭлементСпр)=Тип("СправочникОбъект.Автомобили") тогда
      Род=Справочники.Автомобили.ПустаяСсылка();
      Если ЭлементСпр.Родитель=Справочники.Автомобили.ПустаяСсылка() тогда
         //Сообщить("Мы попали");
         ИмяРодителя1Уровня=СокрЛп(ЭлементСпр.Модель.Производитель.Наименование);
         если  ЗначениеЗаполнено(ИмяРодителя1Уровня) тогда
            Группа1= Справочники.Автомобили.НайтиПоНаименованию(ИмяРодителя1Уровня);
            ЕСли Группа1.ЭтоГруппа тогда
               Если Группа1<>Справочники.Автомобили.ПустаяСсылка()   тогда
                  Род =Группа1.Ссылка;
                  //ищем второе вложение
                  ИмяРодителя2Уровня=СокрЛп(ЭлементСпр.Модель.Наименование);
                  Группа2= Справочники.Автомобили.НайтиПоНаименованию(ИмяРодителя2Уровня,,Род);
                  ЕСли Группа2.ЭтоГруппа тогда
                     Если Группа2<>Справочники.Автомобили.ПустаяСсылка()   тогда
                        Род =Группа2.Ссылка;
                        
                     конецесли;
                  конецесли;
               конецесли;
            конецесли;
         конецесли;
      конецесли;
      если Род<>Справочники.Автомобили.ПустаяСсылка() тогда
         ЭлементСпр.Родитель=Род;
      Конецесли;   
   конецесли;


Сам механизм переноса в другую группу срабатывает нормально. Но обновление списка справочника, откуда вызвана форма редактирования элемента, отрабатывается как то непонятно.
В справочнике Контрагенты обновление вообще обновление не происходит, никак. А в справочнике Автомобили обновление происходит , но только в основой форме списка Справочника и только при повторной записи элемента. Т.е. открываем элемент, жмем кнопку записать -в списке справочника элемент из корня исчезает (перенос происходит в заданную группу ), и все.Жмем второй раз кнопку записать -происходит обновление списка справочника и позиционирование в необходимой группе справочника на текущей позиции справочника.
В коде я пытался найти место где происходит обновление формы списка - не нашел.
Если возникнет вопрос для чего это нужно, поясню при оперативной работе наши мастера забивают машины и клиентов где смогли. В результате через нескольких дней клиентов  и автомобилей без разбивки по группам очень много. А эта разбивка очень нужна для нашей работы, причем отследить пользователи это не всегда успевают.
Если кто подскажет, где нужно смотреть код обновления формы с позиционированием на текущем элементе -буду очень рад
 
Добрый день.
Как то все очень сложно.
Не проще это сделать в обработчике перед записью? Будет четко отрабатывать.
Что касается подписки на событие, то перерисовка списков это на движке лежит и в настройках списка период обновления установить можно.
И еще нюанс про значимые события. Записывая элемент в форме и подправляя его в фоне у нас получаются разные данные: в форме один родитель, а в форме элемента другой. Да и блокировки покоя могут не давать.
 
Цитата
Александр Яблочкин пишет:
Не проще это сделать в обработчике перед записью?
Ну это нужно в модуле каждого справочника писать однотипный код -в подписке на событии можно в одном месте обработать
Цитата
Александр Яблочкин пишет:
Что касается подписки на событие, то перерисовка списков это на движке лежит и в настройках списка период обновления установить можно.
Тогда не понятно почему в справочнике Автомобили список обновляется пускай со второй операции записи, а в  справочнике Контрагенты -вообще никогда. Движок 1с  он вроде как одинаково отрабатывает для всех метаданных. Поэтому я думаю что все таки где то код обновления списка справочника есть -нужно только понять где он.
Цитата
Александр Яблочкин пишет:
И еще нюанс про значимые события. Записывая элемент в форме и подправляя его в фоне у нас получаются разные данные: в форме один родитель, а в форме элемента другой. Да и блокировки покоя могут не давать.
Вот этот момент я не совсем понял-если я записал в карточке элемента изменения -я изменил объект в базе данных, он не может одновременно присутствовать в двух группах (отображаться визуально -еще возможно, принципы Гудини применительно к 1с еще никто не отменял :D ) Поэтому собственно задача стоит как обновить форму списка справочника после записи элемента с позиционированием на этот элемент в списке
 
1. Не обязательно в каждом справочнике код прописывать. Достаточно в общем модуле в обработчике перед записью прописать общие механизмы.
2. Настройки автообновления списков справочников настраиваются для каждого справочника индивидуально.
3. Можно попробовать через оповещение.
 
Цитата
Александр Яблочкин пишет:
3. Можно попробовать через оповещение.
Как я понял так и сделано в справочнике Автомобили. Непонятно -почему с первой операции Записать в карточке элемента не обновляется список номенклатуры откуда была вызвана форма записи. Сейчас пока разбираю вот этот код из списка номенклатуры, наверное истина где то  рядом
Код
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
   
   спСписокОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
   Если ИмяСобытия="АвтомобильИзменен" Тогда
      Если Отбор.Ссылка.Использование Тогда
         УстановитьОтборПоХозяину();
      КонецЕсли; 
      ЭлементыФормы.Список.ТекущаяСтрока=Параметр;
   КонецЕсли; 
   
   Если ЭлементыФормы.Список.ТекущаяСтрока=Параметр И СокрЛП(Справочники.ХозОперации.УстановкаЦенНаАвтомобили)=ИмяСобытия Тогда
      ОбновитьИнформацию();
   КонецЕсли; 
   
КонецПроцедуры
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С