|
Регистр сведений. Ошибка при вызове метода контекста (Записать) | ☑ | ||
---|---|---|---|---|
0
pro3ri
10.11.15
✎
08:12
|
Добрый день!
Есть такой код: Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей(); Набор.Прочитать(); Если Набор.Количество()>0 Тогда Набор.Отбор.Дата.ЗначениеС = НачалоПериода; Набор.Отбор.Дата.ЗначениеПо = КонецПериода; Набор.Отбор.Дата.Использование = Истина; Набор.Прочитать(); Набор.Очистить(); //Если Набор.Количество()>0 Тогда // Добавлять = Ложь; //Иначе // Добавлять = Истина; //КонецЕсли; //Иначе // Добавлять = Ложь; КонецЕсли; Если ТипГрафика = Справочники.ТипыГрафиков.НайтиПоНаименованию("Пятидневка") Тогда ТекущаяДата = НачалоДня(НачалоПериода); Пока ТекущаяДата<=КонецПериода Цикл Если ДеньНедели(ТекущаяДата)<6 Тогда Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 1; Запись.График = ТипГрафика; Иначе Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 0; Запись.График = ТипГрафика; КонецЕсли; ТекущаяДата = ТекущаяДата + 60*60*24; КонецЦикла; ИначеЕсли ТипГрафика = Справочники.ТипыГрафиков.НайтиПоНаименованию("Шестидневка") Тогда ТекущаяДата = НачалоДня(НачалоПериода); Пока ТекущаяДата<=КонецПериода Цикл Если ДеньНедели(ТекущаяДата)<7 Тогда Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 1; Запись.График = ТипГрафика; Иначе Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 0; Запись.График = ТипГрафика; КонецЕсли; ТекущаяДата = ТекущаяДата + 60*60*24; КонецЦикла; КонецЕсли; Набор.Записать(Ложь); на моменте Записи выдает ошибку, {Обработка.ЗаполнениеГрафика.Форма.Форма.Форма(69)}: Ошибка при вызове метода контекста (Записать) Набор.Записать(Ложь); по причине: Запись не верна! Значение поля не соответствует установленному отбору: ГрафикиРаботы: Шестидневка, 01.01.2010 0:00:00 (Регистр сведений: Графики работы; Номер строки: 1; Поле: Дата) Смотрю отладчиком, у меня на момент записи по Отбору Дата Свойство Использование установлено в положение Истина. Как побороть? |
|||
1
NcSteel
10.11.15
✎
08:15
|
А причем тут использовать? Речь об "ГрафикиРаботы"
|
|||
2
cw014
10.11.15
✎
08:16
|
У отбора регистра сведений можно использовать только вид сравнения "равно" на сколько я помню
|
|||
3
pro3ri
10.11.15
✎
09:12
|
(2) разве?, в регистре сведений есть записи https://s.mail.ru/qrYRcsnvYHEB/img-2015-11-10-11-09-57.png
в обработке пишу &НаСервереБезКонтекста Процедура ЗаполнитьНаСервере(НачалоПериода, КонецПериода, ТипГрафика) Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей(); Набор.Отбор.Дата.Использование = Истина; Набор.Отбор.Дата.ЗначениеС = НачалоПериода; Набор.Отбор.Дата.ЗначениеПо = КонецПериода; Набор.Прочитать(); тут в наборе уже пусто (смотрел отладчиком). А вот если забить код: //Набор.Отбор.Дата.Установить(НачалоПериода); //Набор.Прочитать(); тут все по отбору Дата = НачалоПериода Почему не работает отбор ЗначениеС и ЗначениеПо? |
|||
4
cw014
10.11.15
✎
09:13
|
(3) Потому что (2)
|
|||
5
pro3ri
10.11.15
✎
09:28
|
А как тогда решить следующую задачу:
При нажатии на кнопку «Заполнить» система создает записи в регистре сведений. Последовательно заполните графики пятидневка и шестидневка за 2009 и 2010 годы. При этом учтите, что при заполнении за 2010 год, данные предыдущего года не должны удаляться. Пользователь может перезаполнить записи 2009 и 2010 года нажав на кнопку «Заполнить», и указав другой график. Понятно, первая часть решается Записать (ложь); а как быть со второй? |
|||
6
patria0muerte
10.11.15
✎
09:33
|
(5) Для этих целей в типовых добавляется измерение Год
|
|||
7
patria0muerte
10.11.15
✎
09:35
|
Т.е. ты в идеале - указываешь в отборе РС - Год и График. Очищаешь и пишешь заполняешь новый график на год.
|
|||
8
patria0muerte
10.11.15
✎
09:35
|
Вообще - гляди как в типовых сделан РегламентированныйПроизводственныйКалендарь
|
|||
9
pro3ri
10.11.15
✎
09:35
|
по-моему такой код вообще неоптимален - ракета по воробъям
&НаСервереБезКонтекста Процедура ЗаполнитьНаСервере(НачалоПериода, КонецПериода, ТипГрафика) Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей(); //Набор.Прочитать(); //Если Набор.Количество()>0 Тогда ТекущаяДата = НачалоДня(НачалоПериода); Пока ТекущаяДата<=КонецПериода Цикл Набор.Отбор.Дата.Установить(ТекущаяДата); ТекущаяДата = ТекущаяДата + 60*60*24; Набор.Прочитать(); Набор.Очистить(); Набор.Записать(); Набор.Отбор.Дата.Установить(ТекущаяДата,Ложь); КонецЦикла; //Набор.Отбор.Дата.Использование = Истина; //Набор.Отбор.Дата.ЗначениеС = НачалоПериода; //Набор.Отбор.Дата.ЗначениеПо = КонецПериода; //Набор.Прочитать(); // // //Набор.Отбор.Дата.Установить(НачалоПериода); // //Набор.Прочитать(); // Набор.Очистить(); // Набор.Записать(); // Набор.Отбор.Дата.Использование = Ложь; // //Если Набор.Количество()>0 Тогда // Добавлять = Ложь; //Иначе // Добавлять = Истина; //КонецЕсли; //Иначе // Добавлять = Ложь; //КонецЕсли; Если ТипГрафика = Справочники.ТипыГрафиков.НайтиПоНаименованию("Пятидневка") Тогда ТекущаяДата = НачалоДня(НачалоПериода); Пока ТекущаяДата<=КонецПериода Цикл Если ДеньНедели(ТекущаяДата)<6 Тогда Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 1; Запись.График = ТипГрафика; Иначе Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 0; Запись.График = ТипГрафика; КонецЕсли; ТекущаяДата = ТекущаяДата + 60*60*24; КонецЦикла; ИначеЕсли ТипГрафика = Справочники.ТипыГрафиков.НайтиПоНаименованию("Шестидневка") Тогда ТекущаяДата = НачалоДня(НачалоПериода); Пока ТекущаяДата<=КонецПериода Цикл Если ДеньНедели(ТекущаяДата)<7 Тогда Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 1; Запись.График = ТипГрафика; Иначе Запись = Набор.Добавить(); Запись.Дата = ТекущаяДата; Запись.Значение = 0; Запись.График = ТипГрафика; КонецЕсли; ТекущаяДата = ТекущаяДата + 60*60*24; КонецЦикла; КонецЕсли; //Если Добавлять Тогда //Набор.Записать(Ложь); //Иначе Набор.Записать(Ложь); //КонецЕсли; //Набор.Записать(Ложь); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(Объект.НачалоДатыЗаполнения, Объект.КонецДатыЗаполнения, Объект.ТипГрафика); КонецПроцедуры |
|||
10
pro3ri
10.11.15
✎
09:45
|
Благодарю за совет!
(7) а если это будет не год? Если пятидневка 3 мес и шестидневка 9 мес? |
|||
11
patria0muerte
10.11.15
✎
10:11
|
Ну бери период какой тебе надо.
Если помесячно график надо заполнять, то можешь еще измерение с номером месяца добавить. С кварталом также. Т.е. если просто, то структура регистра такая получается: Измерения: - ДатаКалендаря - Год - Квартал //Если нужно - График Ресурсы: - Значение (тут или кол-во часов, или булево или что угодно) |
|||
12
patria0muerte
10.11.15
✎
10:12
|
В УПП 1.2 сделано вот так:
Измерения: - ДатаКалендаря - Год Ресурсы: - Пятидневка - Шестидневка - КалендарныеДни - ВидДня |
|||
13
pro3ri
10.11.15
✎
11:07
|
спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |