Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
21 Янв 2018, 05:39
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

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

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

Оффлайн Tesla

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-08-14
  • Сайт: 
  • Профессия: Ученик 1С
Доброго вечера. Собсно, мучаюсь уже неделю и никак не допойму. Как в табличную часть "перемещение" добавить закупочную цену. Пробовал подтягивать из отчёта - цены считаются достаточно долго и выдаются какие-то левые суммы. Подсмотрел код обработки "КопированиеЦенИзДокументаВКатегорию" процедура "ПриСменеТипаЦен"
Процедура ПриСменеТипаЦен()         
Перем Цена;

Если ТипЦен.Выбран()=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;
КонецЕсли;   

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


Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
Перемещение списывает стоимость при проведении, ту которую. насчитает. поэтому в документе эти цены могу появится только пост фактум. Типа в процедуре ПриОткрытии, смотреть что записалось в регистр партии и оттуда доставать списанную стоимость.
Это первое, теория.
Второе.
Если вам  надо просто в табличную часть занести установленную цену по типу цен - закупочная, тогда
Цена.ИспользоватьВладельца(ТовСостав.Товар.ТекущийЭлемент());
    Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ЗАКУПОЧНАЯ,0)>0 Тогда   
Помог? Нажми - Спасибо :)
skype: Soprov1C

Оффлайн Tesla

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-08-14
  • Сайт: 
  • Профессия: Ученик 1С
я парвильно понимаю один момент? Вот "ТовСостав" это имя табличной части которая находится в вызываемой форме ? Тоесть, чтобы обращаться к реквизитам табличной части основной формы (в нашем случае "Перемещение") то ненужно никаих приставок типа "ТовСостав", т.е.
ТовСостав.Товар.ТекущийЭлемент()
  будет выглядеть как
Товар.ТекущийЭлемент()
, т.е. без "ТовСостав" ?

Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
Да именно так. но если совсем правильно то будет просто
ВЫбратьСТроки()
ПОка ПолучитьСтроку() = 1 Цикл
Цена.ИспользоватьВладельца(Товар);
    Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ЗАКУПОЧНАЯ,0)>0 Тогда 
ЦенаЗАкупки = Цена.Цена; //??
КОнецЕСлИ;
КонецЦикла;
Помог? Нажми - Спасибо :)
skype: Soprov1C

Оффлайн Tesla

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-08-14
  • Сайт: 
  • Профессия: Ученик 1С
Вот что я сделал. В "Перемещении" на кнопку повесил вызов этой процедуры:
Процедура ПриСменеТипаЦен()         
Перем Цена;

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

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

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

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

КонецЦикла;

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

Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
ну я все за вас то делать не буду. задайте тип цен. я специально закупочная выделил большими буквами, чтобы вы сами укзаали какой вам нужен тип цен
Помог? Нажми - Спасибо :)
skype: Soprov1C

Оффлайн Tesla

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-08-14
  • Сайт: 
  • Профессия: Ученик 1С
В том то и дело что не знаю что там должно стоять: Id соответствующе записи как в таблице DBF ? Там Закупочная цена числится с кодом "4" в поле типа Char(9).

Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
эээ. нет. там  должно быть ссылка на эдемет справочника, а не дбф. 1С не работает с дбф на прямую
т.е. эточтото типа такого
ТипЦен = СоздатьОбъект("Справочник.типЦен");
ТипЦен....
Есть множество описаний языка по 7.7
Помог? Нажми - Спасибо :)
skype: Soprov1C

Оффлайн Tesla

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-08-14
  • Сайт: 
  • Профессия: Ученик 1С
Хорошо. Ну вот конструкция этой
Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦен.ТекущийЭлемент(),0)>0
функции такая ведь ?  "КатегорияЦены" это название поля/реквизита в справочнике "Цены", а "ТипЦен.ТекущийЭлемент()" должно возвращать значение. В какой же форме оно его возвращает, что невозможно вписать вручную 0_о. Что-то я совсем запутался(

Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
Не функция
Цена - справочник объект (создатьобъет...)
НайтиПоРеквизиту - Метод, ну функция этого объекта
КатегорияЦен - название реквизита
ТипЦен.ТекущийЭлемент()  не функция, а позиционирование на конкретный элемент справочника типыцен

т.е. это как бы -
спозационируйся на  элемент справочника Цена такой, когда реквизит справочника цена "категорияцены" равен этому типу цен и верни 0 если не нашло и 1 если нашло
Помог? Нажми - Спасибо :)
skype: Soprov1C


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
99 Сообщений
AIFrame
65 Сообщений
alex0402
32 Сообщений
kiksi
26 Сообщений
pavl_vs
24 Сообщений
alexandr_ll
17 Сообщений
andron81_81
16 Сообщений
Norfolk
15 Сообщений
KOI8-R
14 Сообщений
MuI_I_Ika MuI_I_Ika
13 Сообщений

* Кто онлайн

  • Точка Гостей: 115
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal