Имя: Пароль:
1C
 
Вопрос чайника. Ногами просьба не пинать.
↓ (Волшебник 08.12.2004 07:16)
0 Буцефал
 
08.12.04
02:02
Удаляем цены (периодические) для справочника "Номенклатура".
Переменные: СпрНП-справочник номенклатуры, ЦеныНП - подчиненный СпрНП справочник цен, ЦенаНП-переодический реквизит ЦеныНП, собсна цена; ЦенаПер - объект "Периодический".
При выполнении наблюдаем ошибку:
ЦеныПер.Удалить();
{C:\УДАЛЕНИЕ_ЦЕН.ERT(48)}: Перед выполнением операции нужно вызвать 'ИспользоватьОбъект'!
ЧТО НЕ ТАК? ПОДСКАЖИТЕ ПОЖАЛУЙСТА.
Код:
   Если (ПустоеЗначение(Дата1)=0)ИЛИ(ПустоеЗначение(Дата2)=0)  Тогда
       Уд=0;
       СпрНП.ВыбратьЭлементы(0);
       Пока СпрНП.ПолучитьЭлемент()=1 Цикл
           Если (СпрНП.ПометкаУдаления()=1)ИЛИ (ПустоеЗначение(СпрНП.Наименование)=1)  Тогда
               Продолжить;
           КонецЕсли;    
           СптНПТек=СпрНП.ТекущийЭлемент();
           ЦеныНП.ИспользоватьВладельца(СптНПТек);
           Если ЦеныНП.ВыбратьЭлементы()=1 Тогда
               Сообщить("Удаляем цены для "+СокрЛП(СптНПТек));
               Пока ЦеныНП.ПолучитьЭлемент()=1 Цикл
                   ТекЭл=ЦеныНП.ТекущийЭлемент();
                   ТекЦ=ТекЭл.ЦенаНП;
                   ЦеныПер.ИспользоватьОбъект(ТекЦ,ТекЭл);
                   ЦеныПер.ВыбратьЗначения(Дата1,Дата2);
                   Пока ЦеныПер.ПолучитьЗначение()=1 Цикл
                       ЦеныПер.Удалить();
                       Уд=Уд+1;
                   КонецЦикла;    
               КонецЦикла;
           Иначе
               Сообщить("Нет элементов для "+СокрЛП(СптНПТек),);
               Продолжить;
           КонецЕсли;    
       КонецЦикла;
       Сообщить("Удалено "+Уд+" записей");
   Иначе
       Предупреждение("Введите все даты!!!");
       Возврат;
   КонецЕсли;
1 romix
 
08.12.04
02:10
Попробуй так:

Пока ЦеныПер.ПолучитьЗначение()=1 Цикл
           ЦеныПер.Удалить();
           Уд=Уд+1;
                       ЦеныПер.ВыбратьЭлементы();
         КонецЦикла;  


Короче у тебя нарушается выборка.
2 romix
 
08.12.04
02:12
Тьфу ты,  не элементы а значения.
ВыбратьЗначения()
3 romix
 
08.12.04
02:14
ЦеныПер.ВыбратьЗначения(Дата1,Дата2);
         Пока ЦеныПер.ПолучитьЗначение()=1 Цикл
           ЦеныПер.Удалить();
                       ЦеныПер.ВыбратьЗначения(Дата1,Дата2);
           Уд=Уд+1;
         КонецЦикла;
4 romix
 
08.12.04
02:21
У 1С традиционно в таких случаях очень четкая диагностика ошибки.
Типа без бутылки и не разберешься.

А вообще такие глюки можно разруливать через Google/Yandex по строке сообщения об ошибке.
5 Буцефал
 
08.12.04
02:21
Да выборка действительно нарушалась, сейчас ошибки не было. Но цены обработка все равно не удалила:
>>Сообщить("Удалено "+Уд+" записей"); -> Удалено 0 записей. Все осталось как было:(((((
6 Буцефал
 
08.12.04
02:22
(4) Искал, но не нашел.
7 Буцефал
 
08.12.04
02:22
...вдогонку
Может плохо искал
8 romix
 
08.12.04
02:39
Может, там нет уже записей для цен с такими датами?
А попробуй воткнуть в середину цикла Сообщить() с какой-нибудь хренью
(отладочной печатью).
9 Буцефал
 
08.12.04
02:45
Нет цены то там остались, у меня в обработке есть процедурка для их подсчета. Да и визуально они наблюдаются в том диапозоне.
Поменял диапозон - поставил с начала года и опять ошибка "Перед выполнением операции нужно вызвать 'ИспользоватьОбъект'!". Сижу обтекаю....
10 romix
 
08.12.04
02:51
(9) Так ты обе даты (и вне, и внутри цикла) поставил с начала года?
11 Буцефал
 
08.12.04
02:56
Дата1 - начало года, Дата2 - текущая
>>(и вне, и внутри цикла)
Не понял вопроса.
12 Буцефал
 
08.12.04
02:58
А может здесь ошибка?:
ТекЭл=ЦеныНП.ТекущийЭлемент();
ТекЦ=ТекЭл.ЦенаНП;
ЦеныПер.ИспользоватьОбъект(ТекЦ,ТекЭл);
13 romix
 
08.12.04
03:06
б-р-р  - а накуярь везде отладочной печати  - я тоже что-то ничего понять не могу...
14 vS
 
08.12.04
06:42
находишь элемент, присваиваешь его переменной,
тмп.Найти(ОчередноеЗначение)
тмп.Удалить(1)

или заноси их в ТЗ, и после цикла по спр, цикл по ТЗ, с удалением, там не собъется :)
15 NiGMa
 
08.12.04
18:13
(Буцефал) У тебя ИспользоватьОбъект() неправильный.
:ИспользоватьОбъект(<ИмяРеквизита>,<Объект>)
Надо так:
   ЦеныПер.ИспользоватьОбъект("ЦенаНП",ТекЭл);