7.7 Цена закупки

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем Роман_Н, 8 авг 2012.

  1. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Добавил в табличную часть документа колонку Закупочная цена. Как заполнить колонку?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Некорректно поставлен вопрос. Что за конфа? Какой документ?
  3. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Ну наверное да, извиняюсь.
    Как в ТиС получить цену закупки для номенклатуры?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Функция глПолучитьЦену. Закупочный тип цен есть в реквизитах пользователя
  5. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Код:
     спрЦены = СоздатьОбъект("Справочник.Цены");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    спрЦены.ИспользоватьВладельца(Номенклатура);
    спрЦены.ВыбратьЭлементы();
    Пока спрЦены.ПолучитьЭлемент() = 1 Цикл
    Если Найти(спрЦены.ТипЦен.Наименование,"Закупочные руб")<>0 Тогда
    ПериодичЦена = СоздатьОбъект("Периодический");
    ПериодичЦена.ИспользоватьОбъект("Цена",спрЦены.ТекущийЭлемент());
    ПериодичЦена.ВыбратьЗначения();
    ЦенаЗакуп = ПериодичЦена.ЗначениеНаДату(ДатаДок);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    А такое имеет место быть?
  6. Norvin
    Offline

    Norvin

    Регистрация:
    26 июл 2012
    Сообщения:
    33
    Симпатии:
    1
    Баллы:
    1
    Могу ошибаться, пока еще не встречался с переодическими ревизитами =))))) Но, предполагаю, что не зачем создавать объект в цикле и делать постоянно выборку там =) Надеюсь, что более опытные товарищи поправят меня.
    Код:
     спрЦены = СоздатьОбъект("Справочник.Цены");
    ПериодичЦена = СоздатьОбъект("Периодический");
    //ВыбратьСтроки();		   Реквизит должен заполняться в модуле формы, думаю это из модуля документа
    //Пока ПолучитьСтроку()=1 Цикл
    спрЦены.ИспользоватьВладельца(Номенклатура);
    спрЦены.ВыбратьЭлементы();
    Пока спрЦены.ПолучитьЭлемент() = 1 Цикл
    Если СокрЛП(спрЦены.Наименование) = "Закупочные руб" Тогда
    ПериодичЦена.ИспользоватьОбъект("Цена",спрЦены.ТекущийЭлемент());
    //Прервать;		  Если в справочнике только один элемент с таким наименованием, то не зачем продолжать цикл
    КонецЕсли;
    КонецЦикла;
    ПериодичЦена.ВыбратьЗначения();
    ЦенаЗакуп = ПериодичЦена.ЗначениеНаДату(ДатаДок);
    //КонецЦикла;
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Есть функция ГМ. Указал выше. Воспользуйтесь ею.

    Не нужно изобретать то что уже сделано))))))))))
  8. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Функция не работает. Конфигурация изменена, скорее всего по этому.

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

    Код:
    спрЦены = СоздатьОбъект("Справочник.Цены");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    спрЦены.ИспользоватьВладельца(Номенклатура);
    спрЦены.ИспользоватьДату(ДатаДок);
    спрЦены.ВыбратьЭлементы();
    Пока спрЦены.ПолучитьЭлемент() = 1 Цикл
    Если спрЦены.ТипЦен.Наименование = "Закупочные руб" Тогда
    ЦенаЗакуп = спрЦены.Цена;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    P.S. Не то чтобы изобретать, просто для опыта хочется разобраться.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    1) Функция скорее всего работает. Типовой механизм подстановки цен то есть...
    2) Разница в том что в цикле не используется объект периодический. В данном случае это правильнее. Быстрее работает
  10. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Во стором случаи цена берется на дату документа. А как получить последнию цену?
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    берите текущую дату это и будет последняя цена
  12. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    В результате:
    Код:
    Процедура ЦеныЗакуп()
    спрЦены = СоздатьОбъект("Справочник.Цены");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    спрЦены.ИспользоватьВладельца(Номенклатура);
    //спрЦены.ИспользоватьДату(ДатаДок);
    спрЦены.ВыбратьЭлементы();
    Пока спрЦены.ПолучитьЭлемент() = 1 Цикл
    Если Найти(спрЦены.ТипЦен.Наименование,"Закупочные руб")<>0 Тогда
    ЦенаЗакуп = спрЦены.Цена.Получить(ТекущаяДата());
    Продолжить;
    КонецЕсли;
    Если Найти(спрЦены.ТипЦен.Наименование,"Закупочные GBP")<>0 Тогда
    ПериодичЦена = СоздатьОбъект("Периодический");
    ПериодичЦена.ИспользоватьОбъект("Цена",спрЦены.ТекущийЭлемент());
    ПериодичЦена.ОбратныйПорядок(1);
    ПериодичЦена.ВыбратьЗначения();
    Пока ПериодичЦена.ПолучитьЗначение() = 1 Цикл
    ЦенаЗ = ПериодичЦена.Значение;
    ДатЦена = ПериодичЦена.ДатаЗнач;
    ЦенаЗакуп = Окр(ЦенаЗ*спрЦены.Валюта.Курс.Получить(ДатЦена));
    Прервать;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецПроцедуры
    Прошу оценить и покритиковать!

Поделиться этой страницей