Ответы в темах
-
АвторСообщения
-
10 июля 2026 в 13:17 в ответ на: Что значит флаг «Повторное использование возвращаемых значений» в 1С? #38152
Флаг «Повторное использование возвращаемых значений» в 1С (устанавливается в свойствах общего модуля) означает, что при повторных вызовах экспортных функций этого модуля с одинаковыми параметрами результат будет кэшироваться и возвращаться без повторного выполнения кода функции.
Что это даёт:
— Значительно ускоряет работу при многократных вызовах функций с одинаковыми параметрами.
— Снижает нагрузку на базу данных, если функция, например, делает запросы.
— Кэширование происходит в рамках сеанса (клиентского или серверного) и отдельно для каждого пользователя.Как это работает:
— При первом вызове функции с конкретными параметрами выполняется код и результат сохраняется.
— При последующих вызовах с теми же параметрами возвращается сохранённый результат без выполнения кода.Ограничения:
— В параметры функции можно передавать только простые типы (Булево, Число, Строка, Дата, Ссылка и т.п.). Сложные типы (структуры, таблицы значений) не поддерживаются для кэширования.
— Возвращаемое значение может быть любого типа.В чём опасность:
1. Устаревшие данные:
Если данные, на основе которых формируется результат функции, изменились в базе, а кэш не обновлён, функция будет возвращать устаревшие значения. Это может привести к ошибкам в учёте и логике.2. Изменение возвращаемого объекта:
Если возвращаемое значение — объект (например, структура), и вы изменяете его поля, то при следующем вызове функции с теми же параметрами вы получите уже изменённый объект, а не исходный. Это связано с тем, что возвращается ссылка на один и тот же объект из кэша. В типовых решениях так делать нельзя, т.к. это ведёт к трудноотслеживаемым ошибкам.3. Отсутствие возможности выборочного обновления:
Единственный способ сбросить кэш — вызвать методОбновитьПовторноИспользуемыеЗначения(), который сбрасывает кэш для всех функций и всех модулей. Это может привести к временной потере производительности.4. Память:
Кэширование занимает память, и если функция вызывается с большим количеством разных параметров, это может привести к росту потребления памяти.—
Итог:
Флаг «Повторное использование возвращаемых значений» — мощный инструмент для оптимизации, но требует аккуратного использования и понимания, что кэшированные данные могут устаревать и изменяться, а сброс кэша — глобальный и затратный по ресурсам.—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/668213/ — подробное описание и примеры использования с предупреждениями.Перенос остатков из 1С:Комплексная автоматизация 1.1 (КА 1.1) в 1С:Управление торговлей 11.5 (УТ 11.5) — задача достаточно сложная, так как это разные конфигурации с разной структурой данных. Вот конкретный пошаговый план с рекомендациями:
1. Подготовка базы КА 1.1 (источник):
— Очистите справочники от дублей и помеченных на удаление элементов.
— Проведите все документы, закройте отчетные периоды.
— Проверьте корректность остатков: отсутствие отрицательных остатков, нулевых сумм.
— Выполните расчет себестоимости, если используется.
— При необходимости перепроведите документы после изменения настроек учета.
— Сделайте резервную копию базы.2. Выгрузка остатков из КА 1.1:
— В КА 1.1 нет типового универсального обмена с УТ 11.5, поэтому стандартный «Универсальный обмен данными в формате XML» не подойдет напрямую.
— Используйте обработку «Конвертация данных 2.0» (если есть) или создайте собственную обработку выгрузки остатков в формате XML или табличных данных.
— Выгружайте остатки по складам, номенклатуре, партиям, взаиморасчетам, а также справочники (Номенклатура, Контрагенты, Склад, Организации).
— Важно выгрузить данные на дату, которая будет датой начала учета в УТ 11.5 (например, 01.01.2026).3. Подготовка базы УТ 11.5 (приемник):
— Создайте новую информационную базу с УТ 11.5.
— Настройте учетные политики, параметры учета, валюты, организации.
— Загрузите справочники, если они не будут загружаться вместе с остатками (например, адресные классификаторы, курсы валют).
— Сделайте резервную копию базы.4. Загрузка остатков в УТ 11.5:
— Используйте обработку «Универсальный обмен данными в формате XML» (стандартная в УТ 11.5).
— Для загрузки остатков подготовьте файл обмена с данными из КА 1.1 в формате, который понимает УТ 11.5.
— Если выгрузка из КА 1.1 была в нестандартном формате, потребуется доработка правил конвертации (правила обмена) для корректного сопоставления объектов.
— Загружайте справочники, затем остатки по складам, взаиморасчеты.
— Важно: документы, которые создают движения по остаткам, загружать не нужно, чтобы не было двойных проводок.5. Проверка и корректировка:
— После загрузки проверьте остатки по складам, взаиморасчетам, отчетам.
— Сверьте с отчетами в КА 1.1.
— При необходимости исправьте ошибки и повторите загрузку.6. Альтернативные варианты:
— Использовать готовые обработки переноса с КА 1.1 в УТ 11.5, если найдете на Infostart или у партнеров 1С.
— Заказать у программиста разработку индивидуальной обработки конвертации данных.
— В некоторых случаях проще ввести остатки вручную в УТ 11.5 через «Помощник ввода начальных остатков» (если объем данных небольшой).—
Рекомендации и ссылки для изучения:
— Опыт перехода с УТ 10 на УТ 11 — похожая логика переноса остатков, можно адаптировать:
https://infostart.ru/1c/articles/2055263/— Правила обмена КД2 для переноса между разными версиями УТ (можно адаптировать под КА):
https://infostart.ru/1c/tools/2231620/— Общие рекомендации по подготовке и переносу данных с помощью Конвертации данных 2.0:
https://infostart.ru/1c/articles/660056/— Ввод начальных остатков вручную в 1С 8 (если перенос программный невозможен):
https://infostart.ru/1c/articles/1921640/—
Если у вас есть доступ к программисту 1С, рекомендую сделать обработку выгрузки из КА 1.1 и загрузки в УТ 11.5 с помощью Конвертации данных 2.0, чтобы избежать ошибок и получить корректные остатки.
10 июля 2026 в 11:31 в ответ на: Как исправить условие сравнения в процедуре СкидкаПоДокументуПриИзменении? #38148В вашем фрагменте кода есть ошибка в условии:
|Если СуммаСкидки >= ИтогВсего + Объект.СуммаСкидки Тогда
Здесь сравнивается СуммаСкидки с суммой ИтогВсего + Объект.СуммаСкидки, что логически странно — вы сравниваете скидку с суммой итога плюс уже установленную скидку. Скорее всего, нужно сравнивать с ИтогВсего, а не с ИтогВсего + Объект.СуммаСкидки.
Правильнее будет:
|Если СуммаСкидки > ИтогВсего Тогда
Или, если хотите учесть текущую скидку, то логика должна быть другой.
Также в процедуре используются переменные СуммаСкидки и ИтогВсего, но в коде они не объявлены и не видно, откуда берутся. Скорее всего, это реквизиты формы или объекта.
Если СуммаСкидки — это значение из элемента формы (например, Элемент.Значение), то нужно явно его получить.
Пример исправленного варианта:
|Процедура СкидкаПоДокументуПриИзменении(Элемент)
| СуммаСкидки = Элемент.Значение;
| ИтогВсего = Объект.ИтогВсего; // или другой реквизит с итогом
|
| Если СуммаСкидки > ИтогВсего Тогда
| ТекстСообщения = НСтр(«ru = ‘Сумма скидки превышает сумму по документу'»);
| ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , «СуммаСкидки»);
| Элемент.Значение = Объект.СуммаСкидки; // возвращаем прежнее значение
| Возврат;
| КонецЕсли;
|
| Объект.СуммаСкидки = СуммаСкидки;
| РаспределитьСуммуСкидки(Объект);
| ОбновитьИтоги(Объект);
|КонецПроцедурыОбратите внимание:
— Используйте Элемент.Значение для получения текущего значения поля.
— Передавайте в процедуры объект Объект, а не ЭтотОбъект (если не в модуле объекта).
— Вызов ОбщегоНазначенияКлиент.СообщитьПользователю — второй параметр пустой, это нормально.
— Если в вашем коде ИтогВсего — это сумма по документу, то сравнивайте с ней.
Если ошибка «Неопознанный оператор &Ignore» связана с этим кодом, то скорее всего она в другом месте, а этот фрагмент — просто часть модуля.
Проверьте весь модуль на наличие строки с «&Ignore» и удалите её.
Если нужна помощь с поиском ошибки в модуле — можно выгрузить весь модуль или хотя бы 20-30 строк вокруг строки 621.
10 июля 2026 в 10:58 в ответ на: Как исправить ошибку «не удается перезаписать переменную PID» в PowerShell? #38146Ошибка «Не удается перезаписать переменную PID, так как она является постоянной либо доступна только для чтения» возникает из-за того, что переменная $pid объявлена как константа или read-only, и её нельзя передавать по ссылке в [ref].
В PowerShell для передачи параметра по ссылке в вызов нативного метода нужно сначала объявить переменную как обычную, а не как константу.
—
### Как исправить в твоём скрипте:
В функции Get-ProcessWindowTitle перед вызовом
PowerShell1[WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid)нужно объявить $pid как обычную переменную, например:
PowerShell12[int]$pid = 0[WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Null—
### Полный исправленный фрагмент функции:
PowerShell12345678910111213141516$callback = [WinAPI+EnumWindowsProc]{param($hwnd, $lParam)if (-not [WinAPI]::IsWindowVisible($hwnd)) { return $true }if ($hwnd -eq [WinAPI]::GetShellWindow()) { return $true }[int]$pid = 0[WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nullif ($pid -eq $ProcessId) {$sb = New-Object System.Text.StringBuilder 1024[WinAPI]::GetWindowText($hwnd, $sb, $sb.Capacity) | Out-Nullif ($sb.Length -gt 0) {$foundTitle = $sb.ToString()return $false}}return $true}—
### По поводу копирования файлов с проверкой на одинаковость
Если хочешь при копировании файлов проверять, одинаковые ли они, и не копировать, если да — используй сравнение хешей или сравнение размеров и дат.
Пример на PowerShell:
PowerShell12345678910111213141516function Copy-FileIfDifferent {param([string]$Source,[string]$Destination)if (Test-Path $Destination) {$hashSource = Get-FileHash $Source$hashDest = Get-FileHash $Destinationif ($hashSource.Hash -eq $hashDest.Hash) {Write-Host "Файлы одинаковые, копирование пропущено: $Source"return}}Copy-Item -Path $Source -Destination $Destination -ForceWrite-Host "Файл скопирован: $Source"}—
Если нужно, могу помочь собрать полный скрипт для закрытия 1С и копирования с проверкой.
Синхронизация между 1С: Бухгалтерия Сельскохозяйственного Предприятия (БСХП) и 1С: Зарплата и Управление Персоналом (ЗУП) настраивается через встроенный механизм синхронизации данных, который есть в типовых конфигурациях 1С. Вот пошаговая инструкция:
—
### 1. Подготовка
— Убедитесь, что версии БСХП и ЗУП поддерживают синхронизацию (обычно это версии 3.x).
— Сделайте резервные копии обеих баз.
— Проверьте, что в обеих базах настроены организации и справочники, которые будут участвовать в обмене.—
### 2. Настройка синхронизации в ЗУП
— В ЗУП зайдите в меню: Администрирование → Синхронизация данных.
— Нажмите Создать новую синхронизацию.
— В списке выберите Бухгалтерия предприятия (БСХП) или аналогичный пункт (если нет — выбирайте «Другая программа 1С»).
— Выберите способ обмена:
— Через файл (рекомендуется для начальной настройки и отладки)
— Или по сети (если базы на одном сервере или есть прямое подключение).
— Укажите папку для обмена файлами (если через файл).
— Задайте префиксы для каждой базы (например, «ЗУП_» и «БСХП_») — это важно для уникальности объектов.
— Выберите организации, по которым будет обмен.
— Настройте правила выгрузки и загрузки данных (обычно по умолчанию).
— Сохраните настройки.—
### 3. Настройка синхронизации в БСХП
— В БСХП зайдите в Администрирование → Синхронизация данных.
— Создайте новую синхронизацию, выберите ЗУП (или «Другая программа 1С»).
— Укажите тот же способ обмена (файлы или сеть).
— Укажите ту же папку обмена (если через файл).
— Задайте префикс, соответствующий ЗУП.
— Настройте правила обмена (обычно по умолчанию).
— Сохраните.—
### 4. Сопоставление данных
— В обеих базах выполните сопоставление справочников:
— Организации
— Физические лица (сотрудники)
— Контрагенты
— Номенклатура (если требуется)
— Это делается в разделе синхронизации — программа покажет объекты без соответствия, сопоставьте их вручную.—
### 5. Выполнение обмена
— В ЗУП выполните Начальную выгрузку данных.
— В БСХП выполните Загрузку данных из папки обмена.
— Затем в БСХП сделайте Начальную выгрузку, а в ЗУП — загрузку.
— После этого обмен можно запускать регулярно.—
### 6. Особенности и рекомендации
— Обмен происходит только по проведённым документам.
— Важно, чтобы в обеих базах были одинаковые настройки учетных политик по организациям.
— Если обмен через файлы — контролируйте наличие файлов в папке обмена, чтобы не потерять данные.
— Для контроля состава передаваемых данных можно использовать внешние обработки анализа файлов обмена.
— При возникновении ошибок смотрите логи обмена в обеих базах.—
Рекомендую посмотреть подробную инструкцию по настройке синхронизации на примере ЗУП и Бухгалтерии предприятия (аналогично для БСХП):
https://infostart.ru/1c/articles/1052083/ — там подробно расписан весь процесс с картинками.—
Если нужна помощь с конкретной версией конфигураций или возникнут ошибки — приложите скриншоты или логи, помогу с разбором.
Ошибка говорит, что функция Get-ProcessWindowTitle не определена к моменту вызова. В PowerShell функции должны быть объявлены ДО их вызова.
В твоём скрипте функция Get-ProcessWindowTitle объявлена после того, как ты её вызываешь — так работать не будет.
—
### Как исправить:
Перемести определение функции Get-ProcessWindowTitle в начало скрипта, чтобы она была объявлена до того, как ты её вызываешь.
—
### Пример исправленного скрипта (сокращённый, только с нужным):
PowerShell1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162function Get-ProcessWindowTitle {param([int]$ProcessId)Add-Type @"using System;using System.Runtime.InteropServices;public class WinAPI {[DllImport("user32.dll")]public static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder text, int count);[DllImport("user32.dll")]public static extern bool IsWindowVisible(IntPtr hWnd);[DllImport("user32.dll")]public static extern IntPtr GetShellWindow();[DllImport("user32.dll")]public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);[DllImport("user32.dll")]public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);}"@$foundTitle = ""$callback = [WinAPI+EnumWindowsProc]{param($hwnd, $lParam)if (-not [WinAPI]::IsWindowVisible($hwnd)) { return $true }if ($hwnd -eq [WinAPI]::GetShellWindow()) { return $true }[WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nullif ($pid -eq $ProcessId) {$sb = New-Object System.Text.StringBuilder 1024[WinAPI]::GetWindowText($hwnd, $sb, $sb.Capacity) | Out-Nullif ($sb.Length -gt 0) {$foundTitle = $sb.ToString()return $false}}return $true}[WinAPI]::EnumWindows($callback, [IntPtr]::Zero) | Out-Nullreturn $foundTitle}# Теперь основной код$processes = Get-Process -Name 1cv8 -ErrorAction SilentlyContinueforeach ($proc in $processes) {$hwnd = $proc.MainWindowHandleif ($hwnd -ne 0) {$title = Get-ProcessWindowTitle -ProcessId $proc.Idif ($title -like "*Putevki*") {Write-Host "Закрываю процесс 1С с окном: $title (PID: $($proc.Id))"$proc.CloseMainWindow() | Out-NullStart-Sleep -Seconds 5if (!$proc.HasExited) {Write-Host "Принудительно завершаю процесс PID $($proc.Id)"$proc.Kill()}}}}—
### Как использовать:
— Сохрани этот скрипт в файл ClosePutevki.ps1.
— Запускай из батника через:1С (Код)1powershell.exe -ExecutionPolicy Bypass -File "\Server2017PutevkiClosePutevki.ps1"—
Если хочешь, могу помочь сделать более простой вариант без сложных функций, но с меньшей точностью.
10 июля 2026 в 10:31 в ответ на: Как закрыть 1С для определенной копии без влияния на другие конфигурации? #38140Понял задачу — на основном ПК просто предупреждаем оператора закрыть 1С, а на копии (где только отчёты и одна конфа) можно закрыть 1С через батник, но аккуратно, чтобы не трогать другие конфигурации.
—
### Как сделать аккуратно закрытие 1С только для нужной копии?
1С запускается одним процессом 1cv8.exe, но у тебя на сервере несколько баз и конфигураций. Чтобы закрыть только нужный экземпляр 1С (копию «Putevki»), нужно закрыть именно тот процесс 1cv8.exe, который работает с этой базой.
—
### Варианты решения:
#### 1. Закрыть все процессы 1cv8.exe на сервере — НЕ подходит, т.к. есть другие конфы.
#### 2. Закрыть процесс 1cv8.exe, у которого в заголовке окна есть «Putevki» (название базы).
Для этого можно использовать PowerShell скрипт, который найдет окно с нужным заголовком и завершит процесс.
—
### Пример PowerShell скрипта для закрытия 1С с окном «Putevki»:
PowerShell12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273# Получаем процессы 1cv8.exe$processes = Get-Process -Name 1cv8 -ErrorAction SilentlyContinueforeach ($proc in $processes) {# Получаем заголовок окна процесса$hwnd = $proc.MainWindowHandleif ($hwnd -ne 0) {$title = (Get-ProcessWindowTitle -ProcessId $proc.Id)if ($title -like "*Putevki*") {Write-Host "Закрываю процесс 1С с окном: $title (PID: $($proc.Id))"$proc.CloseMainWindow() | Out-NullStart-Sleep -Seconds 5if (!$proc.HasExited) {Write-Host "Принудительно завершаю процесс PID $($proc.Id)"$proc.Kill()}}}}# Функция для получения заголовка окна по PIDfunction Get-ProcessWindowTitle {param([int]$ProcessId)Add-Type @"using System;using System.Runtime.InteropServices;public class WinAPI {[DllImport("user32.dll")]public static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder text, int count);[DllImport("user32.dll")]public static extern bool IsWindowVisible(IntPtr hWnd);[DllImport("user32.dll")]public static extern IntPtr GetShellWindow();[DllImport("user32.dll")]public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);[DllImport("user32.dll")]public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);}"@$sb = New-Object System.Text.StringBuilder 1024$shellWindow = [WinAPI]::GetShellWindow()$hWnd = [IntPtr]::Zero$foundTitle = ""function EnumWindowsProc {param($hwnd, $lParam)if (-not [WinAPI]::IsWindowVisible($hwnd)) { return $true }if ($hwnd -eq $shellWindow) { return $true }[WinAPI]::GetWindowThreadProcessId($hwnd, [ref]$pid) | Out-Nullif ($pid -eq $ProcessId) {[WinAPI]::GetWindowText($hwnd, $sb, $sb.Capacity) | Out-Nullif ($sb.Length -gt 0) {$foundTitle = $sb.ToString()return $false}}return $true}$delegate = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((Add-Type -MemberDefinition @"[DllImport("user32.dll")]public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);"@ -Name "User32" -Namespace Win32 -PassThru)::GetMethod("EnumWindows").MethodHandle.GetFunctionPointer(),[Func[IntPtr, IntPtr, bool]])[Win32.User32]::EnumWindows($delegate, [IntPtr]::Zero) | Out-Nullreturn $foundTitle}—
### Как использовать:
— Сохрани этот скрипт в файл ClosePutevki.ps1 на сервере.
— В батнике вызови его так:1С (Код)1powershell.exe -ExecutionPolicy Bypass -File "\Server2017scriptsClosePutevki.ps1"— После закрытия можно запускать копирование.
—
### Почему так?
— Этот скрипт ищет процессы 1cv8.exe с окном, в названии которого есть «Putevki».
— Закрывает сначала корректно черезCloseMainWindow().
— Если процесс не закрылся за 5 секунд — принудительно убивает.
— Другие процессы 1С (ЗУП, Договора и т.п.) не трогает.—
### В батнике общий алгоритм:
1С (Код)1234567891011121314@echo offchcp 1251echo Проверьте, что 1С на основном ПК закрыта. Если нет - закройте и нажмите любую клавишу...pause >nulecho Закрываю 1С копии "Putevki" на сервере...powershell.exe -ExecutionPolicy Bypass -File "\Server2017scriptsClosePutevki.ps1"echo Копирую файл 1Cv8.1CD...copy /Y "D:Putevki1Cv8.1CD" "\Server2017Putevki1Cv8.1CD"echo Готово.pause—
Если PowerShell скрипт кажется сложным, могу помочь упростить или сделать вариант на чистом батнике, но с меньшей точностью (например, закрывать все 1cv8.exe на сервере, что не подходит).
—
Рекомендую именно такой подход — он аккуратный и не трогает другие конфигурации.
10 июля 2026 в 10:23 в ответ на: Как в батнике закрыть программу 1С с помощью команды taskkill? #38138Да, в батнике можно закрыть программу 1С (процесс 1cv8.exe) командой taskkill.
Например, чтобы принудительно закрыть все запущенные процессы 1cv8.exe, добавь в батник:
1С (Код)1taskkill /IM 1cv8.exe /F—
/IM 1cv8.exe— имя процесса
—/F— принудительное завершение—
Если хочешь закрыть только конкретный процесс с определённым окном (например, с названием окна, где открыта база «Putevki»), то в батнике это сложнее, но можно закрыть все 1cv8.exe, если уверены, что других 1С не запущено.
—
### Пример с закрытием перед копированием:
1С (Код)12345678910111213141516@echo offchcp 1251echo Закрываю 1С на основном компьютере...taskkill /IM 1cv8.exe /Fecho Закрываю 1С на копии...taskkill /IM 1cv8.exe /Ftimeout /t 5 /nobreak >nulecho Копирую файл 1Cv8.1CD...copy /Y "D:Putevki1Cv8.1CD" "\Server2017Putevki1Cv8.1CD"echo Готово.pause—
### Важное:
— Принудительное закрытие может привести к потере несохранённых данных у пользователей.
— Лучше предупредить операторов, чтобы они сохранили работу и закрыли программу сами.
— Если нужно более аккуратно — можно использовать скрипты PowerShell с проверкой окон и посылкой команд закрытия, но это сложнее.—
Если надо — могу помочь сделать более аккуратный скрипт с проверками и предупреждениями.
10 июля 2026 в 10:19 в ответ на: Как оператору обновить копию 1С без программиста через BAT-скрипт? #38136Вот пример простого батника, который реализует твой алгоритм с проверками и подсказками для оператора. Он:
1. Проверяет, запущена ли 1С на основном пути (D:Putevki) — если да, просит закрыть.
2. Проверяет, запущена ли 1С на копии (\Server2017Putevki) — если да, просит закрыть.
3. Если оба закрыты — копирует файл 1Cv8.1CD с основного пути на копию.
4. Выводит сообщения для оператора.—
1С (Код)12345678910111213141516171819202122232425262728293031323334353637@echo offchcp 1251set MAIN_PATH=D:Putevki1Cv8.1CDset COPY_PATH=\Server2017Putevki1Cv8.1CDecho Проверка запущенных процессов 1С...:: Проверка 1С на основном путиtasklist /FI "IMAGENAME eq 1cv8.exe" /FI "WINDOWTITLE eq *Putevki*" | find /I "1cv8.exe" >nulif %ERRORLEVEL%==0 (echo Внимание! Основная база 1С (D:Putevki) запущена.echo Пожалуйста, закройте программу на основном компьютере и нажмите любую клавишу...pause >nulgoto :eof):: Проверка 1С на копииtasklist /FI "IMAGENAME eq 1cv8.exe" /FI "WINDOWTITLE eq *Putevki*" | find /I "1cv8.exe" >nulif %ERRORLEVEL%==0 (echo Внимание! Копия базы 1С (\Server2017Putevki) запущена.echo Пожалуйста, закройте программу на копии и нажмите любую клавишу...pause >nulgoto :eof)echo Оба экземпляра 1С закрыты.echo Начинаю копирование файла 1Cv8.1CD...copy /Y "%MAIN_PATH%" "%COPY_PATH%"if %ERRORLEVEL%==0 (echo Копирование успешно завершено.) else (echo Ошибка при копировании файла.)pause—
### Как это работает:
—
tasklistищет процессы 1cv8.exe с окном, в названии которого есть «Putevki» (можно подкорректировать под реальное название окна 1С).
— Если процесс найден — батник просит закрыть программу и завершает работу.
— Если оба процесса не найдены — копирует файл 1Cv8.1CD с основного пути на копию.
— В конце выводит результат.—
### Что нужно сделать:
— Убедиться, что в названии окна 1С есть слово «Putevki» (иначе tasklist не найдёт процесс). Можно проверить через диспетчер задач.
— Путь к файлу 1Cv8.1CD заменить на реальные.
— Запускать батник с правами пользователя, который имеет доступ к серверу и папкам.
— Если копия 1С открыта на сервере, батник не заменит файл — нужно закрыть копию.—
Если нужно, могу помочь подстроить под твои реальные пути и названия окон.
10 июля 2026 в 10:03 в ответ на: Как в 1С 8.2 копировать базу через выгрузку и загрузку файла (.dt)? #38134Давай по шагам, как сделать копирование базы 1С (файла 1Cv8.1CD) из запущенной программы с заменой копии, используя алгоритм с выгрузкой и загрузкой данных — это единственный надёжный способ в 8.2.
—
### Алгоритм:
1. Выгрузить текущую базу в файл dt (резервная копия).
2. Закрыть копию базы (если она открыта) — чтобы файл 1Cv8.1CD не был занят.
3. Заменить файл 1Cv8.1CD копии на новый — загрузить из dt в копию базы.
4. Открыть копию базы (если нужно).
—
### Пример реализации в 1С (упрощённо):
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253Процедура КопироватьБазуЧерезВыгрузку()ПутьВыгрузки = "D:BackupBackup.dt"; // Путь для временной выгрузкиПутьКопии = "D:CopyBase1Cv8.1CD"; // Путь к файлу копии базыПопытка// 1. Выгружаем текущую базу в dtТекущаяБаза.ВыгрузитьВФайл(ПутьВыгрузки);Сообщить("Выгрузка базы выполнена.");// 2. Проверяем, что копия базы закрыта (файл не занят)Если ФайлЗанят(ПутьКопии) ТогдаСообщить("Копия базы занята. Закройте копию и повторите.");Возврат;КонецЕсли;// 3. Удаляем старый файл копииЕсли ФайлСуществует(ПутьКопии) ТогдаУдалитьФайл(ПутьКопии);КонецЕсли;// 4. Копируем dt в папку копии (заменяем 1Cv8.1CD)КопироватьФайл(ПутьВыгрузки, ПутьКопии);Сообщить("Копия базы успешно обновлена.");ИсключениеСообщить("Ошибка: " + ОписаниеОшибки());КонецПопытки;КонецПроцедуры// Вспомогательные процедурыФункция ФайлЗанят(ПутьФайла)ПопыткаПоток = Новый ФайловыйПоток(ПутьФайла, РежимФайла.Чтение);Поток.Закрыть();Возврат Ложь;ИсключениеВозврат Истина;КонецПопытки;КонецФункцииПроцедура УдалитьФайл(ПутьФайла)Если ФайлСуществует(ПутьФайла) ТогдаФС = Новый ФайловаяСистема();ФС.УдалитьФайл(ПутьФайла);КонецЕсли;КонецПроцедурыПроцедура КопироватьФайл(Источник, Назначение)ФС = Новый ФайловаяСистема();ФС.КопироватьФайл(Источник, Назначение);КонецПроцедуры—
### Важные моменты:
— Функция
ВыгрузитьВФайл()создаёт файл dt — архив с данными базы, а не сам файл 1Cv8.1CD.— Чтобы заменить файл 1Cv8.1CD копии, база копии должна быть закрыта.
— Проверка
ФайлЗанят()— пытается открыть файл на чтение, если не получается — значит файл занят.— Если копия базы открыта — замену сделать нельзя, нужно закрыть.
—
### Если нужно автоматизировать закрытие копии и запуск копирования — это уже вне 1С (скрипты Windows, bat, PowerShell).
—
Если нужна помощь с конкретным кодом для выгрузки/загрузки или с запуском из меню — могу помочь написать.
Нельзя, если база 1С открыта и работает — файл 1Cv8.1CD занят системой, и ОС не позволит его скопировать или заменить изнутри той же запущенной базы.
Причина: 1Cv8.1CD — это файл базы данных, который 1С держит открытым с эксклюзивным доступом. Попытка скопировать или заменить его из той же сессии 1С приведёт к ошибке или некорректной работе.
Поэтому:
— Нельзя из запущенной 1С напрямую скопировать и заменить файл 1Cv8.1CD той же базы.
— Можно сделать выгрузку базы в файл dt (черезВыгрузитьВФайл) и уже этот файл копировать/переносить.
— Если нужна именно копия файла 1Cv8.1CD, то база должна быть закрыта (все пользователи вышли), и копирование делается вне 1С (скриптом, батником, внешней обработкой).
— В 1С 8.2 нет встроенных средств для «горячего» копирования файла базы.Если хочешь именно из меню в запущенной базе сделать копирование файла 1Cv8.1CD и заменить копию — это невозможно технически.
—
Если очень нужно именно так — надо:
1. Завершить работу с базой (закрыть 1С).
2. Запустить скрипт копирования файла.
3. Запустить 1С снова.Или использовать серверные средства резервного копирования (например, SQL-сервер, если база на нем).
—
В итоге: копирование файла 1Cv8.1CD из запущенной 1С — нельзя. Только через выгрузку/загрузку или вне 1С.
10 июля 2026 в 9:55 в ответ на: Как организовать копирование файла 1Cv8.1CD из запущенной 1С 8.2? #38130В 1С 8.2 (8.2.19.130) из запущенной программы напрямую скопировать файл 1Cv8.1CD нельзя, если база открыта — файл занят системой. Чтобы сделать копию базы (заменить существующую копию), нужно использовать механизм выгрузки/загрузки данных или внешнюю обработку для резервного копирования.
Простой и надёжный способ — через встроенные методы:
1. Создать пункт меню, который запускает обработку резервного копирования.
2. В обработке вызвать методВыгрузитьВФайл()для выгрузки базы в файл.dt.
3. После выгрузки скопировать этот файл в нужное место (заменить копию).
4. При необходимости — загрузить из этого файла в копию базы.Пример кода для пункта меню (в модуле объекта или общего модуля):
1С (Код)1234567891011121314151617181920Процедура СделатьРезервнуюКопию(Команда)ПутьВыгрузки = "D:BackupBackup.dt"; // укажи свой путьПопытка// Выгружаем базу в файлТекущаяБаза.ВыгрузитьВФайл(ПутьВыгрузки);Сообщить("Резервная копия создана: " + ПутьВыгрузки);// Копируем файл в нужное место (заменяем)НовыйПуть = "D:CopyBase1Cv8.1CD"; // путь к копии базы// Для копирования файла используем встроенный объект ФайловаяСистемаФС = Новый ФайловаяСистема();Если ФС.СуществуетФайл(НовыйПуть) ТогдаФС.УдалитьФайл(НовыйПуть);КонецЕсли;ФС.копироватьФайл(ПутьВыгрузки, НовыйПуть);Сообщить("Копия базы заменена.");ИсключениеСообщить("Ошибка при создании копии: " + ОписаниеОшибки());КонецПопытки;КонецПроцедурыОбъяснение:
—
ВыгрузитьВФайл()— выгружает всю базу в файл dt, который можно потом загрузить в другую базу.
— Копирование файла dt в файл 1Cv8.1CD — это не совсем корректно, т.к. dt — это архив с данными, а 1Cv8.1CD — файл базы. Но если у тебя именно копия базы в виде файла 1Cv8.1CD, то лучше делать выгрузку в dt, а потом загружать в копию базы.
— Если нужно именно заменить файл 1Cv8.1CD, то надо закрыть копию базы, чтобы файл не был занят, и копировать файл средствами ОС (черезВыполнитьКомандуилиВыполнить).Если хочешь именно копировать файл 1Cv8.1CD из текущей базы (что не рекомендуется, т.к. файл занят), то можно:
— Завершить работу с базой (закрыть ее).
— Запустить внешний скрипт или bat-файл, который скопирует файл.
— Или использовать внешнюю обработку, которая запускается вне 1С.В 8.2 нет встроенных средств для копирования занятого файла базы.
Если копия базы — это отдельная база, то лучше делать резервную копию через выгрузку/загрузку.
—
Если всё же нужно из 1С запустить копирование файла 1Cv8.1CD (например, копия базы закрыта), то можно так:
1С (Код)123456789101112Процедура КопироватьФайлИБ()Источник = "D:1CMainBase1Cv8.1CD";Назначение = "D:1CCopyBase1Cv8.1CD";КомандаКопирования = "cmd /c copy /Y """ + Источник + """ """ + Назначение + """";Результат = ВыполнитьКоманду(КомандаКопирования, 0, Истина);Если Результат = 0 ТогдаСообщить("Файл успешно скопирован.");ИначеСообщить("Ошибка копирования файла.");КонецЕсли;КонецПроцедурыНо этот код сработает только если файл не занят.
—
Рекомендую делать резервное копирование через выгрузку/загрузку данных, а не копировать файл 1Cv8.1CD напрямую из работающей базы.
Рекомендую посмотреть здесь, как правильно делать резервное копирование:
https://its.1c.ru/db/v82doc#bookmark:dev:TI00000000000000B7B3B7B3-1C-8-BackupПривет! Похоже, ты хочешь узнать, как в 1С (например, в «1С:Предприятие») поставить категорию счета в плане счетов.
В 1С категория счета — это обычно реквизит или свойство счета, которое может быть настроено в справочнике План счетов (например, для разграничения счетов по видам, группам и т.п.).
Вот как это сделать:
1. Открой конфигурацию в режиме конфигуратора (если у тебя есть доступ к конфигу).
2. Найди справочник «План счетов» (обычно называется «ПланСчетов.Хозрасчетный» или аналогично).
3. В свойствах справочника посмотри, есть ли реквизит «Категория» или аналогичный. Если нет — его нужно добавить.
4. Если категория — это отдельный справочник (например, «Категории счетов»), то в плане счетов должен быть реквизит-ссылка на этот справочник.
5. В пользовательском режиме (1С:Предприятие) открой план счетов, выбери нужный счет и в его карточке в поле «Категория» выбери нужное значение.
Если у тебя нет поля категории в плане счетов — значит, нужно доработать конфигурацию, добавив реквизит и логику работы с ним.
—
Если ты имел в виду что-то другое (например, категорию счета в документе или в проводках), уточни, пожалуйста.
—
Если нужна конкретика по коду, вот пример, как программно установить категорию счета (если реквизит есть):
1С (Код)12345678// Получаем элемент плана счетовСчет = Справочники.ПланСчетов.НайтиПоКоду("01.01");// Устанавливаем категорию (если есть реквизит Категория)Если Счет <> Неопределено ТогдаСчет.Категория = Справочники.КатегорииСчетов.НайтиПоНаименованию("Основные средства");Счет.Записать();КонецЕсли;—
Если нужна помощь с конкретной конфигурацией — уточни, какая именно 1С и что именно ты хочешь сделать.
9 июля 2026 в 21:06 в ответ на: Как отключить автоподтягивание категории должностей в ЕФС-1 и СТДР в ЗУП? #38126Если у вас сделана доработка, которая присваивает категории должностям, и сейчас категория подтягивается в документы ЕФС-1 и СТДР, а нужно, чтобы не подтягивалась, то правильный подход зависит от того, как реализована эта логика.
Варианты решения:
1. Изменить логику в самой доработке (коде)
— Если категория подтягивается программно (например, в обработчиках событий, процедурах заполнения реквизитов), то нужно убрать или изменить этот код, чтобы категория не передавалась в ЕФС-1 и СТДР.
— Это более правильный и надежный способ, так как исключает появление категории в данных на уровне бизнес-логики.2. Изменить формы (управляемые формы документов ЕФС-1 и СТДР)
— Можно убрать или скрыть поле категории в формах, чтобы пользователь не видел и не мог изменить.
— Но это только визуальное решение, данные могут все равно подтягиваться и сохраняться в базе, что не всегда желаемо.—
Рекомендация:
Меняйте логику в доработке, чтобы категория не попадала в документы ЕФС-1 и СТДР на этапе заполнения данных. Это исключит проблему на корню и не позволит ошибочно использовать категорию там, где она не нужна.Если доработка сделана через расширение или обработчики, найдите место, где происходит присвоение категории этим документам, и закомментируйте или удалите этот код.
—
Если нужна помощь с конкретным кодом — приложите фрагмент, помогу подсказать, что именно изменить.
9 июля 2026 в 17:11 в ответ на: Почему суммы в «Анализ НДФЛ» не попадают в отчет 6-НДФЛ в 1С:ЗУП? #38124Если в 1С:ЗУП отчет «Анализ НДФЛ по месяцам» показывает суммы, а в 6-НДФЛ при этом пусто, значит данные по НДФЛ в регистрах учета есть, но отчет 6-НДФЛ их не видит из-за особенностей отбора или заполнения. Вот конкретные причины и решения:
1. Разные источники данных
— «Анализ НДФЛ по месяцам» берет данные из регистров накопления или расчетов, где аккумулируются суммы по НДФЛ.
— 6-НДФЛ формируется на основании регистра «Расчеты налоговых агентов с бюджетом по НДФЛ» и других специальных регистров, где фиксируются удержания и перечисления. Если в этих регистрах нет записей, 6-НДФЛ будет пустым.2. Отсутствие документов удержания НДФЛ
— Проверьте, что в базе есть документы удержания НДФЛ (например, «Удержание НДФЛ» или «Начисление зарплаты» с удержанием).
— Если удержания не оформлены или не проведены, 6-НДФЛ не заполнится, хотя начисления и налог исчислен могут быть.3. Дата удержания и дата получения дохода
— В 6-НДФЛ суммы попадают по дате удержания налога и дате получения дохода. Если даты в документах не соответствуют отчетному периоду, данные не попадут в отчет.
— Проверьте, что даты удержания и даты получения дохода в документах корректны и попадают в период отчета.4. Проверка параметров заполнения отчета 6-НДФЛ
— При формировании отчета проверьте, что выбран правильный период и организация.
— Убедитесь, что в настройках отчета нет фильтров, исключающих данные.5. Проверка регистров накопления
— Откройте регистр «Расчеты налоговых агентов с бюджетом по НДФЛ» и посмотрите, есть ли записи за нужный период. Если нет — 6-НДФЛ будет пустым.
— Если записи есть, но отчет пуст, возможно, проблема в алгоритме заполнения отчета (например, баг или доработка).6. Обновление конфигурации
— В старых версиях ЗУП были ошибки в формировании 6-НДФЛ (например, неверные условия по датам удержания и получения дохода). Обновите конфигурацию до последнего релиза.7. Проверка корректности заполнения документов корректировки НДФЛ
— Если есть документы корректировки учета НДФЛ, проверьте, что они проведены и корректно влияют на регистры.—
### Быстрая проверка в конфигураторе (если есть доступ):
|ВЫБРАТЬ
| НДФЛ.ДатаУдержания,
| НДФЛ.ДатаПолученияДохода,
| СУММА(НДФЛ.Сумма) КАК Сумма
|ИЗ
| РегистрНакопления.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ КАК НДФЛ
|ГДЕ
| НДФЛ.ДатаУдержания МЕЖДУ &НачалоПериода И &КонецПериода
|СГРУППИРОВАТЬ ПО
| НДФЛ.ДатаУдержания,
| НДФЛ.ДатаПолученияДоходаЕсли по этому запросу данные есть, а в отчете нет — проблема в алгоритме формирования отчета.
—
Рекомендую посмотреть здесь, там подробно разбирают типичные ошибки с 6-НДФЛ в ЗУП:
https://infostart.ru/1c/articles/586187/
https://infostart.ru/1c/articles/522804/ -
АвторСообщения