Имя: Пароль:
1C
1С v8
Вопрос про восстановление последовательности...
,
0 mikecool
 
24.08.11
15:43
Собираюсь рисовать свою обработку по восстановлению последовательностей.
посмотрел типовую про восстановлению посл-ти для усн
возник вопрос: раз для восстановления происходит выборка всех документов последовательности с границы последовательности, то нафига тогда хранятся данные о документах в самой последовательности?
может их очищать дабы не плодить лишние данные в базе?
или я чего не досмотрел?
1 Axel2009
 
24.08.11
15:44
(0) а границу двигать будешь по каким данным? каждый раз анализировать всю БД?
2 mikecool
 
24.08.11
15:45
(1) да также, как и в  усн
   Результат = ОбработатьДвижения(ТаблицаДокументов,ПоследовательностьДляРегистрации.СоздатьНаборЗаписей());
   Если Результат.Ошибка тогда
       ОбщегоНазначения.СообщитьОбОшибке("Обнаружена ошибка при проведении документа """+Результат.ДокументОшибки+""".
       | Граница последовательности налогового учета по УСН установлена на "+Строка(ПериодГраницы)+"("+Строка(ДокументГраницы)+")",,"Восстановление последовательности по налоговому учету УСН");
       ПоследовательностьДляРегистрации.УстановитьГраницу(Новый МоментВремени(ПериодГраницы,ДокументГраницы),Новый Структура("Организация",Организация));
   Иначе
       Состояние("Восстановление последовательности документов по налоговому учету УСН успешно завершено.");
       ПоследовательностьДляРегистрации.УстановитьГраницу(Новый МоментВремени(ПериодГраницы,ДокументГраницы),Новый Структура("Организация",Организация));
   КонецЕсли;
провелся док без ошибок - установил на него границу
3 Axel2009
 
24.08.11
15:45
(1)+ этих данных порядка на 2 меньше, чем данных в регистрах и самом документе
4 mikecool
 
24.08.11
15:46
(3) ясен пень, но 180 тыщ записей - нафига их хранить?
может проще чистить
5 Axel2009
 
24.08.11
15:47
(2) рисовал восстановление последовательности по каждой номенклатуре/складу. в последовательности хранятся только нужные ссылки на документы по данному набору измерений. соответственно считывал следующую запись и устанавливал границу.
6 mikecool
 
24.08.11
15:47
(5) нужные - те, которые нужно провести?
7 Axel2009
 
24.08.11
15:48
(6) нужные - те которые участвуют в последовательности для данного конкретного измерения
8 mikecool
 
24.08.11
15:48
(7) хорошо, это так
а что происходит с записями последовательности при восстановлении? они удаляются?
9 mikecool
 
24.08.11
15:49
+8 или хранятся на случай, если она откатится?
10 Axel2009
 
24.08.11
15:49
(8) нет, все записи хранятся. ведь границу могут подвинуть назад при проведении задним числом.
11 Axel2009
 
24.08.11
15:50
(10)+а если записей не будет, то и граница не сдвинется назад. восстанавливать будет нечего
12 mikecool
 
24.08.11
15:51
(10) вот и печаль в моих глазах
разрабы типовых почему то не пользуются этими данными, что меня и смущает
(11) оО, разве? надо проверить будет
13 Axel2009
 
24.08.11
15:54
(12) точнее так. у тебя 3 документа
поступление
перемещение
реализация.
последовательность восстановлена
удалили записи про поступление и перемещение.
теперь вдруг заходим в поступление и меняем количество +1.
запись в последовательности появится и граница установится.
однако записи по перемещению нету, откуда будет взята информация, что нужно провести перемещение? в последовательности только поступление и реализация.
14 mikecool
 
24.08.11
15:56
(13) да как откуда? запросом выбираются все документы последовательности от даты границы и вперед
так разрабы предлагают
15 Hipernate
 
24.08.11
15:56
Наднях сделал регламентное задание и каждую ночь восстанавливается основная последовательность документов БП2.0.. каждое утро актуальные данные, прощай неверные курсовые разницы, и незачтенные авансы
16 Axel2009
 
24.08.11
15:57
(14) через объединить все?
17 mikecool
 
24.08.11
15:58
(16) ага
18 mikecool
 
24.08.11
15:58
типа так

   Для каждого Документ Из ВидыДокументовПоследовательности Цикл
       Если не ПустаяСтрока(ТекстЗапроса) Тогда
           ТекстЗапроса = ТекстЗапроса + Символы.ПС+ "Объединить Все"+Символы.ПС;
       КонецЕсли;
       Если Документ.Реквизиты.Найти("ДатаОплаты")= Неопределено тогда
           ЗаписьПериода = "Дата";
       Иначе
           Если СпособОпределения=Перечисления.СпособыОпределенияВремениПроведенияПлатежногоДокумента.ПоВремениРегистрацииДокумента Тогда
               ЗаписьПериода = "ВЫБОР КОГДА Дата = ДатаОплаты ТОГДА Дата ИНАЧЕ КонецПериода(ДатаОплаты, День) КОНЕЦ";
           Иначе
               ЗаписьПериода = "КонецПериода(ДатаОплаты, День) ";
           КонецЕсли;
       КонецЕсли;    
       ТекстЗапроса = ТекстЗапроса +
           "ВЫБРАТЬ
          | Ссылка,
          | Дата,
          | "+ЗаписьПериода+"  как ПериодРегистрации
          |
          |ИЗ
          |    Документ."+Документ.Имя+" КАК ДокументПоследовательности
          |
          |ГДЕ
          |    "+ЗаписьПериода+" МЕЖДУ &НачалоПериода И &КонецПериода И
          |    (ДокументПоследовательности.Проведен = Истина) И
          |    (ДокументПоследовательности.Организация = &Организация)
          |";
   КонецЦикла;

19 Axel2009
 
24.08.11
15:59
(17) для меня это равнозначно в запросе сделать выборку
номенклатура.ссылка как номенклатура..
20 Axel2009
 
24.08.11
16:00
(18) здрасьте тормоза, до свидания индексы? ну разрабы тоже не идеальны.
21 mikecool
 
24.08.11
16:00
(20) а че с индексами не так?
22 Axel2009
 
24.08.11
16:01
(21) ну индекс по полям дата и организация быть не может в рамках 1с. а в последовательности индекс стоит составной из период+измерения все
23 mikecool
 
24.08.11
16:04
(22) имхо, при нормальном восстановлении последовательность не должна особо скатываться - кажется мне - месяца на 2 максимум назад
так что выборкой по индексу тут можно пренебречь
ибо производиться будет разово при старте задания
24 Axel2009
 
24.08.11
16:09
(22) хотя неправильно. если поставить индекс с доп упорядочиванием, создастся индекс реквизит+дата+ссылка.
только по организации такого нигде не видел.

в целом да, если тебе нужна последовательность только по организации, тогда можешь не писать записи в таблицу последовательности, только в границу последовательности.

скорее всего так сделано в силу того, чтобы не блочить таблицу последовательности в автоматических блокировках при записи.
25 mikecool
 
24.08.11
16:15
если я правильно понял - в случае использования метода из (18) можно записи последовательностей удалять нафик?
26 Axel2009
 
24.08.11
16:15
(24)+
возможно это было сделано, чтобы не заморачиваться с регистрацией в последовательности при добавлении новых документов в последовательность..
27 Axel2009
 
24.08.11
16:17
(25) их можно изначально не хранить и не записывать..
28 mikecool
 
24.08.11
16:24
(27) а что влияет в настройках на это?
29 mikecool
 
24.08.11
16:25
+28 в пофигураторе не нашел ничего (
30 Axel2009
 
24.08.11
16:25
(28) мм не понял вопроса..
31 mikecool
 
24.08.11
16:26
(30) "их можно изначально не хранить и не записывать.." каким образом? система же их автоматом пишет или нет?
32 Axel2009
 
24.08.11
16:29
(31) запись в них такая же как и движения в регистре..
создатьнаборзаписей()
новая строка
записать()
33 Axel2009
 
24.08.11
16:30
(32)+ в конфигураторе скорее всего в подписках есть. глобальный поиск по имени последовательности запускал?
34 mikecool
 
24.08.11
16:31
(33) не, еще нет, спс за наводку ))
35 mikecool
 
24.08.11
16:31
блин, отбор по Периоду нельзя сделать ))
придется запрос кружить с регистратором
36 Axel2009
 
24.08.11
16:36
(35) где отбор по периоду??
37 mikecool
 
24.08.11
16:40
(36) в наборе записей последовательности
доступен только регистратор
38 Axel2009
 
24.08.11
16:49
(37) в запросе?
39 mikecool
 
24.08.11
17:03
(38) не, в доступных полях для отбора
40 Axel2009
 
24.08.11
17:05
(39) для какого метода? там я так понял только измерение можно указать. а не регистратор или период.. не?
41 mikecool
 
24.08.11
17:08
да хотел нахрапом
Набор = Последовательности[ЭлементПоследовательность.Значение].СоздатьНаборЗаписей();
Набор.Отбор.Период.ВидСравнения = ВидСравнения.МеньшеИлиРавно;
Набор.Отбор.Период.Установить(ПоДату, Истина);
а в отладке в отборе есть только поле Регистратор
42 Axel2009
 
24.08.11
17:17
(41) а в наборе записей =) ну дак он же подчинен регистратору =))) РН так не напишешь ведь тоже