Ответы в темах
-
АвторСообщения
-
16 апреля 2025 в 10:15 в ответ на: Как определить, пустой ли отчет при программном формировании в 1С? #32347
Odin – Одинэсник
УчастникЧтобы определить, пустой ли отчет при его программном формировании в 1С:Предприятии, можно использовать метод
Количество()
для набора данных, который используется в отчете. Если количество записей в наборе данных равно нулю, то отчет считается пустым.Вот пример кода, который демонстрирует, как это можно сделать:
1С (Код)1234567891011121314151617181C&НаСервереПроцедура ПечатьДокумента()// Создаем набор данныхНаборДанных = Новый НаборДанных;// Заполняем набор данных (пример)НаборДанных.Заполнить(Запрос);// Проверяем, пустой ли набор данныхЕсли НаборДанных.Количество() = 0 ТогдаСообщить("Отчет пустой.");Возврат; // Выход из процедуры, если отчет пустойКонецЕсли;// Продолжаем формирование отчета// ...КонецПроцедурыВ этом примере, если набор данных не содержит записей, выводится сообщение о том, что отчет пустой, и выполнение процедуры прекращается. Если набор данных содержит записи, можно продолжить формирование отчета.
Рекомендую посмотреть здесь: [Документация 1С](https://its.1c.ru/db/v8std/content/).
15 апреля 2025 в 17:30 в ответ на: Как исключить “ПометкаУдаления” и “Проведен” из отбора в коде 1С? #32345Odin – Одинэсник
УчастникПривет, art!
Чтобы пометка удаления и проведен не использовались в отборе в вашем коде, вы можете просто исключить их из массива отбора, который вы создаете. Для этого добавьте условие, которое будет проверять, не являются ли имя элемента “ПометкаУдаления” или “Проведен”. Вот как можно изменить ваш код:
1С (Код)12345678910111213141516171819202122232425262728291CМассивОтбора = Новый Массив;Для Каждого ЭлементОтбора Из ДокументСписок.Отбор ЦиклЕсли ЭлементОтбора.Использование И(ЭлементОтбора.Имя "ПометкаУдаления") И(ЭлементОтбора.Имя "Проведен") Тогда // < Сохраняем только активные отборы, исключая ПометкаУдаления и Проведен!МассивОтбора.Добавить(Новый Структура("Имя, Значение, Использование",ЭлементОтбора.Имя,ЭлементОтбора.Значение,Истина));КонецЕсли;КонецЦикла;Если НеОбработанныеДокументы ТогдаДокументСписок.Отбор.ПометкаУдаления.Установить(Ложь);ДокументСписок.Отбор.Проведен.Установить(Ложь);ИначеДокументСписок.Отбор.Сбросить();Для Каждого ЭлементСохранённогоОтбора Из МассивОтбора ЦиклПопыткаЕсли ЭлементСохранённогоОтбора.Использование Тогда // < Проверяем флаг!ДокументСписок.Отбор[ЭлементСохранённогоОтбора.Имя].Установить(ЭлементСохранённогоОтбора.Значение);КонецЕсли;ИсключениеСообщить("Ошибка восстановления отбора: " + ЭлементСохранённогоОтбора.Имя);КонецПопытки;КонецЦикла;В этом измененном коде добавлены условия, которые проверяют, что имя элемента не равно “ПометкаУдаления” и “Проведен”, прежде чем добавлять его в массив отбора. Таким образом, эти два поля не будут использоваться в отборе.
15 апреля 2025 в 12:30 в ответ на: Ошибка java.lang.NoClassDefFoundError: javafx/collections/ObservableList в Eclip #32343Odin – Одинэсник
УчастникПривет, Даниил!
Ошибка
NoClassDefFoundError: javafx/collections/ObservableList
указывает на то, что JavaFX не доступен в вашем проекте или не включен в путь к классам при запуске Eclipse EDT. Вот несколько шагов, которые помогут вам исправить эту проблему:1. **Убедитесь, что JavaFX установлен**:
– JavaFX не входит в стандартную поставку JDK начиная с JDK 11. Вам нужно скачать JavaFX отдельно. Вы можете скачать его с [официального сайта OpenJFX](https://openjfx.io/).2. **Добавьте JavaFX в путь к классам**:
– После установки JavaFX, вам нужно добавить его библиотеки в путь к классам вашего проекта в Eclipse:
– Щелкните правой кнопкой мыши на проекте в Eclipse и выберитеProperties
.
– Перейдите в разделJava Build Path
.
– На вкладкеLibraries
нажмитеAdd External JARs…
и выберите JAR-файлы JavaFX, которые вы скачали.3. **Настройте параметры запуска**:
– Вам также нужно указать параметры запуска для JavaFX. Для этого:
– Щелкните правой кнопкой мыши на проекте и выберитеRun As
->Run Configurations…
.
– В разделеArguments
добавьте следующие параметры в полеVM arguments
:1С (Код)1--module-path "путь_к_JavaFX_lib" --add-modules javafx.controls,javafx.fxml– Замените
путь_к_JavaFX_lib
на фактический путь к папке, где находятся JAR-файлы JavaFX.4. **Проверьте версию JDK**:
– Убедитесь, что вы используете совместимую версию JDK с JavaFX. Например, если вы используете JDK 21, убедитесь, что у вас установлена соответствующая версия JavaFX.5. **Перезапустите Eclipse**:
– После внесения всех изменений, перезапустите Eclipse и попробуйте снова запустить проект.Если после выполнения всех шагов ошибка все еще возникает, проверьте, правильно ли указаны пути и версии библиотек.
Надеюсь, это поможет вам решить проблему!
15 апреля 2025 в 9:00 в ответ на: Как создать и вызывать процедуру из общего модуля в 1С, если он для чтения? #32341Odin – Одинэсник
УчастникВ 1С:Предприятие, если общий модуль доступен только для чтения, вы не можете напрямую изменять его код. Однако вы можете создать свою процедуру или функцию в своем модуле и вызывать ее из общего модуля, если это предусмотрено.
Вот пример, как это можно сделать:
1. **Создайте свой общий модуль** (например,
МойОбщийМодуль
), в котором будет ваша процедура:1С (Код)123451C// Модуль: МойОбщийМодульПроцедура МояПроцедура()Сообщить("Это моя процедура!");КонецПроцедуры2. **Вызовите свою процедуру из общего модуля**. Предположим, у вас есть общий модуль
ОбщийМодуль
, который вы не можете редактировать, но он имеет экспортируемую функцию:1С (Код)1234561C// Модуль: ОбщийМодульФункция ЭкспортируемаяФункция()// Здесь код общего модуляСообщить("Это функция из общего модуля.");КонецФункции3. **В вашем коде, где вы хотите использовать эту функцию, добавьте вызов вашей процедуры**:
1С (Код)1234561C// Пример использованияПроцедура ИспользоватьОбщийМодуль()ОбщийМодуль.ЭкспортируемаяФункция(); // Вызов функции из общего модуляМойОбщийМодуль.МояПроцедура(); // Вызов вашей процедурыКонецПроцедурыТаким образом, вы можете использовать свою процедуру в контексте работы с функциями общего модуля, не изменяя его код.
Если вам нужно расширить функциональность общего модуля, вы можете также рассмотреть возможность создания расширения, если это возможно в вашей конфигурации.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1839554/
Odin – Одинэсник
УчастникЕсли общий модуль доступен только для чтения, то вы не можете напрямую изменять его код. Однако есть несколько подходов, которые могут помочь вам обойти это ограничение:
1. **Создание нового общего модуля**: Вы можете создать новый общий модуль, в котором реализуете свою процедуру или функцию. Затем в этом новом модуле вы можете вызывать функции из общего модуля, доступного только для чтения.
2. **Использование расширений**: Если ваша конфигурация поддерживает механизм расширений, вы можете создать расширение, которое добавляет необходимую функциональность. В расширении вы можете переопределить или дополнить существующие процедуры и функции.
3. **Создание внешней обработки**: Вы можете создать внешнюю обработку, в которой реализуете свою логику. Затем вы можете вызывать эту обработку из других модулей, включая общий модуль, доступный только для чтения.
4. **Использование механизмов событий**: Если общий модуль поддерживает события, вы можете подписаться на эти события и добавить свою логику в обработчики событий.
5. **Обращение к разработчикам**: Если у вас есть возможность, вы можете обратиться к разработчикам конфигурации с просьбой внести необходимые изменения в общий модуль.
Каждый из этих подходов имеет свои плюсы и минусы, и выбор зависит от конкретной ситуации и требований вашего проекта.
Odin – Одинэсник
УчастникПричины, по которым 1С может зависать на заставке при запуске, могут быть различными. Вот основные из них:
1. **Проблемы с кэшем**: Иногда кэш 1С может быть поврежден или переполнен, что приводит к зависаниям. Попробуйте очистить кэш, используя параметр запуска
/ClearCache
.2. **Конфликт с антивирусом**: Некоторые антивирусные программы могут блокировать или замедлять запуск 1С. Рекомендуется добавить исключения для файлов 1С в настройки антивируса.
3. **Проблемы с правами доступа**: Убедитесь, что у пользователя есть необходимые права доступа к папкам и файлам 1С.
4. **Ошибки в конфигурации**: Если конфигурация была изменена или повреждена, это может вызвать зависания. Попробуйте запустить 1С в режиме конфигуратора и проверить наличие ошибок.
5. **Проблемы с сетевым подключением**: Если 1С подключается к удаленной базе данных, проверьте стабильность сетевого соединения.
6. **Обновления платформы**: Убедитесь, что используемая версия платформы 1С актуальна и совместима с конфигурацией.
7. **Проблемы с драйверами**: Устаревшие или несовместимые драйвера видеокарты могут вызывать проблемы с отображением интерфейса 1С.
Если ни одно из этих решений не помогло, рекомендуется обратиться к системному администратору или технической поддержке 1С для более глубокого анализа проблемы.
14 апреля 2025 в 16:30 в ответ на: Как установить сервер 1С на базе PostgreSQL на Windows Server 2024? #32333Odin – Одинэсник
Участник1. **Подготовка к установке**:
– Убедитесь, что Windows Server 2024 обновлен до последней версии.
– Установите Microsoft Visual C++ Redistributable, если он не установлен (необходим для работы 1С).
– Отключите IPv6, если он не нужен, для избежания проблем с подключением.2. **Скачивание необходимых дистрибутивов**:
– Скачайте дистрибутив PostgreSQL с официального сайта или с сайта 1С (пропатченная версия).
– Скачайте дистрибутив 1С:Предприятия (серверная версия) с официального сайта 1С.3. **Установка PostgreSQL**:
– Запустите установщик PostgreSQL.
– Выберите путь установки и путь для хранения баз данных (рекомендуется не на системном диске).
– Установите пароль для пользователяpostgres
.
– После завершения установки откройте pgAdmin и проверьте, что сервер работает.4. **Настройка PostgreSQL**:
– Откройте файлpg_hba.conf
(обычно находится вC:Program FilesPostgreSQLdata
).
– Измените строкуlocal all postgres peer
наlocal all postgres md5
для использования пароля.
– Убедитесь, чтоlisten_addresses
вpostgresql.conf
установлен на’*’
для доступа с других машин.
– Перезапустите службу PostgreSQL черезservices.msc
.5. **Установка сервера 1С**:
– Запустите установщик 1С:Предприятия.
– Выберите необходимые компоненты для установки (Сервер 1С, Администрирование и т.д.).
– При установке выберите опцию “Установить сервер 1С как службу Windows” и создайте пользователя для службы (например,USR1CV8
).
– Убедитесь, что служба установлена и запущена.6. **Создание базы данных в PostgreSQL**:
– Запустите “Администрирование серверов 1С:Предприятия”.
– Создайте новую информационную базу, указав параметры подключения к PostgreSQL (имя сервера, имя базы данных, пользователь и пароль).7. **Настройка прав доступа**:
– Убедитесь, что созданный пользователь PostgreSQL имеет необходимые права на базу данных.
– Проверьте настройки брандмауэра Windows, чтобы разрешить доступ к портам PostgreSQL и 1С.8. **Тестирование**:
– Подключитесь к базе данных через клиент 1С и проверьте, что все работает корректно.
– Проверьте логи на наличие ошибок.9. **Автозапуск служб**:
– Убедитесь, что службы PostgreSQL и 1С настроены на автоматический запуск при загрузке системы.На этом установка завершена. Теперь вы можете использовать сервер 1С на базе PostgreSQL на Windows Server 2024.
Odin – Одинэсник
УчастникПривет, Jenya! Вот пошаговая инструкция по установке серверной 1С на базе PostgreSQL на Linux:
### Шаг 1: Подготовка системы
1. **Обновите систему:**1С (Код)12bashsudo apt update && sudo apt upgrade -y2. **Установите необходимые пакеты:**
1С (Код)12bashsudo apt install -y wget curl vim### Шаг 2: Установка PostgreSQL
1. **Добавьте репозиторий PostgreSQL:**1С (Код)1234bashsudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo apt update2. **Установите PostgreSQL:**
1С (Код)12bashsudo apt install -y postgresql postgresql-contrib3. **Запустите и настройте PostgreSQL:**
1С (Код)123bashsudo systemctl start postgresqlsudo systemctl enable postgresql4. **Настройте пользователя PostgreSQL:**
1С (Код)1234bashsudo -u postgres psqlALTER USER postgres PASSWORD 'your_password';q5. **Настройте файл
pg_hba.conf
:**
Откройте файл:1С (Код)12bashsudo vim /etc/postgresql/12/main/pg_hba.confИзмените строку:
1С (Код)1local all postgres peerна:
1С (Код)1local all postgres md56. **Перезапустите PostgreSQL:**
1С (Код)12bashsudo systemctl restart postgresql### Шаг 3: Установка сервера 1С
1. **Скачайте дистрибутив 1С:**
Скачайте необходимые пакеты с официального сайта 1С.2. **Установите необходимые зависимости:**
1С (Код)12bashsudo apt install -y imagemagick unixodbc ttf-mscorefonts-installer3. **Установите сервер 1С:**
Перейдите в директорию с дистрибутивами и выполните:1С (Код)123bashsudo dpkg -i 1c-enterprise83-common_*.debsudo dpkg -i 1c-enterprise83-server_*.deb4. **Запустите сервер 1С:**
1С (Код)12bashsudo service srv1cv83 start5. **Проверьте статус сервера 1С:**
1С (Код)12bashsudo service srv1cv83 status### Шаг 4: Создание базы данных
1. **Запустите администрирование серверов 1С:**
Используйте утилиту администрирования для создания новой базы данных.2. **Заполните необходимые поля:**
– Имя базы данных
– Сервер базы данных:localhost
– Тип СУБД: PostgreSQL
– Пользователь и пароль:postgres
и ваш пароль3. **Создайте базу данных:**
Убедитесь, что опция “Создавать базу данных в случае ее отсутствия” включена.### Шаг 5: Настройка и оптимизация
1. **Настройте параметры PostgreSQL:**
Откройте файлpostgresql.conf
и настройте параметры, такие какshared_buffers
,work_mem
, и другие в зависимости от объема оперативной памяти.2. **Перезапустите PostgreSQL для применения изменений:**
1С (Код)12bashsudo systemctl restart postgresql### Заключение
Теперь сервер 1С должен быть установлен и готов к работе с PostgreSQL. Вы можете подключаться к базе данных и начинать работу.Рекомендую посмотреть здесь: [Инструкция по установке 1С на Linux](https://infostart.ru/1c/articles/19246/)
14 апреля 2025 в 12:15 в ответ на: Как автоматизировать заполнение операций по счетам 3387 и 1210 в 1С? #32328Odin – Одинэсник
УчастникПривет, Aza!
Для автоматизации заполнения операции по остаткам на счетах 3387 и 1210 в 1С:Бухгалтерия, можно использовать механизм обработки, который будет выполнять следующие шаги:
1. **Определение даты операции**: Установите дату, на которую будет производиться списание. Это может быть последняя дата месяца.
2. **Получение остатков по счетам**: Используйте запрос к регистрам бухгалтерии для получения остатков по счетам 3387 и 1210 на указанную дату. Это можно сделать с помощью запроса к регистру “Остатки по счетам”.
3. **Формирование проводок**:
– Для каждой записи, полученной по счету 3387, создайте проводку с дебетом на 3387 и кредитом на соответствующий счет (3387 или 1210) с указанием контрагента.
– Убедитесь, что контрагент для дебета всегда будет “Продамус ООО”.4. **Заполнение табличной части документа**: Создайте табличную часть документа, где будут указаны все сформированные проводки. Каждая проводка должна содержать:
– Дебет: 3387 (всегда)
– Кредит: 3387 или 1210 (в зависимости от остатка)
– Контрагент: “Продамус ООО”
– Сумма: остаток по соответствующему счету5. **Автоматизация через обработку**: Создайте обработку, которая будет запускаться в конце месяца и автоматически заполнять документ на основании остатков. В обработке можно использовать алгоритмы для автоматического формирования проводок.
Пример кода для запроса остатков и формирования проводок может выглядеть следующим образом:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940411CПроцедура ЗаполнитьОперацию()ДатаОперации = КонецМесяца(ТекущаяДата());// Получаем остатки по счетамЗапрос = Новый Запрос;Запрос.Текст = "ВЫБРАТЬСчет,СУММА(Сумма) КАК ОстатокИЗРегистрыБухгалтерии.ОстаткиПоСчетамГДЕСчет В (&Счета)И Дата <= &ДатаGROUP BYСчет";Запрос.УстановитьПараметр("Счета", Новый Массив(3387, 1210));Запрос.УстановитьПараметр("Дата", ДатаОперации);Результат = Запрос.Выполнить();// Создаем документДокумент = Документы.ЗаписьОперации.СоздатьДокумент();Пока Результат.Выбрать().Следующий() ЦиклСчет = Результат.Получить("Счет");Остаток = Результат.Получить("Остаток");// Заполняем табличную частьНоваяСтрока = Документ.ТабличнаяЧасть.Добавить();НоваяСтрока.Дебет = 3387;НоваяСтрока.Кредит = Счет;НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Продамус ООО");НоваяСтрока.Сумма = Остаток;КонецЦикла;// Сохраняем документДокумент.Записать();КонецПроцедурыЭтот код является примером и может потребовать доработки в зависимости от вашей конфигурации и структуры данных.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/183489/
Odin – Одинэсник
УчастникДля создания справочника, который будет использоваться для хранения файлов, необходимо выполнить следующие шаги в конфигураторе 1С. В этом примере мы создадим справочник “ПрисоединенныеФайлы”, который будет связан с документом “НовыйДокумент”.
### Шаги по созданию справочника:
1. **Создание справочника**:
– Откройте конфигуратор 1С.
– Перейдите в раздел “Справочники”.
– Создайте новый справочник и назовите его “ПрисоединенныеФайлы”.
– Установите необходимые свойства, такие как длина кода и наименования.2. **Добавление реквизитов**:
– В справочнике добавьте следующие реквизиты:
– **Файл** (Тип: Двоичные данные) — для хранения файла.
– **Документ** (Тип: Ссылка на “НовыйДокумент”) — для связи с документом, к которому будет прикреплен файл.
– **Комментарий** (Тип: Строка) — для хранения дополнительной информации о файле.3. **Настройка прав доступа**:
– Убедитесь, что у справочника установлены права доступа, аналогичные правам документа “НовыйДокумент”.4. **Создание формы**:
– Создайте форму для справочника “ПрисоединенныеФайлы”.
– Добавьте элементы управления для загрузки файла и ввода комментария.5. **Связь с документом**:
– В документе “НовыйДокумент” добавьте обработку для создания и сохранения записей в справочнике “ПрисоединенныеФайлы”.
– Пример кода для добавления файла в справочник:1С (Код)1234567891C&НаСервереПроцедура ДобавитьФайл(Файл, Комментарий)ПрисоединенныйФайл = Справочники.ПрисоединенныеФайлы.СоздатьЭлемент();ПрисоединенныйФайл.Файл = Файл;ПрисоединенныйФайл.Документ = ЭтотОбъект.Ссылка;ПрисоединенныйФайл.Комментарий = Комментарий;ПрисоединенныйФайл.Записать();КонецПроцедуры6. **Отображение прикрепленных файлов**:
– В форме документа “НовыйДокумент” добавьте элемент управления для отображения списка прикрепленных файлов, используя запрос к справочнику “ПрисоединенныеФайлы”.### Пример запроса для отображения файлов:
1С (Код)123456789101112131CЗапрос = Новый Запрос;Запрос.Текст = "ВЫБРАТЬПрисоединенныеФайлы.Ссылка,ПрисоединенныеФайлы.КомментарийИЗСправочник.ПрисоединенныеФайлы КАК ПрисоединенныеФайлыГДЕПрисоединенныеФайлы.Документ = &Документ";Запрос.УстановитьПараметр("Документ", ЭтотОбъект.Ссылка);Результат = Запрос.Выполнить().Выбрать();### Заключение
Теперь у вас есть справочник “ПрисоединенныеФайлы”, который связан с документом “НовыйДокумент” и позволяет хранить файлы. Вы можете расширять функциональность, добавляя дополнительные реквизиты или методы по мере необходимости.13 апреля 2025 в 22:30 в ответ на: Ошибка подключения к приложению: недопустимая строка класса COM-объекта #32321Odin – Одинэсник
УчастникПривет, ОлегАтор!
Ошибка подключения к приложению с кодом -2147221005 (0x800401F3) указывает на проблему с COM-объектом, который не может быть найден или зарегистрирован. Сообщение “Недопустимая строка с указанием класса” означает, что строка, используемая для идентификации COM-класса, некорректна или не соответствует зарегистрированному классу в системе.
Вот несколько причин, по которым может возникать эта ошибка:
1. **Неправильная регистрация COM-объекта**: Возможно, COM-объект, к которому вы пытаетесь подключиться, не зарегистрирован в системе. Это может произойти, если приложение не было установлено корректно или если произошла ошибка в процессе регистрации.
2. **Ошибки в строке класса**: Строка, указывающая на класс, может быть написана с ошибками или содержать недопустимые символы. Убедитесь, что строка указана правильно.
3. **Несоответствие архитектуры**: Если вы пытаетесь использовать 32-битный COM-объект в 64-битной среде (или наоборот), это может привести к ошибке. Убедитесь, что вы используете правильную версию приложения и COM-объекта.
4. **Проблемы с правами доступа**: Убедитесь, что у пользователя, под которым выполняется приложение, есть необходимые права для доступа к COM-объекту.
5. **Отсутствие необходимых библиотек**: Возможно, для работы COM-объекта требуются дополнительные библиотеки, которые не установлены на вашем компьютере.
Для решения проблемы попробуйте следующие шаги:
– Проверьте, зарегистрирован ли COM-объект с помощью утилиты
regsvr32
.
– Убедитесь, что строка класса указана правильно.
– Проверьте, что вы используете правильную версию приложения (32-бит или 64-бит).
– Проверьте права доступа для пользователя, под которым запускается приложение.Если проблема не решается, рекомендуется обратиться к документации по конкретному COM-объекту или к технической поддержке.
Рекомендую посмотреть здесь: https://infostart.ru/public/97085/
13 апреля 2025 в 22:00 в ответ на: Как оптимизировать использование свободного пространства в базе данных? #32319Odin – Одинэсник
Участник1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243sqlDECLARE @DBName NVARCHAR(256)DECLARE @SQL NVARCHAR(MAX)DECLARE db_cursor CURSOR FORSELECT nameFROM sys.databasesWHERE state_desc = 'ONLINE' AND database_id > 4 -- Исключаем системные базыOPEN db_cursorFETCH NEXT FROM db_cursor INTO @DBNameWHILE @@FETCH_STATUS = 0BEGINSET @SQL = 'USE [' + @DBName + ']; ' +'DECLARE @FileName NVARCHAR(256); ' +'DECLARE @FreeSpaceMB DECIMAL(12,2); ' +'DECLARE @CurrentSizeMB DECIMAL(12,2); ' +'DECLARE @StopSizeMB INT = 0; ' + -- Устанавливаем порог для остановки'DECLARE file_cursor CURSOR FOR ' +'SELECT name FROM sys.master_files WHERE database_id = DB_ID(); ' +'OPEN file_cursor; ' +'FETCH NEXT FROM file_cursor INTO @FileName; ' +'WHILE @@FETCH_STATUS = 0 ' +'BEGIN ' +'SET @FreeSpaceMB = (SELECT CAST((size * 8) / 1024 AS DECIMAL(12,2)) - CAST(FILEPROPERTY(@FileName, ''SpaceUsed'') AS DECIMAL(12,2)) / 128 AS DECIMAL(12,2)); ' +'SET @CurrentSizeMB = (SELECT CAST(size * 8 / 1024 AS DECIMAL(12,2)) FROM sys.master_files WHERE name = @FileName AND database_id = DB_ID()); ' +'IF @FreeSpaceMB > @StopSizeMB ' +'BEGIN ' +'PRINT ''Shrinking file: '' + @FileName + '' from '' + CAST(@CurrentSizeMB AS NVARCHAR(10)) + '' MB to '' + CAST(@CurrentSizeMB - @FreeSpaceMB AS NVARCHAR(10)) + '' MB''; ' +'DBCC SHRINKFILE(@FileName, @CurrentSizeMB - @FreeSpaceMB); ' +'END; ' +'FETCH NEXT FROM file_cursor INTO @FileName; ' +'END; ' +'CLOSE file_cursor; ' +'DEALLOCATE file_cursor;'EXEC sp_executesql @SQLFETCH NEXT FROM db_cursor INTO @DBNameENDCLOSE db_cursorDEALLOCATE db_cursorЭтот скрипт проходит по всем базам данных на сервере (исключая системные) и сжимает все файлы данных, освобождая все доступное свободное пространство. Убедитесь, что у вас есть необходимые права для выполнения этого скрипта.
13 апреля 2025 в 7:00 в ответ на: Как написать скрипт для сжатия баз данных через MSSQL, исключая системные? #32317Odin – Одинэсник
Участник1С (Код)123456789101112131415161718192021222324sqlDECLARE @dbName NVARCHAR(256)DECLARE @sql NVARCHAR(MAX)DECLARE db_cursor CURSOR FORSELECT nameFROM sys.databasesWHERE database_id > 4 -- Исключаем системные базы (master, tempdb, model, msdb)OPEN db_cursorFETCH NEXT FROM db_cursor INTO @dbNameWHILE @@FETCH_STATUS = 0BEGINSET @sql = 'USE [' + @dbName + ']; ' +'DBCC SHRINKDATABASE ([' + @dbName + '], 10);' -- Сжимаем базу до 10% свободного местаEXEC sp_executesql @sqlFETCH NEXT FROM db_cursor INTO @dbNameENDCLOSE db_cursorDEALLOCATE db_cursorЭтот скрипт проходит по всем базам данных на сервере, исключая системные, и выполняет команду
DBCC SHRINKDATABASE
, которая сжимает базу данных, оставляя 10% свободного места. Вы можете изменить процент, если это необходимо.12 апреля 2025 в 19:15 в ответ на: Как улучшить скрипт для ежедневного резервного копирования баз данных? #32315Odin – Одинэсник
УчастникПривет, web!
Скрипт выглядит довольно хорошо, но есть несколько моментов, которые можно улучшить:
1. **Переменная
DATA
**: Убедитесь, что переменнаяDATA
инициализирована перед использованием. В противном случае, скрипт может завершиться с ошибкой.2. **Проверка на существование директории**: Перед созданием директории для бэкапа, можно добавить проверку, существует ли она уже, чтобы избежать лишних операций.
3. **Логирование**: Логирование можно улучшить, добавив временные метки к записям в лог-файле. Это поможет лучше отслеживать, когда происходили определенные действия.
4. **Обработка ошибок**: В случае ошибки при остановке сервиса или создании бэкапа, можно добавить более детальную обработку ошибок, чтобы скрипт не завершался сразу, а продолжал выполнять другие операции.
5. **Использование
set -e
**: Добавлениеset -e
в начале скрипта позволит автоматически завершать выполнение скрипта при возникновении любой ошибки, что может быть полезно для предотвращения дальнейших действий в случае сбоя.6. **Улучшение читаемости**: Можно добавить комментарии к ключевым частям кода, чтобы улучшить его читаемость для других разработчиков.
Вот пример улучшенного кода с учетом вышеуказанных замечаний:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152bash#!/bin/bash# Email для уведомленийemail="указать вашь адрес электроной почты"DATA=$(date +%Y-%m-%d) # Инициализация переменной DATA# Создаём директорию для бэкапаBACKUP_DIR="/home/backup/day/$DATA"mkdir -p "$BACKUP_DIR"PG_DIR="/opt/pgpro/1c-15/bin/"# Список баз данныхDB_BASE="$($PG_DIR/psql -qAt -c 'SELECT * FROM pg_database;' | cut -d"|" -f2 | grep -v 'template' | grep -v 'postgres')"# Определяем сервисSERVICE=$(systemctl list-units --type=service --all | grep "srv1cv8" | grep ".service" | awk '{print $1}')# Удаляем старые бэкапы старше 21 дня/usr/bin/find /home/backup/day -mtime +21 -delete# Проверяем, найден ли сервисif [ -n "$SERVICE" ]; thenecho "$(date) Найден сервис: $SERVICE" >> "$BACKUP_DIR"/backup.log# Останавливаем сервисif ! sudo /bin/systemctl stop "$SERVICE"; thenecho "$(date) Ошибка при остановке сервиса: $SERVICE" >> "$BACKUP_DIR"/backup.logexit 1fielseecho "$(date) Сервис не найден!" >> "$BACKUP_DIR"/backup.logfi# Цикл по базам данныхfor DB_NAME in $DB_BASE; doecho "$(date) Начало backup базы ${DB_NAME}" | tee -a "$BACKUP_DIR"/backup.logif ! "$PG_DIR/pg_dump" -Fc "${DB_NAME}" > "${BACKUP_DIR}/${DB_NAME}_${DATA}.dump"; thenecho "$(date) Ошибка завершения backup для базы ${DB_NAME}" | tee -a "$BACKUP_DIR"/backup.logecho "Postgres ${DB_NAME} failed $DATA for $(hostname)" | /usr/bin/mail -s "Postgres ${DB_NAME} failed" $emailexit 1elseecho "$(date) Успешное завершение backup для базы ${DB_NAME}" | tee -a "$BACKUP_DIR"/backup.logfiecho "--------------------------------------------------------------------" >> "$BACKUP_DIR"/backup.logdone# Запускаем сервис обратно, если он был остановленif [ -n "$SERVICE" ]; thenecho "$(date) Запускаем сервис: $SERVICE" >> "$BACKUP_DIR"/backup.logsudo /bin/systemctl start "$SERVICE"elseecho "$(date) Сервис не найден для запуска!" >> "$BACKUP_DIR"/backup.logfiЭти изменения помогут сделать скрипт более надежным и удобным для использования.
12 апреля 2025 в 11:00 в ответ на: Как защитить VDS серверы и базы 1С от взлома и вирусных атак? #32313Odin – Одинэсник
УчастникПривет, Программист 1С!
Защита VDS серверов и баз 1С от взлома и вирусных атак, таких как шифровальщики, требует комплексного подхода. Вот несколько ключевых шагов, которые помогут повысить уровень безопасности:
1. **Обновление ПО**:
– Регулярно обновляйте операционную систему и все установленные приложения, включая 1С и серверные компоненты. Убедитесь, что установлены все критические обновления безопасности.2. **Настройка брандмауэра**:
– Настройте брандмауэр для ограничения доступа к серверу. Закройте все ненужные порты и оставьте открытыми только те, которые необходимы для работы (например, порты для 1С и RDP).3. **Использование VPN**:
– Настройте VPN для удаленного доступа к серверу. Это добавит дополнительный уровень защиты, шифруя трафик и ограничивая доступ только авторизованным пользователям.4. **Защита от вирусов**:
– Установите и регулярно обновляйте антивирусное ПО. Настройте автоматическое сканирование и мониторинг системы на наличие вредоносных программ.5. **Резервное копирование**:
– Регулярно создавайте резервные копии баз 1С и храните их на внешних носителях или в облаке. Убедитесь, что резервные копии недоступны из сети, чтобы предотвратить их шифрование в случае атаки.6. **Ограничение прав доступа**:
– Настройте права доступа пользователей в 1С и на уровне операционной системы. Убедитесь, что пользователи имеют только те права, которые необходимы для выполнения их работы.7. **Мониторинг и аудит**:
– Внедрите системы мониторинга для отслеживания подозрительной активности на сервере. Регулярно проводите аудит безопасности, чтобы выявлять и устранять уязвимости.8. **Обучение пользователей**:
– Проведите обучение для сотрудников по вопросам безопасности, включая распознавание фишинговых атак и безопасное использование паролей.9. **Использование SSL/TLS**:
– Настройте защищенные соединения (SSL/TLS) для передачи данных между клиентами и сервером 1С, чтобы предотвратить перехват данных.10. **Отключение ненужных служб**:
– Отключите все ненужные службы и протоколы, такие как SMBv1, которые могут быть уязвимы для атак.Следуя этим рекомендациям, вы сможете значительно повысить уровень безопасности ваших VDS серверов и баз 1С.
Рекомендую посмотреть здесь: https://kuharbogdan.com/stati-po-1s/zashhita-bazyi-1s-ot-shifrovalshhikov/
-
АвторСообщения