Приветствую Вас ГостьВторник, 14.05.2024, 01:57

Каталог статей

В категории материалов: 29
Показано материалов: 21-29
Страницы: « 1 2 3


Если на вход передается объект составного типа и надо понять, есть ли в объекте нужный реквизит можно пойти 2 способами:

  1. Сравнивать с известными типами: Если ТипЗнч(Объект) = Тип("ДокументОбъект.Квитанция") Тогда
  2. Обратиться к метаданным объекта:  Если Объект.Метаданные().Реквизиты.Найти("Абонент") <> Неопределено Тогда
Программирование | Просмотров: 240 | Добавил: leshic | Дата: 21.09.2020 | Комментарии (0)

Для работы с WEB-сервисами часто надо передавать данные сложной формы, поэтому сделал не очень красивый механизм сохранения структуры данных в XML и обратное его преобразование.

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

При переводе структуры в XML в элементе Value передается тип в атрибуте "xsi:type". По нему определяем тип передаваемого элемента. Можно использовать элементарные типы, вложенные структуры и массивы. Для использования других типов надо дописать код.

Программирование | Просмотров: 565 | Добавил: leshic | Дата: 11.08.2020 | Комментарии (0)

Если в модуле формы объявить глобальную переменную с директивой &НаСервере,то её значение будет сохраняться только в рамках одного обращения к серверу. Если объявить переменную &НаКлиенте, то она будет сохранять свое значение на время открытия формы. Передавать её значение можно в качестве параметра серверных процедур.

Программирование | Просмотров: 310 | Добавил: leshic | Дата: 12.05.2020 | Комментарии (0)

Нельзя указывать экспортные переменные.
Глобальный – процедуры будут доступны из вне напрямую, т.е. доступны в глобальном контексте (не пишем название модуля и через точку имя процедуры, а сразу имя процедуры). (-) чем больше глобальных модулей, тем медленнее загружается программа, так как глобальный модуль загружается при запуске программы. Если модуль не глобальный, то его загрузка происходит при первом обращении к процедурам модуля.
Привилегированный модуль выполняется без учета прав пользователей. Это ускоряет работу, так как программа не тратит время на обработку прав. По этой причине привилегированные модули используют при массовых вычислениях. Привилегированные модули могут быть скомпилированы только на сервере. Их используют для того, чтобы временно добавить права пользователю, например у пользователя нет доступа к справочнику, но при проведении документа, реквизит содержащий этот справочник должен заполнятся, для этого процедуру проведения или  часть выводим в привилегированный модуль, тем самым обходим ограничение на права пользователя.
В обычных общих модулях в свойствах надо указать в каком контексте будут скомпилированы процедуры. Если поставить несколько галок (Клиент, Сервер, Внешнее соединение), то при компиляции будут созданы одновременно несколько экземпляров модулей для каждого из контекста, которые не смогут обращаться друг к другу внутри модуля (т.е. нельзя будет из клиентского метода модуля вызвать серверный метод того же модуля), но из других модулей обращение к ним возможно. В таких модулях место компиляции процедур задаются директивами компилятора (&НаСервере, &НаКлиенте). Если их не указать, то процедуры будут скомпилированы одновременно на всех контекстах, которые указаны в свойствах общего модуля. В таком случае в тексте процедур надо рулить инструкциями препроцессора, чтобы разделить контекст. Контекст вызываемых процедур общего модуля без инструкций препроцессора будет определяться контекстом вызываемых их модулей.
Правилом хорошего тона не указывать директивы компиляции у процедур, а задавать их в свойствах модуля и указывать в имени модуля.
Если общий модуль скомпилирован на сервере, то его процедуры доступны только для вызова с сервера, но есть возможность сделать их доступными для вызова из клиентских модулей. Для этого ставиться свойство «Вызов сервера».

Свойство «Вызов сервера» работает только если указано, что модуль будет компилироваться только на сервере. Если поставить галки «Клиент», «Сервер» и при этом будет указана директива процедуры &НаСервере, то процедуры станет недоступной для клиентских модулей.

Свойство «Повторное использование возвращаемых значений».
Доступно только для не глобальных общих модулей и для процедур, которые вызываются с параметрами и не обращаются к базе данных. В этом случае, результат выполнения кэшируется, и при повторном вызове с такими же параметрами вернет запомненное значение.
Очистка кэша происходит через 20 мину после попадания в кэш. Так же время задается одним из следующих значений: «На время вызова» (Упрощенно действует до окончания процедуры) или «На время сеанса» (Упрощенно действует до завершения сеанса), но 20 минут ему к не переплюнуть.

 

Программирование | Просмотров: 348 | Добавил: leshic | Дата: 10.05.2020 | Комментарии (0)

Глобальные переменные можно описать или в параметрах сеанса, или в модуле приложения

Программирование | Просмотров: 252 | Добавил: leshic | Дата: 10.05.2020 | Комментарии (0)

Модуль приложения - запускается при интерактивном запуске 1С. При запуске через com-соединение он не запуститься.

Все процедуры всегда компилируются на стороне клиента

Есть "модуль обычного приложения" - запускается при запуске толстого клиента (обычное приложение) и "модуль управляемого приложения" - запускается при запуске тонкого клиента, толстого клиента (управляемое приложение) и веб-клиента.

Модуль внешнего соединения запускается при подключении через com-соединения. Нельзя использовать диалоговые методы и функции

Модуль сеанса используется только для идентификации параметров сеанса. Запускается всегда независимо от режима запуска.

Программирование | Просмотров: 247 | Добавил: leshic | Дата: 07.05.2020 | Комментарии (0)

Для работы с хранилищем настроек используется ХранилищеСистемныхНастроек.

Получить все настройки можно воспользоваться методом ХранилищеСистемныхНастроек.Выбрать(Отбор)

Отбор - это структура: "КлючОбъекта" ("ObjectKey"), "КлючНастроек" ("SettingsKey"), "Пользователь" ("User"). Все параметры имеют строковый тип.

Пользователь = имя пользователя ИБ (можно получить функцией ПользователиИнформационнойБазы.ТекущийПользователь().Имя)

КлючОбъекта = Строка типа "ВнешняяОбработка.ДокументыПоНедопускам.Форма.ФормаПараметров/НастройкиОкна". Для формы можно использовать ЭтаФОрма.ИмяФормы + "/НастройкиОкна"

Удалить данные хранилища для пользователя: ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, КлючНастроек, Пользователь)

Программирование | Просмотров: 415 | Добавил: leshic | Дата: 11.03.2020 | Комментарии (0)

4 способа склонения можно посмотреть здесь https://1c-programmer-blog.ru/programmirovanie/sklonenie-v-1s.html

Мне пригодится в основном

  • средствами платформы ПолучитьСклоненияСтроки(). Функция возвращает массив, поэтому надо брать первый элемент.

Пример: Результат = ПолучитьСклоненияСтроки("Пушкин Александр Сергеевич", "Л=ru_RU;ПЛ=Мужской", "ПД=Родительный")[0].

  • Native API. Компоненту выполненную по технологии Native API регистрировать не нужно, ее необходимо поместить в общий макет (тип макета — «Внешняя компонента») 

Пример:

&НаКлиенте
Процедура КомпонентаNative(Команда)
    
    УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклонений");
    
    Попытка
        
        ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклонений", "NameDecl" , ТипВнешнейКомпоненты.Native); 
        Объект = Новый("AddIn.NameDecl.CNameDecl");
        
    Исключение
        
        Сообщить("Не удалось подключить внешнюю компоненту по причине: " + ОписаниеОшибки()); 
        
    КонецПопытки;
 
    Сообщить(Объект.Просклонять("Иванов Иван Иванович", 2, 1)); //родительный, пол мужской
    Сообщить(Объект.Просклонять("Иванова Анна Ивановна", 3, 2)); //дательный, пол женский
    Сообщить(Объект.Просклонять("Иванов Иван Иванович", 4)); //винительный, пол авто
    Сообщить(Объект.Просклонять("Иванов Иван Иванович", 5)); //творительный, пол авто
    Сообщить(Объект.Просклонять("Иванов Иван Иванович", 6)); //предложный, пол авто
    
КонецПроцедуры    

 

Программирование | Просмотров: 638 | Добавил: leshic | Дата: 25.02.2020 | Комментарии (0)

Рефа́кторинг (англ. refactoring), или перепроектирование кода, переработка кода, равносильное преобразование алгоритмов — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы.

Во многом при рефакторинге лучше полагаться на интуицию, основанную на опыте. Тем не менее имеются некоторые видимые проблемы в коде (англ. code smells), требующие рефакторинга:

  1. дублирование кода;
  2. длинный метод;
  3. большой класс;
  4. длинный список параметров;
  5. «жадные» функции — это метод, который чрезмерно обращается к данным другого объекта;
  6. избыточные временные переменные;
  7. классы данных;
  8. несгруппированные данные.

Один из основных приемов "Выделение метода".

Выделение метода заключается в выделении из длинного и/или требующего комментариев кода отдельных фрагментов и преобразовании их в отдельные методы, с подстановкой подходящих вызовов в местах использования. В этом случае действует правило: если фрагмент кода требует комментария о том, что он делает, то он должен быть выделен в отдельный метод. Также правило: один метод не должен занимать более чем один экран (25-50 строк, в зависимости от условий редактирования), в противном случае некоторые его фрагменты имеют самостоятельную ценность и подлежат выделению. Из анализа связей выделяемого фрагмента с окружающим контекстом делается вывод о перечне параметров нового метода и его локальных переменных.

В 1С есть встроенный механизм Выделение метода. Примеры использования можно посмотреть здесь: https://1c-programmer-blog.ru/platforma/refaktoring-v-1s.html

 

Программирование | Просмотров: 372 | Добавил: leshic | Дата: 23.05.2019 | Комментарии (0)


1-10 11-20 21-29
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0