Как получить подчиненный элемент
Показывать по
10
20
40
сообщений
- 1
- 2
20.07.2009
15:21
#12
"Да нет, не совсем спутали. Проблема в самом деле возникает, но при каких то манипуляциях с реквизитом упорядочивания в выборке (например перенумерация) или при смещениях в ней, связанных с прямым удалением элементов (не пометкой на удаление). Вот, например, алгоритм, который вызовет проблему:
Материалы=СоздатьОбъект("Справочник.Материалы");
Материалы.ВыбратьЭлементы();
Пока Материалы.ПолучитьЭлемент()=1 Цикл
Материалы.Удалить(1);
КонецЦикла;
Движок при этом выкатит ругалку. Но забавно то, такой вот алгоритм проблем не вызывает, хотя, с моей точки зрения, написано одно и то же:
История=СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("НаименованиеРеквизита",СсылкаНаЭлементСправочника);
История.ВыбратьЗначения();
Пока История.ПолучитьЗначение()=1 Цикл
История.Удалить();
КонецЦикла;
я так и не удосужился посмотреть, корректно ли отрабатывается смещение в выборке в этом случае, поэтому чтоб уж зачистить историю "наверняка", да еще с учетом того, что версии платформы у народа могут быть любые (я ж не знаю чего там 1С в них меняет), пишу так:
История=СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("НаименованиеРеквизита",СсылкаНаЭлементСправочника);
ЕстьИзменения=1;
Пока ЕстьИзменения=1 Цикл
ЕстьИзменения=0;
История.ВыбратьЗначения();
Пока История.ПолучитьЗначение()=1 Цикл
История.Удалить();
КонецЦикла;
КонецЦикла;"
Материалы=СоздатьОбъект("Справочник.Материалы");
Материалы.ВыбратьЭлементы();
Пока Материалы.ПолучитьЭлемент()=1 Цикл
Материалы.Удалить(1);
КонецЦикла;
Движок при этом выкатит ругалку. Но забавно то, такой вот алгоритм проблем не вызывает, хотя, с моей точки зрения, написано одно и то же:
История=СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("НаименованиеРеквизита",СсылкаНаЭлементСправочника);
История.ВыбратьЗначения();
Пока История.ПолучитьЗначение()=1 Цикл
История.Удалить();
КонецЦикла;
я так и не удосужился посмотреть, корректно ли отрабатывается смещение в выборке в этом случае, поэтому чтоб уж зачистить историю "наверняка", да еще с учетом того, что версии платформы у народа могут быть любые (я ж не знаю чего там 1С в них меняет), пишу так:
История=СоздатьОбъект("Периодический");
История.ИспользоватьОбъект("НаименованиеРеквизита",СсылкаНаЭлементСправочника);
ЕстьИзменения=1;
Пока ЕстьИзменения=1 Цикл
ЕстьИзменения=0;
История.ВыбратьЗначения();
Пока История.ПолучитьЗначение()=1 Цикл
История.Удалить();
КонецЦикла;
КонецЦикла;"
- 1
- 2
Читают тему
(гостей: 1)