Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Проблемка при создании регистра сведений программно

↓ [Волшебник, 30.11.17 - 09:37]
Проблемка при создании регистра сведений программно
Я
   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
Используй МенеджерЗаписи или открой для себя Отбор
   zvial
 
2 - 30.11.17 - 09:23
У вас платят за количество строк?
   DiFas
 
3 - 30.11.17 - 09:25
(1) С этого места поподробнее, пожалуйста)
   Волшебник
 
Модератор
4 - 30.11.17 - 09:26
(3) В Синтакс-помощнике всё есть
   Numerus Mikhail
 
5 - 30.11.17 - 09:30
(3) Сначала отбор, потом прочитать
   DiFas
 
6 - 30.11.17 - 09:32
(5) (4) попробую покапаться, позже выложу ответ
   Serg_1960
 
7 - 30.11.17 - 09:39
"Проблемка при создании" - это не "проблемка", а серьёзная проблема... при освоении базовых понятий работы с регистрами.

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

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

РегистрыСведений.ТвойРегистр.СоздатьНаборЗаписей().Записать();
   DiFas
 
8 - 30.11.17 - 09:54
(7) спасибо)
   Волшебник
 
Модератор
9 - 30.11.17 - 13:01
(7) Кстати, после установки отбора надо проверять, установился ли он. Например, могут типы не совпадать, а платформа ничего не скажет.
   DiFas
 
10 - 30.11.17 - 15:16
(7) Такая штукенция будет очищать весь регистр только если твой код никаких данных не несет.
 
 Рекламное место пустует
   DiFas
 
11 - 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).Значение;
        НовыйКИФизЛицо.Записать();
        
КонецФункции
   DiFas
 
12 - 30.11.17 - 15:20
(11) ФУНКЦИИ ОБРЕЗАНЫ!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует