// Дальше в этой задачке надо посчитать Итоговую сумму по всем Товарам ( т.е. сложить все цены между собой из МассиваЦен ... :( - подскажите пж как сложить все значения МассиваЦен между собой ? что то не получается никак :(
(14) Если использовать в только рамках реквизитов с типом значения число - всё Ок. Но если это какой-то внешний источник данных, то нет 100% гарантии, что на той стороне никто не накосячил.
Вот эта строка кода:
Сумма = Сумма + МассивЦен[Индекс];
В МассивЦен[Индекс] строка с цифрами. Это не число.
Просто неявно происходит преобразование типов из строки в Число. Это происходит потому, что левый операнд Сумма имеет тип Число. К нему и пытается привестись второй операнд.
Это будет тоже самое, если записать так:
Сумма = Сумма + Число(МассивЦен[Индекс]);
Т.е. принудительное преобразование типа Строка в Число.
И если в МассивЦен[Индекс] окажется строка, которая не может быть преобразована в Число, то получим ошибку преобразования типа.
(14)
ну и как понять -« если в СтрокеЦен окажется НЕ ЧИСЛО ??? » разве цена может быть " не числом ??? "
СтрокаЦен это именно строка. А в МассивЦен получается массив Строк.
Строка входящая и от нас не зависит. Что там пришло мы не проверяем. Полагаемся на то, что там строка цифр, разделенных запятой. Но на самом деле там может прийти все что угодно. Это просто соглашение, которое основывается на вере в правильности данных. Это и может привести к ошибкам во время выполнения в кода.
Она (процедура) просто выполняет код. А функция выполняет код и возвращает результат выполнения.
Если Вам по логике программы надо в разных местах выполнять некие однотипные вычисления их логично оформить функцией и когда нужно вызывать и получать результат. Если это делать процедурой, то в каждом месте где нужны вычисления Вам придется писать код вычисления. В процессе набора опыта Вам будет понятно когда можно просто код написать в процедуре, а когда его написать в функцию.
;)
ЗЫ успехов в освоении 1С.
(24)Пример - надо вычислить сумму 2х чисел.
Если надо вычислить их сумму и вернуть результат, то используется функция.
А = 4;
Б = 5;
Результат = ПолучитьСумму(А,Б);
...
Функция ПолучитьСумму(А,Б)
РезультатСуммы = А + Б;
Возврат РезультатСуммы;
КонецФункции
Показать
Если надо вычислить их сумму, но возвращать результат не надо, а например, результат записывается в базу, то используется процедура.
А = 4;
Б = 5;
РассчитатьСумму(А,Б);
...
Процедура РассчитатьСумму(А,Б)
РезультатСуммы = А + Б;
//а тут РезультатСуммы записывается в базу
КонецПроцедуры
(24) если нужно что-то просто выполнить, то Процедура. Если нужно что-то выполнить и вернуть результат выполнения/вычисления, то Функция.
Пример.
А = ПолучитьНужныеДанные();
В данном случае ПолучитьНужныеДанные это функция (это не стандартная функция, ее мы должны сами определить)
Если ее сделать процедурой, то будет ошибка, так как процедура ничего не может возвращать, соответственно будет определена ошибка, так как переменной А происходит попытка присвоить значение, а самого факта присвоения не может существовать.
Другими словами, Процедура может быть только вызвана и не может применяться в выражении присваивания.
Пример процедур:
Сообщить("Что-то"); Тут явно только вызывается Сообщить и ничего не ожидается к получению значений.
В Функции не обязательно что-то возвращать. Если не будет явного Возврат значения, то по умолчанию вернется Неопределено.
Из того следует, что в принципе, там где может применяться Процедура, там может применяться и функция. За исключением случаев описания обработчиков и служебных вызовов (таких как асинхронные вызовы). Там просто ожидается наличие именно процедур.
Но в своем коде вызова, можно использовать и функции без получения возвращаемых значений. Даже если функция что-то возвращает, это не обязывает это значение получать. Ту же функцию ПолучитьНужныеДанные можно вызвать и просто так:
ПолучитьНужныеДанные(); Но нужно понимать, что ресурсы на выполнение функции тратится несколько больше, чем на процедуру. И не следует всегда применять функции вместо процедур. Ну и логическое разделение кода все же тоже важно.
(32)
Используется конструкция СообщениеПользователю.
В типовых конфигурациях на БСП для упрощения использования есть процедуры в общих модулях ОбщегоНазначенияКлиент, ОбщегоНазначенияСервер или ОбщегоНазначенияКлиентСервер.
Из синтакс помощника:
СообщениеПользователю (UserMessage)
Свойства:
ИдентификаторНазначения (TargetID)
КлючДанных (DataKey)
Поле (Field)
ПутьКДанным (DataPath)
Текст (Text)
Методы:
Сообщить (Message)
УстановитьДанные (SetData)
Конструкторы:
По умолчанию
Описание:
Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю.
Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах), можно получить накопленные сообщения методом ПолучитьСообщенияПользователю.
В форме клиентского приложения, в случае выполнения просмотра сообщения, выполняется следующий механизм обработки:
Если у сообщения свойство КлючДанных заполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то:
открывается новая форма объекта, соответствующая значению свойства КлючДанных;
если у сообщения свойство ПутьКДанным не заполнено, то в него проставляется имя основного реквизита открытой формы объекта;
вызывается показ сообщения в только что открытой форме;
выполняется перенос всех соответствующих сообщений из окна первой формы в новую форму (с таким же значением свойств КлючДанных, как у выбранного сообщения). При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Процедура ДействиеСОбъектом(ОбъектДанных)
...
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр("ru = 'В строке 11 табличной части Номенклатура не хватает "
+ "; en = 'In line 11 of tabular section Nomenclature is missing' ")
+ НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры;
Сообщение.Поле = "Номенклатура[10].Количество";
Сообщение.УстановитьДанные(ОбъектДанных);
Сообщение.Сообщить();
(3) А здесь выходит окно : « Неизвестный модуль ... Встроенная Функция м.б. использована только в выражении ( Вычислить) - мошь я что то не добавила? - Сообщить() надо?
(12) но таким способом лучше не пользоваться. Только когда точно будет известно, что он сработает. Это больше хак. Применимо в очень ограниченном количестве случаев.
И код из (2) не совсем безопасный. Да, он рабочий, но что будет, если в СтрокаЦен окажется не число?
К примеру:
СтрокаЦен = "5000 , 7000 , 6000, 2000, 100FF100" ;
В таком случае мы получим ошибку преобразования типа.
Можно обезопасить код:
СтрокаЦен = "5000 , 7000 , 6000, 2000, 100FF100" ;
МассивЦен = СтрРазделить( СтрокаЦен,",", Ложь) ;
ТипЧисло = Новый ОписаниеТипов("Число");
Сумма = 0;
Для Индекс = 0 По МассивЦен.ВГраница() Цикл
Сумма = Сумма + ТипЧисло.ПривестиЗначение(МассивЦен[Индекс]);
КонецЦикла;
Сообщить(Сумма);
но таким способом лучше не пользоваться. Только когда точно будет известно, что он сработает. Это больше хак. Применимо в очень ограниченном количестве случаев.
И код из (2) не совсем безопасный. Да, он рабочий, но что будет, если в СтрокаЦен окажется не число?
К примеру:
СтрокаЦен = "5000 , 7000 , 6000, 2000, 100FF100" ;:
а пож объясните - как понять - « не совсем безопасный код»? ...
- ну и как понять -« если в СтрокеЦен окажется НЕ ЧИСЛО ??? » разве цена может быть " не числом ??? "
- а какой вариант из этих трех тогда самый нормальный?
(14) Если использовать в только рамках реквизитов с типом значения число - всё Ок. Но если это какой-то внешний источник данных, то нет 100% гарантии, что на той стороне никто не накосячил.
Вот эта строка кода:
Сумма = Сумма + МассивЦен[Индекс];
В МассивЦен[Индекс] строка с цифрами. Это не число.
Просто неявно происходит преобразование типов из строки в Число. Это происходит потому, что левый операнд Сумма имеет тип Число. К нему и пытается привестись второй операнд.
Это будет тоже самое, если записать так:
Сумма = Сумма + Число(МассивЦен[Индекс]);
Т.е. принудительное преобразование типа Строка в Число.
И если в МассивЦен[Индекс] окажется строка, которая не может быть преобразована в Число, то получим ошибку преобразования типа.
(14)
ну и как понять -« если в СтрокеЦен окажется НЕ ЧИСЛО ??? » разве цена может быть " не числом ??? "
СтрокаЦен это именно строка. А в МассивЦен получается массив Строк.
Строка входящая и от нас не зависит. Что там пришло мы не проверяем. Полагаемся на то, что там строка цифр, разделенных запятой. Но на самом деле там может прийти все что угодно. Это просто соглашение, которое основывается на вере в правильности данных. Это и может привести к ошибкам во время выполнения в кода.
- а вот не можете подсказать : я уже от этого урока ушла До : "Общие Модули", "Визуализация Таблицы Значений" и т.д. , но не могу, до сих пор, понять суть слова « Возвращает Значение » , ну просто запоминаю, что Функция Возвращает какое-то Значение и в конце надо писать ключевое слово :« Возврат ... + Значение что она возвращает » , и в чем разница Процедуры от Функции? - и когда надо Функцию писать, а когда Процедуру? ...
Процедура не Возвращает , а как это? не могу до сих пор это понять :( не подскажете, где взять эту информацию ?
Она (процедура) просто выполняет код. А функция выполняет код и возвращает результат выполнения.
Если Вам по логике программы надо в разных местах выполнять некие однотипные вычисления их логично оформить функцией и когда нужно вызывать и получать результат. Если это делать процедурой, то в каждом месте где нужны вычисления Вам придется писать код вычисления. В процессе набора опыта Вам будет понятно когда можно просто код написать в процедуре, а когда его написать в функцию.
;)
ЗЫ успехов в освоении 1С.
(24)Пример - надо вычислить сумму 2х чисел.
Если надо вычислить их сумму и вернуть результат, то используется функция.
А = 4;
Б = 5;
Результат = ПолучитьСумму(А,Б);
...
Функция ПолучитьСумму(А,Б)
РезультатСуммы = А + Б;
Возврат РезультатСуммы;
КонецФункции
Показать
Если надо вычислить их сумму, но возвращать результат не надо, а например, результат записывается в базу, то используется процедура.
А = 4;
Б = 5;
РассчитатьСумму(А,Б);
...
Процедура РассчитатьСумму(А,Б)
РезультатСуммы = А + Б;
//а тут РезультатСуммы записывается в базу
КонецПроцедуры
А = 4;
Б = 5;
РассчитатьСумму(А,Б);
...
Процедура РассчитатьСумму(А,Б)
РезультатСуммы = А + Б;
//а тут РезультатСуммы записывается в базу
КонецПроцедуры
П
- а здесь пж подскажите - Метод Сообщить() - одинаково работает и для Процедуры и для Функции? - здесь нет никаких нюансов? ( я что-то раньше об этом не задумывалась ...)
(32)
Используется конструкция СообщениеПользователю.
В типовых конфигурациях на БСП для упрощения использования есть процедуры в общих модулях ОбщегоНазначенияКлиент, ОбщегоНазначенияСервер или ОбщегоНазначенияКлиентСервер.
Из синтакс помощника:
СообщениеПользователю (UserMessage)
Свойства:
ИдентификаторНазначения (TargetID)
КлючДанных (DataKey)
Поле (Field)
ПутьКДанным (DataPath)
Текст (Text)
Методы:
Сообщить (Message)
УстановитьДанные (SetData)
Конструкторы:
По умолчанию
Описание:
Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю.
Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах), можно получить накопленные сообщения методом ПолучитьСообщенияПользователю.
В форме клиентского приложения, в случае выполнения просмотра сообщения, выполняется следующий механизм обработки:
Если у сообщения свойство КлючДанных заполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то:
открывается новая форма объекта, соответствующая значению свойства КлючДанных;
если у сообщения свойство ПутьКДанным не заполнено, то в него проставляется имя основного реквизита открытой формы объекта;
вызывается показ сообщения в только что открытой форме;
выполняется перенос всех соответствующих сообщений из окна первой формы в новую форму (с таким же значением свойств КлючДанных, как у выбранного сообщения). При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Процедура ДействиеСОбъектом(ОбъектДанных)
...
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр("ru = 'В строке 11 табличной части Номенклатура не хватает "
+ "; en = 'In line 11 of tabular section Nomenclature is missing' ")
+ НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры;
Сообщение.Поле = "Номенклатура[10].Количество";
Сообщение.УстановитьДанные(ОбъектДанных);
Сообщение.Сообщить();
(24) если нужно что-то просто выполнить, то Процедура. Если нужно что-то выполнить и вернуть результат выполнения/вычисления, то Функция.
Пример.
А = ПолучитьНужныеДанные();
В данном случае ПолучитьНужныеДанные это функция (это не стандартная функция, ее мы должны сами определить)
Если ее сделать процедурой, то будет ошибка, так как процедура ничего не может возвращать, соответственно будет определена ошибка, так как переменной А происходит попытка присвоить значение, а самого факта присвоения не может существовать.
Другими словами, Процедура может быть только вызвана и не может применяться в выражении присваивания.
Пример процедур:
Сообщить("Что-то"); Тут явно только вызывается Сообщить и ничего не ожидается к получению значений.
В Функции не обязательно что-то возвращать. Если не будет явного Возврат значения, то по умолчанию вернется Неопределено.
Из того следует, что в принципе, там где может применяться Процедура, там может применяться и функция. За исключением случаев описания обработчиков и служебных вызовов (таких как асинхронные вызовы). Там просто ожидается наличие именно процедур.
Но в своем коде вызова, можно использовать и функции без получения возвращаемых значений. Даже если функция что-то возвращает, это не обязывает это значение получать. Ту же функцию ПолучитьНужныеДанные можно вызвать и просто так:
ПолучитьНужныеДанные(); Но нужно понимать, что ресурсы на выполнение функции тратится несколько больше, чем на процедуру. И не следует всегда применять функции вместо процедур. Ну и логическое разделение кода все же тоже важно.
Но нужно понимать, что ресурсы на выполнение функции тратится несколько больше, чем на процедуру. И не следует всегда применять функции вместо процедур
- а скажите пж - почему студентам часто говорят за "Ресурсы" кот. тратятся на выполнение программного кода или вообще программы ? - 1С, что? - такая слабая совсем, ( там же большие энергоемкие Процедуры на Сервере выполняются ? ) или в работе программы часто проблемы возникают из-за этих Ресурсов??? все время спросить про это хотела, но так и не могла
(29) ресурсы это в основном память и процессорное время компьютера. Чем больше тратится ресурсов, тем больше требований к мощности компьютера. И если компьютер/сервер не достаточно мощный, то начинаются тормоза.
Здравствуйте. Не могли бы вы помочь! Бьюсь всю ночь, не получается. Оказывается я совсем не могу стправиться с таким заданием самого начала.
Само задание
Задание 4.1. Дано:
Строка входных данных Товары = «Тумба,Шкаф,Стол»;
Строка входных данных Цены = «5000, 7000, 6000».
Требуется: Перевести все данные в массивы. Вывести все значения массивов в виде:
<Товар> (цена = <ЦенаТовара>). не могли бы вы полностью программу написать. для совсем чайников!
(17) И какой смысл тогда решать эту задачу? Она же для обучения дана. Не можете сделать такую задачу, как будете работать дальше?
Примерный план:
1. Используйте функцию СтрРазделить для получения массивов (CTRL + F1, чтобы понять как она работает).
2. Дальше изучайте как работать с массивами (https://helpme1s.ru/massivy-v-yazyke-1s-8-v-primerax) 3. Вывод информации пользователю через Сообщить или СообщениеПользователю, нужную строку можно получить через СтрШаблон (и НСтр для работы с несколькими языками).
Если не сможете справиться самостоятельно с этим, то дальше легче не станет.
:) прикольное решение)
- я в Уч.Центре №1 учусь - там говорят, «... что б избежать операции конкатенации , использовать Функцию "СтрШаблон() , а у вас спокойно три плюсика и решение есть! 👌 классно )
(17) если вам надо будет помочь на этом уровне - пишите -я тоже эти темы недавно изучила и могу вам подсказать и посоветовать разные методы обучения... главно не слушайте никого из "осуждающих вас " за ваши обращения " - лекарство от незнания -Вопрос и не стесняйтесь спрашивать у Знающих программистов - и еще нужно Постоянство и тогда все поймете со временем ) - удачи вам!
-и спасибо огромное всем кто помогает нам в обучении 💕💕💕