Имя: Пароль:
1C
1С v8
При записи на сервере у объекта не сохраняются данные
0 Eeelena
 
16.06.16
15:57
Здравствуйте. Столкнулась со следующей ситуацией, в документе заполняю реквизиты объекта, но они не сохраняются, в отладчике в процедуре при записи на сервере в реквизитах объекта старые значения, в чем может быть причина?
1 Happy Bear
 
16.06.16
15:58
А объект точно записываешь?
2 Eeelena
 
16.06.16
16:00
(1) да
3 Euguln
 
16.06.16
16:00
Элементы связаны с реквизитами формы, а не объекта.
4 saaken
 
16.06.16
16:00
не те реквизиты заполняешь
5 Eeelena
 
16.06.16
16:01
(3) нет, это реквизиты объекта (4) точно те реквизиты, в отладчике отображаются их старые значения, а не только что введенные
6 Euguln
 
16.06.16
16:02
(5) Где смотришь? У Объект или ТекущийОбъект?
7 Eeelena
 
16.06.16
16:04
(6) и там, и там смотрела и у того и у другого старые значения. Такого никогда не было поэтому я даже без понятия в чем может быть причина.
8 Euguln
 
16.06.16
16:05
(7) В обработчике ПриИзменении реквизиты меняются?
9 Happy Bear
 
16.06.16
16:05
код заполнения и записи покажи
10 Eeelena
 
16.06.16
16:07
какой то очень странный глюк
11 Eeelena
 
16.06.16
16:11
(8) нет
12 Eeelena
 
16.06.16
16:11
(9)
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    СтруктураЗаписи = Новый Структура("Партнер, Агентство, КонтактноеЛицо, Агент");
    
    ЗаписатьИнформациюОПартнереСервер(СтруктураЗаписи);
    
    ЗаполнитьЗначенияСвойств(Объект,СтруктураЗаписи);
    
    
КонецПроцедуры

&НаСервере
Процедура ЗаписатьИнформациюОПартнереСервер(СтруктураЗаписи)
    
    //П=РеквизитФормыВЗначение("Объект");
    СтруктураДляЗаписиНового = Новый Структура;
    СтруктураДляЗаписиНового.Вставить("CRM_ВидПартнера",Перечисления.CRM_ВидПартнера.ЧастноеЛицо);
    СтруктураДляЗаписиНового.Вставить("Клиент", Истина);    
    СтруктураДляЗаписиНового.Вставить("CRM_Имя",Объект.Имя);
    СтруктураДляЗаписиНового.Вставить("CRM_ИНН",);
    СтруктураДляЗаписиНового.Вставить("CRM_НапоминатьОДнеРождения",Истина);
    СтруктураДляЗаписиНового.Вставить("CRM_Отчество", Объект.Отчество);
    СтруктураДляЗаписиНового.Вставить("CRM_ТипОтношений", ?(Объект.УК_АгентствоНедвижимости, Справочники.CRM_ТипыОтношений.АгентствоНедвижимости, Справочники.CRM_ТипыОтношений.Покупатель));
    СтруктураДляЗаписиНового.Вставить("CRM_Фамилия", Объект.Фамилия);
    СтруктураДляЗаписиНового.Вставить("ДатаРегистрации",ТекущаяДата());
    СтруктураДляЗаписиНового.Вставить("ДатаРождения",Объект.ДатаРождения);
    СтруктураДляЗаписиНового.Вставить("Наименование", Объект.Фамилия+" "+Объект.Имя+" "+Объект.Отчество);
    СтруктураДляЗаписиНового.Вставить("ОсновнойМенеджер", Объект.Ответственный);
    СтруктураДляЗаписиНового.Вставить("Пол", Объект.Пол);
    СтруктураДляЗаписиНового.Вставить("Возраст",Объект.Возарст);
    
    
    Если Объект.К_АгентствоНедвижимости Тогда
        
        Если НЕ ЗначениеЗаполнено(Объект.Агентство) Тогда
            Сообщить("Не заполнено агентство!");
            Отказ = Истина;
            Возврат;
        КонецЕсли;
        
        ФИОКонтакта = Объект.Фамилия + " " + Объект.Имя + " " + Объект.Отчество;
        ФИОКонтакта = СокрЛП(ФИОКонтакта);
        
        ПоискКонтакта = Справочники.КонтактныеЛицаПартнеров.НайтиПоНаименованию(ФИОКонтакта,Истина,,Объект.Партнер);
        
        Если ПоискКонтакта.Пустая() Тогда
            
            НовыйКонтакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();
            НовыйКонтакт.Наименование = ФИОКонтакта;
            НовыйКонтакт.CRM_Имя = Объект.Имя;
            НовыйКонтакт.CRM_Отчество = Объект.Отчество;
            НовыйКонтакт.CRM_Фамилия = Объект.Фамилия;
            НовыйКонтакт.CRM_Состояние = Перечисления.CRM_Состояние.Работает;
            НовыйКонтакт.ДатаРождения = Объект.ДатаРождения;
            НовыйКонтакт.Пол = Объект.Пол;
            НовыйКонтакт.Владелец = Объект.Партнер;
            
            НовыйТелефон = НовыйКонтакт.КонтактнаяИнформация.Добавить();
            НовыйТелефон.CRM_ОсновнойДляСвязи = Истина;
            НовыйТелефон.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;
            НовыйТелефон.НомерТелефона = Объект.НомерТелефона;
            НовыйТелефон.Представление = Объект.НомерТелефона;
            НовыйТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
            
            НовыйАдрес = НовыйКонтакт.КонтактнаяИнформация.Добавить();
            НовыйАдрес.Вид = Справочники.ВидыКонтактнойИнформации.АдресПроживанияКонтактногоЛица;
            НовыйАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
            НовыйАдрес.Город = Объект.Город;
            ПредствалениеАдреса = Объект.Город+", "+Объект.Улица+", "+Объект.Дом+", "+Объект.Корпус+", "+Объект.Квартира;            
            НовыйАдрес.Представление = ПредствалениеАдреса;
            
            НовыйКонтакт.Записать();
            
            СтруктураЗаписи.Агент = НовыйКонтакт.Ссылка;
                            
            
        ИначеЕсли ЗначениеЗаполнено(ПоискКонтакта) Тогда
                        
            СтруктураЗаписи.Агент = ПоискКонтакта.Ссылка;
            
        КонецЕсли;
        
    Иначе//Прямой клиент    
    
        Если ЗначениеЗаполнено(Объект.Партнер) Тогда
            
            ОбъектПартнер = Объект.Партнер.ПолучитьОбъект();
            //18.05.2016 КЕС
            Для Каждого КлючИЗначение Из СтруктураДляЗаписиНового Цикл
                Сообщить(КлючИЗначение);
                Сообщить(ОбъектПартнер.CRM_Имя<>"");
                Если КлючИЗначение="CRM_Имя" И  ОбъектПартнер.CRM_Имя<>"" Тогда
                    
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="CRM_ИНН" И ОбъектПартнер.CRM_ИНН<>"" Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="CRM_Отчество" И  ОбъектПартнер.CRM_Отчество<>"" Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="CRM_Фамилия" И ОбъектПартнер.CRM_Фамилия<>"" Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="ДатаРегистрации" И  ОбъектПартнер.ДатаРегистрации<>Дата(1,1,1) Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="ДатаРождения" И  ОбъектПартнер.ДатаРождения<>Дата(1,1,1) Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="Наименование" И  ОбъектПартнер.Наименование<>"" Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="ОсновнойМенеджер" И ОбъектПартнер.ОсновнойМенеджер<>Справочники.Пользователи.ПустаяСсылка() Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="Пол" И  ОбъектПартнер.Пол<>Перечисления.ПолФизическогоЛица.ПустаяСсылка() Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                ИначеЕсли КлючИЗначение="Возраст" И  ОбъектПартнер.Возраст<>"" Тогда
                    СтруктураДляЗаписиНового.Удалить(КлючИЗначение);
                КонецЕсли;    
            КонецЦикла;


            ЗаполнитьЗначенияСвойств(ОбъектПартнер, СтруктураДляЗаписиНового);
            ОбъектПартнер.Записать();
            
            //поищем по номеру телефона
            НайденКонтакт = Oktell_Сервер.НайтиКонтактноеЛицоАбонента(Объект.Партнер, Объект.НомерТелефона);
            Если НайденКонтакт.Пустая() Тогда
                
                Контакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();
                ЗаполнитьЗначенияСвойств(Контакт,СтруктураДляЗаписиНового);
                Контакт.Владелец = Объект.Партнер.Ссылка;
                НовыйТелефон = Контакт.КонтактнаяИнформация.Добавить();
                НовыйТелефон.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;
                НовыйТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
                НовыйТелефон.НомерТелефона = Объект.НомерТелефона;
                НовыйТелефон.Представление = Объект.НомерТелефона;
                
                НовыйАдрес = Контакт.КонтактнаяИнформация.Добавить();
                НовыйАдрес.Вид = Справочники.ВидыКонтактнойИнформации.АдресПроживанияКонтактногоЛица;
                НовыйАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
                НовыйАдрес.Город = Объект.Город;
                ПредствалениеАдреса = Объект.Город+", "+Объект.Улица+", "+Объект.Дом+", "+Объект.Корпус+", "+Объект.Квартира;            
                НовыйАдрес.Представление = ПредствалениеАдреса;
                
                Контакт.Записать();
                                
                СтруктураЗаписи.КонтактноеЛицо = Контакт.Ссылка;
                
            Иначе
                
                Контакт = НайденКонтакт.ПолучитьОбъект();
                ЗаполнитьЗначенияСвойств(Контакт,СтруктураДляЗаписиНового);
                СтруктураЗаписи.КонтактноеЛицо = Контакт.Ссылка;
                
            КонецЕсли;
        Иначе
                            
            НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
            ЗаполнитьЗначенияСвойств(НовыйПартнер,СтруктураДляЗаписиНового);
            НовыйПартнер.Записать();
            
            Контакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();
            ЗаполнитьЗначенияСвойств(Контакт,СтруктураДляЗаписиНового);
            Контакт.Владелец = НовыйПартнер.Ссылка;
            
            НовыйТелефон = Контакт.КонтактнаяИнформация.Добавить();
            НовыйТелефон.Вид = Справочники.ВидыКонтактнойИнформации.МобильныйТелефонКонтактногоЛица;
            НовыйТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
            НовыйТелефон.НомерТелефона = Объект.НомерТелефона;
            НовыйТелефон.Представление = Объект.НомерТелефона;
            
            НовыйАдрес = Контакт.КонтактнаяИнформация.Добавить();
            НовыйАдрес.Вид = Справочники.ВидыКонтактнойИнформации.АдресПроживанияКонтактногоЛица;
            НовыйАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
            НовыйАдрес.Город = Объект.Город;
            ПредствалениеАдреса = Объект.Город+", "+Объект.Улица+", "+Объект.Дом+", "+Объект.Корпус+", "+Объект.Квартира;            
            НовыйАдрес.Представление = ПредствалениеАдреса;
            
            Контакт.Записать();
            
            СтруктураЗаписи.Партнер         = НовыйПартнер.Ссылка;
            СтруктураЗаписи.КонтактноеЛицо     = Контакт.Ссылка;
                
        КонецЕсли;
    КонецЕсли;
13 Fragster
 
гуру
16.06.16
16:13
во первых - менять надо перед записью, во вторых - менять надо ТекущийОбъект
14 hhhh
 
16.06.16
16:13
(12) при записи вызывается уже когда записано. Всё правильно у вас работает.
15 Eeelena
 
16.06.16
16:16
(13) (14) то есть как мне нужно было сделать?
16 Eeelena
 
16.06.16
16:24
Я добавляла этот код и в процедуру перед записью, ничего не изменилось (14)
17 Fragster
 
гуру
16.06.16
16:26
(16) -> (13)
18 Euguln
 
16.06.16
16:27
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    СтруктураЗаписи = Новый Структура("Партнер, Агентство, КонтактноеЛицо, Агент");
    
    ЗаписатьИнформациюОПартнереСервер(СтруктураЗаписи);
    
    ЗаполнитьЗначенияСвойств(ТекущийОбъект,СтруктураЗаписи);
    
    
КонецПроцедуры
19 Euguln
 
16.06.16
16:27
(18) + и ПередЗаписью
20 Eeelena
 
16.06.16
16:30
(19) спасибо, попробую
21 Eeelena
 
17.06.16
07:14
(19) это не помогло, в самом отладчике ТекущийОбъект берется со старыми реквизитами
22 Eeelena
 
17.06.16
07:44
(21) в тестовой базе тот же самый функционал отрабатывает нормально, а в другой в отладчике ТекущийОбъект и Объект ьерутся со старыми реквизитами.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший