|
Не переносятся все записи в регистр | ☑ | ||
---|---|---|---|---|
0
anikulnikova
29.04.16
✎
11:47
|
Здравствуйте, есть обработка, которая переносит по ком соединению записи из регл регистра сведений РаботникиОргнаизаций в упр регистр сведений Работники. И вроде все работает нормально, и записи создает, и в служебных сообщениях нет никаких ошибок, но почему-то не все записи переносятся, если визуально сравнить эти 2 регистра, то будет видно, что в упр регистре записей меньше. А В выборку попадают все. Подскажите, в чем может быть причина? База УПП 8.3 обычное приложение
Код процедуры, по нажатию которой происходит перенос: Процедура ЗагрузитьВсеНажатие(Элемент) Сообщить("Обработка запущена: "+ТекущаяДата()+", пожалуйста, дождитесь окончания. " ); База = Неопределено; Соединение = Неопределено; Если Не ПроверкаПодключения(База, Соединение) Тогда Возврат; КонецЕсли; Текст = "ВЫБРАТЬ | РаботникиОрганизаций.Период КАК Период, | РаботникиОрганизаций.Регистратор, | РаботникиОрганизаций.Активность, | РаботникиОрганизаций.Сотрудник КАК Сотрудник, | РаботникиОрганизаций.ЗанимаемыхСтавок, | РаботникиОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации, | РаботникиОрганизаций.Должность КАК ДолжностьДляОрганизации, | РаботникиОрганизаций.ГрафикРаботы, | РаботникиОрганизаций.ПричинаИзмененияСостояния, | Должности.Ссылка КАК ДолжностьДляРаботников, | ВложенныйЗапрос.Подразделение КАК ПодразделениеДляРаботников, | ФизическиеЛица.Ссылка КАК ФизЛицо, | РаботникиОрганизаций.НомерСтроки |ИЗ | РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности КАК Должности | ПО РаботникиОрганизаций.Должность.Код = Должности.Код | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ | СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение КАК Подразделение, | СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации | ИЗ | РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций) КАК ВложенныйЗапрос | ПО РаботникиОрганизаций.ПодразделениеОрганизации = ВложенныйЗапрос.ПодразделениеОрганизации | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица | ПО РаботникиОрганизаций.Сотрудник.Физлицо = ФизическиеЛица.Ссылка | |УПОРЯДОЧИТЬ ПО | Период, | Сотрудник, | ПодразделениеОрганизации"; Запрос = ВнешняяИБ.NewObject("Запрос"); Запрос.Текст = Текст; Рез = Запрос.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл стр = рез; Попытка Если Не ЗначениеЗаполнено(стр.ПодразделениеДляРаботников) Тогда Сообщить("Не указано подразделение у " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " период " + стр.период, СтатусСообщения.ОченьВажное); Продолжить; КонецЕСЛИ; Исключение КонецПопытки; Попытка Если НЕ ЗначениеЗаполнено(стр.ДолжностьДляРаботников) Тогда Сообщить("Не указано должность у " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " период " + стр.период, СтатусСообщения.ОченьВажное); Продолжить; КонецЕСЛИ; исключение КонецПопытки; НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); //Очищаем НаборЗаписей.ОбменДанными.Загрузка = Истина; //+++ НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); НаборЗаписей.Записать(); НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); НаборЗаписей.ОбменДанными.Загрузка = Истина; //+++ НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = стр.Период; НоваяЗапись.Активность = стр.Активность; НоваяЗапись.Регистратор = стр.Регистратор; НоваяЗапись.ФизЛицо = стр.ФизЛицо; НоваяЗапись.Подразделение = стр.ПодразделениеДляРаботников; НоваяЗапись.Должность = стр.ДолжностьДляРаботников; НоваяЗапись.ЗанимаемыхСтавок = стр.ЗанимаемыхСтавок; НоваяЗапись.ГрафикРаботы = стр.ГрафикРаботы; НоваяЗапись.ПричинаИзмененияСостояния = стр.ПричинаИзмененияСостояния; Попытка НаборЗаписей.Записать(Истина); Сообщить("Обработан " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " за период " + стр.Период,СтатусСообщения.Информация); Исключение Сообщить("Запись уже есть " + Символы.Таб + ОписаниеОшибки(),СтатусСообщения.Внимание); КонецПопытки; КонецЦИкла; Сообщить("Обработка завершена: "+ТекущаяДата()); КонецПроцедуры |
|||
1
GROOVY
29.04.16
✎
11:53
|
Так ты же набор записей в цикле пересоздаешь по регистратору. Вот у тебя только одна запись и переностится.
|
|||
2
GROOVY
29.04.16
✎
11:53
|
И, если не секрет, поясни, зачем упорядочивание в запросе?
|
|||
3
GROOVY
29.04.16
✎
11:54
|
Тут хорошо подойдет иерархическая выборка по регистратору.
|
|||
4
anikulnikova
01.05.16
✎
20:12
|
(1) видите ли, запись переносится не одна, т.е. по сотруднику примерно из 15 записей по регл регистру, переносится только 5 в упр регистр. (2) упорядочивание осталось после того, как я в консоль вытаскивала запрос ))) (3) можно по подробнее, не сталкивалась с иерархической выборкой.
|
|||
5
RomanYS
01.05.16
✎
21:03
|
(4) если в документе одна запись - она перенесется, если много - перенесётся только последняя. В кадровом учете обычно таких документов не много, поэтому много что перенеслось.
А зачем вообще делать через КОМ, если внешние данные нигде не используются? (3) наверное речь про "итоги по регистратор" |
|||
6
anikulnikova
04.05.16
✎
06:37
|
(5) проверила я, если в документе много записей, то переносится не последняя, как Вы предположили, а переносится их несколько.
Используется ком, потому что была готовая обработка, ее надо было переделать. Что за итоги по регистратор? Вы про что? |
|||
7
hhhh
04.05.16
✎
06:57
|
(6) по вашему коду:
НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); //Очищаем НаборЗаписей.ОбменДанными.Загрузка = Истина; //+++ НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); НаборЗаписей.Записать(); очищаете набор записей. НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); НоваяЗапись = НаборЗаписей.Добавить(); ... Попытка НаборЗаписей.Записать(Истина); записываете туда одну запись. У вас в каждом регистраторе по одной записи. |
|||
8
1Сергей
04.05.16
✎
07:02
|
Объясните мне сакральный смысл всего этого, пожалуйста.
Подключиться к внешней базе, сделать там запрос, записать в регистр сведений внешней же базы данные. Нельзя было это всё на той стороне проделать? |
|||
9
1Сергей
04.05.16
✎
07:07
|
ну, и да. (7) + 1
По каждому регистратору остаётся только одна запись |
|||
10
Chameleon1980
04.05.16
✎
08:07
|
(8) База может зовется "Центр управления полетами" :)
|
|||
11
anikulnikova
04.05.16
✎
09:02
|
(7) хорошо, а к тогда исправить? Чтоб все записи взять? (8) нельзя ))) так надо было начальству ? (10) ага, похоже название... ?
А если серьезно, как можно исправить? И сделать по всем записям? |
|||
12
1Сергей
04.05.16
✎
09:44
|
(11) как-то так:
ТекущийРегистратор = Неопределено; Рез = Запрос.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл стр = рез; Попытка Если Не ЗначениеЗаполнено(стр.ПодразделениеДляРаботников) Тогда Сообщить("Не указано подразделение у " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " период " + стр.период, СтатусСообщения.ОченьВажное); Продолжить; КонецЕСЛИ; Исключение КонецПопытки; Попытка Если НЕ ЗначениеЗаполнено(стр.ДолжностьДляРаботников) Тогда Сообщить("Не указано должность у " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " период " + стр.период, СтатусСообщения.ОченьВажное); Продолжить; КонецЕСЛИ; исключение КонецПопытки; Если НЕ ТекущийРегистратор = стр.Регистратор НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); //Очищаем НаборЗаписей.ОбменДанными.Загрузка = Истина; //+++ НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); НаборЗаписей.Записать(); НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); НаборЗаписей.ОбменДанными.Загрузка = Истина;//+++ НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); ТекущийРегистратор = стр.Регистратор; КонецЕсли; НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = стр.Период; НоваяЗапись.Активность = стр.Активность; НоваяЗапись.Регистратор = стр.Регистратор; НоваяЗапись.ФизЛицо = стр.ФизЛицо; НоваяЗапись.Подразделение = стр.ПодразделениеДляРаботников; НоваяЗапись.Должность = стр.ДолжностьДляРаботников; НоваяЗапись.ЗанимаемыхСтавок = стр.ЗанимаемыхСтавок; НоваяЗапись.ГрафикРаботы = стр.ГрафикРаботы; НоваяЗапись.ПричинаИзмененияСостояния = стр.ПричинаИзмененияСостояния; Попытка НаборЗаписей.Записать(Истина); Сообщить("Обработан " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " за период " + стр.Период,СтатусСообщения.Информация); Исключение Сообщить("Запись уже есть " + Символы.Таб + ОписаниеОшибки(),СтатусСообщения.Внимание); КонецПопытки; КонецЦИкла; Сообщить("Обработка завершена: "+ТекущаяДата()); |
|||
13
anikulnikova
04.05.16
✎
13:55
|
(12) спасибо, но безрезультатно. Записи переносятся так же. Не все. (((
|
|||
14
hhhh
04.05.16
✎
14:13
|
(13) вы один и тот же регистратор пишете несколько раз. Одно пишете, другое стираете. Это хоть поняли.
|
|||
15
anikulnikova
04.05.16
✎
14:47
|
(14) да да, это понятно. Но видимо все-равно что-то не так я делаю, а дойти до этого не могу... так как не все записи перенеслись.
|
|||
16
hhhh
04.05.16
✎
15:13
|
|УПОРЯДОЧИТЬ ПО
| Период, | Сотрудник, | ПодразделениеОрганизации |ИТОГИ ПО Регистратор "; Запрос = ВнешняяИБ.NewObject("Запрос"); Запрос.Текст = Текст; Рез = Запрос.Выполнить().Выбрать(ОбходРезкльтатаЗапроса.ПоГруппировкам); Пока Рез.Следующий() Цикл НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); //Очищаем НаборЗаписей.ОбменДанными.Загрузка = Истина; //+++ НаборЗаписей.Отбор.Регистратор.Установить(рез.Регистратор); НаборЗаписей.Записать(); НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); НаборЗаписей.ОбменДанными.Загрузка = Истина;//+++ НаборЗаписей.Отбор.Регистратор.Установить(рез.Регистратор); стр = Рез.Выбрать(); Пока стр.Следующий() Цикл НоваяЗапись = НаборЗаписей.Добавить(); как-то так |
|||
17
anikulnikova
05.05.16
✎
08:09
|
(16) Если честно, то я немного не поняла, что Вы предлагаете сделать.
Поправьте, если я не так добавила Ваш код Процедура ЗагрузитьВсеНажатие(Элемент) Сообщить("Обработка запущена: "+ТекущаяДата()+", пожалуйста, дождитесь окончания. " ); База = Неопределено; Соединение = Неопределено; Если Не ПроверкаПодключения(База, Соединение) Тогда Возврат; КонецЕсли; Запрос = ВнешняяИБ.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ | РаботникиОрганизаций.Период КАК Период, | РаботникиОрганизаций.Регистратор, | РаботникиОрганизаций.Активность, | РаботникиОрганизаций.Сотрудник КАК Сотрудник, | РаботникиОрганизаций.ЗанимаемыхСтавок, | РаботникиОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации, | РаботникиОрганизаций.Должность КАК ДолжностьДляОрганизации, | РаботникиОрганизаций.ГрафикРаботы, | РаботникиОрганизаций.ПричинаИзмененияСостояния, | Должности.Ссылка КАК ДолжностьДляРаботников, | ВложенныйЗапрос.Подразделение КАК ПодразделениеДляРаботников, | ФизическиеЛица.Ссылка КАК ФизЛицо, | РаботникиОрганизаций.НомерСтроки |ИЗ | РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности КАК Должности | ПО РаботникиОрганизаций.Должность.Код = Должности.Код | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ | СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение КАК Подразделение, | СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации | ИЗ | РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций) КАК ВложенныйЗапрос | ПО РаботникиОрганизаций.ПодразделениеОрганизации = ВложенныйЗапрос.ПодразделениеОрганизации | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица | ПО РаботникиОрганизаций.Сотрудник.Физлицо = ФизическиеЛица.Ссылка | |УПОРЯДОЧИТЬ ПО | Период, | Сотрудник, | ПодразделениеОрганизации |ИТОГИ ПО Регистратор "; Рез = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Рез.Следующий() Цикл стр = рез; Попытка Если Не ЗначениеЗаполнено(стр.ПодразделениеДляРаботников) Тогда Сообщить("Не указано подразделение у " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " период " + стр.период, СтатусСообщения.ОченьВажное); Продолжить; КонецЕСЛИ; Исключение КонецПопытки; Попытка Если НЕ ЗначениеЗаполнено(стр.ДолжностьДляРаботников) Тогда Сообщить("Не указано должность у " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " период " + стр.период, СтатусСообщения.ОченьВажное); Продолжить; КонецЕСЛИ; исключение КонецПопытки; НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); //Очищаем НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); НаборЗаписей.Записать(); НаборЗаписей = ВнешняяИБ.РегистрыСведений.Работники.СоздатьНаборЗаписей(); НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Отбор.Регистратор.Установить(стр.Регистратор); Рез = стр.Выбрать(); Пока Рез.Следующий() Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = стр.Период; НоваяЗапись.Активность = стр.Активность; НоваяЗапись.Регистратор = стр.Регистратор; НоваяЗапись.ФизЛицо = стр.ФизЛицо; НоваяЗапись.Подразделение = стр.ПодразделениеДляРаботников; НоваяЗапись.Должность = стр.ДолжностьДляРаботников; НоваяЗапись.ЗанимаемыхСтавок = стр.ЗанимаемыхСтавок; НоваяЗапись.ГрафикРаботы = стр.ГрафикРаботы; НоваяЗапись.ПричинаИзмененияСостояния = стр.ПричинаИзмененияСостояния; Попытка НаборЗаписей.Записать(Истина); Сообщить("Обработан " + Символы.Таб + стр.ФизЛицо.Наименование + Символы.Таб + " за период " + стр.Период,СтатусСообщения.Информация); Исключение Сообщить("Запись уже есть " + Символы.Таб + ОписаниеОшибки(),СтатусСообщения.Внимание); КонецПопытки; КонецЦикла; КонецЦИкла; Сообщить("Обработка завершена: "+ТекущаяДата()); КонецПроцедуры |
|||
18
anikulnikova
08.05.16
✎
22:17
|
(16) не могли бы Вы подсказать, на счет моего сообщения (17)
Спасибо |
|||
19
hhhh
09.05.16
✎
00:23
|
(18) что-то непонятно вы пишете
Рез = стр.Выбрать(); Пока Рез.Следующий() Цикл значит у вас данные в переменной Рез. А вы почему-то Стр пишете наверно должно быть Рез.Период Рез.Активность Рез.ФизЛицо и т.д. |
|||
20
zenik
09.05.16
✎
01:19
|
Рез = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Рез.Следующий() Цикл стр = рез; ... Рез = стр.Выбрать(); Пока Рез.Следующий() Цикл И херим первую выборку на корню... |
|||
21
hhhh
09.05.16
✎
01:25
|
(20) + а, ну да
Стр = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Стр.Следующий() Цикл |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |