Имя: Пароль:
1C
1С v8
Независимый регистр сведений: как проще получить измененный набор записей?
0 dave2000
 
22.11.15
21:08
Нужно по определенному узлу обмена программно получить весь измененный набор записей регистра сведений в виде таблицы значений. Делаю так:

1. Запросом (ВЫБРАТЬ * ИЗ РегистрСведений.ИмяРС.Изменения) получаю выборку измерений, по которым были изменения значений.
2. Создаю набор записей регистра, в цикле перебираю каждую строку выборки п.1, устанавливаю значения отбора по каждому измерению, делаю Прочитать().
3. После каждого чтения набора п.3 все записи постепенно перекидываю в отдельную таблицу значений.

Выходит длинный и мудрёный кусок кода. Проще никак нельзя? Скопом как-то прочитать. Либо я туплю, либо не знаю..
1 dave2000
 
22.11.15
21:19
Как вариант, можно получать сразу всё одним запросом п.1 через левое соеднинением с самим регистром. Выходит чуть проще.
2 Fedor-1971
 
22.11.15
21:47
(0) тебе нужен просто набор или ты его будешь изменять?
3 RomanYS
 
22.11.15
21:47
если прочитать то конечно (1), а записывать проще циклом, иначе много заморочек с отборами и риск зацепить что-либо лишнее
4 dave2000
 
22.11.15
21:56
(2) Только прочитать, изменять не нужно
(3) Просто думал может можно как-то еще проще.
5 Fedor-1971
 
22.11.15
22:01
(4) возможно, понятнее и нагляднее будет работать через НаборЗаписей с установленным отбором, но не факт что это будет оптимальнее и проще.
6 RomanYS
 
22.11.15
22:23
"еще проще" - позови программиста, сделает тебе кнопку)

вместо соединения можно сделать

выбрать * из Регистр
где (измерение1, измерение2...) В
(выбрать измерение1, измерение2... из Изменения)

Не факт, что проще и оптимальнее... но вариант
7 dave2000
 
22.11.15
22:40
(5) (6) Сделал всё таки через левое соединение, т.к. если вдруг запись была удалена, мне нужно получать значения ресурсов NULL (т.е. ничего не присоединено)
8 ЧеловекДуши
 
23.11.15
07:14
(0) Как вариант, сперва определись, что есть "Изменение". После уже пляши далее :)

И лучше всего работать с прямыми запросами. Коль нужна скорость.
9 ЧеловекДуши
 
23.11.15
07:17
(7) Если запись была удалена, то надо там где "Изменен", отметить или удалить её тоже :)
10 ЧеловекДуши
 
23.11.15
07:18
....Я не вижу что у вас там, для чего там. И что такое "Изменен". Несть только абстрактное представление кусочка в (0). :) ...
11 dave2000
 
23.11.15
13:12
(9) Имелось в виду так:

ВЫБРАТЬ
   РегИзменения.Измерение1,
   РегИзменения.Измерение2,
   РегИзменения.Измерение3,
   РегИзменения.Ресурс1,
   РегИзменения.Ресурс2,
   РегИзменения.Ресурс3
ИЗ РегистрСведений.ИмяРС.Изменения КАК РегИзменения
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмяРС КАК Рег
ПО РегИзменения.Измерение1 = Рег.Измерение1
   И РегИзменения.Измерение2 = Рег.Измерение2
   И РегИзменения.Измерение3 = Рег.Измерение3


Т.е. ресурсы тех записей, которые были удалены, в выборке будут иметь значение NULL.
12 dave2000
 
23.11.15
13:14
(11) Ой, вернее вот так:

ВЫБРАТЬ
   РегИзменения.Измерение1,
   РегИзменения.Измерение2,
   РегИзменения.Измерение3,
   Рег.Ресурс1,
   Рег.Ресурс2,
   Рег.Ресурс3
ИЗ РегистрСведений.ИмяРС.Изменения КАК РегИзменения
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмяРС КАК Рег
ПО РегИзменения.Измерение1 = Рег.Измерение1
   И РегИзменения.Измерение2 = Рег.Измерение2
   И РегИзменения.Измерение3 = Рег.Измерение3
13 dave2000
 
23.11.15
13:21
Ещё такой вопрос по поводу УдалитьРегистрациюИзменений(Узел, НаборЗаписей).

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=651643&msg=7002964

Здесь пишут, что после установки значений отборов НаборЗаписей.Прочитать() делать не обязательно. Это так?
14 dave2000
 
24.11.15
22:33
(13) Проверено: набор можно не читать, достаточно лишь установить все отборы. Да и действительно, записи могут быть и удалены - там нечего будет читать.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс