Имя: Пароль:
1C
1С v8
Проблемка при создании регистра сведений программно
🠗 (Волшебник 30.11.2017 09:37)
,
0 DiFas
 
30.11.17
09:19
Всем привет. Создаю обработку. Прошу помощи или подсказку: есть две одинаковые формы(https://yadi.sk/i/uSM7mngE3QBJhk), которых вводятся фио, адрес и тд. Вопрос заключается в том, что когда создаю пользователей("аб" и "бв", например), у меня не записывается адрес и паспортные данные первого пользователя, т.е. "аб"(https://yadi.sk/i/59kdthxO3QBJs4) + ко всему при создании адреса пользователей стираются все адреса других людей(это копия базы). Коды прилагаются:

Функция СоздатьКонтактнаяИнформацияФизЛица(НовыйФизЛицо);
    
    Если ФлажокСобственник0 Тогда
        НовыйКИФизЛицо = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
        НовыйКИФизЛицо.Прочитать();
        ЗаписьКонтакта = НовыйКИФизЛицо.Добавить();
        ЗаписьКонтакта.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
        ЗаписьКонтакта.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресФизЛица;
        ЗаписьКонтакта.Объект = НовыйФизЛицо.Ссылка;
        ЗаписьКонтакта.Представление = ЭлементыФормы.АдресПоле0.Значение;
        НовыйКИФизЛицо.Записывать = Истина;
        //Попытка
        НовыйКИФизЛицо.Записать();
        //Исключение
        //КонецПопытки;
    КонецЕсли;
    
    Если ФлажокСобственник1 Тогда
        НовыйКИФизЛицо = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
        НовыйКИФизЛицо.Прочитать();
        ЗаписьКонтакта = НовыйКИФизЛицо.Добавить();
        ЗаписьКонтакта.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
        ЗаписьКонтакта.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресФизЛица;
        ЗаписьКонтакта.Объект = НовыйФизЛицо.Ссылка;
        ЗаписьКонтакта.Представление = ЭлементыФормы.АдресПоле1.Значение;
        НовыйКИФизЛицо.Записывать = Истина;
        //Попытка
        НовыйКИФизЛицо.Записать();
        //Исключение
        //КонецПопытки;
    КонецЕсли;
КонецФункции

Если ФлажокСобственник0 Тогда
        НовыйДокФизЛицо = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей();
        НовыйДокФизЛицо.Прочитать();
        НовыйДокФизЛицо.Отбор.Период.Значение = ТекущаяДата();
        ЗаписьПаспорта = НовыйДокФизЛицо.Добавить();
        ЗаписьПаспорта.Период = ТекущаяДата();
        ЗаписьПаспорта.ФизЛицо = НовыйФизЛицо.Ссылка;
        ЗаписьПаспорта.ДокументВид = ЭлементыФормы.ВидДокументаПоле0.Значение;
        ЗаписьПаспорта.ДокументСерия = ЭлементыФормы.СерияПоле0.Значение;
        ЗаписьПаспорта.ДокументНомер = ЭлементыФормы.НомерПоле0.Значение;
        ЗаписьПаспорта.ДокументДатаВыдачи = ЭлементыФормы.ДатаВыдачиПоле0.Значение;
        ЗаписьПаспорта.ДокументКемВыдан = ЭлементыФормы.КемВыданПоле0.Значение;
        НовыйДокФизЛицо.Записывать = Истина;
        //Форма = НовыйДокФизЛицо.ПолучитьФорму("ФормаЗаписи");
        //ФОрма.Открыть();
        Попытка
        НовыйДокФизЛицо.Записать();
        Исключение
        КонецПопытки;
    КонецЕсли;
    
    Если ФлажокСобственник1 Тогда
        НовыйДокФизЛицо = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей();
        НовыйДокФизЛицо.Прочитать();
        НовыйДокФизЛицо.Отбор.Период.Значение = ТекущаяДата();
        ЗаписьПаспорта = НовыйДокФизЛицо.Добавить();
        ЗаписьПаспорта.Период = ТекущаяДата();
        ЗаписьПаспорта.ФизЛицо = НовыйФизЛицо.Ссылка;
        ЗаписьПаспорта.ДокументВид = ЭлементыФормы.ВидДокументаПоле1.Значение;
        ЗаписьПаспорта.ДокументСерия = ЭлементыФормы.СерияПоле1.Значение;
        ЗаписьПаспорта.ДокументНомер = ЭлементыФормы.НомерПоле1.Значение;
        ЗаписьПаспорта.ДокументДатаВыдачи = ЭлементыФормы.ДатаВыдачиПоле1.Значение;
        ЗаписьПаспорта.ДокументКемВыдан = ЭлементыФормы.КемВыданПоле1.Значение;
        НовыйДокФизЛицо.Записывать = Истина;
        Попытка
        НовыйДокФизЛицо.Записать();
          Исключение
        КонецПопытки;
    КонецЕсли;
КонецФункции
1 Волшебник
 
модератор
30.11.17
09:20
Используй МенеджерЗаписи или открой для себя Отбор
2 zvial
 
30.11.17
09:23
У вас платят за количество строк?
3 DiFas
 
30.11.17
09:25
(1) С этого места поподробнее, пожалуйста)
4 Волшебник
 
модератор
30.11.17
09:26
(3) В Синтакс-помощнике всё есть
5 Numerus Mikhail
 
30.11.17
09:30
(3) Сначала отбор, потом прочитать
6 DiFas
 
30.11.17
09:32
(5) (4) попробую покапаться, позже выложу ответ
7 Serg_1960
 
30.11.17
09:39
"Проблемка при создании" - это не "проблемка", а серьёзная проблема... при освоении базовых понятий работы с регистрами.

Просто запомни: читать(писать,удалять) набор записей - только после установки отбора.

И ещё важно всегда помнить :)
Как удалить ВСЕ записи регистра?

РегистрыСведений.ТвойРегистр.СоздатьНаборЗаписей().Записать();
8 DiFas
 
30.11.17
09:54
(7) спасибо)
9 Волшебник
 
модератор
30.11.17
13:01
(7) Кстати, после установки отбора надо проверять, установился ли он. Например, могут типы не совпадать, а платформа ничего не скажет.
10 DiFas
 
30.11.17
15:16
(7) Такая штукенция будет очищать весь регистр только если твой код никаких данных не несет.
11 DiFas
 
30.11.17
15:19
В общем, как и обещал выложить решение (кому интересно). Сделал через СоздатьМенеджерЗаписей, а также СписокЗначений.
Функция СоздатьФизЛицо()
КонтактныеДанные = Новый СписокЗначений;
ПаспортныеДанные = Новый СписокЗначений;

Если ФлажокСобственник0 Тогда
    НовыйФизЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент();
    НовыйФизЛицо.Наименование = ЭлементыФормы.ФамилияПоле0.Значение + " " +
                                    ЭлементыФормы.ИмяПоле0.Значение + " " +
                                ЭлементыФормы.ОтчествоПоле0.Значение;
    НовыйФизЛицо.ДатаРождения = ЭлементыФормы.ДатаРожденияПоле0.Значение;
    НовыйФизЛицо.Записать();

    КонтактныеДанные.Очистить();
    КонтактныеДанные.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес,"Тип");
    КонтактныеДанные.Добавить(Справочники.ВидыКонтактнойИнформации.ЮрАдресФизЛица,"Вид");
    КонтактныеДанные.Добавить(НовыйФизЛицо.Ссылка,"Ссылка");
    КонтактныеДанные.Добавить(ЭлементыФормы.АдресПоле0.Значение,"Представление");
    
    ПаспортныеДанные.Очистить();
    ПаспортныеДанные.Добавить(НовыйФизЛицо.Ссылка,"Ссылка");
    ПаспортныеДанные.Добавить(ЭлементыФормы.ВидДокументаПоле0.Значение,"ДокументВид");
    ПаспортныеДанные.Добавить(ЭлементыФормы.СерияПоле0.Значение,"ДокументСерия");
    ПаспортныеДанные.Добавить(ЭлементыФормы.НомерПоле0.Значение,"ДокументНомер");
    ПаспортныеДанные.Добавить(ЭлементыФормы.ДатаВыдачиПоле0.Значение,"ДокументДатаВыдачи");
    ПаспортныеДанные.Добавить(ЭлементыФормы.КемВыданПоле0.Значение,"ДокументКемВыдан");
                                                          
    СоздатьКонтактнаяИнформацияФизЛица(НовыйФизЛицо, КонтактныеДанные);
    СоздатьПаспортныеДанныеФизлица(НовыйФизЛицо, ПаспортныеДанные);
КонецЕсли;

Функция СоздатьПаспортныеДанныеФизлица(НовыйФизЛицо, ПаспортныеДанные);
            
        НовыйДокФизЛицо = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьМенеджерЗаписи();
        НовыйДокФизЛицо.Прочитать();
        НовыйДокФизЛицо.Период = ТекущаяДата();
        НовыйДокФизЛицо.ФизЛицо = ПаспортныеДанные.Получить(0).Значение;
        НовыйДокФизЛицо.ДокументВид = ПаспортныеДанные.Получить(1).Значение;
        НовыйДокФизЛицо.ДокументСерия = ПаспортныеДанные.Получить(2).Значение;
        НовыйДокФизЛицо.ДокументНомер = ПаспортныеДанные.Получить(3).Значение;
        НовыйДокФизЛицо.ДокументДатаВыдачи = ПаспортныеДанные.Получить(4).Значение;
        НовыйДокФизЛицо.ДокументКемВыдан = ПаспортныеДанные.Получить(5).Значение;
        Попытка
        НовыйДокФизЛицо.Записать();
        Исключение
        КонецПопытки;
    
КонецФункции

Функция СоздатьКонтактнаяИнформацияФизЛица(НовыйФизЛицо, КонтактныеДанные);
    
        НовыйКИФизЛицо = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
        НовыйКИФизЛицо.Прочитать();
        НовыйКИФизЛицо.Тип = КонтактныеДанные.Получить(0).Значение;
        НовыйКИФизЛицо.Вид = КонтактныеДанные.Получить(1).Значение;
        НовыйКИФизЛицо.Объект = КонтактныеДанные.Получить(2).Значение;
        НовыйКИФизЛицо.Представление = КонтактныеДанные.Получить(3).Значение;
        НовыйКИФизЛицо.Записать();
        
КонецФункции
12 DiFas
 
30.11.17
15:20
(11) ФУНКЦИИ ОБРЕЗАНЫ!