Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:22

Как в "Перемещение" добавить закупочную цену.

Автор Tesla, 12 окт 2014, 21:40

0 Пользователей и 2 гостей просматривают эту тему.

Tesla

Доброго вечера. Собсно, мучаюсь уже неделю и никак не допойму. Как в табличную часть "перемещение" добавить закупочную цену. Пробовал подтягивать из отчёта - цены считаются достаточно долго и выдаются какие-то левые суммы. Подсмотрел код обработки "КопированиеЦенИзДокументаВКатегорию" процедура "ПриСменеТипаЦен"
Процедура ПриСменеТипаЦен()         
Перем Цена;

Если ТипЦен.Выбран()=0 Тогда
Возврат;
КонецЕсли;
           
Цена = СоздатьОбъект("Справочник.Цены");
Цена.ИспользоватьДату(РабочаяДата(),1);

ТовСостав.ВыбратьСтроки();

Пока ТовСостав.ПолучитьСтроку()>0 Цикл   
Если ТовСостав.Товар.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
Цена.ИспользоватьВладельца(ТовСостав.Товар.ТекущийЭлемент());

Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ТекущийЭлемент(),0)>0 Тогда   
ОписаниеЦены = "";
ОписаниеЦены = ОписаниеЦены + Строка(Цена.Цена)+" ";
ОписаниеЦены = ОписаниеЦены + СокрЛП(Цена.Валюта.Кратко);
ОписаниеЦены = ОписаниеЦены + "/"+СокрЛП(Цена.Единица.Наименование);
Если Цена.ПометкаУдаления()=1 Тогда
ОписаниеЦены = ОписаниеЦены + " (уд.)";
КонецЕсли;                           
ТовСостав.ЦенаВСправ = ОписаниеЦены;
Иначе     
ТовСостав.ЦенаВСправ = "";
КонецЕсли;
сообщить(Строка(Цена.Цена));

КонецЦикла;

КонецПроцедуры // ПриСменеТипаЦен


...но что-то не получается. Нулевые суммы. Подсмотрел в откуда как заполняются эти цены в "Приходной" накладной, единственное что заметил , так это в свойствах реквизита/колонки стоит функция "глВыч_сумм_накл(Контекст,1)". Вот эта процедура:
Процедура глВыч_суммы_накл(Конт,ЧтоИзменилось=0) Экспорт
Перем ЕстьСкидка,ВремСумма,ВсемЦена;

Если Конт.Товар.Выбран()=0 Тогда
Возврат;
КонецЕсли;

ПроцНДС = глПроцентНДС(Конт.Товар.СтавкаНДС.Получить(Конт.ДатаДок));

ВидДок = Конт.Вид();
Если ЧтоИзменилось < 3 Тогда

ЕстьСкидка = глЕстьРеквизитМнЧ("СуммаСкидки", ВидДок);

Если ЧтоИзменилось<2 Тогда
Если глЕстьРеквизитМнЧ("ЦенаБезНДС", ВидДок) = Да Тогда
Если ЧтоИзменилось = 1 Тогда
Конт.ЦенаБезНДС = Конт.ЦенаСНДС*100/(100+ПроцНДС);
КонецЕсли;

Если глЕстьРеквизитМнЧ("ЦенаСНДС", ВидДок) = Да Тогда
Конт.ЦенаСНДС = Конт.ЦенаБезНДС*(100+ПроцНДС)/100;   
КонецЕсли;

ВремСумма = Конт.ЦенаБезНДС*Конт.Количество;

Если ЕстьСкидка = Да Тогда
Конт.СуммаБезСкидки = ВремСумма;
Иначе
Конт.СуммаБезНДС = ВремСумма;
КонецЕсли;
ИначеЕсли ((глЕстьРеквизитМнЧ("СуммаСНДС", ВидДок) = Да) и
(глЕстьРеквизитМнЧ("ЦенаСНДС", ВидДок) = Да)) Тогда
Конт.СуммаСНДС= Конт.ЦенаСНДС*Конт.Количество;
КонецЕсли;


Если глЕстьРеквизитМнЧ("ЦенаБезНДСРеал", ВидДок) = Да Тогда
Если ЧтоИзменилось = 1 Тогда
Конт.ЦенаБезНДСРеал = Конт.ЦенаСНДСРеал*100/(100+ПроцНДС);
КонецЕсли;

Если глЕстьРеквизитМнЧ("ЦенаСНДСРеал", ВидДок) = Да Тогда
Конт.ЦенаСНДСРеал = Конт.ЦенаБезНДСРеал*(100+ПроцНДС)/100;   
КонецЕсли;

Конт.СуммаБезНДСРеал = Конт.ЦенаБезНДСРеал*Конт.Количество;
КонецЕсли;

КонецЕсли;

Если ЕстьСкидка = Да Тогда
Если Конт.СуммаСкидки > Конт.СуммаБезСкидки Тогда
Конт.СуммаСкидки = Конт.СуммаБезСкидки;
КонецЕсли;
Конт.СуммаБезНДС = Конт.СуммаБезСкидки-Конт.СуммаСкидки;
КонецЕсли;

КонецЕсли;
           
Если глЕстьРеквизитМнЧ("СуммаБезНДС", ВидДок) = Да Тогда
Если ВидДок = "ГТД" Тогда
Конт.СуммаСНДС = Конт.СуммаБезНДС*(100+ПроцНДС)/100 +
(Конт.СуммаАкциза + Конт.СуммаПошлины + Конт.СуммаПеревозки)*глПроцентНДС(Перечисление.ЗначенияНДС.ОсновнаяСтавкаНДС)/100;
Иначе
Конт.СуммаСНДС = Конт.СуммаБезНДС*(100+ПроцНДС)/100;
КонецЕсли;
КонецЕсли;   

Если глЕстьРеквизитМнЧ("СуммаБезНДСРеал", ВидДок) = Да Тогда
Конт.СуммаСНДСРеал = Конт.СуммаБезНДСРеал*(100+ПроцНДС)/100;
КонецЕсли;   

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

...вобщем, тоже левые суммы рисуются.
Что делаю не так?

дфтын

Перемещение списывает стоимость при проведении, ту которую. насчитает. поэтому в документе эти цены могу появится только пост фактум. Типа в процедуре ПриОткрытии, смотреть что записалось в регистр партии и оттуда доставать списанную стоимость.
Это первое, теория.
Второе.
Если вам  надо просто в табличную часть занести установленную цену по типу цен - закупочная, тогда
Цена.ИспользоватьВладельца(ТовСостав.Товар.ТекущийЭлемент());
    Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ЗАКУПОЧНАЯ,0)>0 Тогда   

Tesla

я парвильно понимаю один момент? Вот "ТовСостав" это имя табличной части которая находится в вызываемой форме ? Тоесть, чтобы обращаться к реквизитам табличной части основной формы (в нашем случае "Перемещение") то ненужно никаих приставок типа "ТовСостав", т.е. ТовСостав.Товар.ТекущийЭлемент()  будет выглядеть как Товар.ТекущийЭлемент() , т.е. без "ТовСостав" ?

дфтын

Да именно так. но если совсем правильно то будет просто
ВЫбратьСТроки()
ПОка ПолучитьСтроку() = 1 Цикл
Цена.ИспользоватьВладельца(Товар);
    Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ЗАКУПОЧНАЯ,0)>0 Тогда 
ЦенаЗАкупки = Цена.Цена; //??
КОнецЕСлИ;
КонецЦикла;

Tesla

Вот что я сделал. В "Перемещении" на кнопку повесил вызов этой процедуры:
Процедура ПриСменеТипаЦен()         
Перем Цена;

         
Цена = СоздатьОбъект("Справочник.Цены");
Цена.ИспользоватьДату(РабочаяДата(),1);

ВыбратьСтроки();

Пока ПолучитьСтроку()>0 Цикл   
Если Товар.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
Цена.ИспользоватьВладельца(Товар.ТекущийЭлемент());

Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.Закупочная,0)>0 Тогда   
ЦенаЗак=Цена.Цена;
Иначе     
ЦенаЗак=777;
КонецЕсли;
сообщить(Строка(ЦенаЗак));

КонецЦикла;


Вобщем, ругается вот на что Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен<<?>>.Закупочная,0)>0 Тогда   
{Документ.Перемещение.Форма.Модуль(971)}: Переменная не определена (ТипЦен)

дфтын

ну я все за вас то делать не буду. задайте тип цен. я специально закупочная выделил большими буквами, чтобы вы сами укзаали какой вам нужен тип цен

Tesla

В том то и дело что не знаю что там должно стоять: Id соответствующе записи как в таблице DBF ? Там Закупочная цена числится с кодом "4" в поле типа Char(9).

дфтын

эээ. нет. там  должно быть ссылка на эдемет справочника, а не дбф. 1С не работает с дбф на прямую
т.е. эточтото типа такого
ТипЦен = СоздатьОбъект("Справочник.типЦен");
ТипЦен....

Есть множество описаний языка по 7.7

Tesla

Хорошо. Ну вот конструкция этой Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ТекущийЭлемент(),0)>0 функции такая ведь ?  "КатегорияЦены" это название поля/реквизита в справочнике "Цены", а "ТипЦен.ТекущийЭлемент()" должно возвращать значение. В какой же форме оно его возвращает, что невозможно вписать вручную 0_о. Что-то я совсем запутался(

дфтын

Не функция
Цена - справочник объект (создатьобъет...)
НайтиПоРеквизиту - Метод, ну функция этого объекта
КатегорияЦен - название реквизита
ТипЦен.ТекущийЭлемент()  не функция, а позиционирование на конкретный элемент справочника типыцен

т.е. это как бы -
спозационируйся на  элемент справочника Цена такой, когда реквизит справочника цена "категорияцены" равен этому типу цен и верни 0 если не нашло и 1 если нашло

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск