|
Ошибка при переборе периодических реквизитов справочника ?
|
|||
---|---|---|---|
#18+
Здравствуйте, в общем на ваял процедуру которая удаляет значения периодических реквизитов и устанавливает текущее значение на указанную дату: Процедура Сформировать() ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); Период=СоздатьОбъект("Периодический"); МетаСпр = Метаданные.Справочник(ОС.Вид()); НекаяДата = Дата("31.12.2012"); ОС.ВыбратьЭлементы(); Пока ОС.ПолучитьЭлемент() = 1 Цикл Если ОС.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли; Сообщить(ОС.Наименование); Для Инд = 1 По МетаСпр.Реквизит() Цикл Если МетаСпр.Реквизит(Инд).Периодический = 1 тогда Период.ИспользоватьОбъект(МетаСпр.Реквизит(Инд).Идентификатор, ОС.ТекущийЭлемент()); Значение = Период.ЗначениеНаДату(РабочаяДата()); Период.ВыбратьЗначения(); Пока Период.ПолучитьЗначение()=1 Цикл Период.Удалить(); КонецЦикла; Период.Значение = Значение; Период.ДатаЗнач = НекаяДата; Период.Записать(); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры Проходит несколько элементов справочника все нормально работает, все удаляет и все устанавливает, но на каком то элементе выдает такую ошибку: Период.Удалить(); {D:\МОИ ОБРАБОТКИ\УДАЛИТЬИСТОРИЮПЕРИОДРЕКВ.ERT(19)}: Значение установлено документом! Как обойти это ограничение (ну или как правильно назвать это) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2013, 13:41 |
|
Ошибка при переборе периодических реквизитов справочника ?
|
|||
---|---|---|---|
#18+
Точно не помню - но в 7 помоему нельзя удалять установелнные документом. Можно только отменить проведение документа или изменить процедуру его проведения. Может проще пропускать в вашей обработки значения установленные документами? А потом их отдельно удалите. ps Судя по вашей процедуре - это перенос остатков. Значит нужно вместо старых документов заводить документ ввод остатков по ОС. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2013, 14:35 |
|
Ошибка при переборе периодических реквизитов справочника ?
|
|||
---|---|---|---|
#18+
Программист 1с, тут просто остатки по основным средствам достаточно много времени вводились , а потом как оказалось амортизация считается только если объект ОС введен в прошлом месяце, т.е. как я понял если ввести объект 31.12.2012 то за январь 2013 можно посчитать амортизацию, а если вводить остатки 01.01.2013 то январь выпадает, так и заладилась идея изменить реквизиты. Но я столкнулся еще с одной проблемой: Один из периодических реквизитов данного справочника является "счет затрат", когда я удаляю все записи по данному реквизиту, а потом записываю на другую дату то удаляются субконта по счету, делаю попытки восстановить: Процедура Сформировать() Перем Док, Элемент; ОС = СоздатьОбъект("Справочник.ОсновныеСредства"); Период=СоздатьОбъект("Периодический"); МетаСпр = Метаданные.Справочник(ОС.Вид()); НекаяДата = Дата("31.12.2012"); ОС.ВыбратьЭлементы(); Пока ОС.ПолучитьЭлемент() = 1 Цикл Если ОС.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли; Сообщить(ОС.Код + " "+ ОС.Наименование); Суб1 = ОС.ТекущийЭлемент().Субконто1; Суб2 = ОС.ТекущийЭлемент().Субконто2; Суб3 = ОС.ТекущийЭлемент().Субконто3; Для Инд = 1 По МетаСпр.Реквизит() Цикл Если МетаСпр.Реквизит(Инд).Периодический = 1 Тогда Период.ИспользоватьОбъект(МетаСпр.Реквизит(Инд).Идентификатор, ОС.ТекущийЭлемент()); Значение = Период.ЗначениеНаДату(РабочаяДата()); Период.ВыбратьЗначения(); Пока Период.ПолучитьЗначение()=1 Цикл Док = Период.ТекущийДокумент(); Если ПустоеЗначение(Док) = 0 Тогда Сообщить("Док № "+Док.НомерДок+" Документ: "+Док.Операция+" Реквизит: "+МетаСпр.Реквизит(Инд).Идентификатор); Продолжить; КонецЕсли; Период.Удалить(); КонецЦикла; Период.Значение = Значение; Период.ДатаЗнач = НекаяДата; Период.Записать(); КонецЕсли; КонецЦикла; ОС.ТекущийЭлемент().НазначитьТип("Субконто1", ВидыСубконто.ЗначениеПоИдентификатору(Суб1)); ОС.ТекущийЭлемент().Субконто1 = Суб1; ОС.ТекущийЭлемент().НазначитьТип("Субконто2", ВидыСубконто.ЗначениеПоИдентификатору(Суб1)); ОС.ТекущийЭлемент().Субконто2 = Суб2; ОС.ТекущийЭлемент().НазначитьТип("Субконто3", ВидыСубконто.ЗначениеПоИдентификатору(Суб1)); ОС.ТекущийЭлемент().Субконто3 = Суб3; ОС.Записать(); КонецЦикла; КонецПроцедуры но почему то после прогонки обработкой поля субконто все равно оказываются пусты, подскажите пожалуйста как их можно восстановить (не потерять) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2013, 17:35 |
|
Ошибка при переборе периодических реквизитов справочника ?
|
|||
---|---|---|---|
#18+
Проводки можно поменять. Вернуть субконто... как я понимаю проще всего еще раз провести документы по вводу в эксплуатацию ОС. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2013, 18:38 |
|
Ошибка при переборе периодических реквизитов справочника ?
|
|||
---|---|---|---|
#18+
Программист 1с, Не понял что вы имели ввиду, дело в том что справочник Основные средства хранит счет отнесения затрат на амортизацию и субконто по счету затрат, т.е. счет и субконто это справочная информация и от проведения документов она не зависит, как бы я не дела я не могу обратится к полям объект потому что не определяется типы объекта например : Счет = Элемент.СчетЗатрат; Суб1 = Элемент.Субконто1; Суб2 = Элемент.Субконто2; Суб3 = Элемент.Субконто3; И в отладчике и процедурой ТипЗначенияСтр(<?>) определяет как неопределенный объект, следовательно ни свойства ни методы этих объектов не понимаются ? как решить проблем а ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 11:04 |
|
Ошибка при переборе периодических реквизитов справочника ?
|
|||
---|---|---|---|
#18+
вернее зависит от документов при условии что запись периодического реквизита создавалась через документ, но таких меньшенство в основном редактировалось по средством самого справочника ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 11:23 |
|
|
start [/forum/topic.php?fid=28&msg=38510340&tid=1519559]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 134ms |
0 / 0 |