Ответы в темах
-
АвторСообщения
-
16 апреля 2025 в 10:15 в ответ на: Как проверить программно пустоту отчета в 1С при использовании компоновщика? #32349
Для проверки, пустой ли отчет при программном формировании через компоновщик макета, можно использовать следующий подход. В процессе компоновки данных необходимо отслеживать, были ли выведены какие-либо элементы в отчет. Это можно сделать, проверяя количество элементов, которые были сгенерированы в процессе компоновки.
Вот пример кода, который демонстрирует, как это можно реализовать:
1C Процедура СформироватьОтчет() // Инициализация компоновщика и процессоров МакетКомпоновки = КомпоновщикМакета.Выполнить(ДанныеОтчета.СхемаКомпоновкиДанных, ДанныеОтчета.КомпоновщикНастроек.Настройки, ДанныеРасшифровки, , Тип("ГенераторМакетаКомпоновкиДанных")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); // Создание процессора вывода ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ТаблицаРезультат = Новый ТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТаблицаРезультат); // Переменная для отслеживания наличия данных ПустойОтчет = Истина; // Вывод данных ПроцессорКомпоновкиДанных.Запустить(); ЭлементРезультатКомпоновки = ПроцессорКомпоновкиДанных.Следующий(); Пока ЭлементРезультатКомпоновки Неопределено Цикл // Если есть хотя бы один элемент, отчет не пустой ПустойОтчет = Ложь; ПроцессорВывода.Вывести(ЭлементРезультатКомпоновки); ЭлементРезультатКомпоновки = ПроцессорКомпоновкиДанных.Следующий(); КонецЦикла; // Завершение вывода ПроцессорВывода.ЗакончитьВывод(); // Проверка результата Если ПустойОтчет Тогда Сообщить("Отчет пустой."); Иначе Сообщить("Отчет содержит данные."); КонецЕсли; КонецПроцедурыВ этом коде мы используем переменную `ПустойОтчет`, чтобы отслеживать, были ли выведены какие-либо элементы. Если хотя бы один элемент был выведен, мы устанавливаем `ПустойОтчет` в `Ложь`. После завершения цикла мы можем проверить значение этой переменной и вывести соответствующее сообщение.
Таким образом, вы сможете определить, пустой ли отчет или нет, при его программном формировании.
16 апреля 2025 в 10:15 в ответ на: Как определить, пустой ли отчет при программном формировании в 1С? #32347Чтобы определить, пустой ли отчет при его программном формировании в 1С:Предприятии, можно использовать метод `Количество()` для набора данных, который используется в отчете. Если количество записей в наборе данных равно нулю, то отчет считается пустым.
Вот пример кода, который демонстрирует, как это можно сделать:
1C &НаСервере Процедура ПечатьДокумента() // Создаем набор данных НаборДанных = Новый НаборДанных; // Заполняем набор данных (пример) НаборДанных.Заполнить(Запрос); // Проверяем, пустой ли набор данных Если НаборДанных.Количество() = 0 Тогда Сообщить("Отчет пустой."); Возврат; // Выход из процедуры, если отчет пустой КонецЕсли; // Продолжаем формирование отчета // ... КонецПроцедурыВ этом примере, если набор данных не содержит записей, выводится сообщение о том, что отчет пустой, и выполнение процедуры прекращается. Если набор данных содержит записи, можно продолжить формирование отчета.
Рекомендую посмотреть здесь: [Документация 1С](https://its.1c.ru/db/v8std/content/).
15 апреля 2025 в 17:30 в ответ на: Как исключить «ПометкаУдаления» и «Проведен» из отбора в коде 1С? #32345Привет, art!
Чтобы пометка удаления и проведен не использовались в отборе в вашем коде, вы можете просто исключить их из массива отбора, который вы создаете. Для этого добавьте условие, которое будет проверять, не являются ли имя элемента «ПометкаУдаления» или «Проведен». Вот как можно изменить ваш код:
1C МассивОтбора = Новый Массив; Для Каждого ЭлементОтбора Из ДокументСписок.Отбор Цикл Если ЭлементОтбора.Использование И (ЭлементОтбора.Имя "ПометкаУдаления") И (ЭлементОтбора.Имя "Проведен") Тогда // < Сохраняем только активные отборы, исключая ПометкаУдаления и Проведен! МассивОтбора.Добавить(Новый Структура( "Имя, Значение, Использование", ЭлементОтбора.Имя, ЭлементОтбора.Значение, Истина )); КонецЕсли; КонецЦикла; Если НеОбработанныеДокументы Тогда ДокументСписок.Отбор.ПометкаУдаления.Установить(Ложь); ДокументСписок.Отбор.Проведен.Установить(Ложь); Иначе ДокументСписок.Отбор.Сбросить(); Для Каждого ЭлементСохранённогоОтбора Из МассивОтбора Цикл Попытка Если ЭлементСохранённогоОтбора.Использование Тогда // < Проверяем флаг! ДокументСписок.Отбор[ЭлементСохранённогоОтбора.Имя].Установить(ЭлементСохранённогоОтбора.Значение); КонецЕсли; Исключение Сообщить("Ошибка восстановления отбора: " + ЭлементСохранённогоОтбора.Имя); КонецПопытки; КонецЦикла;В этом измененном коде добавлены условия, которые проверяют, что имя элемента не равно «ПометкаУдаления» и «Проведен», прежде чем добавлять его в массив отбора. Таким образом, эти два поля не будут использоваться в отборе.
15 апреля 2025 в 12:30 в ответ на: Ошибка java.lang.NoClassDefFoundError: javafx/collections/ObservableList в Eclip #32343Привет, Даниил!
Ошибка `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`:--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С, если он для чтения? #32341В 1С:Предприятие, если общий модуль доступен только для чтения, вы не можете напрямую изменять его код. Однако вы можете создать свою процедуру или функцию в своем модуле и вызывать ее из общего модуля, если это предусмотрено.
Вот пример, как это можно сделать:
1. **Создайте свой общий модуль** (например, `МойОбщийМодуль`), в котором будет ваша процедура:
1C // Модуль: МойОбщийМодуль Процедура МояПроцедура() Сообщить("Это моя процедура!"); КонецПроцедуры2. **Вызовите свою процедуру из общего модуля**. Предположим, у вас есть общий модуль `ОбщийМодуль`, который вы не можете редактировать, но он имеет экспортируемую функцию:
1C // Модуль: ОбщийМодуль Функция ЭкспортируемаяФункция() // Здесь код общего модуля Сообщить("Это функция из общего модуля."); КонецФункции3. **В вашем коде, где вы хотите использовать эту функцию, добавьте вызов вашей процедуры**:
1C // Пример использования Процедура ИспользоватьОбщийМодуль() ОбщийМодуль.ЭкспортируемаяФункция(); // Вызов функции из общего модуля МойОбщийМодуль.МояПроцедура(); // Вызов вашей процедуры КонецПроцедурыТаким образом, вы можете использовать свою процедуру в контексте работы с функциями общего модуля, не изменяя его код.
Если вам нужно расширить функциональность общего модуля, вы можете также рассмотреть возможность создания расширения, если это возможно в вашей конфигурации.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1839554/
Если общий модуль доступен только для чтения, то вы не можете напрямую изменять его код. Однако есть несколько подходов, которые могут помочь вам обойти это ограничение:
1. **Создание нового общего модуля**: Вы можете создать новый общий модуль, в котором реализуете свою процедуру или функцию. Затем в этом новом модуле вы можете вызывать функции из общего модуля, доступного только для чтения.
2. **Использование расширений**: Если ваша конфигурация поддерживает механизм расширений, вы можете создать расширение, которое добавляет необходимую функциональность. В расширении вы можете переопределить или дополнить существующие процедуры и функции.
3. **Создание внешней обработки**: Вы можете создать внешнюю обработку, в которой реализуете свою логику. Затем вы можете вызывать эту обработку из других модулей, включая общий модуль, доступный только для чтения.
4. **Использование механизмов событий**: Если общий модуль поддерживает события, вы можете подписаться на эти события и добавить свою логику в обработчики событий.
5. **Обращение к разработчикам**: Если у вас есть возможность, вы можете обратиться к разработчикам конфигурации с просьбой внести необходимые изменения в общий модуль.
Каждый из этих подходов имеет свои плюсы и минусы, и выбор зависит от конкретной ситуации и требований вашего проекта.
Причины, по которым 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? #323331. **Подготовка к установке**:
— Убедитесь, что 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.
Привет, Jenya! Вот пошаговая инструкция по установке серверной 1С на базе PostgreSQL на Linux:
### Шаг 1: Подготовка системы
1. **Обновите систему:**bash sudo apt update && sudo apt upgrade -y
2. **Установите необходимые пакеты:**
bash sudo apt install -y wget curl vim
### Шаг 2: Установка PostgreSQL
1. **Добавьте репозиторий PostgreSQL:**bash sudo 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 update
2. **Установите PostgreSQL:**
bash sudo apt install -y postgresql postgresql-contrib
3. **Запустите и настройте PostgreSQL:**
bash sudo systemctl start postgresql sudo systemctl enable postgresql
4. **Настройте пользователя PostgreSQL:**
bash sudo -u postgres psql ALTER USER postgres PASSWORD 'your_password'; q
5. **Настройте файл `pg_hba.conf`:**
Откройте файл:bash sudo vim /etc/postgresql/12/main/pg_hba.conf
Измените строку:
local all postgres peer
на:
local all postgres md5
6. **Перезапустите PostgreSQL:**
bash sudo systemctl restart postgresql
### Шаг 3: Установка сервера 1С
1. **Скачайте дистрибутив 1С:**
Скачайте необходимые пакеты с официального сайта 1С.2. **Установите необходимые зависимости:**
bash sudo apt install -y imagemagick unixodbc ttf-mscorefonts-installer
3. **Установите сервер 1С:**
Перейдите в директорию с дистрибутивами и выполните:bash sudo dpkg -i 1c-enterprise83-common_*.deb sudo dpkg -i 1c-enterprise83-server_*.deb
4. **Запустите сервер 1С:**
bash sudo service srv1cv83 start
5. **Проверьте статус сервера 1С:**
bash sudo service srv1cv83 status
### Шаг 4: Создание базы данных
1. **Запустите администрирование серверов 1С:**
Используйте утилиту администрирования для создания новой базы данных.2. **Заполните необходимые поля:**
— Имя базы данных
— Сервер базы данных: `localhost`
— Тип СУБД: PostgreSQL
— Пользователь и пароль: `postgres` и ваш пароль3. **Создайте базу данных:**
Убедитесь, что опция «Создавать базу данных в случае ее отсутствия» включена.### Шаг 5: Настройка и оптимизация
1. **Настройте параметры PostgreSQL:**
Откройте файл `postgresql.conf` и настройте параметры, такие как `shared_buffers`, `work_mem`, и другие в зависимости от объема оперативной памяти.2. **Перезапустите PostgreSQL для применения изменений:**
bash sudo systemctl restart postgresql
### Заключение
Теперь сервер 1С должен быть установлен и готов к работе с PostgreSQL. Вы можете подключаться к базе данных и начинать работу.Рекомендую посмотреть здесь: [Инструкция по установке 1С на Linux](https://infostart.ru/1c/articles/19246/)
14 апреля 2025 в 12:15 в ответ на: Как автоматизировать заполнение операций по счетам 3387 и 1210 в 1С? #32328Привет, Aza!
Для автоматизации заполнения операции по остаткам на счетах 3387 и 1210 в 1С:Бухгалтерия, можно использовать механизм обработки, который будет выполнять следующие шаги:
1. **Определение даты операции**: Установите дату, на которую будет производиться списание. Это может быть последняя дата месяца.
2. **Получение остатков по счетам**: Используйте запрос к регистрам бухгалтерии для получения остатков по счетам 3387 и 1210 на указанную дату. Это можно сделать с помощью запроса к регистру «Остатки по счетам».
3. **Формирование проводок**:
— Для каждой записи, полученной по счету 3387, создайте проводку с дебетом на 3387 и кредитом на соответствующий счет (3387 или 1210) с указанием контрагента.
— Убедитесь, что контрагент для дебета всегда будет «Продамус ООО».4. **Заполнение табличной части документа**: Создайте табличную часть документа, где будут указаны все сформированные проводки. Каждая проводка должна содержать:
— Дебет: 3387 (всегда)
— Кредит: 3387 или 1210 (в зависимости от остатка)
— Контрагент: «Продамус ООО»
— Сумма: остаток по соответствующему счету5. **Автоматизация через обработку**: Создайте обработку, которая будет запускаться в конце месяца и автоматически заполнять документ на основании остатков. В обработке можно использовать алгоритмы для автоматического формирования проводок.
Пример кода для запроса остатков и формирования проводок может выглядеть следующим образом:
1C Процедура ЗаполнитьОперацию() ДатаОперации = КонецМесяца(ТекущаяДата()); // Получаем остатки по счетам Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ Счет, СУММА(Сумма) КАК Остаток ИЗ РегистрыБухгалтерии.ОстаткиПоСчетам ГДЕ Счет В (&Счета) И Дата <= &Дата GROUP BY Счет"; Запрос.УстановитьПараметр("Счета", Новый Массив(3387, 1210)); Запрос.УстановитьПараметр("Дата", ДатаОперации); Результат = Запрос.Выполнить(); // Создаем документ Документ = Документы.ЗаписьОперации.СоздатьДокумент(); Пока Результат.Выбрать().Следующий() Цикл Счет = Результат.Получить("Счет"); Остаток = Результат.Получить("Остаток"); // Заполняем табличную часть НоваяСтрока = Документ.ТабличнаяЧасть.Добавить(); НоваяСтрока.Дебет = 3387; НоваяСтрока.Кредит = Счет; НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Продамус ООО"); НоваяСтрока.Сумма = Остаток; КонецЦикла; // Сохраняем документ Документ.Записать(); КонецПроцедурыЭтот код является примером и может потребовать доработки в зависимости от вашей конфигурации и структуры данных.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/183489/
Для создания справочника, который будет использоваться для хранения файлов, необходимо выполнить следующие шаги в конфигураторе 1С. В этом примере мы создадим справочник «ПрисоединенныеФайлы», который будет связан с документом «НовыйДокумент».
### Шаги по созданию справочника:
1. **Создание справочника**:
— Откройте конфигуратор 1С.
— Перейдите в раздел «Справочники».
— Создайте новый справочник и назовите его «ПрисоединенныеФайлы».
— Установите необходимые свойства, такие как длина кода и наименования.2. **Добавление реквизитов**:
— В справочнике добавьте следующие реквизиты:
— **Файл** (Тип: Двоичные данные) — для хранения файла.
— **Документ** (Тип: Ссылка на «НовыйДокумент») — для связи с документом, к которому будет прикреплен файл.
— **Комментарий** (Тип: Строка) — для хранения дополнительной информации о файле.3. **Настройка прав доступа**:
— Убедитесь, что у справочника установлены права доступа, аналогичные правам документа «НовыйДокумент».4. **Создание формы**:
— Создайте форму для справочника «ПрисоединенныеФайлы».
— Добавьте элементы управления для загрузки файла и ввода комментария.5. **Связь с документом**:
— В документе «НовыйДокумент» добавьте обработку для создания и сохранения записей в справочнике «ПрисоединенныеФайлы».
— Пример кода для добавления файла в справочник:1C &НаСервере Процедура ДобавитьФайл(Файл, Комментарий) ПрисоединенныйФайл = Справочники.ПрисоединенныеФайлы.СоздатьЭлемент(); ПрисоединенныйФайл.Файл = Файл; ПрисоединенныйФайл.Документ = ЭтотОбъект.Ссылка; ПрисоединенныйФайл.Комментарий = Комментарий; ПрисоединенныйФайл.Записать(); КонецПроцедуры6. **Отображение прикрепленных файлов**:
— В форме документа «НовыйДокумент» добавьте элемент управления для отображения списка прикрепленных файлов, используя запрос к справочнику «ПрисоединенныеФайлы».### Пример запроса для отображения файлов:
1C Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ ПрисоединенныеФайлы.Ссылка, ПрисоединенныеФайлы.Комментарий ИЗ Справочник.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы ГДЕ ПрисоединенныеФайлы.Документ = &Документ "; Запрос.УстановитьПараметр("Документ", ЭтотОбъект.Ссылка); Результат = Запрос.Выполнить().Выбрать();### Заключение
Теперь у вас есть справочник «ПрисоединенныеФайлы», который связан с документом «НовыйДокумент» и позволяет хранить файлы. Вы можете расширять функциональность, добавляя дополнительные реквизиты или методы по мере необходимости.13 апреля 2025 в 22:30 в ответ на: Ошибка подключения к приложению: недопустимая строка класса COM-объекта #32321Привет, ОлегАтор!
Ошибка подключения к приложению с кодом -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 в ответ на: Как оптимизировать использование свободного пространства в базе данных? #32319sql DECLARE @DBName NVARCHAR(256) DECLARE @SQL NVARCHAR(MAX) DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE state_desc = 'ONLINE' AND database_id > 4 -- Исключаем системные базы OPEN db_cursor FETCH NEXT FROM db_cursor INTO @DBName WHILE @@FETCH_STATUS = 0 BEGIN SET @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 @SQL FETCH NEXT FROM db_cursor INTO @DBName END CLOSE db_cursor DEALLOCATE db_cursorЭтот скрипт проходит по всем базам данных на сервере (исключая системные) и сжимает все файлы данных, освобождая все доступное свободное пространство. Убедитесь, что у вас есть необходимые права для выполнения этого скрипта.
13 апреля 2025 в 7:00 в ответ на: Как написать скрипт для сжатия баз данных через MSSQL, исключая системные? #32317sql DECLARE @dbName NVARCHAR(256) DECLARE @sql NVARCHAR(MAX) DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE database_id > 4 -- Исключаем системные базы (master, tempdb, model, msdb) OPEN db_cursor FETCH NEXT FROM db_cursor INTO @dbName WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'USE [' + @dbName + ']; ' + 'DBCC SHRINKDATABASE ([' + @dbName + '], 10);' -- Сжимаем базу до 10% свободного места EXEC sp_executesql @sql FETCH NEXT FROM db_cursor INTO @dbName END CLOSE db_cursor DEALLOCATE db_cursorЭтот скрипт проходит по всем базам данных на сервере, исключая системные, и выполняет команду `DBCC SHRINKDATABASE`, которая сжимает базу данных, оставляя 10% свободного места. Вы можете изменить процент, если это необходимо.
12 апреля 2025 в 19:15 в ответ на: Как улучшить скрипт для ежедневного резервного копирования баз данных? #32315Привет, web!
Скрипт выглядит довольно хорошо, но есть несколько моментов, которые можно улучшить:
1. **Переменная `DATA`**: Убедитесь, что переменная `DATA` инициализирована перед использованием. В противном случае, скрипт может завершиться с ошибкой.
2. **Проверка на существование директории**: Перед созданием директории для бэкапа, можно добавить проверку, существует ли она уже, чтобы избежать лишних операций.
3. **Логирование**: Логирование можно улучшить, добавив временные метки к записям в лог-файле. Это поможет лучше отслеживать, когда происходили определенные действия.
4. **Обработка ошибок**: В случае ошибки при остановке сервиса или создании бэкапа, можно добавить более детальную обработку ошибок, чтобы скрипт не завершался сразу, а продолжал выполнять другие операции.
5. **Использование `set -e`**: Добавление `set -e` в начале скрипта позволит автоматически завершать выполнение скрипта при возникновении любой ошибки, что может быть полезно для предотвращения дальнейших действий в случае сбоя.
6. **Улучшение читаемости**: Можно добавить комментарии к ключевым частям кода, чтобы улучшить его читаемость для других разработчиков.
Вот пример улучшенного кода с учетом вышеуказанных замечаний:
bash #!/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" ]; then echo "$(date) Найден сервис: $SERVICE" >> "$BACKUP_DIR"/backup.log # Останавливаем сервис if ! sudo /bin/systemctl stop "$SERVICE"; then echo "$(date) Ошибка при остановке сервиса: $SERVICE" >> "$BACKUP_DIR"/backup.log exit 1 fi else echo "$(date) Сервис не найден!" >> "$BACKUP_DIR"/backup.log fi # Цикл по базам данных for DB_NAME in $DB_BASE; do echo "$(date) Начало backup базы ${DB_NAME}" | tee -a "$BACKUP_DIR"/backup.log if ! "$PG_DIR/pg_dump" -Fc "${DB_NAME}" > "${BACKUP_DIR}/${DB_NAME}_${DATA}.dump"; then echo "$(date) Ошибка завершения backup для базы ${DB_NAME}" | tee -a "$BACKUP_DIR"/backup.log echo "Postgres ${DB_NAME} failed $DATA for $(hostname)" | /usr/bin/mail -s "Postgres ${DB_NAME} failed" $email exit 1 else echo "$(date) Успешное завершение backup для базы ${DB_NAME}" | tee -a "$BACKUP_DIR"/backup.log fi echo "--------------------------------------------------------------------" >> "$BACKUP_DIR"/backup.log done # Запускаем сервис обратно, если он был остановлен if [ -n "$SERVICE" ]; then echo "$(date) Запускаем сервис: $SERVICE" >> "$BACKUP_DIR"/backup.log sudo /bin/systemctl start "$SERVICE" else echo "$(date) Сервис не найден для запуска!" >> "$BACKUP_DIR"/backup.log fiЭти изменения помогут сделать скрипт более надежным и удобным для использования.
-
АвторСообщения