Имя: Пароль:
1C
1С v8
Запись с такими ключевыми полями существует!
0 IT_PROGRAMMIST
 
01.11.11
01:52
Привет всем.)УПП 1.3.11.5,пл.8.2.13.219.
Такая проблема.Есть кадровые документы(Прием,Отсутствие,Возврат,Увольнение),которые дают движения по регистру сведений СостояниеРаботниковПредприяти(Структура регистра: измерения:ФизЛицо,ДатаРаботы,ресурс: состояние).В данный регистр заносится состояние работника(т.е работает, на больничном, в отпуске и т.д.)Регистр подчинен регистратору с периодичностью "В пределах дня".Что только не перепробывал!!При проведении кадрового документа пишет ошибку:

{Форма.Форма.Форма(52)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ОбработкаПроведения': {Документ.Увольнение(628)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : СостояниеРаботниковПредприятия: 13.10.2011 0:00:00, , 10.10.2011 13:14:20 (Регистр сведений: Состояние работников предприятия; Номер строки: 2)

Пробовал: 1)менять периодичность на "По позиции регистратора"
2) добавил дополнительное измерение дата.
Ничего не помогает.Помогите,как можно выйти из ситуации????Заранее благодарен
1 YauheniL
 
01.11.11
01:54
(0) ПРоверь, нет ли в документе дублирующихся строк по измерениям.
2 YauheniL
 
01.11.11
01:55
Если у тебя 1 и 101 строи совпадают с учетом измерений, то ты будешь такую ошибку всегда ловить, независимо от периодичности. Тут только свертка таб. части нужда
3 YauheniL
 
01.11.11
01:55
*нужна
4 IT_PROGRAMMIST
 
01.11.11
01:58
в документе нет дублирующихся строк
5 IT_PROGRAMMIST
 
01.11.11
01:59
(2) а можешь по подробней объяснить.Как свертку сделать?
6 YauheniL
 
01.11.11
02:00
(4) я бы все-таки проверил. В противном случае, периодичность является измерением, и ты умудрился (в случае с периодичностью "по позиции регитсратора") создать документ с уже занятым GUID
7 YauheniL
 
01.11.11
02:02
(5) Это просто, строишь запрос к таб. части с группировкой по полям измерения, передаешь результат в таблицу для проведения...

Ну, или выгружаешь таб. часть в таблицу значений, затем используешь метод таблицы значений "Свернуть()".

Только важно, чтобы по измерениям регистра она проводилась (при возможности), без посторонних полей группировки, а то дубли могут получится
8 IT_PROGRAMMIST
 
01.11.11
02:02
Регистр подчинен регистратору с периодичностью "В пределах дня".Насчет по позиции регистратора" то я просто проверял,получится или нет
9 IT_PROGRAMMIST
 
01.11.11
02:05
(7) я так понимаю сдесь свертка нужна, чтобы не было повторений в табличной части. У меня к примеру в одном документе 2(разные) записи, при проведении пишет туже ошибку.
10 YauheniL
 
01.11.11
02:05
(8) Переподчини в "по позиции" и глянь, что идет в таблицу проведения по регистру. Там должно быть все видно. Если дублей нет, то запишется; если есть -- будет ясно откуда взялись
11 YauheniL
 
01.11.11
02:07
(9) Да. Именно для этого.
Хотя, при проведении, таблица проведения составляется особенным образом для каждого вида документа, поэтому надо глянуть в ту таблицу значений, которая идет в регистр, какие там значения
12 IT_PROGRAMMIST
 
01.11.11
02:10
в таблице пишет:
Сотрудник Период   НомерСтроки  Дата
Иванов    01.10.11  0           08.10.11 15:00:00
Петров    01.10.11  0           08.10.11 15:00:00
13 IT_PROGRAMMIST
 
01.11.11
02:10
из за номера строки?
14 YauheniL
 
01.11.11
02:11
(13) А какая структура регистра?
15 YauheniL
 
01.11.11
02:12
Я думаю, в состояние рабтников идет физ. лицо, а они -- разные
16 IT_PROGRAMMIST
 
01.11.11
02:13
Структура регистра: измерения:ФизЛицо,ДатаРаботы,ресурс: состояние
17 YauheniL
 
01.11.11
02:20
(12) Таблица при периодичности "В пределах дня"? Если да -- ищи документы с такими же строками. Если нет -- не понятно, физ лица разные, в пределах документа быть конфикта не должно
18 catena
 
01.11.11
06:28
Про дубли строк УПП вроде как сообщает.
Про другие документы - сомневаюсь, если ошибка валится на разных людях. Хотя, могли и сделать что-нить массовое :) Что в регистре-то на эту дату?

Ну и, если регистр в порядке, я бы смотрела, не срабатывает ли два раза проведение.
19 Мимохожий Однако
 
01.11.11
06:50
(0)Посмотри, кто во второй строке документа. Есть ли он в регистре до проведения документа. Есть ли он в табличной части документа еще. Измерение дата работы как дата или как ДатаВремя?
20 SeraFim
 
01.11.11
06:51
(18) +1
"Что в регистре-то на эту дату? "
Быть может, одним документом ты отправил человека в отпуск
а другим документом отмечаешь, что с этого же дня он болеет?
Вот программа и не понимает, где сотрудник окажется - в отпуске или на больничном)
21 IT_PROGRAMMIST
 
01.11.11
10:44
согласен с (20), так и есть. Получается у меня есть больничный, с 18 по 20, система в регистре прописывает,что человек на больничном с 18 по 20, а с 21 автоматически выходит на работу. Потом отдел кадров делает еще один документ, в котором указывают,что данный человек с 21 по 22 в отпуске.А так как он у меня уже работает система и ругается.Как выйти из ситуации??????
Вот для наглядности обработка проведения док отсутствие на работе:
   ДвиженияСостояние = Движения.СостояниеРаботниковПредприятия;
   
   Для каждого СтрокаТЧ Из Работники Цикл
       
   
       НовСтрока = ДвиженияСостояние.Добавить();
       
       НовСтрока.Период        = СтрокаТЧ.ДатаНачала;
       НовСтрока.ФизЛицо        = СтрокаТЧ.Сотрудник.ФизЛицо;
       НовСтрока.ДатаПриказа    = Дата;
       НовСтрока.Состояние    = КадровыйУчет.ПолучитьСостояниеРаботника(СтрокаТЧ.ПричинаОтсутствия);
       
       Если ЗначениеЗаполнено(СтрокаТЧ.ДатаОкончания) тогда
       
           НовСтрока = ДвиженияСостояние.Добавить();
           
           НовСтрока.Период        = СтрокаТЧ.ДатаОкончания+24*3600;
           НовСтрока.ФизЛицо        = СтрокаТЧ.Сотрудник.ФизЛицо;
           НовСтрока.Состояние    = Перечисления.СостоянияРаботника.Работает;
           НовСтрока.ДатаПриказа   = Дата;
       
       КонецЕсли;
   КонецЦикла;
   
   ДвиженияСостояние.Записать();
22 catena
 
01.11.11
10:50
Убрать строчку "работает" в больничном
23 andrewks
 
01.11.11
10:52
столкнулся примерно с таким же в ЗУП.
помогло: сначала распровести документ, потом опять провести
24 IT_PROGRAMMIST
 
01.11.11
11:14
оно не даёт проводить с данной ошибкой
25 IT_PROGRAMMIST
 
01.11.11
11:25
какие ещё варианты есть?
26 catena
 
01.11.11
11:58
(25)->(22)
27 IT_PROGRAMMIST
 
01.11.11
15:15
(22) у меня при больничном не добавляется автоматически "работает".
28 catena
 
01.11.11
18:36
(27)Тогда галочку "Фактически произошло" :)

У меня, правда, Табель самописный и он эти ситуации отрабатывает, в типовой надо будет проверить.
29 IT_PROGRAMMIST
 
02.11.11
10:33
всем спасибо за помошь!!!Все получилось
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший