Имя: Пароль:
1C
1С v8
Запись в регистр сведений без отбора
0 Pr0gLamer
 
17.01.13
11:56
Доброе Утро!
Я делаю одну запись в регистр сведений без отбора - весь регистр затирается,остаётся одна запись,это нормальное поведение.Делаю в цикле 50 записей и вместо одной записи - у меня их 50.Почему каждая последующая запись не затирает предыдущую?
Вот код:
мНаборЗаписейФИО = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
   
   СпрФЛСВыборка = Справочники.ФизическиеЛица.Выбрать();
   Пока СпрФЛСВыборка.Следующий() Цикл
       СпрФЛССылка = СпрФЛСВыборка.Ссылка;
       ФИО = СпрФЛССылка.Наименование;
       Фамилия  = ОбщегоНазначения.ВыделитьСлово(ФИО);
       Имя      = ОбщегоНазначения.ВыделитьСлово(ФИО);
       Отчество = ОбщегоНазначения.ВыделитьСлово(ФИО);
       
       
       ЗаписьНабора = мНаборЗаписейФИО.Добавить();
       ЗаписьНабора.Период        = '19000101';
       ЗаписьНабора.Фамилия    = Фамилия;
       ЗаписьНабора.Имя        = Имя;
       ЗаписьНабора.Отчество    = Отчество;
       ЗаписьНабора.ФизЛицо = СпрФЛССылка;
       мНаборЗаписейФИО.Записать(Истина);
КонецЦикла;
1 mikecool
 
17.01.13
11:58
(0) потому что пишешь набор из 50 записей
нах тебе набор? юзай запись
2 Starhan
 
17.01.13
11:59
(0) все правлиьно работает

потому что ты каждый раз добавляешь запись в набор записей
мНаборЗаписейФИО

и записываешь этот набор записей.
3 Starhan
 
17.01.13
12:01
(0)мНаборЗаписейФИО = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();


если этот код поствить вначале цилка будет работаь как ты предполагаешь
4 Pr0gLamer
 
17.01.13
12:02
Я ж вроде пишу каждый раз набор из одной записи?Или это записи добавляются каждый раз пишется на одну больше и на последней итерации записываются уже все да?
5 Starhan
 
17.01.13
12:03
Я ж вроде пишу каждый раз набор из одной записи?
нет
Или это записи добавляются каждый раз пишется на одну больше и на последней итерации записываются уже все да?
да
6 Maxus43
 
17.01.13
12:03
(3) без отбора не будет же.
Записать(Ложь); юзай.
а вобще лучще (1). Менеджер
7 Pr0gLamer
 
17.01.13
12:04
спасибо,всё понял
8 Starhan
 
17.01.13
12:07
(6) как я понял ему нужна только 1 последняя запись.
Если внутри цикла создавать новый набор добавлять в него одну запись и записывать с признаком истина. То у конце будет одна запись.


Я имею ввиду то что думает он было бы если бы код

мНаборЗаписейФИО = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();

был внутри цикла.

А так он накапливает записи.
9 Starhan
 
17.01.13
12:08
простите за отсутствие запятых :)
10 ptiz
 
17.01.13
12:08
Если установлен отбор по всем измерениям - запись в таком наборе может быть только 1.
Если хотя бы по одному измерению отбора нет - записей может быть сколько угодно, но отличающихся значениям в измерении, по которому не установлен отбор.
11 Maxus43
 
17.01.13
12:10
ЗаписьНабора.Период        = '19000101' - тоже зачет.
(8) а я уже не совем понимаю автора что-то)
12 Reset
 
17.01.13
12:14
(11) Это запись даты литералом. Описано в СП :)
13 Maxus43
 
17.01.13
12:17
(12) всегда так делал ДАТАВРЕМЯ(2005, 01, 01) :)
14 Pr0gLamer
 
17.01.13
12:17
(11) в типовой в справочнике физ лиц с этой датой ФИО записывается
15 Reset
 
17.01.13
12:19
(13) Это если в запросе.

В языке пишут обычно Дата("19000101")
хотя можно просто '19000101'

Ведь мы пишем Количество=70
а не Количество=Число("70")
:)
16 Pr0gLamer
 
17.01.13
12:22
я понимаю,но только учусь,а в типовой ЗУП в справочнике Физические лица делается так
   // запись в регистр ФИО
   Если мНаборЗаписейФИО.Количество() = 0 Тогда
       ЗаписьНабора = мНаборЗаписейФИО.Добавить();
       ЗаписьНабора.Период        = '19000101';
       ЗаписьНабора.Фамилия    = Фамилия;
       ЗаписьНабора.Имя        = Имя;
       ЗаписьНабора.Отчество    = Отчество;
   КонецЕсли;
   
   Если мНаборЗаписейФИО.Количество() > 0 И
       ЗначениеЗаполнено(мНаборЗаписейФИО[0].Период) Тогда
       мНаборЗаписейФИО[0].Физлицо = Ссылка;
       
       мНаборЗаписейФИО.Отбор.Физлицо.Использование    = Истина;
       мНаборЗаписейФИО.Отбор.Физлицо.Значение            = мНаборЗаписейФИО[0].Физлицо;
       мНаборЗаписейФИО.Отбор.Период.Использование        = Истина;
       мНаборЗаписейФИО.Отбор.Период.Значение            = мНаборЗаписейФИО[0].Период;
       мНаборЗаписейФИО.Записать(Истина);
   КонецЕсли;
17 Maxus43
 
17.01.13
12:23
(16) да правильно делаешь, это я не выспался
18 Pr0gLamer
 
17.01.13
12:24
а такой вопрос,если я не заполню какое-то поле набора,допустим,Период,оно возьмётся из прочитанного набора или станет пустым?
19 Maxus43
 
17.01.13
12:24
Так, только щас дошёл до меня сабж. ответ (5) :)
20 байт
 
17.01.13
12:25
(0) тебе нужно записать только 50-ую запись судя по вопросу?
21 Pr0gLamer
 
17.01.13
12:27
мне нужно изменить фамилию и имя,а период оставить как был.Так вот если я его не буду заполнять при записи,он у меня останется прежним или запишется пустота?
22 Maxus43
 
17.01.13
12:28
(21) в периодических регистрах пустоты в периоде быть не может. Если установлен отбор - оттуда возьём, и наче не запишешь просто
23 байт
 
17.01.13
12:29
(21) тогда тебе нужно сначала отобрать нужную запись и перезаписать с новыми параметрами.
24 Pr0gLamer
 
17.01.13
12:29
вроде ясно,спасибо
Основная теорема систематики: Новые системы плодят новые проблемы.