Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Функции и выборки в 1С , Помогите начинающему          
garaga Подменю пользователя
сообщение 28.01.14, 23:52
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

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

Платформа у меня стоит 8.2 Конфигурации нет. Читая.

Есть вот такой вот синтаксис:

Функция ПолучитьСписокИменинников()  Экспорт
    
    ТД_День = День(ТекущаяДата());
    ТД_Месяц = Месяц(ТекущаяДата());
    
    //Создаю пустой массив
    Массив = Новый Массив();
    
    Выборка = Справочники.Сотрудники.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        ДР_День =  День(Выборка.ДатаРождения);
        ДР_Месяц = Месяц(Выборка.ДатаРождения);
        
        Если ДР_Месяц = ТД_Месяц и ДР_День = ТД_День Тогда
            
                 
            //Добавляю новый элемент в массив
            Массив.Добавить(Выборка.Наименование);
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Массив;
        
    КонецФункции


1.Разъясните, пожалуйста, что значит "Возврат Массив"? Не пойму, что эта команда делает. Что куда возвращает и что вообще происходит с массивом ? Массив я так понял это список значений, который мы насобирали из выбранного подходящих значений из справочника сотрудников?
2.Что значит "Пока Выборка.Следующий Цикл" ? Цикл я, вроде, понимаю - это значит, что пройдёт выборка все значения(поправьте, пожалуйста, если не так) А вот почему мы пишем вначале "Пока" и что значит "Выборка.Следующий"? В справочнике в 1с читал, но что-то не понятно.

Заранее благодарен всем ответившим.


 ! 

Правила п. 4,5
 


Сообщение отредактировал logist - 29.01.14, 10:14

Ardi Подменю пользователя
сообщение 29.01.14, 1:29
Сообщение #2

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

1. Функция умеет возвращать значение в то место из которого её вызвали. Процедура не умеет возвращать значение.
Например:
Процедура Вася()
ТутБудетСписокИменинников = ПолучитьСписокИменинников();
КонецПроцедуры


2.
Цикл выглядит так:
Пока ТутУсловие Цикл

КонецЦикла;


Например:
ЕстьЗначенияВВыборке = Выборка.Следующий();//Позиционируемся на следующей строке выборки и возвращаем истина если спозиционировались и ложь если значения закончились
Пока ЕстьЗначенияВВыборке Цикл
Сообщить(Выборка.Ссылка);
ЕстьЗначенияВВыборке = Выборка.Следующий();//Позиционируемся на следующей строке выборки и возвращаем истина если спозиционировались и ложь если значения закончились
КонецЦикла;


Сообщение отредактировал Ardi - 29.01.14, 1:30


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: garaga,

garaga Подменю пользователя
сообщение 29.01.14, 8:00
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Ardi @ 29.01.14, 1:29) *
1. Функция умеет возвращать значение в то место из которого её вызвали. Процедура не умеет возвращать значение.
Например:
Процедура Вася()
ТутБудетСписокИменинников = ПолучитьСписокИменинников();
КонецПроцедуры


2.
Цикл выглядит так:
Пока ТутУсловие Цикл

КонецЦикла;


Например:
ЕстьЗначенияВВыборке = Выборка.Следующий();//Позиционируемся на следующей строке выборки и возвращаем истина если спозиционировались и ложь если значения закончились
Пока ЕстьЗначенияВВыборке Цикл
Сообщить(Выборка.Ссылка);
ЕстьЗначенияВВыборке = Выборка.Следующий();//Позиционируемся на следующей строке выборки и возвращаем истина если спозиционировались и ложь если значения закончились
КонецЦикла;


1. А массив зачем приписали? "Возврат Массив"? Куда конкретно меня отошлёт в моём коде, после того как я написал "Возврат Массив"?
2. Я читал в помощнике в 1с, что цикл заканчивается, когда он получает значение Ложь, но я не знал, что Ложь он получает, когда закончились элементы для перебора. Я правильно понял, что, когда мы пишем "Цикл", то действие впереди написанного слова "цикл" будет повторяться до того пока не закончатся элементы перебора?


Ааа.... вник вроде про "Цикл".

Пока "Здесь пишем условие при котором будет выполняться повтор, то есть Цикл" Цикл

А вот про "Выборка.Следующий" непонятно.

У меня в цикле условие Выборка.Следующий Что это значит дословно? То, что пока выборка переходит на следующий элемент (то есть есть на что переходить) и продолжается цикл? А когда закончатся, значит цикл прекратиться? Я правильно понял?

P.S. Извиняюсь за невежество в этом вопросе. Только учусь. Хочется разобраться во всём, чтоб потом не было пробелов в знаниях. Кстате говоря, никогда программированием не занимался, но тут попробывав, очень затянуло и очень понравилось. Никогда не знаешь, что будет Вам по душе smile.gif)))

pablo Подменю пользователя
сообщение 29.01.14, 8:30
Сообщение #4

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Цитата
Я правильно понял?

Да
Цитата
"Возврат Массив"
В данном контексте Массив - просто имя переменной и в этой переменной могут содержаться, вообще говоря, произвольные данные произвольной структуры.
Цитата
Куда конкретно меня отошлёт в моём коде
в то место, откуда Вы Вызвали эту функцию (то есть указали имя функции в своем коде).

Сообщение отредактировал pablo - 29.01.14, 8:31


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: garaga,

garaga Подменю пользователя
сообщение 29.01.14, 8:45
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(pablo @ 29.01.14, 8:30) *
Да
В данном контексте Массив - просто имя переменной и в этой переменной могут содержаться, вообще говоря, произвольные данные произвольной структуры.
в то место, откуда Вы Вызвали эту функцию (то есть указали имя функции в своем коде).


То есть, я когда написал "Возврат Массив" даннные добавленные в массив командой Массив.добавить(Выборка.Наименование) Вернутся в место где я создал массив или вообще в начало всей функции? И зачем вообще делать такой возврат? Данные тогда не прочитаются из этого массива, если я обращусь к нем из другого места командой экспорт? Или для чего нужен этот возврат?

pablo Подменю пользователя
сообщение 29.01.14, 8:48
Сообщение #6

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

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


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: garaga,

Домовик Подменю пользователя
сообщение 29.01.14, 10:09
Сообщение #7

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Цитата(pablo @ 29.01.14, 4:48) *
То есть, я когда написал "Возврат Массив" даннные добавленные в массив командой Массив.добавить(Выборка.Наименование) Вернутся в место где я создал массив или вообще в начало всей функции? И зачем вообще делать такой возврат? Данные тогда не прочитаются из этого массива, если я обращусь к нем из другого места командой экспорт? Или для чего нужен этот возврат?


Возможно, использование функции в вашем случае и не обязательно.


1. Функция нужна там, где результаты вычислений в ней нужно сразу куда-то применить, подставить в другую формулу. Причем подставить несколько раз.

Ну, если помните, геометрию, пример:
Катет = Гипотенуза*Sin X, где Х - размер угла треугольника (не помню прилегающ или наоборот)

Sin X - это ваша функция, результат вычислений сразу подставляется в другую форумулу.

Если в задаче нужно сразу определить просто Sin Х и все, и результат действия программы будет только это значение, то да - можно представить в виде процедуры.



2. Ну еще, в программировании, когда часть вычисленией происходит на месте, локально. А основные вычисления будут происходить где-то в глобальном модуле. Тогда тоже применение функций целесообразно.

Сообщение отредактировал Домовик - 29.01.14, 10:23

Спасибо сказали: garaga,

garaga Подменю пользователя
сообщение 29.01.14, 15:49
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(pablo @ 29.01.14, 8:48) *
Командой экспорт вы не сможете обратиться к этой функции из другого места. Никак.
А вообще напишите, как вы предполагаете использовать указанную выше функцию. Пример Вашего кода, как вы его видите.


Так а у меня она работает на экспорт. Я её экспортом вызываю из модуля управляемого приложения. А сам этот код пишу в общем механизме, потому как там можно обратиться к БД, в отличии от модуля управляемого приложения. И всё работает. Выдаёт мне Оповещение, если у кого-то День Рождения сегодня.

pablo Подменю пользователя
сообщение 29.01.14, 15:59
Сообщение #9

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

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


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: garaga,

garaga Подменю пользователя
сообщение 29.01.14, 19:07
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(pablo @ 29.01.14, 15:59) *
Команда экспорт разрешает вызывать функцию из других модулей, но сама по себе она не вызывает никакую функцию/процедуру.
Вы преднамеренно либо случайно путаетесь в терминологии и не хотите отвечать на наводящие вопросы, так что до момента Вашего ответа на мой вопрос прекращаю какие-либо комментарии в этом топике.


smile.gif) Да, Вы не горячитесь:) Зачем мне предеамерено путаться в терменалогии?! Я ж только учусь и стараюсь разобрать, и пишу сюда, чтоб узнать правильно ои я понимаю вещи. Весь код выложу чуть позже как домой попаду. Он у меня дома. Из-за этого до сих пор и не выложил.

garaga Подменю пользователя
сообщение 29.01.14, 22:39
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

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

Вот собственно и весь код:

Модуль управляемого приложения:

Процедура ПриНачалеРаботыСистемы()
                
        СписокИменинников = ОбщиеМеханизмы.ПолучитьСписокИменинников();    
        
        Для Каждого  ЭлементМассива Из СписокИменинников Цикл
            Сообщить("Сегодня ДР у " + ЭлементМассива);
        КонецЦикла;
        
          КонецПроцедуры


Создал модуль в "Общие модули":

Функция ПолучитьСписокИменинников()  Экспорт
    
    ТД_День = День(ТекущаяДата());
    ТД_Месяц = Месяц(ТекущаяДата());
    
    //Создаю пустой массив
    Массив = Новый Массив();
    
    Выборка = Справочники.Сотрудники.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        ДР_День =  День(Выборка.ДатаРождения);
        ДР_Месяц = Месяц(Выборка.ДатаРождения);
        
        Если ДР_Месяц = ТД_Месяц и ДР_День = ТД_День Тогда
            
                 
            //Добавляю новый элемент в массив
            Массив.Добавить(Выборка.Наименование);
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Массив;
        
    КонецФункции


Собственно всё работает. Но это и естественно, потому что это задание из курса обучения 1с. НО есть несколько нюансов, которые в этом курсе не объясняют. В частности про возврат. Зачем его пишут и какое у этой команды смысловое значение. Подскажите, пожалуйста. Со всем, вроде, разобрался, а вот с этим... как-то не ладится.

З.Ы. Всем уже ответившим огромная благодарность!

Домовик Подменю пользователя
сообщение 30.01.14, 8:09
Сообщение #12

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Смысловое значение команды.

Функція сліпа та дурна, вона може багато робити обчислень, але результат яких саме обчислень є результатом роботи функції?
ТД_День? ТД_Месяц? Массив?

наприклад, ви ще викликаєте потім Процедуру, що роздруковує будь-який масив, процедура очікує саме масив.
ПечатьМассива(ПолучитьСписокИменинников());


Спасибо сказали: garaga,

garaga Подменю пользователя
сообщение 30.01.14, 22:30
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Домовик @ 30.01.14, 8:09) *
Смысловое значение команды.

Функція сліпа та дурна, вона може багато робити обчислень, але результат яких саме обчислень є результатом роботи функції?
ТД_День? ТД_Месяц? Массив?

наприклад, ви ще викликаєте потім Процедуру, що роздруковує будь-який масив, процедура очікує саме масив.
ПечатьМассива(ПолучитьСписокИменинников());


В смысле? Я не понял сути вопроса? У меня, вроде, функция поняла что ей вычислять. Переформулируйте, пожалуйста, вопрос.

Домовик Подменю пользователя
сообщение 31.01.14, 7:40
Сообщение #14

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

это был ответ. вы спраивали о назначении команды Возврат.

Спасибо сказали: garaga,

garaga Подменю пользователя
сообщение 31.01.14, 7:49
Сообщение #15

Общительный
**
Группа: Пользователи
Сообщений: 24
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Домовик @ 31.01.14, 7:40) *
это был ответ. вы спраивали о назначении команды Возврат.


Оооо... спасибо огромное. Теперь понял. Доступно объяснили. Когда я через "Экспорт" обращусь, чтоб функция знала, что она должна передать, какое вычисление.

Фух..... разобрался с этим smile.gif Пойду дальше smile.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 5:06
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!