Вход | Регистрация

1С:Предприятие ::

Метки:

Цены > Закупочная(руб) > История ... Найти самое давнее непустое значение.

Я
   jetcom
 
07.12.04 - 04:30
Привет, уважаемые!
Сразу поясню, для чего сие нужно.
При формировании остатков на Новом оптовом складе из наличия на старом, учет на котором велся не на 1С, и себестоимость была равна неизвестно чему, в первом приближении посчитали допустимым приравнять Закуп. цену оприходуемых товаров Закуп. цене ближайшей (т.е. самой давней) в истории.
Т.е. на данный момент история цен уже сформировалась, а себестоимость изначальных остатков кое-где осталась "нулевой"...
Вроде доступно пояснил...
Соответствующую обработку "ЗначенияПериодическихРеквизитов()" просмотрел, но простого решения не увидел (меньше по ночам работать нужно ;)
Чувствую, что истина проста, если кому не лень, - подскажите плиииз!
Заранее благодарю.
 
 
   Морозов Александр
 
1 - 07.12.04 - 04:39
Использовать объект Переодический
   Морозов Александр
 
2 - 07.12.04 - 04:40
Периодичекий... вернее
   jetcom
 
3 - 07.12.04 - 11:53
(1+2)Спасибо!
Пойду поиском покопаю...
   jetcom
 
4 - 08.12.04 - 09:38
Вроде накопал, но до конца так и не получилось разобраться:
    Пер = СоздатьОбъект("Периодический");
    Тов = СоздатьОбъект("Справочник.Номенклатура");
    СпрЦен=СоздатьОбъект("Справочник.Цены"); 
    ТипыЦен=СоздатьОбъект("Справочник.ТипыЦен"); 
    Тов.НайтиПоКоду("XXX");
    СпрЦен.ИспользоватьВладельца(Тов.ТекущийЭлемент()); 
    ТипыЦен.НайтиПоНаименованию("Закупочная");
        Пер.ИспользоватьОбъект( ??? , ??? ); 
    Пер.ВыбратьЗначения(,ТекущаяДата()); 
    Пока Пер.ПолучитьЗначение()=1 цикл 
        Ц=Пер.Значение; 
    КонецЦикла;
Что в моем случае нужно вставить вместо "???"
   Valery
 
5 - 08.12.04 - 09:46
В твоем случае необходимо вставить СпрЦен.ТекущийЭлемент(), но в твоем коде он не спозиционирован
   jetcom
 
6 - 08.12.04 - 10:03
Тогда каким образом этот код можно привести в соответствие поставленной задаче?
Т.е. перебрать историю цен для выбранного элемента номенклатуры для типа цены "Закупочная" ?
   Valery
 
7 - 08.12.04 - 10:28
В справочнике цен (спрЦен) есть реквизит "ТипЦен". Элемент с нужным значением и нужно найти.
Можно исп СпрЦен.НайтиПоРеквизиту("ТипЦен",ТипыЦен.ТекущийЭлемент())- если по этому реквизиту есть сортировка
иначе перебором
СпрЦен.ВыбратьЭлементы();
Пока СпрЦен.ПолучитьЭлемент()=1 Цикл
Если СпрЦен.ТипЦен=ТипЦен.ТекущийЭлемнт() тогда
Прервать;
КонецЕсли;
КонецЦикла;
   jetcom
 
8 - 08.12.04 - 10:51
(5+7)Что то не срастается...
 Пер.ИспользоватьОбъект( ??? , ??? ); 
Там два параметра нужно вставить, а с твоих слов только СпрЦен.ТекущийЭлемент()
В этом месте спотыкается выполнение...
   laeg
 
9 - 08.12.04 - 11:34
(8)
Тебе решение рабочее показать ?
   Valery
 
10 - 08.12.04 - 11:46
(8) Ну да.
СпрЦен.ТекущийЭлемент() -это объект. У этого объекта есть реквизиты. Первым параметром нужно указать этот реквизит (он должен быть периодическим,). Скорее всего это будет "Цена". точное название СМ в конфигураторе
 
  Рекламное место пустует
   jetcom
 
11 - 08.12.04 - 12:25
Вот в таком виде заработало:
    Пер = СоздатьОбъект("Периодический");
    Тов = СоздатьОбъект("Справочник.Номенклатура");
    СпрЦен=СоздатьОбъект("Справочник.Цены"); 
    ТипыЦен=СоздатьОбъект("Справочник.ТипыЦен"); 
    ТипыЦен.НайтиПоКоду("00005");
    Тов.НайтиПоКоду("10083");
    СпрЦен.ИспользоватьВладельца(Тов.ТекущийЭлемент()); 
    СпрЦен.ВыбратьЭлементы(); 
    
Пока СпрЦен.ПолучитьЭлемент()=1 Цикл 
Если СпрЦен.ТипЦен=ТипыЦен.ТекущийЭлемент() тогда 
Прервать; 
КонецЕсли; 
КонецЦикла; 
    Пер.ИспользоватьОбъект("Цена",СпрЦен.ТекущийЭлемент()); 
    Пер.ВыбратьЗначения(,ТекущаяДата()); 
    
    Пока Пер.ПолучитьЗначение()=1 цикл 
        Ц=Пер.Значение; 
    КонецЦикла;

Valery, спасибо огромное!
   laeg
 
12 - 08.12.04 - 12:27
(11)
Вот так будет по поставленной задаче

спрНом = СоздатьОбъект("Справочник.Номенклатура");
спрЦен = СоздатьОбъект("Справочник.Цены");
спрТипЦен = СоздатьОбъект("Справочник.ТипыЦен");
спрТипЦен.НайтиПоНаименованию("Закупочные");
Пер = СоздатьОбъект("Периодический");
спрНом.ВыбратьЭлементы();
Пока спрНом.ПолучитьЭлемент() = 1 Цикл
Если спрНом.ЭтоГруппа() = 1 Тогда Продолжить КонецЕсли;
Сообщить("Товар: " + СокрЛП(спрНом));
спрЦен.ИспользоватьВладельца(спрНом.ТекущийЭлемент());
Если спрЦен.НайтиПоРеквизиту("ТипЦен",спрТипЦен.ТекущийЭлемент(),0) = 1 Тогда
Пер.ИспользоватьОбъект("Цена",СпрЦен.ТекущийЭлемент()); 
Пер.ВыбратьЗначения();
нм = 1;
Пока нм = 1 Цикл
Если Пер.ПолучитьЗначение() = 0 Тогда нм = 0
ИначеЕсли ПустоеЗначение(Пер.Значение) = 0 Тогда
нм = 0;
Сообщить("....Тип цены: " + СокрЛП(спрЦен.ТипЦен)+ ", Первая цена:" + СокрЛП(Пер.Значение));
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
   jetcom
 
13 - 08.12.04 - 12:37
(12)Красавчик! Как раз вовремя, дал мне возможность самому разобраться с объектом "Периодический" (не без помощи, конечно Valery), и тут на тебе готовое решение! ;) К которому я только начал подбираться...
Спасибки огромные!!! :)))
   laeg
 
14 - 08.12.04 - 12:39
(13)
Смотри (9)
   jetcom
 
15 - 08.12.04 - 12:43
1С не без добрых людей:)


Список тем форума
Рекламное место пустует  
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует