[РЕШЕНО] Можно ли установить арифметический расчет данных в столбце формы списка в 1С конфигураторе?

Тема в разделе "Установка платформы "1С:Предприятие 8"", создана пользователем GiGi, 11 мар 2017.

  1. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Хочу заранее предупредить в 1С конфигураторе начал пробовать совсем недавно. Поэтому многое еще предстоит знать … что хотел узнать…. И рассчитываю на вашу помощь
    Вообще как понимаю в 1С конфигураторе самая обычная штучка это создать ФормуЭлемента в справочнике или ФормуДокумента в группе Документы и создать Форму Списка.
    И как обычно арифметические операции делают в форме элемент или документ , на клиенте. А форма список просто принимает и записывает уже готовые и рассчитанные данные.
    То, что нужно об этом объяснял более опытному программисту, но никак не нашел понимание. И толком не мог получить ответ. Вместо этого вопросы, почему мне это надо и зачем. А то, что мне нужно думаю просто ерунда. и понять лего, … более того даже понимать тут ничего. Рыл так же и в интернете но ничего не нашел.
    Так вот, речь о чем?
    Как я выше говорил, обычно арифметический расчет данных легко делается в модуле формы элемента или документа. А форма списка с нажатием сохранить принимает уже рассчитанные готовые данные.
    Мне нужно, что бы арифметический расчет был в форме списка. Т.е. на пример, что бы при изменении реквизитов формы списка, один столбец формы списка сам делал арифметический расчет. Умножал, делил плюсовал и т.д. и сам ставил результат на каждой строке по соответствующему полю.
    В модуле элемента все получается, а в модуле список никак.
    Поэтому прошу помощи… можно ли так сделать? И если да то как?

    Буду признателен за ответ
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.246
    Симпатии:
    963
    Баллы:
    204
    1. Смысла сие не будет иметь, т.к. в список данные читаются динамически.
    2. Сделать без извращений скорее всего нельзя потому, что п.1
  3. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.859
    Симпатии:
    501
    Баллы:
    204
    Ну если динамический список, то все вычисления можно сделать в запросе. Если обычный, то можно в событии приПолученииДанных этого списка прописать нужные формулы.
    P.S. Раз Вы только начали работать, как Вы выразились, в конфигураторе, то знайте, что форма списка, это специальный "механизм", который отображает данные пользователю из таблиц базы данных. Ключевое слово, отображает, а не меняет. Если Вы что-то меняете в списке, то изменения не будут нигде храниться. Иначе каждый раз Вам нужно будет получать нужный объект и перезаписывать его с новым значением реквизита. А для этого была придумана форма элемента.
  4. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Спасибо за ответ!
    Ну вообщем как я понимаю вычисления в форме списка не самая лучшая затея.
    Ладно! Так и быть.
    Тем более, что список динамический и прописать нужную формулу в запросе ... для этого у меня теории маловато .и до этого пока не дошел.. потому, как в 1С делаю первые шаги.
    Я просто до этого программировал в Эксель. И поэтому и тут решил как в эксель ... по привычке.
    Но у меня еще дополнительный вопрос.
    А можно ли вставить вычисления через событие при ПриИзменении поля в табличной части документа?
    Я как то где то видел видео урок... и там увидел то, что нужно в результате, но .... ну просто не как не нашел нигде, как это сделать, сколько не рыл в и-нете.
    А нужно то ерунда....Что бы результат прописанного в конфигураторе был такой:
    Допустим в режиме 1С предприятие, нажимаешь создать документ
    Выходит форма с шабкой и табличной частью.
    И допустим добавляешь новый элемент. И как обычно появляется новая строка в табличной части документа.
    Где, допустим табличная часть состоит из пяти колонок. Из которых первая строка, а остальные числа.
    имя первай колонки допустим: "наименованиеПС", второй: "ПС_Прием", третьей: "ПС_Отпуск", четвертой: "ПС_Баланс", пятой: "ПС_БалансПроцент",
    поле четвертой колонки должно формироваться разницей между вторым и третьим, а пятая процентом разницы к второй.
    Т.е. вычисления нужны для четвертого и пятого столбца.
    Поэтому нужно, что бы при сообитии: "ПС_ПриемПриИзменении" и "ПС_ОтпускПриИзменении" цыфра в "ПС_Баланс" и "ПС_БалансПроцент" делала расчет автоматический.
    Просто в Экселе такое сделать проще некуда.. а тут....

    Так что, раз в форме списка проблема, то в форме табличной части документа можно ли сделать таким образом?
    И если да то как..
    Нигде не нашел как выглядит код команд.
    В справочнике через команды Объект.Наименование ... расчеты получались, а тут чуть другой код нужен.
    И конечно я на этапе первых шагов и не знаю нужные команды.
    Вообще уважаемые форумчане, раситываю на вашу помошь.
    И буду за нее признателен!
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.544
    Симпатии:
    343
    Баллы:
    104
    Код:
    &НаКлиенте
    Процедура ПС_ПриемПриИзменении()
    
        СтрокаТабличнойЧасти = Элементы.<ИмяТабличнойЧасти>.ТекущиеДанные;
        СтрокаТабличнойЧасти.ПС_Баланс = СтрокаТабличнойЧасти.ПС_Прием - СтрокаТабличнойЧасти.ПС_Отпуск;
    
    КонецПроцедуры
    
  6. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    ОТЛИЧНО!!!!
    Вот теперь доволен! И в это другое дело
    сколько искал этот казалось бы простейший код команды. И нигде не мог найти.
    Так что, выручили ... благодарен..
    Теперь в таком виде все работает:
    Код:
    //----------------------------------------------------
    &НаКлиенте
    Процедура ПС_ПриемОтпускБалансПС_ПриемПриИзменении(Элемент) 
    РачетБанансаПоПодстанции();
    КонецПроцедуры
    &НаКлиенте
    Процедура ПС_ПриемОтпускБалансПС_ОтпускПриИзменении(Элемент)
    РачетБанансаПоПодстанции();
    КонецПроцедуры
    &НаКлиенте
    Процедура РачетБанансаПоПодстанции()
    СтрокаТабличнойЧасти = Элементы.ПС_ПриемОтпускБаланс.ТекущиеДанные;
    СтрокаТабличнойЧасти.ПС_Баланс = СтрокаТабличнойЧасти.ПС_Прием - СтрокаТабличнойЧасти.ПС_Отпуск;
    СтрокаТабличнойЧасти.ПС_БалансПроцент = (СтрокаТабличнойЧасти.ПС_Прием - СтрокаТабличнойЧасти.ПС_Отпуск)/СтрокаТабличнойЧасти.ПС_Прием*100;
    КонецПроцедуры
    //----------------------------------------------------
    Но вообще кроме этого есть у меня другой вопрос.. но это из другой оперы....хотя в конкретном случае касается табличной части документа
    Имеет он отношение к тому, как сделать, что бы при нажатии добавить новый документ в появившейся форме нового пока пустого документа на пример в первой колонке: в табличной части документа, автоматический выводился бы список всех строк из указанного справочника
    Т.е. в данном случае на пример список наименований всех электроподстанций.... что бы при каждом создании нового документа не приходилось по выбору делать рутину и указывать по выбору один за другим.
    Но при этом. что бы все остальные поля "ПС_Прием"; "ПС_Отпуск" и т.д. оставались пустыми
    Вот такой вопрос .
    Но ладно это уже совсем другая тема.. И буду уважать регламент.
    Так что, если не найду ничего, в новой теме опять рассчитываю на помощь.
    Еще раз спасибо!
    Последнее редактирование модератором: 15 мар 2017

Поделиться этой страницей