Имя: Пароль:
1C
1С v8
Конвертация данных - два способа получения данных
,
0 VladSt
 
14.05.15
10:35
Сделал два способа для переноса справочника Сотрудники. Треуется перенести сотров вместе с физюлицами только тех, кто работает сейчас или уволен после 20150101.
1-й способ.
Создал ПКО Сотрудники, настроил ПКС.
Создал ПВД СотрудникиОрганизаций, в обработчике ПередВыгрузкой написал код:
Если ЗначениеЗаполнено(Объект.ДатаУвольнения) И Объект.ДатаУвольнения < Дата("20150101")
    Тогда
    Отказ = Истина;
КонецЕсли;    

все работает.

2-й способ (хотел попробовать передавать результат запроса).
Вместо обработчика в ПВД сделал обработчик в ПКО ПередВыгрузкой такой код:
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    СотрудникиОрганизаций.ПометкаУдаления,
|    СотрудникиОрганизаций.ЭтоГруппа,
|    СотрудникиОрганизаций.Родитель,
|    СотрудникиОрганизаций.Код,
|    СотрудникиОрганизаций.Наименование,
|    СотрудникиОрганизаций.Физлицо
|ИЗ
|    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
|    (СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
|            ИЛИ СотрудникиОрганизаций.ДатаУвольнения < ДАТАВРЕМЯ(2015, 1, 1))";
РезультатЗапроса = Запрос.Выполнить();

ИсходящиеДанные = РезультатЗапроса.Выгрузить();

запустил выгружать данные. Уже 2 часа выгружает, очень медленно. Количество выгруженных пока объектов немного 14 000 примерно. Но по времени!!!
Что-то здесь не так, да и результат я предполагаю может оказаться неизвестно каким.

Подскажите что не так
1 TStan
 
14.05.15
10:42
А не запрос в цикле ты случайно получил?)
2 VladSt
 
14.05.15
10:48
(1) так вот я и боюсь, что неправильно в принципе что-то сделал
нашел ошибку в запросе
|            ИЛИ СотрудникиОрганизаций.ДатаУвольнения < ДАТАВРЕМЯ(2015, 1, 1))";
сейчас поменял "<" на ">=", выгрузка, правда, быстрее пошла, посмотрим
3 tznimble
 
14.05.15
10:48
Ну конечно он получил запрос в цикле!
Если в ПВД нет ограничений, то ПО вызывается для каждого элемента (справочника в данном случае).
Интересно посмотреть что навыгружает
4 VladSt
 
14.05.15
10:51
(3) так, значит, ПКО касается только одной выгружаемой строки?
5 TStan
 
14.05.15
10:53
(3) интересно дождется ли))
6 VladSt
 
14.05.15
10:56
(5) я понял )), переделываю, я же поэтому и второй способ запустил, что хочу разобраться в деталях
7 VladSt
 
14.05.15
15:05
Подскажите, не все понимаю:
есть запрос, выполняю его в консоли - результат 3 970 записей,
когда выгружаю данные в обработчике ПВД ПередОбработкой - Выгружено объектов: 27 325.
Воот код:

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    СотрудникиОрганизаций.Ссылка
|ИЗ
|    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
|    (СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
|            ИЛИ СотрудникиОрганизаций.ДатаУвольнения > ДАТАВРЕМЯ(2015, 1, 1))";

РезультатЗапроса = Запрос.Выполнить();

//ИсходящиеДанные = РезультатЗапроса.Выгрузить();
ВыборкаДанных     = РезультатЗапроса.Выгрузить();
8 VladSt
 
14.05.15
15:13
и еще вопрос:
как правильно
ИсходящиеДанные =
или
ВыборкаДанных   =
чтобы получить данные при загрузке?
9 azt-yur
 
14.05.15
15:24
(7) помимо самого справочника Сотрудников у тебя выгружаются и подчиненные объекты по ссылкам. Поэтому общее количество выгруженных объектов больше.
(8) правильно ВыборкаДанных
10 VladSt
 
14.05.15
15:31
и еще одна непонятка:
в результате загрузки загрузились и те данные, которы при выполнении запроса не подали из-за того что в запросе условие:

|ГДЕ
|    (СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
|            ИЛИ СотрудникиОрганизаций.ДатаУвольнения > ДАТАВРЕМЯ(2015, 1, 1))";

т.е. попали все сотры вместе с физ.лицами, вот и набежало 27 тысяч (((
Так в чем я не прав?
11 azt-yur
 
14.05.15
15:39
(10) способ выборки в ПВД должен стоять Произвольный алгоритм
12 VladSt
 
14.05.15
16:17
(11) да, сработало, еще немного пришлось переделать запрос (установить поля в запросе как в ПКС и
Важно:
Если для выборки данных ПВД используется произвольный алгоритм и в обработчике ПВД "Перед обработкой" инициируется параметр ВыборкаДанных, то для ПКО следует установить признак "Не запоминать выгруженные объекты".
13 VladSt
 
14.05.15
16:22
еще вопрос про этот же обработчик. у нег в параметрах есть такой параметр ИсходящиеДанные:

ИсходящиеДанные - Произвольный. Произвольные вспомогательные данные, доступные при выгрузке объектов выборки

можно было бы его использовать вместо ВыборкаДанных?
14 VladSt
 
14.05.15
16:49
Наверное, все таки только ВыборкаДанных
ну что ж, сойдемся на этом ))
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.