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

Как реализовать автоматическое проставление суммы при изменении количества?

Автор sapravka, 16 ноя 2012, 08:32

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

sapravka

Здравствуйте!
Имеется конфигурация самописная, про общепит: Там есть документ списания. И списываются как просто позиция номенклатуры, так и блюда (у которых своя цена) в одном документе. Добавил новый реквизит в табличную часть – СУММА и добавил его руками в табличную часть. Суммы есть в 2 справочниках:
1 Справочник блюд.
2. Справочник номенклатура.

В связи с этим убедительно прошу – подскажите пожалуйста, пример кода для автоматическое проставление суммы при заполнении(изменении) количества?

http://волгалаб.рф/1c/14.jpg

Идея меня посещала следующая:
В модуле формы написать процедуру, которая при заполнении(изменении) автоматический проставляла бы сумму!
Но вот как эту процедуру завязать на реквизит табличной части, что бы при изменении количества номенклатуры или блюда, автоматом бы менялась сумма – я никак не пойму!
Убедительно прошу – помогите!

Если не сложно – дайте пожалуйста пример кода с комментариями...

Herby

Цитата: sapravka от 16 ноя 2012, 08:32
Здравствуйте!
Имеется конфигурация самописная, про общепит: Там есть документ списания. И списываются как просто позиция номенклатуры, так и блюда (у которых своя цена) в одном документе. Добавил новый реквизит в табличную часть – СУММА и добавил его руками в табличную часть. Суммы есть в 2 справочниках:
1 Справочник блюд.
2. Справочник номенклатура.

В связи с этим убедительно прошу – подскажите пожалуйста, пример кода для автоматическое проставление суммы при заполнении(изменении) количества?

http://волгалаб.рф/1c/14.jpg

Идея меня посещала следующая:
В модуле формы написать процедуру, которая при заполнении(изменении) автоматический проставляла бы сумму!
Но вот как эту процедуру завязать на реквизит табличной части, что бы при изменении количества номенклатуры или блюда, автоматом бы менялась сумма – я никак не пойму!
Убедительно прошу – помогите!

Если не сложно – дайте пожалуйста пример кода с комментариями...

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

sapravka

Цитата: Herby от 16 ноя 2012, 09:11
Цитата: sapravka от 16 ноя 2012, 08:32
Здравствуйте!
Имеется конфигурация самописная, про общепит: Там есть документ списания. И списываются как просто позиция номенклатуры, так и блюда (у которых своя цена) в одном документе. Добавил новый реквизит в табличную часть – СУММА и добавил его руками в табличную часть. Суммы есть в 2 справочниках:
1 Справочник блюд.
2. Справочник номенклатура.

В связи с этим убедительно прошу – подскажите пожалуйста, пример кода для автоматическое проставление суммы при заполнении(изменении) количества?

http://волгалаб.рф/1c/14.jpg

Идея меня посещала следующая:
В модуле формы написать процедуру, которая при заполнении(изменении) автоматический проставляла бы сумму!
Но вот как эту процедуру завязать на реквизит табличной части, что бы при изменении количества номенклатуры или блюда, автоматом бы менялась сумма – я никак не пойму!
Убедительно прошу – помогите!

Если не сложно – дайте пожалуйста пример кода с комментариями...

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

Спасибо!
А пример кода для выборки суммы из двух разных справочников?
Подскажите пожалуйста!

Herby

Цитата: sapravka от 16 ноя 2012, 15:07А пример кода для выборки суммы из двух разных справочников?

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

sapravka

Вот написал в модуле формы код:

Процедура ПриОткрытии()
ПриЗаписиПерепроводить(1);
Если ПустаяСтрока(Склад)=1 тогда
  Склад=Константа.СкладПоУмолчанию;
КонецЕсли;
//Вот дописал при открытии
  Сумма = Номенклатура.Цена*Количество;
//но почемуто не считает
КонецПроцедуры

//{{ПРОЦЕДУРА_ПЕЧАТИ(Печать)
//Данный фрагмент построен конструктором.
//При повторном использовании конструктора, внесенные вручную изменения будут потеряны!!!
Процедура Печать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Печать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,0,0);
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
  Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Печать Списание","");
КонецПроцедуры
//}}ПРОЦЕДУРА_ПЕЧАТИ

/// Дописано

Процедура Пересчет()
  Сумма = Номенклатура.Цена*Количество;
КонецПроцедуры //Пересчет


Добавил процедуру Перерасчет() в колонку Номенклатура, Колличество
Если редактируешь - изменяешь, добавляешь, да просто целкнуть по цене или количеству или номенклатуре - то:
Цена автоматический появляется, изменяется - все просто замечательно...

Но вот при открытии формы почему то автоматический цену в уже заполненых формах не проставляет!!!
Подскажите пожалуйста как это реализовать....


Да и вот еще...
Как прописать сообщение - например - если нет цены в справочнике номенклатура - кроме продуктов питания, остальное приходуют общими суммами, например моющие спредства оприходывали на 10 тысяч, а вот списывают по ведомости - например моющее средство фери - 5 штук, а цены на него соответственно нету...
Что бы в самом низу выдавалась сообщение - На (наименование из номенклатора) нет цены... Ну что нибудь в этом ключе... В принципе текст придумать не проблема, главное что бы брал нужную позицию...

Вот файл 1Cv7.MD:
1Cv7.MD

Herby

Цитата: sapravka от 18 ноя 2012, 11:12

Но вот при открытии формы почему то автоматический цену в уже заполненых формах не проставляет!!!
Подскажите пожалуйста как это реализовать....



  Во-первых, нужно выполнить выборку строк табличной части методом ВыбратьСтроки(), а потом в цикле по обходу строк табличной части делать пересчет для каждой строки.
  Во-вторых, у вас цена из справочника неправильно определяется, такое обращение к цене всегда будет возвращать нуль. Цена - это периодический реквизит, по крайней мере так должно быть, и наверняка она и у вас периодическая, поэтому обращаться нужно через метод получить(): 
Номенклатура.Цена.Получить(<Дата, на которую необходимо определить цену>)

Ды и бред это.. так нельзя делать. Т.е. у вас сумма будет пересчитываться каждый раз при открытии.
нужно написать обработку внешнюю, которая для старых документов, заполнит колонку сумму.

Кстати, ваша колонка, которую вы добавили, она является реквизитом метаданных, или вы просто добавили колонку, не привязывая ее к реквизиту табличной части?

И в чем сложность вывода сообщения я так и не понял :-\
обычное школьное условие: Если цена равна тому-то тому, то выводим нужное сообщение.

Теги:

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

Рейтинг@Mail.ru

Поиск