Консультация № 63902
23.11.2006, 18:16
0.00 руб.
0 3 3
Здравуствуйте! Уважаемые эксперты, подскажите пожалуйста мне в очередной раз.
Пишу обработку по удалению нулевых значений в истории (Номенклатура.Себестоимость). Как в приложении работает, но как видно, сделано только для конкретного наименования. А как мне сделать, чтобы удалялось во всём справочнике (имеет группы) или хотя бы в определенной группе. Спасибо!

Приложение:
//*******************************************Процедура Сформировать() вСпр=СоздатьОбъект("Справочник.Номенклатура"); вСпр.НайтиПоКоду(200);Если вСпр.Выбран() = 1 ТогдаИначеПредупреждение("Не найдено !");Возврат;КонецЕсли;вПериодический=СоздатьОбЪект("Периодический");// Создаем периодический обЪект.вПериодический.ИспользоватьОбъект("Себестоимость",вСпр.ТекущийЭлемент()); // Связываем обЪекты.вПервый=1; // Для того чтобы не потереть 1-й элемент, тк он достаточно важен, даже если и ноль.вПериодический.ВыбратьЗначения(); // Открываем выборку значений.Пока (вПериодический.ПолучитьЗначение()=1) Цикл // Выбираем значение из списка.// Не первый элемент. Если (вПериодический.Значение=0) Тогда // Удаляем это значение. вПериодический.Удалить(); Иначе вПервый=0; // Пропускаем первое значение. КонецЕсли; КонецЦикла; Сообщить ("Удаление закончено");КонецПроцедуры

Обсуждение

Неизвестный
23.11.2006, 18:34
общий
это ответ
Здравствуйте, Darina!
вСпр.НайтиПоКоду(200);
нужно заменить на
вСпр.ВыбратьЭлементы()
Пока вСпр.получитьЭлемент()=1 Цикл
ну и закрыть цикл.
Переберутся все элементы справочника, независимо от групп.
Кстати, а почему вы не трете подряд идущие дублирующиеся значения?
Неизвестный
23.11.2006, 19:07
общий
это ответ
Здравствуйте, Darina!

В Вашей обработке в строке 5 указано позиционирование на конкретном элементе. Используйте цикл…

//*******************************************
//С циклом перебора всех элементов справочника
Процедура Сформировать()
вСпр=СоздатьОбъект("Справочник.Номенклатура");
вСпр.ВыбратьЭлементы();
Пока вСпр.ПолучитьЭлемент()>0 Цикл
Тек=вСпр.ТекущийЭлемент();
Если Тек.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
вПериодический=СоздатьОбЪект("Периодический");
// Создаем периодический обЪект.
вПериодический.ИспользоватьОбъект("Себестоимость",Тек);
// Связываем обЪекты.
вПервый=1;
// Для того чтобы не потереть 1-й элемент, тк он достаточно важен, даже если и ноль.
вПериодический.ВыбратьЗначения();
// Открываем выборку значений.
Пока (вПериодический.ПолучитьЗначение()=1) Цикл
// Выбираем значение из списка.
// Не первый элемент.
Если (вПериодический.Значение=0) Тогда
// Удаляем это значение.
вПериодический.Удалить();
Иначе
вПервый=0;
// Пропускаем первое значение.
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры

//*******************************************
// Если хотите анализировать элементы только определенной группы
// ВыбГруппа – наш элемент диалога
Процедура Сформировать()
вСпр=СоздатьОбъект("Справочник.Номенклатура");
вСпр.ИспользоватьРодителя(ВыбГруппа);
вСпр.ВключатьПодчиненные(1);
вСпр.ВыбратьЭлементы();
Пока вСпр.ПолучитьЭлемент()>0 Цикл
Тек=вСпр.ТекущийЭлемент();
Если Тек.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
вПериодический=СоздатьОбЪект("Периодический");
// Создаем периодический обЪект.
вПериодический.ИспользоватьОбъект("Себестоимость",Тек);
// Связываем обЪекты.
вПервый=1;
// Для того чтобы не потереть 1-й элемент, тк он достаточно важен, даже если и ноль.
вПериодический.ВыбратьЗначения();
// Открываем выборку значений.
Пока (вПериодический.ПолучитьЗначение()=1) Цикл
// Выбираем значение из списка.
// Не первый элемент.
Если (вПериодический.Значение=0) Тогда
// Удаляем это значение.
вПериодический.Удалить();
Иначе
вПервый=0;
// Пропускаем первое значение.
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
//*******************************************
// Если используете вместо элемента диалога список значений
// ВыбСписок – список значений
Процедура Сформировать()
вСпр=СоздатьОбъект("Справочник.Номенклатура");
вСпр.ВыбратьЭлементы();
Пока вСпр.ПолучитьЭлемент()>0 Цикл
Тек=вСпр.ТекущийЭлемент();
Если ВыбСписок.Принадлежит(Тек)=0 Тогда
Продолжить;
КонецЕсли;
Если Тек.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
вПериодический=СоздатьОбЪект("Периодический");
// Создаем периодический обЪект.
вПериодический.ИспользоватьОбъект("Себестоимость",Тек);
// Связываем обЪекты.
вПервый=1;
// Для того чтобы не потереть 1-й элемент, тк он достаточно важен, даже если и ноль.
вПериодический.ВыбратьЗначения();
// Открываем выборку значений.
Пока (вПериодический.ПолучитьЗначение()=1) Цикл
// Выбираем значение из списка.
// Не первый элемент.
Если (вПериодический.Значение=0) Тогда
// Удаляем это значение.
вПериодический.Удалить();
Иначе
вПервый=0;
// Пропускаем первое значение.
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Удачи!
Неизвестный
23.11.2006, 21:29
общий
это ответ
Здравствуйте, Darina!

Вам надо сделать так:

вПериодический=СоздатьОбЪект("Периодический");
вСпр.ВыбратьЭлементы();
Пока вСпр.ПолучитьЭлемент() = 1 Цикл

// а дальше Ваша обработка
вПериодический.ИспользоватьОбъект("Себестоимость",вСпр.ТекущийЭлемент());
// Связываем обЪекты.
вПервый=1;
// Для того чтобы не потереть 1-й элемент, тк он достаточно важен, даже если и ноль.
вПериодический.ВыбратьЗначения();
// Открываем выборку значений.
Пока (вПериодический.ПолучитьЗначение()=1) Цикл
// Выбираем значение из списка.
// Не первый элемент.
Если (вПериодический.Значение=0) Тогда
// Удаляем это значение.
вПериодический.Удалить();
Иначе
вПервый=0;
// Пропускаем первое значение.
КонецЕсли;
КонецЦикла;
// конец Вашей обработки
КонецЦикла;
Форма ответа