|
Ошибка при записи в регистр сведений. | ☑ | ||
---|---|---|---|---|
0
Ly_Alena
12.02.19
✎
09:29
|
Добрый день!
Регистр сведений - периодический неподчиненный. НаборЗаписей = РегистрыСведений.РегистрацияКадровыхДокументов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); НаборЗаписей.Отбор.Сотрудник.Установить(ВыборкаЗаписейРегистра.Сотрудник); Для Каждого НоваяЗапись Из НаборЗаписей Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.НомерПорядковый = НаборЗаписей.НомерПорядковый + КоличествоПриказов; НоваяЗапись.БукваНомера = НаборЗаписей.БукваНомера; НоваяЗапись.Документ = Ссылка; НоваяЗапись.Сотрудник = НаборЗаписей.Сотрудник; НоваяЗапись.Автор = ЭтотОбъект.Автор; НоваяЗапись.Отредактировано = Справочники.Пользователи.ПустаяСсылка(); КоличествоПриказов = КоличествоПриказов + 1; КонецЦикла НаборЗаписей.Записать(); При отладке ошибка: НаборЗаписей.Отбор.Документ.Установить {(1)}: Поле объекта не обнаружено (Установить) |
|||
1
Ly_Alena
12.02.19
✎
09:30
|
Мне нужно чтобы номера по новой не присваивались, если такие записи уже есть.
|
|||
2
Радим1987
12.02.19
✎
09:36
|
Документ измрение?
|
|||
3
Ly_Alena
12.02.19
✎
09:37
|
Пардон!
НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.НомерПорядковый = ВыборкаЗаписейРегистра.НомерПорядковый + КоличествоПриказов; НоваяЗапись.БукваНомера = ВыборкаЗаписейРегистра.БукваНомера; НоваяЗапись.Документ = Ссылка; НоваяЗапись.Сотрудник = ВыборкаЗаписейРегистра.Сотрудник; НоваяЗапись.Автор = ЭтотОбъект.Автор; НоваяЗапись.Отредактировано = Справочники.Пользователи.ПустаяСсылка(); КоличествоПриказов = КоличествоПриказов + 1; |
|||
4
Ly_Alena
12.02.19
✎
09:37
|
(2) Документ и Сотрудник - измерение
|
|||
5
Радим1987
12.02.19
✎
09:40
|
НаборЗаписей.Прочитать();
|
|||
6
Ly_Alena
12.02.19
✎
09:42
|
(5) Пробовала - не работает.
|
|||
7
Ly_Alena
12.02.19
✎
09:42
|
НаборЗаписей.Прочитать {(1)}: Поле объекта не обнаружено (Прочитать)
|
|||
8
Радим1987
12.02.19
✎
09:44
|
|
|||
9
Ly_Alena
12.02.19
✎
09:50
|
(8) не работает прочитать и установить
|
|||
10
Ly_Alena
12.02.19
✎
09:52
|
(8) (9) Я много перерыла примеров, прежде чем написать. Какой-то тупняк.
|
|||
11
Numerus Mikhail
12.02.19
✎
09:52
|
(9) Значит что-то обманываете
Возможно забыли обновить базу? Ну и для начала сделай Сообщить(ТипЗнч(НаборЗаписей)); |
|||
12
hhhh
12.02.19
✎
09:53
|
(9) НаборЗаписей2 = РегистрыСведений.РегистрацияКадровыхДокументов.СоздатьНаборЗаписей();
НаборЗаписей2.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); |
|||
13
Ly_Alena
12.02.19
✎
09:55
|
(11) Регистр сведений набор записей: Регистрация кадровых документов
|
|||
14
Ly_Alena
12.02.19
✎
09:56
|
(12) не поняла - смысл только в НаборЗаписей2?
|
|||
15
Радим1987
12.02.19
✎
10:01
|
Конфигураторе установлен режим записи "Подчинение регистратору", отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений, для непериодических - только по значению измерений.
|
|||
16
Радим1987
12.02.19
✎
10:02
|
НаборЗаписей.Отбор.Период.Установить(КакойтоПериод);
|
|||
17
Радим1987
12.02.19
✎
10:03
|
Попробуй установить по периоду
|
|||
18
Ly_Alena
12.02.19
✎
10:16
|
(15) (16) (17)
Проблема была в цикле: Пока ВыборкаЗаписейРегистра.Следующий() Цикл Сообщить(ВыборкаЗаписейРегистра.Документ); Сообщить(ВыборкаЗаписейРегистра.Сотрудник); НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); НаборЗаписей.Отбор.Сотрудник.Установить(ВыборкаЗаписейРегистра.Сотрудник); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.НомерПорядковый = ВыборкаЗаписейРегистра.НомерПорядковый + КоличествоПриказов; НоваяЗапись.БукваНомера = ВыборкаЗаписейРегистра.БукваНомера; НоваяЗапись.Документ = Ссылка; НоваяЗапись.Сотрудник = ВыборкаЗаписейРегистра.Сотрудник; НоваяЗапись.Автор = ЭтотОбъект.Автор; НоваяЗапись.Отредактировано = Справочники.Пользователи.ПустаяСсылка(); КоличествоПриказов = КоличествоПриказов + 1; КонецЦикла; Но сейчас вылетает ошибка {Документ.ТрудовыеОтпускаОрганизаций.МодульОбъекта(1880)}: Ошибка при вызове метода контекста (Записать) НаборЗаписей.Записать(); по причине: Запись не верна! Значение поля не соответствует установленному отбору: |
|||
19
Ly_Alena
12.02.19
✎
10:17
|
Хоть при перепроведении того же документа, хоть при проведении другого
|
|||
20
hhhh
12.02.19
✎
10:22
|
НаборЗаписей.Отбор.Документ.Установить(Ссылка);
|
|||
21
Numerus Mikhail
12.02.19
✎
10:25
|
(19) Покажи код, который в данный момент у тебя написан
начиная от создания набора записей, заканчивая записью. |
|||
22
Ly_Alena
12.02.19
✎
10:31
|
Функция ПроверитьЗаписиРегистраРегистрацияКадровыхДокументов()
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РегистрацияКадровыхДокументов.НомерПорядковый, | РегистрацияКадровыхДокументов.БукваНомера, | РегистрацияКадровыхДокументов.Документ, | РегистрацияКадровыхДокументов.Сотрудник |ИЗ | РегистрСведений.РегистрацияКадровыхДокументов.СрезПоследних КАК РегистрацияКадровыхДокументов"; Возврат Запрос.Выполнить(); КонецФункции Процедура ПрисвоитьПорядковыйНомер() ВыборкаЗаписейРегистра = ПроверитьЗаписиРегистраРегистрацияКадровыхДокументов().Выбрать(); НаборЗаписей = РегистрыСведений.РегистрацияКадровыхДокументов.СоздатьНаборЗаписей(); КоличествоПриказов = 0; Если ВыборкаЗаписейРегистра.Количество() > 0 Тогда Пока ВыборкаЗаписейРегистра.Следующий() Цикл НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); НаборЗаписей.Отбор.Сотрудник.Установить(ВыборкаЗаписейРегистра.Сотрудник); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.НомерПорядковый = ВыборкаЗаписейРегистра.НомерПорядковый + КоличествоПриказов; НоваяЗапись.БукваНомера = ВыборкаЗаписейРегистра.БукваНомера; НоваяЗапись.Документ = Ссылка; НоваяЗапись.Сотрудник = ВыборкаЗаписейРегистра.Сотрудник; НоваяЗапись.Автор = ЭтотОбъект.Автор; НоваяЗапись.Отредактировано = Справочники.Пользователи.ПустаяСсылка(); КоличествоПриказов = КоличествоПриказов + 1; КонецЦикла; КонецЕсли; НаборЗаписей.Записать(); КонецПроцедры |
|||
23
RomanYS
12.02.19
✎
10:34
|
(22) НаборЗаписей.Записать(); надо в цикле делать по каждому отбору
|
|||
24
Ly_Alena
12.02.19
✎
10:36
|
Кажется я поняла - я записываю то что в регистре... Даже если там этих записей нет.
(23) пробовала |
|||
25
RomanYS
12.02.19
✎
10:38
|
(24) Нет, тебе только кажется, что поняла)
|
|||
26
Ly_Alena
12.02.19
✎
10:40
|
Пока ВыборкаЗаписейРегистра.Следующий() Цикл
НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); НаборЗаписей.Отбор.Сотрудник.Установить(ВыборкаЗаписейРегистра.Сотрудник); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТрудовыеОтпускаОрганизацийРаботникиОрганизации.Сотрудник |ИЗ | Документ.ТрудовыеОтпускаОрганизаций.РаботникиОрганизации КАК ТрудовыеОтпускаОрганизацийРаботникиОрганизации |ГДЕ | ТрудовыеОтпускаОрганизацийРаботникиОрганизации.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаИзДокумента = РезультатЗапроса.Выбрать(); Пока ВыборкаИзДокумента.Следующий() Цикл КоличествоПриказов = КоличествоПриказов + 1; НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.НомерПорядковый = ВыборкаЗаписейРегистра.НомерПорядковый + КоличествоПриказов; НоваяЗапись.БукваНомера = ВыборкаЗаписейРегистра.БукваНомера; НоваяЗапись.Документ = Ссылка; НоваяЗапись.Сотрудник = ВыборкаИзДокумента.Сотрудник; НоваяЗапись.Автор = ЭтотОбъект.Автор; НоваяЗапись.Отредактировано = Справочники.Пользователи.ПустаяСсылка(); КонецЦикла; КонецЦикла; |
|||
27
Ly_Alena
12.02.19
✎
10:41
|
Я тупая. Не понимаю - отбор работает. Почему если проводить другой документ - ошибка не соответствует отбору. Разве не должен записать, если не соответствует?
|
|||
28
Ly_Alena
12.02.19
✎
10:44
|
(27) Ничего не записывает:
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {Документ.ТрудовыеОтпускаОрганизаций.МодульОбъекта(1858)}: Ошибка при вызове метода контекста (Записать) по причине: Запись не верна! Значение поля не соответствует установленному отбору |
|||
29
RomanYS
12.02.19
✎
10:45
|
(27)
>>Разве не должен записать, если не соответствует? Не должно. Должны быть одинаковые значения: НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); НоваяЗапись.Документ = Ссылка; И записывать надо при каждом отборе, набор при этом очищается. |
|||
30
RomanYS
12.02.19
✎
10:47
|
Это самописный регистр?
|
|||
31
RomanYS
12.02.19
✎
10:49
|
Откуда вообще при проведении берется ВыборкаЗаписейРегистра.Документ. Вы хотите перезаписывать записи по другим документам?
|
|||
32
Ly_Alena
12.02.19
✎
11:33
|
(30) Регистр самописный.
(31) Из Функция ПроверитьЗаписиРегистраРегистрацияКадровыхДокументов() Есть группа документов, по которым мне нужна сквозная нумерация. Стандартный нумератор не пойдет. Мне нужно чтобы если документ перепроводился - то новый номер ему не присваивался, если не менялся сотрудник. |
|||
33
Ly_Alena
12.02.19
✎
11:36
|
(32) А тем что проводятся впервые - номер присваивался по порядку
|
|||
34
Ёпрст
12.02.19
✎
11:40
|
(32) че там непонятного ? Вы отбор делаете по одному документу, а запись пытаетесь делать по другому документу.
1с-ина вас посылает лесом. Вам нужно отбор устанавливать в цикле создания записей, а не ДО |
|||
35
RomanYS
12.02.19
✎
11:43
|
(32) не хочется вникать в реализацию всего этого, но
-зачем снимать весь срез и обходить его? -зачем регистр периодический? -НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ) точно не нужно, если не собираешься перезаписывать другие документы |
|||
36
Ly_Alena
12.02.19
✎
11:48
|
(35) срез снимаю весь - чтобы получить данные для отбора (сотрудник)
регистр - периодический, непериодический не принципиально я собираюсь перезаписывать и другие документы тоже. |
|||
37
Ly_Alena
12.02.19
✎
11:49
|
(35) Если я Вас правильно поняла:
Пока ВыборкаЗаписейРегистра.Следующий() Цикл //НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); //НаборЗаписей.Отбор.Сотрудник.Установить(ВыборкаЗаписейРегистра.Сотрудник); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТрудовыеОтпускаОрганизацийРаботникиОрганизации.Сотрудник |ИЗ | Документ.ТрудовыеОтпускаОрганизаций.РаботникиОрганизации КАК ТрудовыеОтпускаОрганизацийРаботникиОрганизации |ГДЕ | ТрудовыеОтпускаОрганизацийРаботникиОрганизации.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаИзДокумента = РезультатЗапроса.Выбрать(); Пока ВыборкаИзДокумента.Следующий() Цикл НаборЗаписей.Отбор.Документ.Установить(ВыборкаЗаписейРегистра.Документ); НаборЗаписей.Отбор.Сотрудник.Установить(ВыборкаЗаписейРегистра.Сотрудник); КоличествоПриказов = КоличествоПриказов + 1; НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.НомерПорядковый = ВыборкаЗаписейРегистра.НомерПорядковый + КоличествоПриказов; НоваяЗапись.БукваНомера = ВыборкаЗаписейРегистра.БукваНомера; НоваяЗапись.Документ = Ссылка; НоваяЗапись.Сотрудник = ВыборкаИзДокумента.Сотрудник; НоваяЗапись.Автор = ЭтотОбъект.Автор; НоваяЗапись.Отредактировано = Справочники.Пользователи.ПустаяСсылка(); НаборЗаписей.Записать(); КонецЦикла; КонецЦикла; Так тоже не работает. |
|||
38
Ly_Alena
12.02.19
✎
11:51
|
(35) в одном документе может быть больше одного сотрудника. Если отбор только по документу - то нумерация вся меняется хоть и в нужном диапозоне. Например провели документ, а потом заметили что перепутали сотрудника. Этому сотруднику нужно оставить номер, но переписать имя, все остальное не трогать.
|
|||
39
Ёпрст
12.02.19
✎
12:06
|
(37)
|
|||
40
RomanYS
12.02.19
✎
12:06
|
(37) абстрагируясь от задачи в НаборЗаписей.Отбор.Документ и НоваяЗапись.Документ должно быть одно значение
|
|||
41
Ly_Alena
12.02.19
✎
12:21
|
(40) Например, один документ - два сотрудника - при первом проведении в регистре появляются две записи на каждого сотрудника. При втором - отбором сначала проверяет первую запись, потом вторую - разве не так?
|
|||
42
RomanYS
12.02.19
✎
12:28
|
(41) Ничего не понял. Был документ1, сейчас проводится документ2. Твой код пытается в отбор по документ1(ВыборкаЗаписейРегистра.Документ) сделать запись с документ2(=Ссылка). Система не дает.
Похоже твои представления о работе регистров не соответствуют действительности. |
|||
43
Ly_Alena
12.02.19
✎
12:36
|
(42) Я думаю Вы правы. Моё представление было следующим - отбор проверяет если записи в регистре документа, который я провожу, если есть перезаписать, если нет записать присвоив новые номера.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |