![]() |
![]() |
![]() |
|
Исправить неверные движения в регистрах | ☑ | ||
---|---|---|---|---|
0
ildary
03.06.15
✎
16:42
|
Уважаемые специалисты, посоветуйте пожалуйста, как правильно исправить следующее:
В базе УТ11 создано много документов РТиУ с пустой датой оплаты, в результате регистр Расчеты с клиентами разбух до большого размера. Если просто сделать запись с перепроведением - то все проводится очень медленно. Существует ли способ ускорить это исправление? Например можно ли удалить программно все движения этого регистра с пустой датой, затем сделать сжатие базы и перезаписать дату с перепроведением? |
|||
1
разработчик 1с
03.06.15
✎
16:48
|
так закрой регистр, если разбух. зачем документы перепроводить
|
|||
2
Naumov
03.06.15
✎
16:49
|
можно просмотреть записи регистра и исправить где надо.
|
|||
3
ДенисЧ
03.06.15
✎
16:50
|
на нимфострате есть граната для обезъяны...
|
|||
4
ildary
03.06.15
✎
17:16
|
(1) а как его закрыть? хотя бы общими словами?
(2) то есть я могу сделать перебор записей регистра и напрямую их изменить? Я на самом деле семерочник и не уверен, что в 1с8 такое возможно (пока осваиваю букварь и до регистров не дошел). (3) я там безденежный, поэтому давно ничего не качаю оттуда. А все-таки можно ли обработкой перебрать записи регистра и автоматом их исправить? |
|||
5
ДенисЧ
03.06.15
✎
17:16
|
в 77 движения делают только документы (если лезьть прямо в таблицы).
О тсюда и пляши |
|||
6
ildary
03.06.15
✎
17:19
|
(5) в 7.7 понятно - бери и проводи, либо прямым запросом шуруй. А какие способы в восьмерке для оперативного исправления подобного есть? Перепроводить - так в час только 30 документов проводится, а их больше тысячи.
|
|||
7
Naumov
03.06.15
✎
17:20
|
(6) Смотри СП по регистру накопления, в частности про наборЗаписей
|
|||
8
ДенисЧ
03.06.15
✎
17:20
|
(6) набор = регистрыНакопления.товарыНаСкладах.СоздатьНаборЗаписей();
набор.Отбор.Регистратор.Установить()... |
|||
9
ildary
03.06.15
✎
17:24
|
(7) значит я могу перебрать записи регистра и изменить поле период?
(8) большое спасибо, а данный метод позволить менять поле Период у регистра? |
|||
10
ДенисЧ
03.06.15
✎
17:25
|
(9) да
|
|||
11
Naumov
03.06.15
✎
17:33
|
(9) Ты уверен, что период? Поле период у записи регистра пустым не может быть - не даст записать движения.
|
|||
12
ildary
03.06.15
✎
17:34
|
(10) спасибо за советы, но я обнаружил, что у РегистрНакопленияВыборка параметр Период - только для чтения...
|
|||
13
Naumov
03.06.15
✎
17:35
|
(12) Потому что есть разные объекты. Менять можно либо в МенеджереЗаписи, Либо в НабореЗаписей.
|
|||
14
ДенисЧ
03.06.15
✎
17:35
|
(12) У выборки - все поля для чтения
|
|||
15
разработчик 1с
03.06.15
✎
17:36
|
(12) может не надо тебе движения менять
|
|||
16
ildary
03.06.15
✎
17:42
|
(11) могу фотку записей регистра показать - когда увидел - сам был в шоке.
(13)+(14) спасибо, я понял, попробую (15) ок, а как тогда эту беду исправить? |
|||
17
разработчик 1с
03.06.15
✎
17:44
|
(16) ок, ты пишешь, что регистр "разбух до большого размера". как ты это понимаешь? что ты хочешь с этим сделать?
|
|||
18
ДенисЧ
03.06.15
✎
17:44
|
(16) а покажи...
|
|||
19
ildary
03.06.15
✎
17:46
|
(16) один регистр весит больше, чем вся прочая база в несколько раз (4Гб, все остальное тянет примерно на 400Мб), проведение реализации страшно тормозит (кстати и простое открытие реализации тоже - это может вызвать?). Думаю, что этого достаточно, чтобы попробовать исправить.
(17) момент, щас сварганю |
|||
20
разработчик 1с
03.06.15
✎
17:50
|
(19) в при открытии поставь замер производительности, посмотри, что так долго делается. не факт, что это из-за регистра.
можно свернуть регистр, есть всякие спец обработки. можно самому написать. на 1 января снимаешь остатки, заносишь их корректировкой. остальные все записи до 1 января через наборы удаляешь. смотри чтобы документы никто не перепроводил. |
|||
21
Naumov
03.06.15
✎
17:52
|
(20) Скорее всего состояние расчетов проверяется, если регистр не закрыт, то вполне возможно, что будет долго думать.
|
|||
22
ildary
03.06.15
✎
17:57
|
||||
23
ildary
03.06.15
✎
21:22
|
Сделал примерно так, но даже в этом случае каждая запись проходит от 50 секунд до 3 минут, можно ли тут что ускорить?
Док = Документы.РеализацияТоваровУслуг.Выбрать( ,,, "Дата Убыв" ); Пока Док.Следующий() Цикл Если ЗначениеЗаполнено( Док.ДатаПлатежа ) Тогда Продолжить; КонецЕсли; Сообщить( Док ); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "" + Док; Сообщение.Сообщить(); Набор = РегистрыНакопления.РасчетыСКлиентами.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить( Док.ПолучитьОбъект().Ссылка ); Набор.Прочитать(); БылоИзменение = Ложь; Для Каждого СтрокаНабора Из Набор Цикл Если Год( СтрокаНабора.Период ) <> 1 Тогда Продолжить; КонецЕсли; БылоИзменение = Истина; СтрокаНабора.Период = Док.Дата; КонецЦикла; Если БылоИзменение Тогда Набор.Записать(); КонецЕсли; КонецЦикла; |
|||
24
Naumov
03.06.15
✎
23:14
|
(23) Ну если записей в регистре на миллионов 100, то можно попробовать все одним набором в один прием записать
|
|||
25
Naumov
03.06.15
✎
23:16
|
Набор.Отбор.Регистратор.Установить( Док.ПолучитьОбъект().Ссылка );
Изменить на Набор.Отбор.Регистратор.Установить( Док.Ссылка ); |
|||
26
ildary
04.06.15
✎
05:07
|
(24) а как одним набором правильно получить все записи с регистратором, у которого дата пустая?
(25) спасибо за совет, по капле выдавливаю из себя семерочника. |
|||
27
ildary
04.06.15
✎
06:06
|
Может быстрее будет запомнить документы, у которых есть такие движения, потом удалить эти пустые движения, сжать базу и перепровести документы без этих движений заново? Будет ли такая операция быстрее?
|
|||
28
ildary
04.06.15
✎
07:06
|
+(27) нет, быстрее не будет - ползет с такой же скоростью.
|
|||
29
ildary
04.06.15
✎
07:13
|
Все, тема закрыта - для скоростной работы достаточно
совета в №17 из v8: Как очистить регистр накопления?! в начале выполнения сделать РегистрыНакопления.РасчетыСКлиентами.УстановитьИспользованиеИтогов( Ложь ); а после РегистрыНакопления.РасчетыСКлиентами.УстановитьИспользованиеИтогов( Истина ); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |