Имя: Пароль:
1C
1С v8
Набор записей регистра вытащить запросом
0 Beduin
 
30.08.14
12:43
Никак похоже? Или есть варианты.
1 PR
 
30.08.14
12:45
(0) Хрень какая-то.
2 Beduin
 
30.08.14
12:48
(1)
ВЫБРАТЬ
    РегистрацияИзменений.Узел,
    РегистрацияИзменений.НомерСообщения,
    РегистрацияИзменений.Регистратор,
    РегистрацияИзменений.Регистратор.Дата КАК Дата
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Изменения КАК РегистрацияИзменений
ГДЕ
    РегистрацияИзменений.Узел = &Узел
Мне нужно здесь набор записей получить, ссылку на него, чтобы с планом обмена работать
3 PR
 
30.08.14
12:52
(2) Что значит ссылка на набор записей?
Набор записей — это просто тупо набор записей.
4 shuhard
 
30.08.14
12:53
(2) ссылка у набора записей это сильнее Фауста (с)
5 Beduin
 
30.08.14
12:55
(4) В плане обмена регистрация идет набором записей. Не ссылкой, набор записей. Порция данных, неважно, есть ли в запросе таблицы уже готовые для этого.
6 PR
 
30.08.14
13:02
(5) Да. И че?
Читай набор записей, а в нем по номерам строк меняй только нужные строки.
7 Beduin
 
30.08.14
13:05
(6)
Долго работает.

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РегистрацияИзменений.Узел,
                   |    РегистрацияИзменений.НомерСообщения,
                   |    РегистрацияИзменений.Регистратор,
                   |    РегистрацияИзменений.Регистратор.Дата КАК Дата
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.Изменения КАК РегистрацияИзменений
                   |ГДЕ
                   |    РегистрацияИзменений.Узел = &Узел";
                   Запрос.УстановитьПараметр("Узел",ПланыОбмена.Хозрасчетный.НайтиПоКоду("Основной"));
                   Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        к = к+1;
        вввв = 999;
        //Данные = Выборка.Получить();
        //Если Данные.Отбор.Регистратор.Значение.Дата < '20130101' Тогда
        Если Выборка.Дата < '20130101' Тогда
            НаборЗаписей = Выборка.Регистратор.ПолучитьОбъект().Движения.Хозрасчетный;
            ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбмена.Хозрасчетный.НайтиПоКоду("Основной"),НаборЗаписей);
            //Прервать;
        КонецЕсли;
        Состояние(к);
    КонецЦикла;
8 RomanYS
 
30.08.14
13:06
Выборка.Регистратор.ПолучитьОбъект() в цикле - быстро не должно быть ))
9 Beduin
 
30.08.14
13:07
(8) Нужно как то ускорить)
Я же объект в запросе не могу получить.
10 КонецЦикла
 
30.08.14
13:10
Недоработали в этом месте также... ждем 9-ку
11 RomanYS
 
30.08.14
13:12
(9)
создал набор, установил отбор, прочитал (не уверен, что здесь надо)
наверное быстрее будет чем Док.Движения
12 RomanYS
 
30.08.14
13:13
в типовых есть стандартная обработка - регистрация изменений для обмена
13 Beduin
 
30.08.14
13:24
(12) Вот из типовой
        // осталось теперь все измененные данные получить и их поместить в дерево
        ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, УзелОбмена.НомерОтправленного + 1, МетаданныеДляОграничения);
        Пока ВыборкаИзменений.Следующий() Цикл
            
            // имененный элемент
            Данные = ВыборкаИзменений.Получить();
            
            // данные должны быть

Получение изменений, работает так же долго. Проверял)
14 RomanYS
 
30.08.14
13:29
Код из (7) работает (т.е. надо только ускорить)?
15 Beduin
 
30.08.14
13:33
(14) Да)
У меня задача из кучи баз сливать только проводки. Я сделал план обмена с типом на регистром бухгалтерии. Данные нужны с 2013 года. Чтобы не регистрировать по отдельности каждый решил зарегистрировать все, а потом не нужное удалить.
16 RomanYS
 
30.08.14
13:35
тогда

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей .Отбор.Регистратор.Установить(Выборка.Регистратор);

и убери поиск узла из цикла:
ПланыОбмена.Хозрасчетный.НайтиПоКоду("Основной")
найди 1 раз и используй
17 RomanYS
 
30.08.14
13:36
(15) наверное быстрее было зарегистрировать только то, что нужно, чем потом чистить
18 RomanYS
 
30.08.14
13:38
условие на дату засунуть в запрос - мелочь, но немного ускорит
19 Beduin
 
30.08.14
13:43
20 RomanYS
 
30.08.14
13:47
(19) сначала замени
            НаборЗаписей = Выборка.Регистратор.ПолучитьОбъект().Движения.Хозрасчетный;
на (16)
21 RomanYS
 
30.08.14
13:53
+(20) и покажи замер
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс