![]() |
![]() |
![]() |
|
Вопрос чайника. Ногами просьба не пинать. ↓ (Волшебник 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
|
(Буцефал) У тебя ИспользоватьОбъект() неправильный.
:ИспользоватьОбъект(<ИмяРеквизита>,<Объект>) Надо так: ЦеныПер.ИспользоватьОбъект("ЦенаНП",ТекЭл); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |