Имя: Пароль:
1C
 
Как прочитать набор записей регистра сведений - все значения, т.е. всю таблицу регист
0 roman2
 
15.04.09
16:39
Пишу код:

   Для каждого ЭМ из МассивРегистров цикл
       ОбработкаПрерыванияПользователя();
       НаборЗаписей = РегистрыСведений[ЭМ].СоздатьНаборЗаписей();
       НаборЗаписей.Прочитать();
       если НаборЗаписей.Количество()>0 тогда
           ЗаписатьXML(ЗаписьXML, НаборЗаписей);
       КонецЕсли;
       
   КонецЦикла;

Набор всегда пустой. Что не так?
1 SMakcik
 
15.04.09
16:41
а что такое МассивРегистров
2 roman2
 
15.04.09
16:42
МассивРегистров = Новый Массив;
   МассивРегистров.Добавить("ПервоначальныеСведенияОСБухгалтерскийУчет");
   МассивРегистров.Добавить("МестонахождениеОСБухгалтерскийУчет");
   МассивРегистров.Добавить("ПараметрыАмортизацииОСБухгалтерскийУчет");
   МассивРегистров.Добавить("ГрафикиАмортизацииОСБухгалтерскийУчет");
   МассивРегистров.Добавить("СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет");
3 SMakcik
 
15.04.09
16:45
ну и подумй тогда что ты пишешь?
Чтобы прочитать набор его надо найти, получить
4 roman2
 
15.04.09
16:48
Нужно установить отбор и прочитать.
Что значит получить?
5 SMakcik
 
15.04.09
16:51
если бы ты написал так, тогда другое дело

   Для каждого ЭМ из МассивРегистров цикл
       ОбработкаПрерыванияПользователя();
       Менеджер = РегистрыСведений[ЭМ];
   Выборка = Менеджер.Выбрать(Отбор);

   Пока Выборка.Следующий() Цикл
       
       Менеджер1 = Выборка.ПолучитьМенеджерЗаписи();
       Менеджер1.Прочитать();
           ЗаписатьXML(ЗаписьXML, Менеджер1);
       КонецЦикла;
   КонецЦикла;
6 Defender aka LINN
 
15.04.09
16:52
Выбрать * из РегистрСведений.ИмяРегистра

Хотя это один фиг не поможет - их же еще явно надо будет куда-то записывать потом :)
7 roman2
 
15.04.09
16:53
(5)
А ОТБОР какой?
8 Kom-off
 
15.04.09
16:54
В (2) все регистры подчинены регистратору, поэтому необходимо для получения наборов записей перед НаборЗаписей.Прочитать(); установить отбор по регистратору, ну а для этого сначала отобрать те регистраторы, наборы записей по которым надо выгружать.
9 Kom-off
 
15.04.09
16:55
...и по каждому получать свой набор записей отдельно...
10 SMakcik
 
15.04.09
16:55
инструкция тебе в помощь. Хоть немного подумай.
За тебя никто ничего писать не будет. Мысль я тебе дал.
в (6) тоже изложена, только там потом надо будет немного дописать чтобы записать набор.
11 roman2
 
15.04.09
17:00
(10) не думаю что ты мне новое сообщил. Про отбор я и так знаю. Я хотел без отбора прочесть все))
12 SMakcik
 
15.04.09
17:02
если никто тебе не сообщил новое, тогда вообще для чего ты здесь? задай себе вопрос.
Ты же все знаешь и умеешь.
Тему можно закрывать
13 roman2
 
15.04.09
17:12
(12) вот как получилось

   МассивРегистров = Новый Массив;
   МассивРегистров.Добавить("ПервоначальныеСведенияОСБухгалтерскийУчет");
   МассивРегистров.Добавить("МестонахождениеОСБухгалтерскийУчет");
   МассивРегистров.Добавить("ПараметрыАмортизацииОСБухгалтерскийУчет");
   МассивРегистров.Добавить("ГрафикиАмортизацииОСБухгалтерскийУчет");
   МассивРегистров.Добавить("СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет");
   
   Для каждого ЭМ из МассивРегистров цикл
       ОбработкаПрерыванияПользователя();
       МенеджерНабораЗаписей = РегистрыСведений[ЭМ];
       
       Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ РегистрСведений." + ЭМ);
       РезультатЗапросаПоСоставу = Запрос.Выполнить();
       Если РезультатЗапросаПоСоставу.Пустой() Тогда
           продолжить
       КонецЕсли;
       КолонкиРегистра = РезультатЗапросаПоСоставу.Колонки;
       // выгрузка регистров осуществляется через его набор записей
       НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей();
       Отбор = НаборЗаписей.Отбор;
       СтрокаПолейОтбора = "";
       Для Каждого ЭлементОтбора Из Отбор Цикл
           Если Не ПустаяСтрока(СтрокаПолейОтбора) Тогда
               СтрокаПолейОтбора = СтрокаПолейОтбора + ",";
           КонецЕсли;
           СтрокаПолейОтбора = СтрокаПолейОтбора + ЭлементОтбора.Имя;
       КонецЦикла;
       // строим запрос для выбора из таблицы регистра РАЗЛИЧНЫХ полей отбора
       ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ " + СтрокаПолейОтбора + " ИЗ РегистрСведений." + ЭМ;
       Запрос.Текст = ТекстЗапроса;
       РезультатЗапросаПоЗначениямОтбора = Запрос.Выполнить();
       ВыборкаИзРезультата = РезультатЗапросаПоЗначениямОтбора.Выбрать();
       
       // читаем наборы записей с различным составом отбора и записываем их
       Пока ВыборкаИзРезультата.Следующий() Цикл
           Для Каждого Колонка Из РезультатЗапросаПоЗначениямОтбора.Колонки Цикл
               Отбор[Колонка.Имя].Значение = ВыборкаИзРезультата[Колонка.Имя];
               Отбор[Колонка.Имя].ВидСравнения = ВидСравнения.Равно;
               Отбор[Колонка.Имя].Использование = Истина;
           КонецЦикла;
           
           НаборЗаписей.Прочитать();
           если НаборЗаписей.Количество()>0 тогда
               ЗаписатьXML(ЗаписьXML, НаборЗаписей);
           КонецЕсли;
           
       КонецЦикла;
   КонецЦикла;
14 roman2
 
15.04.09
17:13
Всем спасибо за участие.
15 SMakcik
 
15.04.09
17:19
легче нет ничего чем скопировать чужой код, да еще и не разобравшись в нем. Сразу этого сделать нельзя было. :))
ЛЕНЬ ЧЕЛОВЕЧЕСКАЯ ЭТО ппц.
16 roman2
 
15.04.09
17:24
(15) там только фрагмент кода чужой.
А прикрутить нужно тоже уметь.
17 Kom-off
 
15.04.09
17:27
(13) Сильно.
18 SMakcik
 
15.04.09
17:30
(16) ну конечно. Верхний цикл поставить ой как сложно ))).
Ты кому рассказываешь то.
(17) просто когда не сильно понимается, что нужно вот и все подряд пишется. И пофиг как, что, зачем это будет.
19 roman2
 
15.04.09
17:31
(18) Если есть время напиши свой вариант - проще. А критиковать много ума не надо.
20 SMakcik
 
15.04.09
17:33
я тебе написал. и ничем он не отличается.
подумать просто необходимо иногда
21 roman2
 
15.04.09
17:39
(20) ты сколько уже программируешь в 1с?
22 SMakcik
 
15.04.09
17:41
месяц
23 roman2
 
15.04.09
17:42
а до этого?
24 SMakcik
 
15.04.09
17:42
что до этого?
25 Kom-off
 
15.04.09
17:43
(19)
МассивРегистров = Новый Массив;
МассивРегистров.Добавить("ПервоначальныеСведенияОСБухгалтерскийУчет");
МассивРегистров.Добавить("МестонахождениеОСБухгалтерскийУчет");
МассивРегистров.Добавить("ПараметрыАмортизацииОСБухгалтерскийУчет");
МассивРегистров.Добавить("ГрафикиАмортизацииОСБухгалтерскийУчет");
МассивРегистров.Добавить("СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет");

Запрос = Новый Запрос;
Запрос.Текст =
   "ВЫБРАТЬ
   |    РегистрСведенийПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор КАК Ссылка
   |ИЗ
   |    РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК РегистрСведенийПервоначальныеСведенияОСБухгалтерскийУчет
   |СГРУППИРОВАТЬ ПО
   |    РегистрСведенийПервоначальныеСведенияОСБухгалтерскийУчет.Регистратор
   |
   |ОБЪЕДИНИТЬ
   |
   |ВЫБРАТЬ
   |    РегистрСведенийМестонахождениеОСБухгалтерскийУчет.Регистратор
   |ИЗ
   |    РегистрСведений.МестонахождениеОСБухгалтерскийУчет КАК РегистрСведенийМестонахождениеОСБухгалтерскийУчет
   |СГРУППИРОВАТЬ ПО
   |    РегистрСведенийМестонахождениеОСБухгалтерскийУчет.Регистратор
   |
   |ОБЪЕДИНИТЬ
   |
   |ВЫБРАТЬ
   |    РегистрСведенийПараметрыАмортизацииОСБухгалтерскийУчет.Регистратор
   |ИЗ
   |    РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет КАК РегистрСведенийПараметрыАмортизацииОСБухгалтерскийУчет
   |СГРУППИРОВАТЬ ПО
   |    РегистрСведенийПараметрыАмортизацииОСБухгалтерскийУчет.Регистратор
   |
   |ОБЪЕДИНИТЬ
   |
   |ВЫБРАТЬ
   |    РегистрСведенийГрафикиАмортизацииОСБухгалтерскийУчет.Регистратор
   |ИЗ
   |    РегистрСведений.ГрафикиАмортизацииОСБухгалтерскийУчет КАК РегистрСведенийГрафикиАмортизацииОСБухгалтерскийУчет
   |СГРУППИРОВАТЬ ПО
   |    РегистрСведенийГрафикиАмортизацииОСБухгалтерскийУчет.Регистратор
   |
   |ОБЪЕДИНИТЬ
   |
   |ВЫБРАТЬ
   |    РегистрСведенийСпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.Регистратор
   |ИЗ
   |    РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет КАК РегистрСведенийСпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет
   |СГРУППИРОВАТЬ ПО
   |    РегистрСведенийСпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.Регистратор
   |";
ТЗРегистраторы = Запрос.Выполнить().Выгрузить();
Для Каждого ЭМ Из МассивРегистров Цикл
   ОбработкаПрерыванияПользователя();
   Для Каждого ТекСтрока Из ТЗРегистраторы Цикл
       НаборЗаписей = РегистрыСведений[ЭМ].СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.Регистратор.Установить(ТекСтрока.Ссылка);
       НаборЗаписей.Прочитать();
       Если НаборЗаписей.Количество() > 0 Тогда
           ЗаписатьXML(ЗаписьXML, НаборЗаписей);
       КонецЕсли;
   КонецЦикла;
КонецЦикла;
26 Kom-off
 
15.04.09
17:44
(25) и, в общем случае, XML файл будет меньше.
27 roman2
 
15.04.09
17:55
(25) вот это дело!
28 Kom-off
 
15.04.09
17:57
Вообщем то, я согласен с SMakcik и писал код в его поддержку. И, думаю, что это надо было бы самому написать - лучше запомнится.
29 SMakcik
 
15.04.09
17:58
(28) + тебе. :)
30 roman2
 
15.04.09
18:04
(26) (29) спасибо за внимание к моему вопросу.
(26) запрос конечно можно было сгениерировать в несколько строк. Ну да ладно, мы же не на олимпиаде))
Закрываем ветку.