автоматический расчет поля реквизита (не табличной части)
Автор Hansa, 25 окт 2013, 01:03
0 Пользователей и 1 гость просматривают эту тему.
Добрый день! Как сделать так, чтобы автоматически рассчитывалась сумма (Сумма = Количество*Цена) при изменении Цены или Количества в форме документа. Это реквизиты не табличной части, а просто реквизиты документа. Для табличной части так:
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
Но у меня просто реквизит, а не реквизит таблично части.
Понимаю, что вопрос примитивен, но ответа на него не знаю.
Если реквизиты объекта то так
Объект.Сумма = Объект.Количество*Объект.Цена;
Если реквизиты формы то так
Сумма = Количество*Цена;
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Это реквизиты формы или объекта???
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Это реквизиты объекта (Документы)
Тогда сто пудов так
Объект.Сумма = Объект.Количество*Объект.Цена;
Главное что бы ТИПы у реквизитов были ЧИСЛО
Добавлено: 25 окт 2013, 01:49
Если ошибка, копируйте ошибку сюда полностью… Не нужно ошибки стараться перевести своими словами!
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Так я скопировал
{Документ.Сделка.Форма.ФормаДокумента.Форма(5)}: Преобразование значения к типу Число не может быть выполнено
Элементы.СуммаОткрытия = Элементы.Количество*Элементы.ЦенаОткрытия;
Добавлено: 25 окт 2013, 07:05
Типы у реквизита точно число.
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Алина89 0 / 0 / 0 Регистрация: 05.06.2016 Сообщений: 18 |
||||
1 |
||||
1C 8.x Автоматический подсчет суммы в форме документа25.10.2016, 16:25. Показов 9573. Ответов 4 Метки нет (Все метки)
Всем привет. Весь день ломаю голову (Это мое первое задание). Если кто может, отзовитесь, пожалуйста.
НЕ РАБОТАЕТ.Просто ничего не происходит
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
25.10.2016, 16:41 |
2 |
СтрокаТабличнойЧасти.ЦенаПоступления не брать цену из табличной части, а брать ее из номенклатуры (например) Добавлено через 1 минуту
0 |
0 / 0 / 0 Регистрация: 05.06.2016 Сообщений: 18 |
|
25.10.2016, 17:00 [ТС] |
3 |
или при изменении номенклатуры брать цену из Справочника Номенклатуры и заполнять ее в табличной части товары (что наверное логичнее Не совсем понимаю, что имеется ввиду. Если не сложно, поясните, пожалуйста
0 |
Xomych 856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
||||
25.10.2016, 18:24 |
4 |
|||
РешениеПри выборе товара в Поле ценаПоступления (Тип Число) подставляешь цену поступления из справочника. Процедура ПриИзменении() на Товар, далее вызов сервера, там получаешь цену, возвращаешь её в ЦенуПоступления, в этой же процедуре вызываешь процедуру пересчёта суммы Добавлено через 6 минут
0 |
0 / 0 / 0 Регистрация: 05.06.2016 Сообщений: 18 |
|
26.10.2016, 14:25 [ТС] |
5 |
Спасибо большое за помощь, работает.
0 |
качестве времени документа при оперативном проведении ему присваивается оперативная отметка времени.
Поле Номер не заполнено, но система сама генерирует для нового документа уникальный номер, так как свойство Автонумерация для документа включено по умолчанию.
Поле Склад уже заполнено значением Основной, так это задано в свойствах этого реквизита.
75. Заполните табличную часть: нажмите Insert, заполним ее материалами для ремонта телевизоров: Строчный трансформатор GoldStar, Количество – 10, Цена – 270, Сумма 2700, Строчный
трансформатор Samsung, Количество – 10, Цена – 600, Сумма – 6000, Транзистор Philips, Количество – 10, Цена – 3, Сумма – 30, нажмите Провести и закрыть.
76. Создайте и проведите документ, который будет приходовать следующие материалы для установки стиральных машин Кабель электрический, Количество – 5, Цена – 20, Сумма –
100, Шланг резиновый, Количество – 5, Цена – 100, Сумма – 500.
При вводе материалов не используйте кнопку выбора три точки, а просто вводите название материалов в это поле. Платформа автоматически найдет материалы, наименование которых начинается с введенных символов, и предложит их для выбора.
При заполнении документа приходится вводить сумму в каждой строке. Это неудобно, и возникает желание автоматизировать работу документа так, чтобы сумма вычислялась автоматически каждый раз при изменении цены или количества материалов в строке.
Теперь надо слегка изменить логику работы формы документа, а значит, нам придется создать свою собственную форму документа «ПриходнаяНакладная» для того, чтобы в ней мы могли описать тот алгоритм, который нам нужен.
77. Создайте форму документа: в окне Конфигуратора выберите на дереве объект Документы, выберите ПриходнаяНакладная, М2,
выберите вкладку Формы, можно видеть, что ни одна из основных форм документа не задана, выберите кнопку Лупа в поле Документа или нажмите кнопку Добавить над списком форм, должен запуститься конструктор форм, выберите Форма документа, и огласившись со всем, что нам предлагает система нажмите Готово.
В дереве объектов конфигурации у объекта конфигурации Документ ПриходнаяНакладная появилась форма ФормаДокумента, а на экране открылось окно редактора форм, содержащее эту форму.
Форма документа «ПриходнаяНакладная» содержит большое количество всевозможных полей. Эти поля называются элементами управления. Они имеют разное назначение и разное поведение, которое соответствует их назначению. Однако все они служат для того, чтобы отображать информацию, хранящуюся в базе данных и организовывать интерактивную работу с этой информацией.
При разработке форм объектов конфигурации разработчик не имеет возможности нарисовать форму. Он может только указать из каких элементов будет состоять форма, а система уже сама самостоятельно расположить эти элементы в форме.
Элементы в форме в верхнем левом окне редактора форм образуют иерархическую структуру, из которой следует, что чем выше в списке находится элемент, тем выше и левее на форме он будет располагаться.
Эта структура редактируется на вкладке Элементы и позволяет управлять отображением и редактированием данных в форме.
Мы хотим, чтобы каждый раз, когда меняется значение в поле «Количество» или в поле «Цена», в поле «Сумма» автоматически устанавливалось значение равное Количество*Цена. Очевидно, что для этого нужно написать на встроенном языке команду похожую на Сумма = Количество*Цена, которая будет выполняться при изменении значения поля «Количество» или «Цена».
3.4.Обработчик события
Усистемы существуют события, которые связанные с самыми различными моментами ее стандартного поведения. Используя встроенный язык разработчик может вклиниться в эти события и описать собственный алгоритм того, что должно происходить при наступлении этого события.
78. Выберите элемент формы МатериалыКоличество, МП,
Свойства, должна появиться Палитра свойств, прокрутите список до конца, вы обнаружите перечень событий, которые могут быть связаны с этим полем ввода, в группе События в поле При изменении нажмите Лупа, система создаст заготовку процедуры обработчика этого события в модуле нашей формы.
Модуль — это «хранилище» для текста программы на встроенном языке. В конфигурации существует большое количество модулей, которые расположены в различных ее точках. Они могут принадлежать некоторым объектам конфигурации (например, формам), а могут существовать сами по себе (принадлежать всей конфигурации в целом).
79. В модуль формы добавьте код: &НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанн
ые;
СтрокаТабличнойЧасти.Сумма=СтрокаТабличнойЧасти.Кол
ичество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
В первой строке мы сначала создаем переменную СтрокаТабличнойЧасти, в которую будет помещен объект, содержащий данные, находящиеся в строке табличной части, которую нам нужно пересчитать.
Мы создаем переменную прямо по ходу работы, и ее тип определяется типом значений, которые она содержит.
Поскольку мы находимся в модуле формы, то в нем доступны все свойства и методы объекта встроенного языка УправляемаяФорма. Поэтому можем обращаться к ней напрямую. После знака равенства мы обращаемся к коллекции элементов формы, используя одно из свойств объекта УправляемаяФорма – свойство Элементы.
Коллекция элементов формы является объектом встроенного языка ВсеЭлементыФормы., содержащее все элементы формы.
Каждый элемент формы можно получить, указав его имя в кчестве свойства этого объекта, то есть через точку от него. В данном случае мы обращаемся к табличной части документа «Материалы» (Элементы.Материалы).
Табличная часть документа представляет собой объект встроенного языка ТаблицаФормы. Получить ту строку, в которой в настоящее время осуществляется редактирование, можно при помощи свойства программного объекта ТаблицаФормы — ТекущиеДанные (Элементы.Материалы.Текущие данные).
Таким образом, в результате выполнения первой строки
переменная СтрокаТабличнойЧастибудет |
содержать |
объект |
ДанныеФормыСтруктура. |
Этот |
объект содержит данные, |
находящиеся в текущей строке табличной части документа (Элементы.Материалы.ТекущиеДанные).
Получив этот объект, мы можем обратиться к данным конкретной колонки табличной части, указав имя колонки в качестве свойства объекта. Например, используя обращение СтрокаТабличнойЧасти.Количество мы получаем число, которое находится в редактируемой строке в колонке Количество.
То есть во второй строке процедуры обработчика вычисляется значение колонки Сумма как произведение значений колонок Количества и Цена.
80. Выберите Отладка, Начать отладку, на вопрос:
редактируемая конфигурация отличается от конфигурации базы данных. Обновить конфигурацию базы данных? выберите Да, в окне Реорганизация информации выберите Принять.
81. Теперь посмотрим, как это работает: выберите любой документ ПриходнаяНакладная, теперь поменяйте количество в любой строке документа, сумма в строке должна будет пересчитана.
Замечательно. Но теперь хотелось бы и для поля «Цена» сделать то же самое. А если заглянуть вперед, то мы увидим, что подобное автоматическое заполнение поля «Сумма» может нам понадобиться и
вдругих документах. Поэтому лучше будет поместить расчет суммы
внекотором «общедоступном» месте, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм.
3.5.Одна процедура для обработки нескольких события
82.Создадим объект конфигурации Общий модуль: в дереве объектов конфигурации выберите ветвь Общие, Общие модули,
МП, Добавить, в поле Имя введите РаботаСДокументами, выберите в свойствах Клиент (управляемое приложение), а флажок Сервер отключите.
83. Выберите Модуль, Открыть, введите код:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма=СтрокаТабличнойЧасти.Кол ичество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
84. Затем в модуле нашей формы изменим текст нашего обработчика: выберите Документы, ПриходнаяНакладная, выберите Формы, ФормаДокумента, М2, выберите Модуль, измените код так:
&НаКлиенте Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧа
сти);
КонецПроцедуры
85. Теперь осталось и для поля «Цена» установить такой же обработчик. Поэтому мы создадим обработчик события «При изменении» для поля ввода, которое расположено в колонке «Цена» и повторим в нем вызов процедуры «РассчитатьСумму» из общего модуля: выберите Приходная накладная, Форма, ФормаДокумента, М2, выберите элемент формы МатериалыЦена,
МП, Свойства, должна появиться Палитра свойств, прокрутите список до конца, вы обнаружите перечень событий, которые могут быть связаны с этим полем ввода, в группе События в поле При изменении нажмите Лупа, система создаст заготовку процедуры обработчика этого события в модуле нашей формы.
86. Введите код: &НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанн
ые;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧа
сти);
КонецПроцедуры
87. Теперь посмотрим, как это работает: выберите любой документ ПриходнаяНакладная, поменяйте количество в любой строке документа, сумма в строке должна будет пересчитана, теперь поменяйте цена в любой строке документа, сумма в строке должна будет пересчитана.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Многим разработчикам 1С полезно уметь автоматизировать определенные процессы, подстраивая их под требования заказчика. Например, можно настроить программу таким образом, чтобы сумма в таблицах вычислялась автоматически при редактировании данных в других блоках (количество, цена за единицу и т.д.).
Чтобы сделать что-то похожее, необходимо произвести несколько простых действий. В частности, открыть конфигуратор, открыть форму нужного документа.
Далее нужно создать обработчик события «ПриИзменении» для колонок «Цена» и «Количество». Это можно сделать двумя способами.
- Правой кнопкой мыши вызвать меню колонки и выбрать обработчик <ПриИзменении> во вкладке «События»:
- Создать обработчик в свойствах (нажать на лупу возле обработчика «ПриИзменении»)
После этого нужно выбрать подходящую директиву выполнения обработки. В данном случае «На клиенте»:
Откроется модуль формы с созданным обработчиком:
Далее требуется вписать следующий программный код:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
То же самое нужно сделать и для колонки «Цена».
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
В переменную «СтрокаТабличнойЧасти» помещается текущая выделенная строка в табличной части (в которой меняется количество или цена товара). Для подсчета суммы необходимо обратиться к нужным реквизитам объекта («Количество» и «Цена») и перемножить их значения. Результат поместить в реквизит «Сумма».
Если данный процесс автоматического расчета нужен сразу для нескольких документов, можно внести вышеуказанный код в общий модуль. Например, процедуру «РассчитатьСумму» поместить в модуль «РаботаСДокументами». Если в модуле будут только функции, выполняемые на клиенте (обработки событий, связанные только с элементами формы), то в свойствах общего модуля нужно отметить «Клиент», чтобы к модулю можно было обратиться из функций с директивой «&НаКлиенте».
После имени процедуры «РассчитатьСумму» необходимо добавить «Экспорт», чтобы процедуру можно было вызвать из формы документа.
Данный код выглядит так:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма =
СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Затем в модуле формы нужного документа следует создать обработчик события под названием «ПриИзменении» для колонок «Количество» и «Цена», и вызвать процедуру «РассчитатьСумму» из общего модуля.
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Теперь необходимый процесс успешно автоматизирован.
nagibetor |
|
||
---|---|---|---|
|
Yandex |
|
||
---|---|---|---|
|
АВП |
|
||
---|---|---|---|
|
Код 1C v 8.3
|
nagibetor |
|
||
---|---|---|---|
|
Такой код в модуле я применял цена не меняется. Тогда в чем дело? |
АВП |
|
||
---|---|---|---|
|
ЦенаПриИзменении — это событие формы, его надо назначить в форме. Встали на поле Цена пр кн мыши Свойство. В окне свойств внизу назначьте эту процедуру |
nagibetor |
|
||
---|---|---|---|
|
Зашел в свойства и куда нажать чтобы назначить процедуру. Извиняюсь за назойливость, я еще учусь. |
АВП |
|
||
---|---|---|---|
|
|
nagibetor |
|
||
---|---|---|---|
|
Огромное спасибо, но у меня есть еще вопросы. Вас не затруднит мне еще помочь? |
АВП |
|
||
---|---|---|---|
|
Если немного (ночь все же) и будут в моей компетенции |
nagibetor |
|
||
---|---|---|---|
|
У меня вопрос. При проведение документа должен делать движение в регистре накопления «Остатки Товаров» с видом движения приход. |
АВП |
|
||
---|---|---|---|
|
Конструктор движений в помощь. Там все просто |
nagibetor |
|
||
---|---|---|---|
|
Почему при нажатие Сформировать «Остатки товаров» у меня ничего не заполняется? |
nagibetor |
|
||
---|---|---|---|
|
и еще такой вопрос. Документ должен делать проводки Дебет Кредит Субконто 1 Контрагент Субконто 1 Номенклатура Субконто 2 Реализация товаров Субконто 2 Склад Дебет Субконто 1 Номенклатура Субконто 1 Контрагент Субконто 2 Склад Субконто 2 Поступление товаров Как это сделать? |
nagibetor |
|
||
---|---|---|---|
|
Еще вопрос Создать отчет по движению номенклатуры за период. Отбор по контрагенту или контрагентов |
Подсказка: Для выделения Кода используйте (в редакторе). |
21.06.2019
Можно ли настроить в документах ВетИС автоматический пересчет единиц измерения? Например, у нас в программе «1С:Бухгалтерия 8» номенклатура «Фарш в упаковках (100 г)» измеряется в штуках, а в документе ВетИС количество должно быть указано в килограммах. Предположим, в накладной на реализацию мы указываем «Фарш в упаковках (100 г)» в количестве 100 шт., тогда в автоматически созданном документе ВетИС указанная продукция должна отразиться в количестве 10 кг.
Для полнофункционального двухстороннего обмена с ВетИС (с Государственной информационной системой в области ветеринарии) подконтрольная продукция животного происхождения должна быть внесена в справочник номенклатуры в информационной базе пользователя.
В библиотеке интеграции с ВетИС для каждой единицы измерения однозначно определен тип единицы измерения:
- единица измерения объема (литр, миллилитр);
- единица измерения веса (кг, тонна);
- единица измерения длины (метр);
- штука, бочка, голова, канистра и т. д.
Поэтому для подконтрольной продукции (товара) пользователь должен указывать не только единицу измерения, но и ее соответствие единице объема (веса, длины и т. д.) ВетИС. Если соответствие указано, то при обмене данными сопоставление единиц измерения производится автоматически. При невозможности сопоставления пользователю выдается сообщение об ошибке и необходимости выбора номенклатуры с корректной единицей хранения.
В «1С:Бухгалтерии 8» (ред. 3.0) при создании документа ВетИС достаточно один раз вручную заполнить количество и единицу измерения ВетИС для подконтрольной продукции (рис. 1).
Рис. 1. Производственная операция ВЕТИС
Дальнейший пересчет по этой номенклатуре будет выполняться автоматически при создании любого документа ВетИС, где требуется такой пересчет.
Поделиться с друзьями:
Подписаться на комментарии
Отправить на почту
Печать
Написать комментарий