|
Независимый периодический регистр сведений, при обновлении удаляются записи | ☑ | ||
---|---|---|---|---|
0
Benevalete
09.08.16
✎
08:29
|
Самописная конфигурация, помогите найти недочет в коде(код не мой)
Выборка - это ком-объект из другой информационной базы Рег = РегистрыСведений.СотрудникиОрганизации.СоздатьНаборЗаписей(); ДатаИзВыборки = '00010101'; ПоследняяДата = '00010101'; ПоследнийТН = "00000"; Если Выборка.Количество() <> 0 Тогда Пока Выборка.Следующий() Цикл Если ДатаИзВыборки <> Выборка.ПериодРег Тогда Если ДатаИзВыборки <> '00010101' Тогда Рег.Записать(); //Зачем записывать тут - чтобы не записывать когда еще нет ни одной записи? КонецЕсли; ДатаИзВыборки = Выборка.ПериодРег; Рег = РегистрыСведений.СотрудникиОрганизации.СоздатьНаборЗаписей(); Рег.Отбор.Период.Установить(ДатаИзВыборки); КонецЕсли; Зап = Рег.Добавить(); Зап.Сотрудник = Справочники.Пропуски.НайтиПоКоду(Выборка.ТабельныйНомер); ПоследняяДата = ДатаИзВыборки; ПоследнийТН = Справочники.Пропуски.НайтиПоКоду(Выборка.ТабельныйНомер); Зап.Период = ДатаИзВыборки; КонецЦикла; Попытка Рег.Записать(); Исключение Сообщить("Ошибка " + Выборка.ТабельныйНомер + " Дата " + ДатаИзВыборки); КонецПопытки; КонецЕсли; http://prnt.sc/c3dn85 скриншот: при обновление с 1.07 по любое число пропадает запись, как будто затирается, если же обновлять с 30.06 по любое число, то запись остается Выборка.ПериодРег - это дата кадрового события, для записи которая пропадает это 01.07.2016 00:00:01 |
|||
1
DrZombi
гуру
09.08.16
✎
08:34
|
(0) Просветись...
Для удаления записи нужны всего две команды 1. Рег = РегистрыСведений.СотрудникиОрганизации.СоздатьНаборЗаписей(); 2. Рег.Записать();//Зачем записывать тут - чтобы не записывать когда еще нет ни одной записи? Для того, что бы удалить не все, а только по какому либо измерению, то в наборе организуют отбор, а потом вызывают Записать. ... Если после отбора вызвать команду "Прочитать", то при вызове команды "Записать", Регистр сохранит свои записи :) |
|||
2
DrZombi
гуру
09.08.16
✎
08:35
|
(1) >>>> Для удаления записи нужны всего две команды
Удаляются ВСЕ записи :) |
|||
3
DrZombi
гуру
09.08.16
✎
08:36
|
+(1) Претензия к 1С, они чет поленились организовать нормальную команду "Удалить". Решили сократить кодомарательство :)
|
|||
4
Benevalete
09.08.16
✎
08:50
|
(1) (2) Да, я знаю, подобный код очищает регистр полностью, тк записывается пустой набор записей (3) В 1С есть нормальная команда удалить, для нее также есть отбор, подробно расписана в синтакс помошнике
|
|||
5
Горогуля
09.08.16
✎
08:51
|
(4) поздравляю, чо
|
|||
6
Benevalete
09.08.16
✎
08:52
|
(1) То есть правильно будет как-то так:
Рег = РегистрыСведений.СотрудникиОрганизации.СоздатьНаборЗаписей(); ДатаИзВыборки = '00010101'; ПоследняяДата = '00010101'; ПоследнийТН = "00000"; Если Выборка.Количество() <> 0 Тогда Пока Выборка.Следующий() Цикл Если ДатаИзВыборки <> Выборка.ПериодРег Тогда Если ДатаИзВыборки <> '00010101' Тогда Рег.Отбор.Период.Установить(Выборка.ПериодРег) Рег.прочитать() Рег.Записать(); КонецЕсли; ДатаИзВыборки = Выборка.ПериодРег; Рег = РегистрыСведений.СотрудникиОрганизации.СоздатьНаборЗаписей(); Рег.Отбор.Период.Установить(ДатаИзВыборки); КонецЕсли; Зап = Рег.Добавить(); Зап.Сотрудник = Справочники.Пропуски.НайтиПоКоду(Выборка.ТабельныйНомер); ПоследняяДата = ДатаИзВыборки; ПоследнийТН = Справочники.Пропуски.НайтиПоКоду(Выборка.ТабельныйНомер); Зап.Период = ДатаИзВыборки; КонецЦикла; Попытка Рег.Записать(); Исключение Сообщить("Ошибка " + Выборка.ТабельныйНомер + " Дата " + ДатаИзВыборки); КонецПопытки; КонецЕсли; |
|||
7
Benevalete
09.08.16
✎
08:53
|
(5) Если сказать больше нечего, не лезь со своим "чо" )
|
|||
8
Горогуля
09.08.16
✎
08:54
|
(7) а ещё я чавкаю, когда ем. чо?
|
|||
9
DDwe
09.08.16
✎
08:55
|
Не ссорьтесь дамы и господа.
|
|||
10
Горогуля
09.08.16
✎
08:57
|
(9) зпт ;)
|
|||
11
DrZombi
гуру
09.08.16
✎
09:02
|
(4) Знаешь, что тогда спрашивать? Учись разбираться в своем коде. У тебя Только удаляет записи :)
|
|||
12
DrZombi
гуру
09.08.16
✎
09:02
|
(6) Не знаю... тебе решать Как правильно :)
|
|||
13
DrZombi
гуру
09.08.16
✎
09:03
|
(4) >> В 1С есть нормальная команда удалить, для нее также есть отбор, подробно расписана в синтакс помошнике
Ты не путай, Удалить из списка отобранных записей. И Удалить запись в Регистре непосредственно :) |
|||
14
DrZombi
гуру
09.08.16
✎
09:05
|
+(6) ... Ты чет похоже плохо внял тексту в (1)... Еще раз прочитай, и думай :)
Понафтыкал везде "Читать". :) |
|||
15
Benevalete
09.08.16
✎
09:39
|
(11) В своем коде разобраться проблем нет, а вот чужой уже другое дело, тем более я новичок :)
|
|||
16
Benevalete
09.08.16
✎
09:41
|
(14) Буду очень признательна, если простым языком объясните значение метода прочитать(). Отбор - накладывает отбор, записать() сохраняет записи, а для чего метод прочитать?
|
|||
17
DDwe
09.08.16
✎
09:46
|
(10) специально "," )))
|
|||
18
DrZombi
гуру
09.08.16
✎
09:56
|
(16) "Сперва была тьма"...
1. СоздатьНаборЗаписей - Объявляешь переменную, что будешь работать с НАБОРОМ записей. 2. У набора есть отбор, посмотри в Синтаксис помощнике. 3. Есть команда "Прочитать" - Она как бы считывает записи из Регистра и хранит у себя в памяти или где то там :) 4. Записать - Если ты выполнил команду "Прочитать", то команда "Записать" поместит прочитанный список обратно в Регистр. 5. Следовательно "Удалить" записи делается так же просто, как прочитать. Если ты нечего не читал, то в Регистр поместится пустой список, следовательно, если там были записи, то они удалятся. 6. Пользуйся Гуглом, большинство твоих вопросов, уже обсосано аж с 2009 года :) |
|||
19
Benevalete
09.08.16
✎
10:47
|
(18) Спасибо, тьма начала рассеиваться :)
|
|||
20
hhhh
09.08.16
✎
10:57
|
(19) да,
Прочитать() и тут же Записать() - это дикость. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |