Добрый день.

Учусь понемногу программному коду 1с8. В одном из уроков просто разжевали и разложили по полочкам как пользоваться Стандартными функциями и Операторами. Было все так просто и понятно, что еще чуть-чуть и можно было бы себе сказать:"Молодец, да ты гуру в этих Если да Циклах!")))

Но не так все просто оказалось....Ух и намучилась!!!))

Но все же есть,есть эта самая моя первая обработочка!!! Возможно она пригодится таким же новичкам как и я, поэтому выкладываю ее здесь.

п.с. От Спасиба не отказываюсь))

Вопрос к знающим: почему,когда ПолеВвода я ввела как реквизит объекта Обработки (на самой обработке в меню Данные ввела реквизит=ПолеВвода стр.типа), то я никак не могла поймать его в Процедуре Рассчитать()....
что я для этого делала:
1)В проц.ПолеВводаПриИзменении(Элемент) - записывала в переменную значения ПолеВвода через метод А=Объект.ПолеВвода, в этой эе процедуре ставлю проверку-есть,записывает значения в ПолеВвода. Открываю сл.проц.Рассчитать(Команда) - и в нее пробую передать значение переменной ПолеВвода: и вот так Рассчитать(Команда,ПолеВвода) и вот так Рассчитать(Команда,Объект) - ничего не работает....причем обе эти команды исполняются в директиве Клиента,т.е.должны же они что-то видеть в своей обработке???!!! А нет,не видят...
2)Пришлось удалить все реквизиты Обработки и на самой форме создать ее собственный реквизит - тогда все заработало...
В чем разница-то???

п.с.обработка создана на уч.версии платформы 1С8.3
---
У тебя всегда последнее действие умножение....
Ну и поле ввода очищать после вычисления надо...
Молодец! Особенно с проверками - это очень важно,
потому что пользователи могут и слово там написать.

Вот тебе с объектом:
---
```1c
    &НаКлиенте
    Процедура Рассчитать(Команда)
    //теперь видим что на форме есть ПолеВвода!!!
    Ввод= ПолеВвода;
    //если ничего не ввели,то и считать не надо
    Если ПустаяСтрока(Ввод) Тогда
    возврат;
    КонецЕсли;
    Попытка
    Результат = Вычислить(ПолеВвода);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат вычисления выражения: "+Строка(ПолеВвода)+"="+Строка(Результат);
    Сообщение.Сообщить();
    Исключение
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Ошибка: " + ОписаниеОшибки();
    Сообщение.Сообщить();
    КонецПопытки;

    КонецПроцедуры
```

замените в вашей первой обработке Процедуру "Рассчитать" на это
---
Делаете лишние действия

```1c
    а = объект.Ревизит1
    РассчитатьСПередачейПараметров (а)
```

Можно заменить одной строкой

```1c
    РассчитатьСПерелачейПараметров(Объект.Реквизит1)
```

Соответственно и во второй процедуре вы перемеееной Ввод присваиваете значения переданного параметра а что явно лишнее .

Не обязательно что бы переменные совпадали по названию так как у тебя объявлено в функции (или процедуре) , главное что бы совпадал тип переменных

Поэтому твой код можно упростить так

```1c
    Продедура КнопкаРеквизита1 (команда)
    РасчитатьСПередачейПараметров(Объект.Реквизит1)
    КонецПроцедуры

    Процедура РасчитатьСПередачейПараметров (Ввод)

    Если ПустяСтрока (Ввод ) Тогда
    Возврат
    КонецЕсли
    ...
    ...
    КонецПроцедуры
```
---
Разобралась с передачей Параметров в процедурах формы!

см.скрин:
              1)Создала Реквизит1
               2)Добавила к нему отдельную кнопку КнопкаРеквизита
               3)Под кнопкой есть Процедура КнопкаРеквизита1()
                   В этой процедуре в переменную а задаю данные с объект.Реквизит1
                   и вызываю отдельную расчетную Проц.РасчетСПередачейПараметров(а)
               4)В самой рассчетной проц.РасчетСПередачейПараметров(а) - получаю этот
                   Параметр и запихиваю его в переменную Ввод,к-я и занимается всеми
                   расчетами дальше.
                 5)Создаю Проц.Реквизит1ПриИзменении(Элемент)
                     вновь здесь создаю переменную "а", присваиваю ей Объект.Реквизит1
                     и вызываю вновь рассчетную процедуру

Все Работает!!!!

Моя ошибка ранее при передаче Параметров из Проц. в проц. была в том, что я в уже готовые Проц.Действия, в которые передаются команды - пыталась впихнуть попутно еще како-нибудь Параметр. Н-р, в проц.Рассчитать(Команда,ПеременнуюВпихиваю), а так выходит нельзя делать, не разрешает система к своему Исполнительному органу (прямо как к КГБисту какому-нибудь) прилепить что-то свое несанкционированное)))))))))

Выкладываю еще один релиз своей обработки, теперь уже с тремя разными механизмами как расчетов так и вызова Параметров.
---
У тебя всегда последнее действие умножение....
Ну и поле ввода очищать после вычисления надо...
Молодец! Особенно с проверками - это очень важно,
потому что пользователи могут и слово там написать.

Вот тебе с объектом:
---
я сначала вставляла при Открытии() проц.ПолеВвода.Очистить(), но оно и так всегда очищается, а в веденные данные в поле можно пользователем стереть и вновь задавать выражение...Хотя кнопочку Очистить можно вставить.Спасибо.

Ух ты, работает и как Объект.Реквизит1 !!! Спасибо!!!
п.с.теперь вообще не пойму почему у меня с первого раза не получалось так)))
Спасибо!
---
Не понимаю где у тебя там что не работало. По твоим словам делал - все работает.

```1c
    &НаКлиенте
    Процедура ПолеВводаПриИзменении(Элемент)
    Ввод= Объект.ПолеВвода;
    Рассчитать("команда", Ввод);
    КонецПроцедуры

    &НаКлиенте
    Процедура Рассчитать(Команда, Ввод)
    Если ПустаяСтрока(Ввод) Тогда
    возврат;
    КонецЕсли;
    КонецПроцедуры
```
---
Вы все написали как раз как я сначала и задумывала, но потом сама себя сбила тем, что - зачем же я в Процедуре ПолеВводаПриИзменении() - буду вызывать сразу расчет выражения???...и стерла вызов этой процедуры...а потом в нее никак не могла впихнуть параметр этого ввода...Вот,приблизительно так:

```1c
    &НаКлиенте
    Процедура ПолеВводаПриИзменении(Элемент)
    Ввод= Объект.ПолеВвода;
    //Рассчитать("команда", Ввод);//Стерла я вызов отсюда этой процедуры
    КонецПроцедуры

    &НаКлиенте
    Процедура Рассчитать(Команда, Ввод)
    //и почему сюда этот Параметр все равно не попадал-не знаю...
    Если ПустаяСтрока(Ввод) Тогда
    возврат;
    КонецЕсли;
    КонецПроцедуры
```
---
Сейчас вновь попробывала из проц.ПолеВводаПриИзменении()
вызвать проц Рассчитать....и параметры передала...и вновь та же ошибка, что была у меня в самом начале!!!!!!см.скрин
---
Что за оператор такой ":", поставьте верный ";"
---
подскажите где эта ошибка? А нашла, вот исправила Пар1=Объект.Реквизит2;
и все равно не работает!

над самим расчетом я сегодня весь день вожусь-там все норм, но вот если мне нужно вызвать этот расчет из др.проц-то не работает...Не выдит система реквизит формы.
---
я вам уже написал, точку с запятой нормально расставьте по строкам, у вас на это на скрине и ругается.
---
быстро писала,опечаталась,исправила Пар1=Объект.Реквизит2;
Но результата расчета нет...

сейчас вновь отредактированную версию выложу, где не считает...

Вопрос:как из др.процедуры вызвать расчет?
---
а после этого посидите и подумайте, почему этот код будет работать, а ваш нет.
---
Поясните,пожалуйста,Вашу мысль: какой код будет работать, а мой нет?
Если речь о Вашем листинге ниже, то там видно только проверку передаваемого значения, - это понятно что рассчетная проц. не получает параметры (они к ней пустыми приезжают), но почему???

п.с.другого кода я там пока не вижу и файл не прикреплен никакой в Вашем сообщении...
---
нет, там не только проверка, откройте Синтакс-помощник, и вбейте в поиск "Вычислить".
---
Глобальный контекст (Global context)
Вычислить (Eval)
Синтаксис:

Вычислить(<Выражение>)
Параметры:

<Выражение> (обязательный)

Тип: Строка.
Выражение, которое требуется вычислить.
Возвращаемое значение:

Результат вычисления выражения. Тип возвращаемого значения зависит от типа выражения.
Описание:

Вычисляет переданное выражение. С помощью метода можно вычислять математические и логические выражения, а также операции конкатенации. Подробнее про выражения см. раздел "Выражения языка".

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:

В режимах запуска мобильного приложения метод не поддерживается в операционной системе iOS.
Пример:

А = Вычислить("500 + 500*20/100");
А = Вычислить("Истина и Ложь");
А = Вычислить("""Иван"" + "" "" + ""Иванович""");

То есть все мои безумные расчеты заменить на одну функцию Вычислить? И это даст мне возможность данную рассчетную проц. вызывать в др.Процедурах???

Момент,уже занимаюсь....
---
нет, просто я упростил, ваши расчеты ужасны, основные ошибки вашего кода это непонимание что такое реквизиты формы, и события объектов, первая обработка была самая удобоваримая, и если в ней сделать как я написал, и нажать на кнопку "Рассчитать", то все будет работать.
---
Это бомба-бомбейская!!!!!

Считает,причем вызывать можно из любой процедуры! Ух ты,вещь!!!

п.с.эту новую расчетную ф-цию от Андрея Карпова-я ввела и под ентер и под новую кнопку, а вот своей старой кнопочкой Рассчитать - осталась моя проц.,к-я еще в начале этой темы работала, а сейчас что-то глючит - это мелочи, разберусь, скорее всего типы данных в нее пошли без формата.

Вот это вещь! Спасибо!!!
---
Функция Вычислить() - это готовый уже упакованный алгоритм системы, она умеет сразу же распознавать и Типы значений (а у меня в удачной версии Обработки - приходилось насильно врубать Тип Число) и количество операций может вычислять сколько угодно ( у меня только выражение за раз считается))), но чтобы побольше - это массив подключать нужно,чем и займусь сегодня), а моя обработка - это,наверное, как раз кусочек от внутренностей данной ф-ции Выполнить....Так что еще не все потеряно - никто не запрещал разрабатывать колесо!))

п.с. как-то эта ф-ция Вычислить - спокойно договаривается с реквизитами Объекта формы, а вот моя изначальная разработка пока не может с Объектом договорится и почему - пока не знаю, но обязательно выясню!)) Спасибо.
---
Вот не работает и все!!!
я уже скопировала рассчетную проц. в отдельную,чтобы не было связи с кнопкой, и переменную явно объявила в проц.ПолеВводаПриИзменении(Элемент)-не работает!!!

Не видит система внутри проц.ПолеВводаПриИзменении(Элемент) Объект.Реквизит2!!!! Просто не видит!!!

п.с. а если мне нужно будет когда-нибудь вот так из другой проц. вызвать расчет - он что никогда не будет работать!?!
---
Сейчас,минуточку, прикреплю отредактированную Денис Ан мою обработку вновь к конфигуратору и попробую в привязанной обработке создать третий реквизит...Может проблема была в том что изначально у меня обработка была в конфигураторе, а потом уже в отвязанною от него так просто можно обращаться к Обект.Реквизит???

Все работает и с третьим реквизитом,привязанным к самому объекту!!!!!! Тогда,значит короткое замыкание у меня на тот момент было))) Но радует,что другим вариантом выкрутилась!

п.с.А вообще, очень сложная это штука - обращение к элементам объекта: никогда не знаешь почему не работает.. знатоки говорят- потому что все данные на сервере хранится, а ты их с клиента дергаешь,но Ведь если к реквизитам Обекта формы обращаться - причем тут сервер??? Разве в этом случае Элементы формы не на ней сейчас находятся, а значит их можно увидеть с Клиента???

п.с.2 Короче, темный лес у меня с этими объектами и обращением к ним...
---
```1c
    &НаКлиенте
    Процедура Рассчитать(Команда)
    //теперь видим что на форме есть ПолеВвода!!!
    Ввод= ПолеВвода;
    //если ничего не ввели,то и считать не надо
    Если ПустаяСтрока(Ввод) Тогда
    возврат;
    КонецЕсли;
    Попытка
    Результат = Вычислить(ПолеВвода);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат вычисления выражения: "+Строка(ПолеВвода)+"="+Строка(Результат);
    Сообщение.Сообщить();
    Исключение
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Ошибка: " + ОписаниеОшибки();
    Сообщение.Сообщить();
    КонецПопытки;

    КонецПроцедуры
```

замените в вашей первой обработке Процедуру "Рассчитать" на это
---
Вы проверку всего лишь показали-я тоже ее еще в самом начале своих мучений делала-там не получает рассчетная функция параметры - они пустые, но почему???

см.скрин
---
я вам предоставил рабочий вариант, вы же вместо того, чтобы сделать как я написал
замените в вашей первой обработке Процедуру "Рассчитать" на это
Переделали по-своему. Учитесь слушать и понимать, что пишите
---
Спасибо, я очень стараюсь....Но КАК можно запомнить ВСЕ функции из Синтаксис-помощника???....Это целой жизни не хватит, чтобы перепробывать ВСЕ функции и найти самые оптимальные,эффективно работающие под задачу...эх...
---
вам не нужно знать синтакс помощник, вам нужно посмотреть и изучить начальные курсы по работе с конфигуратором и простейшей работе с управляемыми формами.
---
Да...На 23 уроке П.Чистого я собралась выбросится в окно))) Сейчас как раз все начала с азов, а вот потом - я все равно собиру все с нуля конфигурации, к-е он разъяснял!

Спасибо огромное за помощь, теперь всю ночь буду думать - в чем же была проблема с вариантом передачи параметров из одной проц в другую, но это уже не важно, главное что работает и мой перемудренный вариант и Ваш просто исключительный! А как запустить все ж таки третий вариан - я еще подумаю.

Загружаю здесь Пятую редакцию обработки "Калькулятор", все желающие могут брать и работать над ней, если придумаете что пошло не так в изначальном моем вопросе - пишите сюда. Спасибо всем за оперативную помощь!
---
Разобралась с передачей Параметров в процедурах формы!

см.скрин:
              1)Создала Реквизит1
               2)Добавила к нему отдельную кнопку КнопкаРеквизита
               3)Под кнопкой есть Процедура КнопкаРеквизита1()
                   В этой процедуре в переменную а задаю данные с объект.Реквизит1
                   и вызываю отдельную расчетную Проц.РасчетСПередачейПараметров(а)
               4)В самой рассчетной проц.РасчетСПередачейПараметров(а) - получаю этот
                   Параметр и запихиваю его в переменную Ввод,к-я и занимается всеми
                   расчетами дальше.
                 5)Создаю Проц.Реквизит1ПриИзменении(Элемент)
                     вновь здесь создаю переменную "а", присваиваю ей Объект.Реквизит1
                     и вызываю вновь рассчетную процедуру

Все Работает!!!!

Моя ошибка ранее при передаче Параметров из Проц. в проц. была в том, что я в уже готовые Проц.Действия, в которые передаются команды - пыталась впихнуть попутно еще како-нибудь Параметр. Н-р, в проц.Рассчитать(Команда,ПеременнуюВпихиваю), а так выходит нельзя делать, не разрешает система к своему Исполнительному органу (прямо как к КГБисту какому-нибудь) прилепить что-то свое несанкционированное)))))))))

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

```1c
    а = объект.Ревизит1
    РассчитатьСПередачейПараметров (а)
```

Можно заменить одной строкой

```1c
    РассчитатьСПерелачейПараметров(Объект.Реквизит1)
```

Соответственно и во второй процедуре вы перемеееной Ввод присваиваете значения переданного параметра а что явно лишнее .

Не обязательно что бы переменные совпадали по названию так как у тебя объявлено в функции (или процедуре) , главное что бы совпадал тип переменных

Поэтому твой код можно упростить так

```1c
    Продедура КнопкаРеквизита1 (команда)
    РасчитатьСПередачейПараметров(Объект.Реквизит1)
    КонецПроцедуры

    Процедура РасчитатьСПередачейПараметров (Ввод)

    Если ПустяСтрока (Ввод ) Тогда
    Возврат
    КонецЕсли
    ...
    ...
    КонецПроцедуры
```
---
Смысл приведенного Вами кодинга тот же самый, но КРАСИВО!)) Мне нравится,спасибо!...
---
"приручать" новичка к костыльному методу

Вычислить() это по-моему преступление)
---
по-моему зло это искать в строке символы арифметических операций, а потом пытаться левую и правую сторону от этотго знака посчитать. А чем вам не устраивает функция "Вычислить"? Если бы я делал калькулятор, я бы либо воспользовался этой фунцией, либо повесил обработчики на кнопки, и запретил бы вообще что-то писать вручную в тексте
---
Не правильный подход к обучению. Не нужно создавать оторванные от жизни обработки: в реальной жизни это не пригодится. Возьмите учебник Радченко и шаг за шагом сделайте собственную конфигурацию. После этого подготовьтесь и сдайте экзамен на специалиста (если хотите больше зарабатывать, то лучше еще сдать на консультанта). И свежее мясо для франчей готово )
---
Возьмите учебник Радченко и шаг за шагом сделайте собственную конфигурацию.

Извините за вопрос, но Вы САМИ пытались что-нибудь освоить по программе Радченко?
На скрине приведена пример маленькой части кода, вырванного ими из какой-то процедуры....и 15 страниц воды КАК смотреть в конфигураторе, что слово Элементы - это,наверное, не переменная, что слово Материалы - это может быть и какая-нибудь переменная, а может быть и нет...вот есть еще слово ТекущиеДанные - поищим сначала это слово в переменных, а потом еще раз подумаем что это может быть...и вот,о УЖАС! сл.слово - СтрокаТабличной части - это точно переменная, но что мы с ней делаем, зачем ее сюда вообще написали...Ну да, язык программирования 1с8 сложен и вовсем вам поможет Синтаксис-помощник....так давайте же,ребятки, вновь рассмотрим здесь это выражение,только уже через Синтаксис-помощник: выделяем СтрокаТабличной части и вызываем Помощника, что не находите в нем ответ?...Ну точно тогда переменная!!!!!!!!!!

п.с.Показанный на скрине кодинг - шаблон текстов к урокам Радченко, распространяется бесплатно (скачала прямо с сайта 1с)
---
Да, по нему 8-ку начинал осваивать. Но правда это было очень давно, когда УФ и в проекте не было. Может сейчас учебник хуже стал.
---
По Радченко? уточняю, т.к. в последних сообщениях мв успели упомянуть уже трех преподавателей.
Если по Радченко, то я пока пасс...Это надо быть уже жутким профессионалом, чтобы быстро на вскидку пролистать этот учебник, поставить себе галочку и забыть...
Одна из интересных книг,на мой взгляд, это Кашаев "Прог-е в 1с8"....
---
Это надо быть уже жутким профессионалом
Не надо. Книжка для начинающих, для тех кто с нуля.
---
Да, по нему. И не пролистал, а сделал все шаг за шагом. После него уже не хочется тратить время на обработки типа "Hello, world".
---
Ну а что ты хотела ? Не интересно - не читай те моменты которые ты знаешь , но с другой стороны умение читать и разбирать чужой код очень важно поэтому там и столько и написано.
---
Вы в школе Толстого "Войну и мир" изучали? Так вот я была противной отличницей и читала не только программую лит-ру, но и всю внеклассную, а тут по программе задают "Войну и мир". Что я только не делала: и присидала с книгой в руках...и пробывала петь читаемый текст...и на спор с братом "слабо/не слабо" ставила....ничего не получилось - ровно 5 страниц и я в другом измерении,сплю короче!)))))))))))))))

Поэтому здесь вопрос не в интересно/не интересно - надо! Но будьте же гуманнее, товарищи Преподаватели!!!!!))))

п.с.Что Вы посоветуете (кроме Радченко) для быстрого освоения 1с8?
---
а тут по программе задают "Войну и мир". Что я только не делала: и присидала с книгой в руках...и пробывала петь читаемый текст...и на спор с братом "слабо/не слабо" ставила....ничего не получилось - ровно 5 страниц и я в другом измерении,сплю короче!)))))))))))))))
Не понимаю, как можно заснуть читая такое произведение? Особенно на фрагментах с французским текстом :)
---
80% задач в 1С сейчас решается запросами и только 20% алгоритмами кода.
---
Да,запросы-это вещь! В видеоуроках П.Чистов ими на раз два пользуется, я еще ни одного своего красивого отчета с запросами не делала-голова кружится в конструкторе запросов,составляя пакеты запросов, здесь очень серьезно нужно подходить к синтаксису - т.к. никакого Синтаксис-помощника там нет...А потом из составленных пакетов запросов вываливаемся в СКД, где еще что-то вычисляем вручную....Застрелиться хочется сразу))

В теме запросов у меня пока пробел с учебной литературой...Нашла вот этот файлик - просто славно все начинают описывать, но он обрывается и дальше вновь одна и та же песня - приходите/заплатите))

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

п.с.2 если у Вас есть подходящие учебные материалы по запросам и СКД, без лишней воды и вполне доходчивые, то выложите ссылочку, пожалуйста.
---
Еще тутможешь почитать
---
где - тут? Ссылки не вижу...
---
слово "тут" - гиперссылка нажимаешь и переходишь по ссылке
---
правда там ограничение стоит на просмотр страниц по попробуй найти книжку "Язык запросов 1с Предприятия" а по СКД "Разработка сложный отчетов"
---
уже занимаюсь,спасибо!

п.с.Ок,все нашла-это Огонь!!! Еще раз благодарю, пойду учится дальше.
---
Закончила в своей обработке Калькулятор работу с Массивами и ТаблицамиЗначений - это для того, чтобы можно было вводить ни одну операцию, а много.

Вот здесь ссылка на все муки с Массивами https://forum.infostart.ru/forum9/topic182037/#message1888510