1с где можно хранить переменную
Небольшим заместителем глобальных переменных могут служить параметры сеанса, которые доступны в общих модулях. Но параметры сеанса могут сохранять не все типы значений, например, не получится так сохранить коллекцию значений (массив, структуру, список значений, таблицу значений и т.д.) Без преобразования в строку эти значения нельзя сохранить в параметре сеанса.
Кроме того, в параметрах сеанса не получается хранить сложные объекты, типа COM-объектов (в том числе из внешних компонент), обработок и др.
В некоторых случаях будет полезным следующий трюк:
В конфигурации создается обработка, которая обеспечивает доступ к модулю приложения из общего модуля.
В модуле обработки (не путать с модулем формы) размещаются следующие процедуры и функции:
Теперь в процедурах и функциях общих модулей можно делать следующие вещи:
Я думаю, вы выясните самостоятельно, как передавать параметры в процедуры и функции.
Еще хочу заметить, что такая обработка представляет собой ДЫРУ В БЕЗОПАСНОСТИ, потому что позволяет выполнить произвольный программный код и вызвать любую процедуру или функцию модуля приложения и общих модулей.
Еще хочу заметить, что этот трюк не соответствует идеологии платформы и возможно, что такая конфигурация не пройдет "1С:Совместимо", станет запутаннее и сложнее.
Кроме того, обращение к глобальным переменным будет довольно накладным (требуется создание объекта ОбработкаОбъект), но целью данной статьи является демонстрация технологических возможностей платформы на принципах "AS-IS". Вся ответственность за ваши программы лежит на вас.
Рекомендуется по возможности:
1. Обходиться вообще без глобальных переменных
2. Передавать информацию через параметры процедур и функций
3. Использовать параметры сеанса
4. Не допускать выполнения чужого программного кода
5. Комментировать сложные участки программы
Альтернативное решение, посредством общей формы вместо обработки
Недостаток вышеприведенного метода - в каждой функции общего модуля нужно создавать экземпляр обработки.
Реализация: :
Если есть общая-рабочий стол, то используем её, иначе создаем новую "ТестоваяФорма". На форму кладем ПолеВвода "рез" составного типа данных, и если форма-рабочий_стол,- то ещё два поляВвода "выражение_" и "парам".
В модуль формы кладем код
В модуль приложения
Пример использования
(не забудьте ф = ПолучитьОбщуюФорму("ТестоваяФорма", ,"ТестоваяФорма") в каждом модуле)
для формы, которая рабочий стол
- дополнение к статье писалось быстро - ошибки не исключены. Позже пересмотрю
- Код не поддерживает получение результата глоб.функций, точнее он не различает что выполняет - функцию или переменную. Позже перепишу что бы понимал
- При выполнении функций, процедур не поддерживается параметр локального контекста, например
Использование переменных в программных модулях
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. В большинстве случаев, вместо переменных программных модулей следует использовать более подходящие средства разработки платформы 1С:Предприятие . Поскольку область видимости (использования) таких переменных сложно контролировать, то они зачастую становятся источником трудновоспроизводимых ошибок.
Примеры некорректного использования и исключений из этого правила приведены далее. Рекомендации по оформлению переменных в коде программных модулей см. в статье Структура модуля.
2. Неоправданные примеры использования переменных в модулях объектов (справочников, документов, наборов записей, обработок, отчетов и пр.).
2.1. Для передачи параметров между обработчиками подписок на события и в обработчики событий модуля объекта из внешнего кода рекомендуется использовать свойство объекта ДополнительныеСвойства . Например, неправильно:
Перем КонвертацияФайлов Экспорт;
Если КонвертацияФайлов Тогда
.
// вызывающий код
ФайлОбъект.КонвертацияФайлов = Истина;
ФайлОбъект.Записать();
Если ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда
.
// вызывающий код
ФайлОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина);
ФайлОбъект.Записать();
В то же время, для передачи внутренних параметров между обработчиками событий модуля объекта целесообразно использовать неэкспортные переменные модуля объекта, которые недоступны из внешнего кода.
Например:
Перем ПредыдущееЗначениеОрганизации; // значение реквизита "Организация" до записи объекта в базу
Процедура ПередЗаписью(Отказ)
ПредыдущееЗначениеОрганизации = . ; // с помощью запроса выясняем значение до записи объекта в базу
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ПредыдущееЗначениеРеквизита <> Организация Тогда
// отрабатываем изменение значения реквизита при записи
.
КонецЕсли;
2.2. Для обработки кодов возврата (ошибок) в логике программного модуля рекомендуется использовать строковые константы.
Например, неправильно:
Перем НетОшибок,
Ошибка_ОбработкиПроверкиЗаполнения, // возникает, если обработка проверки заполнения вернула отказ
Ошибка_ЗаписиОбъекта, // возникает, если во время записи объекта возникло исключение
Ошибка_БлокировкиОбъекта, // возникает, при попытке блокировки объекта
Процедура ВыполнитьПерерасчет()
.
Результат = ОбработатьДокументы(. );
Если Результат = Ошибка_ЗаписиОбъекта Тогда
.
ИначеЕсли Результат = Ошибка_БлокировкиОбъекта Тогда
.
ИначеЕсли .
НетОшибок = 1;
Ошибка_ОбработкиПроверкиЗаполнения = 2;
Ошибка_ЗаписиОбъекта = 3;
Ошибка_БлокировкиОбъекта = 4;
Процедура ВыполнитьПерерасчет()
.
Результат = ОбработатьДокументы(. );
Если Результат = "ОшибкаЗаписиОбъекта" Тогда
.
ИначеЕсли Результат = "ОшибкаБлокировкиОбъекта" Тогда
.
ИначеЕсли .
2.3. Для кеширования долго-вычисляемых и часто-используемых значений в процедурах и функциях рекомендуется применять модули с повторным использованием возвращаемых значений на время вызова сервера.
Исключение из этого правила составляют случаи, когда по соображениям безопасности возвращать результат вычисления в экспортной функции недопустимо. В этом случае они размещаются в локальной переменной модуля.
3. Неоправданные примеры использования переменных в модулях форм.
3.1. Для кеширования долго-вычисляемых и часто-используемых значений в процедурах и функциях рекомендуется применять модули с повторным использованием возвращаемых значений.
При этом не следует кешировать статическую и легко вычисляемую информацию. В частности, не следует кешировать в клиентских переменных модуля формы значения предопределенных элементов и перечислений. Для их получения на клиенте предназначен метод ПредопределенноеЗначение .
3.2. Для хранения и передачи промежуточных результатов вычислений между разными процедурами и функциями формы следует использовать
- Параметры процедур и функций – для передачи результатов по цепочке вызовов дочерних процедур и функций в контексте одного вызова.
- Реквизиты формы – если требуется сохранять промежуточные результаты между разными вызовами с клиента. (Следует иметь в виду, что значения серверных переменных модуля формы не сохраняются между вызовами с клиента.)
Исключение из этого правила составляют случаи использования клиентских переменных формы для хранения промежуточных результатов в обработчиках ожидания формы, в обработчиках внешних событий и в клиентских обработчиках событий элементов формы.
Например:
&НаКлиенте
Перем ПорядковыйНомерИзображения; // счетчик-нумератор для наименования файлов при сканирования нескольких изображений
.
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "TWAIN" И Событие = "ImageAcquired" Тогда
Если ПорядковыйНомерИзображения = Неопределено Тогда
ПорядковыйНомерИзображения = 1;
КонецЕсли;
ПорядковыйНомерИзображения = ПорядковыйНомерИзображения + 1;
// Сохранение отсканированного документа в файл с номером ПорядковыйНомерИзображения
// .
КонецЕсли;
КонецПроцедуры
4. Переменные управляемого и обычного приложения следует использовать для хранения «клиентских параметров сеанса». Подробнее см. статью Использование параметров сеанса.
Тип: ХранилищаНастроекМенеджер.
Предназначено для доступа к хранилищам настроек, которые созданы в конфигурации.
Сервер, толстый клиент, внешнее соединение.
а то кто-то тут торгует синтакс-помощником.
выглядит, как будто к тонкому клиенту не подходит:
Сервер, толстый клиент, внешнее соединение.
(14) не абсолютно все, а только те, про которые идет разговор. ожидается последовательный вызов клиентской функции, поведение которой зависит от значения констант, изменение констант на ходу при этом не планируется, то есть нужно закэшировать их на клиенте.
(10) это мне подходит, но хотелось бы узнать более общее решение
(16) какое еще общее решение? смотря какая у тебя задача. если клиент, значит есть форма, значит можно хранить в реквизитах формы. а вообще 1С не рекомендует кэшировать константы в повторно используемых значениях.
(15) там константы и так кешируются на уровне платформы, зачем вам их по второму разу кешировать? Вы хотите странного.
(19) разве можно получить значение константы на клиенте? если нет, значит константа кэшируется на сервере, а зачем она мне там, если мне на клиенте надо?
в таком случае как на клиенте правильно значение константы получать?
(20) С методической точки зрения, даже параметры сеанса, о которых ты начал тут говорить, для кэширования использовать не правильно ;)
вроде как константу получают так:
если даже она у меня сама закэшируется на сервере, то вызов сервера от этого не исчезнет.
кстати, почему-то так не заработало:
(24) поддержу. Так столько всего передается с сервера, что специально что-то делать не имеет смысла.
(10) Переменные упр. модуля в Web-клиенте не доступны.
(26) > Переменные упр. модуля в Web-клиенте не доступны.
Хм, вряд ли это так.
(27) Так то в общих модулях. А просто во внешней обработке попробуй получить.(28) Не в курсе, а что там с внешней обработкой?
"Экспортируемые переменные, процедуры или функции модуля управляемого приложения (у которых в заголовке указано ключевое слово Экспорт) будут доступны (рис. 3.5):
У внешней обработки есть упр. форма, почему в ней должна быть недоступна переменная?Не понял нравственных метаний присутствующих в ветке.
Давайте, рассказывайте мне, кто обидел.
Я приду на помощь.
(33) Так понять нас не мудрено.
По "заветам партии" хотим все считать на сервере, а где переменные хранить не знаем. Всяких таблиц, списков значений и структур хотим создать, да побольше. Да только так создать, чтобы не пришлось их с клиента гонять.
Еще, хотелось бы, перемещение рисунков по табличному документу организовать на клиенте, а не лезть на сервер
Храните на Клиенте:
(20) Повторное использование возвращаемых значений = кэширование на клиенте.(36) то есть, в итоге, создаем общий модуль с повторным использованием и вставляем функцию получения константы? а если нужно хранить какие-то данные которые на сервере вообще ни к чему (ну типа предыдущих координат мыши)?
(37) Если тебе на клиенте нужно сохранить значение, то просто в модуле формы можно завести переменную как в (35).
А вот значение серверной переменной постоянно так хранить не получится.
При возврате с сервера на клиента ей настанет каюк. При вызове сервера с клиента тебе придется передавать клиентские данные или через параметры функции, временноехранилище или через форму. Как то так.
(39) ВременноеХранилище - это же файл?
Получу я адрес в хранилище. Теперь его нужно хранить.
Было бы шикарно объявить переменную, вроде
И пусть платформа сама гоняет ее по своим хранилищам.
Доступно и всерьез!
Факторов, обуславливающих необходимость периодического создания бэкапов для восстановления, весьма много. В процессе работы организация может столкнуться с вредоносным программным обеспечением, перебоями в подаче электроэнергии, некачественно подготовленными обновлениями, а также иными обстоятельствами, негативно сказывающимися на функциональных и эксплуатационных характеристиках системы учета. Как итог — бухгалтерия предприятия лишается свободного доступа к необходимой информации. В этом случае оказать оперативную техническую поддержку помогает резервное копирование баз данных 1С, благодаря которому можно восстановить рабочий процесс с минимальными потерями.
Важно учесть, что доступ к функциям платформы, определяющим алгоритм и график формирования архивных бэкапов, имеют только пользователи, наделенные правами Администратора. Локальное ограничение позволяет избежать несанкционированных изменений, способных поставить под угрозу сохранность сведений, используемых в системе управления. При этом программа предусматривает наличие встроенных инструментов, обеспечивающих реализацию заданного функционала без задействования стороннего ПО.
Настройка резервного копирования и архивации файловой базы 1С
Чтобы детально разобраться в нюансах, связанных с процедурой создания бэкапов, нужно рассмотреть механизмы, применяемые для выполнения рассматриваемой функции. Существует несколько вариантов процедуры генерации архивов, а также специальные утилиты, благодаря которым можно проверить работоспособность полученной копии — на случай, если есть подозрения в сбоях логических процессов системы.
Стоит отметить, что в рамках обзора рассматриваются только методики, актуальные для сохранения и последующей реконфигурации файловых баз данных. Организациям, пользующимся услугами клиент-сервера, рекомендуется использовать либо средства, предусмотренные функционалом СУБД (при наличии MS SQL можно привлечь сторонних специалистов), либо дополнительное программное обеспечение.
По умолчанию резервная копия 1 С создается следующим образом:
- Откройте главное меню и выберите разделы «Администрирование» — «Обслуживание».
- Перейдите к вкладке «Копирование и восстановление».
Система предложит два способа генерации бэкапов — рассмотрим каждый из них более подробно.
Облачный архив
Для компаний, информационно-техническое сопровождение которых осуществляется по тарифу ИТС: Проф, рекомендуется использование бесплатного сервиса с доступом к облаку. Этот режим достаточно удобен, поскольку обеспечивает возможность получения исходных данных, даже если оборудование или физический носитель, применявшиеся для работы с ними, подверглись существенным повреждениям, исключающим сервисный ремонт. В случае отсутствия подписки можно пропустить этот пункт, и сразу перейти к следующему разделу, где рассматривается создание резервной копии базы 1С 8 на ПК.
При соблюдении заданных критериев алгоритм архивации будет выглядеть следующим образом:
- Выберите опцию «Облачный сервис» — «Подключить».
- Введите в поля формы, появившейся на экране, параметры учетной записи (логин и пароль).
Система автоматически установит настройки для создания архивов. В случае возникновения вопросов воспользуйтесь функцией генерации запроса в техническую поддержку, специалисты которой окажут необходимую помощь.
На локальном компьютере
При отсутствии подписки ИТС: Проф режим хранения в цифровом облаке повлечет за собой ежемесячные расходы в размере 1-1,5 тысячи рублей. Впрочем, есть и альтернатива — бесплатная настройка архивирования 1С, когда бэкап базы данных формируется и сохраняется на одном из жестких дисков используемого ПК.
Для этого выберите соответствующую опцию и отметьте активной функцию выполнения автоматического резервного копирования, указав каталог, в котором будут размещаться дубликаты. Оптимальное решение — использование отдельного (съемного) жесткого диска, либо выбор раздела, на котором не размещаются программные элементы операционной системы Windows.
В пункте «Хранение копий» достаточно указать в качестве директивы «Последние 10 шт.» — практика показывает, что этого количества обычно хватает для восстановления доступа с минимальными потерями. Кроме того, ограничение позволяет сэкономить физическое пространство, занимаемое бэкапами БД на носителе.
Заключительный шаг — принятие решения о том, как настроить автоматическое резервное копирование файловой базы данных 1С 8.3 («1C:Розница», «Предприятие», «ЗУП», «УТ», и т. д.) — по расписанию, или же при каждом завершении рабочего сеанса. Стоит учитывать, что в обоих случаях все пользователи, находящиеся на момент начала архивации в программе, будут вынуждены прервать свои процессы.
Вариант «Регулярно»
Подходящий формат для организаций, в которых принят четкий распорядок дня, предусматривающий обязательный обеденный перерыв в одно и то же время. Если подобная практика соблюдается строго, и вероятность того, что кто-то из сотрудников нарушит график, сводится к минимуму — используйте возникающий временной интервал с пользой, указав его для системы, как возможность сделать архивную копию (бэкап) базы 1С. Для этого:
- В появившемся на экране меню установите значение «1» в поле «Повторять каждые».
- Откройте вкладку «Дневное» и введите в поле «Время начала» подходящее значение.
- Подтвердите настройки — в качестве результата получится условный формат «Каждый день, с 13:15».
Важно учитывать, что для копирования сеанс должен оставаться активным. То есть, покидая рабочее место, оставьте программу включенной, чтобы она могла создать резерв БД.
Вариант «При завершении работы»
Актуален в ситуациях, когда ввиду определенных неизменных обстоятельств сотрудник уходит из офиса (или выходит из системы) позже коллег. В этом случае настраивать параметры, определяющие порядок автоматического сохранения резервной копии базы 1С, не требуется — при каждом закрытии предложение об архивации будет появляться по умолчанию.
Важно: на экране появится уведомление о том, что копирование не выполнено, и две опции — завершения или продолжения работы. Для получения желаемого результата нужно выбрать второй вариант, после чего в правом нижнем углу возникнет дополнительная форма. Убедитесь, что пункт подтверждения создания бэкапа отмечен флажком, после чего нажмите «Завершить». Система запустит цикл архивации, и выключит компьютер по его окончании.
Как создать резервную копию информационной базы 1С
Подобная процедура обычно проводится перед установкой очередного системного обновления, сопровождающегося внесением значительных изменений в работу учетной программы. При использовании файлового формата наиболее простым и практичным вариантом является копирование элемента с расширением *.1CD.
Для определения местоположения данных на локальном носителе достаточно произвести запуск программного обеспечения — нужная информация будет указана в нижней строчке. Откройте конечную папку, скопируйте файл и вставьте дубликат в заранее выбранный каталог. При этом важно учитывать, что в процессе сохранения нельзя одновременно взаимодействовать с объектами, поскольку это приводит к появлению ошибок.
При возникновении потребности в восстановлении доступа к ранее архивированной ИБ достаточно совершить обратное перемещение элемента в исходный раздел.
Читайте также: