Перейти к содержимому


Услуги программиста 1С
Профессиональные программисты 1С.
Весь комплекс услуг сопровождения 1С.

Курсы 1С
Бухгалтерам, менеджерам
и программистам.
Бесплатно!
Живое индивидуальное обучение по 1С.

Как посчитать цену в теле обработки?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1   DTSoft

DTSoft

      Рядовой

    • Пользователи
    • Сообщений: 7
    • Регистрация: 27-March 10
    • Откуда: , ,

Отправлено 04 August 2010 - 12:26

Подскажите пожалуйста где ошибка. Я пишу обработку, необходимо в ней просчитывать цены (Опт, розница и пр.) для разных групп товара. Делать через "Формирование цен" долго, т.к. групп товаров много, и наценки для всех разные. Решил сделать обработку, где жестко прописать все наценки для всех групп. Но столкнулся с ошибкой ("Не выбран элемент!"), не выбирается цена "Розница" и не могу придумать что делаю не так. Подскажите плз.
Конфигурация "Торговля + Склад для Украины"

Code
Процедура Сформировать()       
                         
   Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());   
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл   
   Если Спр.ЭтоГруппа()<1 Тогда   
   Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
   //Цены.ВыбратьЭлементы();   
   Цены.НайтиПоНаименованию("Закупочная");
   Закупка=Цены.Цена;     
   Цены.Цена=Закупка;
   Цены.НайтиПоНаименованию("Розница");
   Цены.Цена=Закупка*0.25;
          КонецЕсли;
КонецЦикла;

КонецПроцедуры   

  • 0

#2   dekom3

dekom3

      Рядовой

    • Пользователи
    • Сообщений: 15
    • Регистрация: 17-March 09
    • Откуда: , ,

Отправлено 04 August 2010 - 12:46

// Цены.НайтиПоНаименованию("Закупочная");
// Закупка=Цены.Цена;
// Цены.Цена=Закупка;
// Цены.НайтиПоНаименованию("Розница");
// Цены.Цена=Закупка*0.25;

Если Цены.НайтиПоНаименованию("Закупочная") = 1 Тогда
Закупка=Цены.Цена;
КонецЕсли;

Если Цены.НайтиПоНаименованию("Розница") = 1 Тогда
Цены.Цена=Закупка*0.25;
КонецЕсли;

  • 0

#3   DTSoft

DTSoft

      Рядовой

    • Пользователи
    • Сообщений: 7
    • Регистрация: 27-March 10
    • Откуда: , ,

Отправлено 04 August 2010 - 13:44

О! Спасибо большое. Так заработало. smile

Хотя нет, ничего не заработало. Просто благодаря условиям не возникает теперь ошибки, но второе условие:

Code
Если Цены.НайтиПоНаименованию("Розница") = 1 Тогда
Цены.Цена=Закупка*0.25;
  КонецЕсли;

просто не выполняется. Т.к. НайтиПоНаименованию возвращает 0, т.е. так и не выбирает цену "Розница". Как быть?

Добавлено (04.08.2010, 14:44)
---------------------------------------------
Я так понял что НайтиПоНаименованию позиционирует справочник на найденом элементе. А если следующий, который мне нужно найти, находился ранее по порядку, то я его не смогу найти. Может есть возможность обнулить как-то позиционирование после поиска? Или как-то другим способом получить цену? Подскажите плз.

  • 0

#4   DTSoft

DTSoft

      Рядовой

    • Пользователи
    • Сообщений: 7
    • Регистрация: 27-March 10
    • Откуда: , ,

Отправлено 04 August 2010 - 20:28

Проверил. Тип цены "Розница" есть. На всякий случай, по вашему совету, скопировал его в обработку.
Проверил наличие цены "Розница" в обрабатываемом товаре. Такая цена там есть.

Запустил обработку в отладчике, как только обрабатывается строка "Если Цены.НайтиПоНаименованию("Розница") = 1 Тогда" то в панели наблюдения за переменными (я туда добавил "Цены.ТекущийЭлемент() =" ), поле Цены.ТекущийЭлемент() = становится пустым. Т.е. не выбрано поле тип цены. Хух...ума не приложу что не так sad

  • 0

#5   pepe

pepe

      Генерал-полковник

    • Пользователи
    • PipPipPipPipPipPipPipPipPip
    • Сообщений: 1148
    • Регистрация: 12-April 08
    • Откуда: , ,

Отправлено 04 August 2010 - 20:45

А цена не периодическая?
  • 0
Спасибо не надо, помог - есть "+" в репутацию.

#6   DTSoft

DTSoft

      Рядовой

    • Пользователи
    • Сообщений: 7
    • Регистрация: 27-March 10
    • Откуда: , ,

Отправлено 04 August 2010 - 20:50

Периодическая.
Но я использовал для считывания переодических реквизитов вариант "Цены.ИспользоватьДату(ТекущаяДата()); ". Поэтому получаю ее не через "Получить", а просто обращаюсь через "Закупка=Цены.Цена;"
  • 0

#7   DTSoft

DTSoft

      Рядовой

    • Пользователи
    • Сообщений: 7
    • Регистрация: 27-March 10
    • Откуда: , ,

Отправлено 04 August 2010 - 21:15

Дак это и есть мое сообщение. Там подсказали как, но все равно не работает. sad
  • 0

#8   pepe

pepe

      Генерал-полковник

    • Пользователи
    • PipPipPipPipPipPipPipPipPip
    • Сообщений: 1148
    • Регистрация: 12-April 08
    • Откуда: , ,

Отправлено 04 August 2010 - 21:24

Думаю, что лучше перебирать в цикле цены, а не через поиск. Сразу увидишь в отладчике и цену и действия, а через поиск не понятно почему не нашлось.
  • 0
Спасибо не надо, помог - есть "+" в репутацию.

#9   g789

g789

      Генерал-майор

    • Пользователи
    • PipPipPipPipPipPipPip
    • Сообщений: 270
    • Регистрация: 11-March 08
    • Откуда:Киев , ,

Отправлено 05 August 2010 - 10:07

А если
Цены.ИспользоватьДату(ТекущаяДата());
поставить после
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
  • 0

#10   DTSoft

DTSoft

      Рядовой

    • Пользователи
    • Сообщений: 7
    • Регистрация: 27-March 10
    • Откуда: , ,

Отправлено 08 August 2010 - 11:10

Не, к сожалению не помогло ни то, ни другое. sad
  • 0

#11   pepe

pepe

      Генерал-полковник

    • Пользователи
    • PipPipPipPipPipPipPipPipPip
    • Сообщений: 1148
    • Регистрация: 12-April 08
    • Откуда: , ,

Отправлено 08 August 2010 - 18:17

Не изобретай велосипед. Подсмотри получение цены в справочнике номенклатура.
  • 0
Спасибо не надо, помог - есть "+" в репутацию.



Похожие темы

  Название темы Автор Статистика Последнее сообщение



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных