8.х Не меняется ссылка на элемент справочнкиа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем bajiepka, 13 окт 2015.

  1. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    329
    Симпатии:
    23
    Баллы:
    29
    Здравствуйте! Подскажите пожалуйста, почему такое может быть.
    Есть у меня физ лицо, например Иванов Иван Иванович. Меняю ему какой-то реквизит, например фамилию на Петров таким образом:
    Код:
    &НаСервереБезКонтекста
    Процедура ЗаписьИзмененийФИО(СтруктураПараметров)
      
        ДатаСеансаТекущая = ТекущаяДатаСеанса();
      
        СтруктураЗаписи = РегистрыСведений.ФИОФизЛиц.ПолучитьПоследнее(ДатаСеансаТекущая, Новый Структура("ФизЛицо", СтруктураПараметров.ФизЛицо));
              
            МенеджерЗаписи                 = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
            МенеджерЗаписи.Отбор.ФизЛицо.Установить(СтруктураПараметров.ФизЛицо);
            МенеджерЗаписи.Отбор.Период.Установить(ДатаСеансаТекущая);
            МенеджерЗаписи.Прочитать();
          
            Если МенеджерЗаписи.Количество() = 0 Тогда
                НоваяЗапись = МенеджерЗаписи.Добавить();
                НоваяЗапись.ФизЛицо = СтруктураПараметров.ФизЛицо;
                НоваяЗапись.Период         = ДатаСеансаТекущая;
              
                Если СтруктураПараметров.Свойство("Фамилия") Тогда
                    НоваяЗапись.Фамилия         = СтруктураПараметров.Фамилия;
                КонецЕсли;
          
                Если СтруктураПараметров.Свойство("Имя") Тогда
                    НоваяЗапись.Фамилия         = СтруктураПараметров.Имя;
                КонецЕсли;
          
                Если СтруктураПараметров.Свойство("Отчество") Тогда
                    НоваяЗапись.Фамилия         = СтруктураПараметров.Отчество;
                КонецЕсли;
          
                МенеджерЗаписи.Записать(Истина);
              
            ИначеЕсли МенеджерЗаписи.Количество() = 1 Тогда
                ТекущаяЗапись = МенеджерЗаписи[0];
                ТекущаяЗапись.Период         = ДатаСеансаТекущая;
          
                Если СтруктураПараметров.Свойство("Фамилия") Тогда
                    ТекущаяЗапись.Фамилия         = СтруктураПараметров.Фамилия;
                КонецЕсли;
              
                Если СтруктураПараметров.Свойство("Имя") Тогда
                    ТекущаяЗапись.Фамилия         = СтруктураПараметров.Имя;
                КонецЕсли;
              
                Если СтруктураПараметров.Свойство("Отчество") Тогда
                    ТекущаяЗапись.Фамилия         = СтруктураПараметров.Отчество;
                КонецЕсли;
              
                МенеджерЗаписи.Записать();
            КонецЕсли;
      
    КонецПроцедуры
    Тоесть я по ссылке не физлицо перезаписал ему необходимый реквизит.
    Затем, перезаписываю сам объект справочника:
    Код:
    Если РеквизитыМенялись Тогда
        
         ОбъектГруза = текСтруктура.Груз.ПолучитьОбъект();    
        
         Для Каждого элементСтруктуры Из СтруктураИзменений Цикл
          
           //...   для того, чтобы не менять названия и состав реквизитов форм и справочников
           //     применяем временное решение со структурой соответствий
           текСтрокаОбъекта = структураСоответствий[элементСтруктуры.Ключ];
            
           //...   в справочнике транспортных средств нет такого реквизита, поэтому
           //     игнорируем его и перезаписываем другие отличающиеся
           Если    текСтрокаОбъекта = "ТранспортноеСредство" ИЛИ
               текСтрокаОбъекта = "Фамилия" ИЛИ
               текСтрокаОбъекта = "Имя" ИЛИ
               текСТрокаОбъекта = "Отчество" Тогда
             Продолжить;
           КонецЕсли;
          
           ОбъектГруза[текСтрокаОбъекта] = элементСтруктуры.Значение;
         КонецЦикла;
        
         ОбъектГруза.Записать();
        
       КонецЕсли;
    
    Далее получаю объект, пишу в него все изменения кроме ФИО (если они есть) и перезаписываю.
    Проблема в том, что ссылка на объект остаётся старая, тоесть если посмотреть на ОбъектГруза.Ссылка то она будет равна Иванов Иван Иванович (тип Справочники.Физлица), а должна быть Петров Иван Иванович, а я ж так понимаю она должна обновиться еще при записи в запись регистра сведений?
    Подскажите пожалуйста, где я завтыкал?
  2. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    ну в первом коде вы никакую Ссылку не меняли - вы переписали РегистСведений -не? Т.е элемент Спр.ФизЛица - Иванов Иван Иванович записан в РС как Петров Иваниванович
  3. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    329
    Симпатии:
    23
    Баллы:
    29
    но я же не могу менять ссылку вручную. она должна изменяться при изменении участвующих в её формировании полей, так ведь? т.е. мне по-идее надо сначала сменить фамилию, имя или очтество в РС, а затем перезаписать объект справочника, который использует ссылку из РС? Тогда после записи объекта у меня должна измениться и ссылка...
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Иванов Иван Иванович в вашем случае - это элемент справочника ФизическиеЛица, ссылка представлена в виде наименования.
    Необходимо у элемента справочника сменить наименование.
    Последнее редактирование: 13 окт 2015
    bajiepka нравится это.
  5. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    с точностью до наоборот. Вы по ссылке получаете спрОбъект, у него меняете реквизиты, сохраняете его, а потом только меняете записи РС. Не объект спр использует ссылку РС, а РС хранит ссылку на элемент справочника.
    bajiepka нравится это.
  6. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    329
    Симпатии:
    23
    Баллы:
    29
    ок, а последнйи вопрос. Если у меня на форме есть табличная часть. Это реквизит обработки, т.е. объект.Товары. И после изменений мне надо для конкретной строки поменять существующее значение. В отладчике видно, что физ лицо поменялось, а в табчасти так и остаётся старое значение? Это проблема обновления таблицы?
  7. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Да, нужно обновить таблицу.
  8. TopicStarter Overlay
    bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    329
    Симпатии:
    23
    Баллы:
    29
    Обновляю на клиенте
    Элементы.Товары.Обновить();
    Вот так что ли?
    на сервере меняю физлицо в строке этой таблицы. когда на сервере - всё хорошо. потом возвращаюсь на клиент, смотрю в отладчике Объект.Товары, а там старое физлицо
  9. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Можно и так :)

Поделиться этой страницей