|   |   | 
| 
 | Регистр сведений. Ошибка при вызове метода контекста (Записать) | ☑ | ||
|---|---|---|---|---|
| 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 | 
        спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |