Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Модуль и его операторы (общее)  (Прочитано 17643 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SHveД
Интересующийся

ru
Offline Offline

« : 14-02-2010 16:31 » 

Доброго времени суток и всех влюбленных с праздником, вот у меня любовь с 1С пока что 1-0 в её пользу... Есть неплохая книга с примерами Радченко, но вот выполнять, как мартышка, половину, не понимая значения выполненого, не очень интересно, когда-то очень давно программировал в Бейсике, помогает порой... Но большинство не совсем понятно: что в данный момент происходит, зачем и как! Естесственно, рыскаю в книгах, приходит какое-то понимание, но процесс такого самообразования происходит предельно медленно. Если есть кто терпеливый объяснить мне суть происходящего, прошу помочь в этом, от себя обещаю постараться быстро схватывать...
Итак, есть такая функция в общем модуле:

Код: (1C v8)
Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт

        // Создать вспомогательный объект Отбор
        Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);
   
        // Получить актуальные значения ресурсов регистра
        ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

        Возврат ЗначенияРесурсов.Цена;

КонецФункции
С первой строчкой пока вопросов нет- ясно, а вот вторая:
Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);

Сразу за знаком = я теряю нить ясности, что означает и как работает: Новый, Структура, а также элементы в скобках, почему первый в кавычках (и что это дает)
Пока остановимся на этом, добросердечные, помогите-разъясните Улыбаюсь
« Последнее редактирование: 21-07-2011 18:00 от RXL » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 15-02-2010 09:33 » 

М-да. Тяжело тебе придется.
Чтобы понять эту строчку нужно мыслить терминами ООП:
Новый <Идентификатор типа объекта> - это вызов конструктора для создания нового объекта (Новый - это ключевое слово - читать про ключевые слова)
В скобках возможные параметры конструктора (для одного типа объекта может быть несколько конструкторов с разными параметрами, причем некоторые могут быть "по умолчанию" - подробности смотри в синтакс-помощнике)
Параметры могут быть как константы (в данном случае в кавычках - это строковая константа), так и переменные (Элемент номенклатуры - это переменная, которая получена в качестве параметра функции РозничнаяЦена) - читать про базовые типы данных и параметры процедур/функций
Записан
SHveД
Интересующийся

ru
Offline Offline

« Ответ #2 : 19-02-2010 15:29 » 

Блин и работа и глюк провайдера, только сей час добрался до компа, посоветуй литературу где можно почерпнуть термины, спасибо за общее направление, что указал. стал читать кое что понял , но и запутался не менее, попробую объяснить что понял и где глюк6
Оператор Новый указывает что создаем некую структуру которую описываем следующим оператором Структура в скобках которого указываем "номенклатура" -что здесь? создает строчку в документе с названием Номенклатура (в кавычках указывается литерная переменная) или происходит поиск в документе по регистру "номенклатура" и создает Элемент Номенклатуры в которую вносятся  некоторые данные или берет эти данные? Судя по использованию слова Отбор берет... поясни... иль я вообще чушь несу...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 20-02-2010 13:16 » 

Стань в коде на слове Структура и нажми Ctrl+F1 - это вызовет синтакс-помощник. Почитай про конструктор объекта Структура...
Потом таким же образом - в синтакс помощнике почитай про метод ПолучитьПоследнее() для регистра сведений
Записан
name
Новенький

ua
Offline Offline

« Ответ #4 : 20-07-2011 15:47 » 

хочу продолжить вопрос от SHveД


1. Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);

     Этим создаем объект отбор который является структурой с именем СТРУКТУРА в которой уникальным ключом является символьная переменная "номенклатура" а соответствующее значение некая переменная элементНоменклатуры которая передается в при вызови ф-ции РозничнаЦена


2. ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

этим обращаемся к регистру сведений Цены и получаем последний значение на  АктуальнаяДата (дату которая  передается в при вызови ф-ции РозничнаЦена) по номенклатуре значение которой находится в объекте отбор (см п.1)

вопрос тот же  как оно работает. но с в расширенной форме
каким механизмом заполняется переменная "Номенклатура" и присваивается значение объекту отбор?

Если я укажу в ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор); вместо параметра отбор параметр ЭлементНоменклатуры ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, ЭлементНоменклатуры
);


то получу ошибку Несоответствие типов (параметр номер '2') какая природа этой ошибки?




Добавлено через 5 минут и 37 секунд:
name,
уточнение (может не правильное)
1. Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);

     Этим создаем объект отбор который является структурой  в которой уникальным ключом является символьная переменная "номенклатура" а соответствующее значение некая переменная элементНоменклатуры которая передается в при вызови ф-ции РозничнаЦена

Добавлено через 13 часов, 55 минут и 58 секунд:
пока писал вопрос сам его понял и нашел ответ


Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт
   //Создаем вспомогательный элемент Отбор
   Отбор = Новый Структура("номенклатура", ЭлементНоменклатуры);
   
   //Получение актуальных значений ресурсов регистра
   ЗначениеРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
   Возврат ЗначениеРесурсов.Цена;
   
КонецФункции


Это можно переписать в более подробной форме


Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт
   //Создаем вспомогательный элемент Отбор
   Отбор = Новый Структура;
   //Добавляем ему ключ и значение
Отбор.Вставить ("номенклатура", ЭлементНоменклатуры);
   
   //Получение актуальных значений ресурсов регистра
   ЗначениеРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
   Возврат ЗначениеРесурсов.Цена;
   
КонецФункции


И пошаговое описание работы функции
Начнем со средины, ответив на вопрос, зачем мы создаем структуру.
У метода ПолучитьПоследнее есть два параметра – дата и структура (см синтаксис помощник) дату мы ему передаем при вызове функции РозничнаяЦена, а вот структуру ему надо создать и передать. Причем в этой структуре ключом должно быть имя измерения (у нас в регистре сведений Цены измерение называется «номенклатура») а значение ключа – это какой именно элемент из всего списка возможных значений (у нас это элемент из справочникНоменклатуры)

Тогда получается по шагам

Отбор = Новый Структура;
Создаем новую структуру с именем ОТБОР

Отбор.Вставить ("номенклатура", ЭлементНоменклатуры);
Вставляем в структуру ключ «номенклатура» и значение, переданное при вызове функции РозничнаяЦена

ЗначениеРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

В переменную ЗначениеРессурсов заносим структуру (т.к. метод ПолучитьПоследнее возвращает структуру ресурсов определенного измерения) на определенную дату и измерение


Возврат ЗначениеРесурсов.Цена;

И в качестве возврата функции РозничнаяЦена из всей структуры ЗначениеРесурсов мы выбираем только один - Цена


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




если что то не так- поправте
« Последнее редактирование: 21-07-2011 05:49 от name » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 21-07-2011 08:26 » 

Вот это (то, что подчеркнуто):
Цитата
В отличие от массива, который является однородным объектом (все элементы относятся к одному типу данных)...
не верно. Да - объект однородный (с точки зрения использования), но не обязательно одного типа. 1С позволяет в массив вводить разные типы, например это могут быть владельцы справочника Адреса (однородность, т.к. мы их используем как владельцев адресов), а типы у них различные: Контрагенты, ФизЛица, Организации...

Для организации объектов в 1С v8 есть следующие типы: Массив, СписокЗначений, Структура, Соответствие. Желательно прочитать про все в синтакс помощнике и использовать в зависимости от ситуации.
Записан
name
Новенький

ua
Offline Offline

« Ответ #6 : 22-07-2011 08:57 » new

Kivals

определение структура бралось с лекций С++ Улыбаюсь

Книга радченко ориентирована на человека, знающего объектно ориентированное программирование (ООП). Если человек не знаком с ООП то надо пройти доп. курсы по ООП а это время и деньги, а синтаксис помощник в этом вопросе не помощник Улыбаюсь он дает описание как применять, а не зачем это  нужно и как оно работает.

вот на пример, Вы можете привести (или дать ссылку) где толково (для "чайников") описано (не обязательно с привязкой к 1с) что такое:

класс
объект
метод
метаданные
массив
коллекция
Список значений
Структура
Соответствие

где что лучше применять.

имея такую шпаргалку на 70% облегчится понимание книги радченко.
Записан
SHveД
Интересующийся

ru
Offline Offline

« Ответ #7 : 28-07-2011 09:29 » 

Кстати, согласен, с предыдущим ответом, практически все догадки приходится держать в голове и при совпадении согласно кивать, но если вдруг при обучении происходит перерыв, как у меня -отъезд, то все выскакивает из головы. Потому ссылка на материалы ООП была бы очень полезна.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 28-07-2011 12:55 » 

name, ru.wikipedia.org?
Записан
name
Новенький

ua
Offline Offline

« Ответ #9 : 28-07-2011 13:04 » 


смешно, ха-ха.

откройте описание структура на указанном ресурсе http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0.

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

Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 28-07-2011 15:58 » 

...Вы можете привести (или дать ссылку) где толково (для "чайников") описано (не обязательно с привязкой к 1с) что такое: ...

Что просил Улыбаюсь

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

Добавлено через 25 минут и 54 секунды:
Где что применять из прикладных объектов (массив, коллекция, список значений, структура, соответствие) - это дело вкуса и удобства. Четких правил сформулировать пока не могу, где почитать - тоже не знаю: учился на своих пробах и ошибках.
Все зависит от задачи (имеется в мелкая задача), которую ты пытаешься решить с помощью этого объекта: необходимо чтобы у выбранного объекта были свойства и методы, которые дадут максимально прозрачный код для дальнейшего сопровождения.
Пример:
Ключом в элементе Структура может выступать только строка, сформированная по правилам идентификаторов (т.е. буквы+цифры+"_"), но она (структура) дает возможность обращаться к установленным значениям прямо в коде, через точку:
Код: (1C v8)
Настройка = МояСтруктура.НастройкаПечати;
Однако такое обращение к неинициализированному ключу вызовет исключение времени выполнения (для проверки используется МояСтруктура.Свойство("НастройкаПечати", Настройка)).
Если эти ограничения приемлемы в рамках данной задачи - пользуйся структурой.
Кроме того в плюсы Структуры можно записать инициализацию в конструкторе:
Код: (1C v8)
МояСтруктура = Новый Структура("Настройка, Значение, Реквизит", Истина, 123, "Склад");

В противопоставление Соответствие в качестве ключа может принимать значение любого типа, но:
1. Обращаться к значениям необходимо через метод:
Код: (1C v8)
Настройка = МоеСоответствие.Получить(КлючСоответствия);
// Здесь КлючСоответствия - это переменная (почти?) любого типа
2. Обращение к неинициализированным значениям вернет Неопределено, а не закончится с ошибкой
но 3. Установка значений в Неопределено удалит элемент из Соответствия:
Код: (1C v8)
МоеСоответствие = Новый Соответствие();
МоеСоответствие.Вставить(1, 1); // МоеСоответствие.Количество()=1;
МоеСоответствие.Вставить(2, 2); // МоеСоответствие.Количество()=2;
МоеСоответствие.Вставить(1, Неопределено); // МоеСоответствие.Количество()=1; !!!

В общем вопрос хороший, но достаточно масштабный. Можно было бы написать на эту тему статью, но к сожалению сейчас нет на это времени
« Последнее редактирование: 28-07-2011 16:24 от Kivals » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines