Как сделать сумму в 1с

Обновлено: 04.07.2024

А поподробнее можно? Это нужно открыть форму документа и у стоимости создать событие ПриИзменении??

да, обработчик "при изменении" и желательно у вех трех поставить один обработчик

на вкладке формы данного документа вы создали скорее всего форму где разместили реквизиты табличной части КоличествоЧасов, ЦенаЧаса и Стоимость (т. е. сумма). Далее вам в свойствах реквезитов КоличествоЧасов и ЦенаЧаса в поле ПриИзменении следует щёлкнуть на значке лупы и выбрать "создать на клиенте", в результате вы получите заготовки процедур, где вы должны прописать примерно так:
СтрТабЧасти = Элементы. НазваниеТабличнойЧасти. ТекупщиеДанные;
СтрТабЧасти. Стоимость = СтрТабЧасти. КоличествоЧасов*СтрТабЧасти. ЦенаЧаса;

Эта статья будет о том, как получить представление числа или суммы прописью, используя стандартную функцию ЧислоПрописью().

Пишу это в качестве шпаргалки, в том числе и для себя, ибо требуется достаточно часто, а запоминать все эти конструкции нет никакого желания (синтаксис помощник, как-то не сильно помогает).

В этой статье я не буду приводить описание функции ЧислоПрописью() и ее параметров — это есть в синтаксис-помощнике.

Число прописью

Начнем с простой записи числа прописью:

Результат правда будет немного не таким, каким хотелось бы — дробная часть будет записана цифрами.

Можно попробовать сделать так:

Но это все равно не то, так как нельзя понять где заканчивается целая часть и начинается дробная.

Для решения этой проблемы можно задействовать третий параметр:

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

Стандартного и универсального решения этой проблемы, к сожалению, не существует (поправьте меня, если я ошибаюсь).

Сумма прописью

Теперь перейдем к представлению сумм прописью (по суммой подразумевается пара — число+валюта). Здесь все гораздо лучше — знаков после запятой практически всегда два.

Сумма в российских рублях на разных языках:

Сообщить(ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "рубль,рубля,рублей,м,копейка,копейки,копеек,ж,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=uk_UA;ДП=Истина", "карбованець,карбованцi,карбованцiв,м,копiйка,копiйки,копiйок,м,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=lv_LV;ДП=Истина", "rublis,rubli,rublu,v,kapeika,kapeiki,kapeiku,s,2"));

Сумма в долларах США на разных языках:

Сообщить(ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "доллар,доллара,долларов,м,цент,цента,центов,м,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=uk_UA;ДП=Истина", "долар,долара,доларiв,м,цент,цента,центiв,м,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=lv_LV;ДП=Истина", "dolars,dolari,dolaru,v,cent,centi,centu,v,2"));

Сумма в евро на разных языках:

Сообщить(ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "евро,евро,евро,м,евроцент,евроцента,евроцентов,м,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=uk_UA;ДП=Истина", "євро,євро,євро,м,євроцент,євроцента,євроцентів,м,2"));

Сумма в украинских гривнах на разных языках:

Сообщить(ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "гривна,гривны,гривен,ж,копейка,копейки,копеек,ж,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=uk_UA;ДП=Истина", "гривня,гривнi,гривень,ж,копiйка,копiйки,копiйок,ж,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=lv_LV;ДП=Истина", "grivna,grivni,grivnu,s,kapeika,kapeiki,kapeiku,s,2"));

Сумма в латвийских латах на разных языках:

Сообщить(ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "лат,лата,латов,м,сантим,сантима,сантимов,м,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=uk_UA;ДП=Истина", "лат,лата,латiв,м,сантим,сантима,сантимiв,м,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=lv_LV;ДП=Истина", "lats,lati,latu,v,santims,santimi,santimu,v,2"));

Сумма в румынских леях на разных языках:

Сумма в болгарских львах на разных языках:

Сообщить(ЧислоПрописью(1234.56, "Л=ru_RU;ДП=Истина", "лев,лева,левов,м,стотинка,стотинки,стотинок,ж,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=uk_UA;ДП=Истина", "лев,лева,левів,м,стотинка,стотинки,стотинок,ж,2"));

Сообщить(ЧислоПрописью(1234.56, "Л=lv_LV;ДП=Истина", "leva,levas,levas,s,stotinka,stotinki,stotinki,s,2"));

Казахский язык и валюту я пропустил из-за сложностей с отображением символов.

На этом все, надеюсь данная статья вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

(оценок: 13, средняя оценка: 4,38 из 5)

Все работает хорошо, но при добавлении копированием выбранной строки (F9) в первый случай копирования значение Объект.СуммаПоДокументу не обновляется. В дальнейшем расчет идет без данных этой строки. Последующее использование F9 (несколько раз) для любой строки вызывает пересчет за исключением бедной строки. При добавлении строки стандартным способом (ins) и вводе значений - расчет получается правильный. Если добавить копированием (F9) – опять появляется неучтенная в итогах сумма для новой строки.
Рассмотрел значения полей по шагам. В процедуру
Код 1C v 8.2 УП
Передается элемент с типом ТаблицаФормы с новой строкой с нулевыми значениями, установлено значение только в поле НомерСтроки:
Элемент.ТекущиеДанные.НомерСтроки

Вопрос знатокам: это глюк системы или можно обойтись другими программными средствами? Например отслеживать F9 и вызывать функцию РсчетСуммыПоДокументу()

Выбор (S_election)
ВыборЗначения (ValueChoice)
НачалоПеретаскивания (DragStart)
ОбработкаВыбора (ChoiceProcessing)
ОбработкаЗаписиНового (NewWriteProcessing)
ОкончаниеПеретаскивания (DragEnd)
ПередНачаломДобавления (BeforeAddRow)
ПередНачаломИзменения (BeforeRowChange)
ПередОкончаниемРедактирования (BeforeEditEnd)
ПередРазворачиванием (BeforeExpand)
ПередСворачиванием (BeforeCollapse)
ПередУдалением (BeforeDeleteRow)
Перетаскивание (Drag)
ПослеУдаления (AfterDeleteRow)
ПриАктивизацииПоля (OnActivateField)
ПриАктивизацииСтроки (OnActivateRow)
ПриАктивизацииЯчейки (OnActivateCell)
ПриИзменении (OnChange)
ПриНачалеРедактирования (OnStartEdit)
ПриОкончанииРедактирования (OnEditEnd)
ПриСменеТекущегоРодителя (OnCurrentParentChange)
ПроверкаПеретаскивания (DragCheck)

Для устойчивости добавим процедуру:


Необходимо вычислить сумму значений пользовательского поля в Итоге по отбору.

Оглавление

Отчет выглядит так, сумма считается в колонке "Количество затрат":

2020-04-23 21 35 09

Необходимо через пользовательский режим добавить это же поле, но с условием затрат по реквизиту для номенклатуры (статья калькуляции) из документов затрат производства, т.е. выполнить отбор. Сейчас сумма считается по этому полю без отбора, по всем значениям, которые выводятся в этой колонке.

В отчет добавим пользовательское поле, кнопки на форме отчета: "Еще" - "Прочее" - "Изменить вариант отчета". В появившемся окне "Пользовательские поля" - кнопка "Добавить" - "Новое поле выражение. " - "Выражение итоговых записей":

2020-04-23 23 09 40

Указывать "Иначе 0" не обязательно.

Этим выражением, мы сказали системе выполнить отбор по интересующей группе справочника "Материальные затраты", элементы которой указаны в документах для номенклатур, затем подсчитать сумму затрат по полю "Количество затрат" соответственно тому, что попало в отбор.

Созданное пользовательское поле добавляем в отчет через кнопку "Настройка" на форме отчета:

2020-04-23 22 30 30

Ненужное поле, которое заменили на новое, можно отключить.

Теперь в отчете, затраты по номенклатуре суммируются только в том случае, если для них указана группа статей калькуляции из группы "Материальные затраты":

2020-04-23 22 38 28

Изначально, выражение выглядело так:

Выбор
Когда [Статья калькуляции.Группа статей калькуляции.Наименование] = "Материальные затраты"
Тогда Сумма([Количество затрат])
Иначе 0
Конец

2020-04-23 22 45 40

В группировке и в Итоге по колонке кол-ва затрат сумма не работала, возвращала 0 (пустые значения). Поэтому функция "Сумма" должна быть вначале выражения.

Читайте также: