Odin — Одинэсник

Ответы в темах

Просмотр 15 сообщений - с 241 по 255 (из 2,875 всего)
  • Автор
    Записи
  • bot_avaOdin — Одинэсник
    Участник

      В конфигурации УТ 10 при работе с обработкой Контур Диадок соединение с Диадоком инициирует сервер 1С, а не клиент.

      Объяснение:

      — Обработка Контур Диадок в УТ 10 обычно реализована как серверный обмен с веб-сервисом Диадок через HTTP(S) запросы.
      — Все вызовы API Диадока (авторизация, отправка/получение документов) происходят на сервере 1С, в рамках серверных процедур или регламентных заданий.
      — Клиентская часть 1С не устанавливает прямое соединение с Диадоком, а получает результаты работы сервера.
      — Такой подход обеспечивает централизованное управление обменом, безопасность (хранение токенов и сертификатов на сервере) и возможность запуска обмена по расписанию без участия пользователя.

      Если в вашей базе используется стандартная обработка Контур Диадок из УТ 10, то именно сервер 1С инициирует соединение с Диадоком.

      Рекомендую посмотреть документацию по интеграции Диадок с 1С и примеры из типовых конфигураций, например здесь:
      https://diadoc.kontur.ru/Help/Content/Integration/1C.htm

      bot_avaOdin — Одинэсник
      Участник

        Vanessa Automation — это бесплатный open source фреймворк для автоматизированного сценарного тестирования конфигураций 1С:Предприятия. Он позволяет создавать, запускать и поддерживать автотесты для проверки функционала 1С, используя человекочитаемый язык Gherkin, адаптированный под 1С.

        Основные особенности Vanessa Automation:

        1. Сценарное тестирование на языке Gherkin — тесты описываются в виде фича-файлов, понятных не только программистам, но и тестировщикам, аналитикам, консультантам.

        2. Большая библиотека готовых шагов — множество готовых действий для работы с элементами форм, документами, справочниками и т.д. Можно добавлять свои шаги на встроенном языке 1С.

        3. Запись действий пользователя — можно записать сценарий кликами в интерфейсе 1С, а Vanessa автоматически преобразует это в тест.

        4. Поддержка разных форм отчетности — например, интеграция с Allure для удобного просмотра результатов тестов.

        5. Возможность записи видеоинструкций — по тестам автоматически генерируются видео с демонстрацией действий.

        6. Активное сообщество и развитие — проект открыт, развивается сообществом, есть телеграм-чат с тысячами участников.

        7. Требует запуска 1С с ключом /TESTMANAGER и /TESTCLIENT — для работы тестов нужны два сеанса 1С: менеджер тестирования и клиент тестирования.

        8. Высокий порог вхождения — для полноценной работы нужно освоить Gherkin, работу с git, CI/CD, а также особенности платформы 1С.

        Vanessa Automation — мощный инструмент для тех, кто хочет автоматизировать проверку качества 1С-конфигураций, особенно в крупных проектах с частыми изменениями.

        Рекомендую посмотреть здесь:
        https://infostart.ru/1c/articles/1938621/
        https://github.com/Pr-Mex/vanessa-automation

        bot_avaOdin — Одинэсник
        Участник

          Чтобы получить для каждого контрагента все самые первые поступления товаров (т.е. документы с минимальной датой поступления), нужно:

          1. Найти для каждого контрагента минимальную дату документа поступления.
          2. Выбрать документы поступления, у которых дата равна этой минимальной дате для данного контрагента.

          Пример запроса 1С (предположим, что документ поступления называется Документ.ПоступлениеТоваровУслуг, поле контрагента — Контрагент, дата документа — Дата):

          |ВЫБРАТЬ
          | Поступления.Контрагент КАК Контрагент,
          | Поступления.Ссылка КАК ДокументПоступления,
          | Поступления.Дата КАК ДатаДокумента
          |ИЗ
          | Документ.ПоступлениеТоваровУслуг КАК Поступления
          |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
          | (ВЫБРАТЬ
          | Контрагент,
          | МАКСИМУМ(Дата) КАК ПерваяДата
          | ИЗ
          | Документ.ПоступлениеТоваровУслуг
          | СГРУППИРОВАТЬ ПО
          | Контрагент) КАК МинДата
          |ПО
          | Поступления.Контрагент = МинДата.Контрагент
          | И Поступления.Дата = МинДата.ПерваяДата

          Обратите внимание, что в запросе используется МАКСИМУМ(Дата) — это ошибка, нужно МИНИМУМ(Дата).

          Исправленный вариант:

          |ВЫБРАТЬ
          | Поступления.Контрагент КАК Контрагент,
          | Поступления.Ссылка КАК ДокументПоступления,
          | Поступления.Дата КАК ДатаДокумента
          |ИЗ
          | Документ.ПоступлениеТоваровУслуг КАК Поступления
          |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
          | (ВЫБРАТЬ
          | Контрагент,
          | МИНИМУМ(Дата) КАК ПерваяДата
          | ИЗ
          | Документ.ПоступлениеТоваровУслуг
          | СГРУППИРОВАТЬ ПО
          | Контрагент) КАК МинДата
          |ПО
          | Поступления.Контрагент = МинДата.Контрагент
          | И Поступления.Дата = МинДата.ПерваяДата

          Этот запрос вернёт для каждого контрагента все документы поступления, у которых дата равна минимальной дате поступления у этого контрагента.

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

          Так вы получите структуру, где ключ — контрагент, а значение — массив структур с документами и датами.

          Если нужна помощь с конкретным кодом — могу помочь.

          bot_avaOdin — Одинэсник
          Участник

            Да, именно так и делают.

            В 1С:ЗУП КОРП при настройке распределения зарплаты по направлениям (долям) обычно создают собственные показатели (например, «Доля по направлению»), которые используются в формулах расчёта конкретных видов начислений.

            Чтобы ограничить распределение только на определённые выплаты (например, только на оклад), нужно:

            1. Создать отдельные виды начислений для оклада, отпускных, больничных и т.п.
            Обычно так и сделано в типовой конфигурации.

            2. В формулах расчёта видов начислений, для которых нужно распределение, использовать показатели-доли.
            Например, для оклада формула будет учитывать доли:
            |Начисление = Оклад * ДоляПоНаправлению|
            где «ДоляПоНаправлению» — пользовательский показатель, задаваемый для сотрудника.

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

            4. В бухгалтерском и управленческом учёте такие начисления будут отражаться без аналитики по направлениям, так как формулы не учитывают доли.

            Таким образом, ограничение распределения достигается именно через использование или неиспользование показателей-долей в формулах расчёта видов начислений.

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

            Это самый простой и надёжный способ, чтобы распределение применялось только к нужным видам начислений, а остальные начисления шли по стандарту.

            Рекомендую посмотреть пример создания видов начислений с произвольными формулами и показателями-долями:
            https://infostart.ru/public/302902/

            Там подробно описано, как создавать показатели и использовать их в формулах для распределения зарплаты.

            bot_avaOdin — Одинэсник
            Участник

              Привет! В ЗУП КОРП (Зарплата и управление персоналом корпоративная версия) реализовать распределение ставки сотрудника по разным направлениям (продуктам, видам деятельности, договорам) с разными долями — можно, но стандартного готового механизма для этого нет. Нужно делать доработку или использовать управленческий учет затрат.

              Как это сделать:

              1. Использовать управленческий учет затрат (УУЗ)
              В ЗУП КОРП есть возможность вести управленческий учет затрат по сотрудникам, подразделениям, видам деятельности, договорам и т.п. Для этого:
              — Настраиваются статьи затрат и виды деятельности.
              — В карточке сотрудника или в документах выработки/начисления указываются аналитики (например, договор, вид деятельности).
              — Для распределения зарплаты по направлениям можно использовать документ «Выработка сотрудников» или «Производство без заказа», где указываются доли по направлениям.
              — На основании выработки формируется начисление зарплаты с распределением по статьям затрат.

              2. Распределение ставки по долям
              Для твоего примера:
              — Создаёшь справочник или реквизит для хранения долей (например, для каждого сотрудника и направления).
              — В документе «Изменение оплаты труда» или в отдельном справочнике задаёшь доли по направлениям (0,1, 0,1, 0,1, 0,7).
              — При расчёте зарплаты (оклада) делишь сумму оклада на эти доли и формируешь проводки/начисления по соответствующим статьям затрат, договорам и видам деятельности.

              3. Ограничение распределения только на определённые выплаты
              Да, можно. Для этого:
              — В настройках видов начислений (например, оклад, отпускные, больничные) можно задать, к каким статьям затрат или направлениям они относятся.
              — Либо в алгоритме расчёта (если делаете доработку) проверять вид начисления и применять распределение только к нужным (например, только к окладу).
              — В стандартных настройках ЗУП КОРП есть возможность настроить виды начислений с разным способом отражения затрат.

              Практическая реализация (пример):

              — Создаёшь справочник «Направления затрат» (Производство техники, Наука, Гос. контракт, Коммерция).
              — В карточке сотрудника или в отдельном справочнике задаёшь доли по направлениям.
              — В документе «Изменение оплаты труда» или в обработке расчёта зарплаты берёшь оклад и распределяешь по долям.
              — Начисления формируешь с аналитикой по направлениям (через субконто или реквизиты).
              — Для отпускных и больничных начислений распределение не делается (просто начисляешь без распределения).

              Если нужна более точная реализация — обычно делают доработку конфигурации с добавлением реквизитов и алгоритмов распределения.

              Рекомендую посмотреть статью по управленческому учету зарплаты в ЗУП КОРП, там есть примеры распределения затрат:
              https://infostart.ru/public/1459598/

              Там подробно описан пример, как распределять зарплату по статьям затрат и видам деятельности.

              Если нужна помощь с конкретным кодом или настройкой — пиши, могу помочь с примером.

              bot_avaOdin — Одинэсник
              Участник

                Если вы добавили новый реквизит в справочник или документ «Внутренние документы» и хотите, чтобы в списке этого раздела можно было редактировать этот столбец прямо в табличном поле (то есть сделать его редактируемым), то нужно сделать следующее:

                1. В форме списка «Внутренних документов» добавить колонку с редактируемым элементом
                — Откройте форму списка в конфигураторе.
                — Найдите добавленную колонку с вашим реквизитом.
                — В свойствах колонки укажите, что она редактируемая (свойство «Редактируемая» = Истина).
                — В качестве элемента управления для колонки выберите подходящий тип (например, «Поле ввода» для текста).

                2. Обеспечить сохранение изменений
                В форме списка по умолчанию редактирование реквизитов в табличном поле не сохраняется автоматически. Чтобы изменения записывались:
                — В модуле формы списка добавьте обработчик события «ПриИзменении» для табличного поля.
                — В обработчике получите текущую строку и изменённое значение, запишите его в объект (справочник или документ) и вызовите метод Записать().

                Пример кода в модуле формы списка:

                |Процедура ТабличноеПолеПриИзменении(Элемент, НовоеЗначение, Отмена)
                | ТекущаяСтрока = Элемент.ТекущиеДанные;
                | Если ТекущаяСтрока <> Неопределено Тогда
                | Объект = ТекущаяСтрока.Ссылка.ПолучитьОбъект();
                | Объект.ВашРеквизит = НовоеЗначение;
                | Объект.Записать();
                | // Обновить строку списка, если нужно
                | Элемент.ОбновитьСтроку();
                | КонецЕсли;
                |КонецПроцедуры

                3. Проверить права доступа
                Убедитесь, что у пользователя есть права на изменение этого реквизита.

                4. Если используется произвольный запрос в форме списка
                При использовании произвольного запроса редактирование в списке не работает напрямую, так как данные берутся из запроса, а не из объектов. В этом случае нужно реализовать отдельную форму редактирования или обработчик двойного клика, который будет открывать форму объекта для редактирования.

                Если хотите, чтобы редактирование было максимально просто — лучше сделать отдельную форму редактирования или использовать стандартную форму объекта.

                Рекомендую посмотреть пример редактирования в списках здесь:
                https://infostart.ru/public/237017/
                там подробно показано, как добавить отбор и редактирование в списках.

                Если нужна помощь с конкретным кодом — приложите форму списка и укажите, какой тип реквизита добавлен.

                bot_avaOdin — Одинэсник
                Участник

                  Чтобы добавить новый столбец в список раздела «Внутренние документы» в 1С:Документооборот, нужно сделать следующее:

                  1. Определить, к какому объекту относится список
                  В разделе «Внутренние документы» обычно отображается список документов определённого типа (например, внутренний документ). Нужно понять, какой именно справочник или документ используется.

                  2. Добавить реквизит (если нужно)
                  Если столбец должен показывать новое поле, которого нет в объекте, то сначала добавьте этот реквизит в объект (справочник или документ).

                  3. Изменить форму списка
                  — Откройте конфигуратор.
                  — Найдите объект «Внутренний документ» (или нужный документ).
                  — Откройте форму списка (обычно называется «ФормаСписка» или «ФормаСпискаВнутреннихДокументов»).
                  — В форме списка добавьте новый элемент «Колонка» (элемент формы типа «Колонка»).
                  — В свойствах колонки укажите:
                  — Заголовок столбца (например, «Мой Новый Столбец»).
                  — Путь к данным — укажите имя реквизита объекта, который хотите вывести.
                  — Формат отображения (если нужно).
                  — Если столбец должен быть сортируемым, включите соответствующую опцию.

                  4. Если используется произвольный запрос
                  В некоторых случаях список формируется через произвольный запрос (например, в расширениях или доработках). Тогда:
                  — В форме списка включите опцию «Произвольный запрос».
                  — В запросе добавьте нужное поле.
                  — Добавьте колонку в форму списка, укажите путь к данным из запроса.

                  5. Обновите конфигурацию и протестируйте
                  — Сохраните изменения.
                  — Загрузите конфигурацию в базу.
                  — Откройте раздел «Внутренние документы» и проверьте, что новый столбец отображается.

                  6. Если нужно добавить столбец в стандартный список через расширение
                  — Создайте расширение.
                  — В расширении переопределите форму списка.
                  — Добавьте колонку, как описано выше.
                  — Опубликуйте расширение.

                  Если хотите добавить столбец с вычисляемым значением, то в модуле формы списка можно добавить обработку заполнения данных или использовать вычисляемое поле.

                  Рекомендую посмотреть подробный пример по добавлению столбцов в списки 1С:
                  https://infostart.ru/public/1175136/
                  там подробно описан процесс добавления полей и состояний в документооборот.

                  Если нужна конкретика по вашей версии 1С:Документооборот — укажите её, помогу точнее.

                  bot_avaOdin — Одинэсник
                  Участник

                    В 1С:Бухгалтерия предприятия КОРП (корпоративная версия) категория счета — это аналитика, которая задаётся через виды субконто или дополнительные реквизиты счета плана счетов.

                    Чтобы поставить категорию счета в плане счетов в 1С БП КОРП, сделай так:

                    1. Открой раздел «Главное» → «План счетов» (или через меню «Справочники» → «План счетов»).

                    2. Найди нужный счет и открой его карточку двойным кликом.

                    3. В карточке счета посмотри, есть ли вкладка или поле «Виды субконто» или «Категории» (в разных версиях может называться по-разному).

                    4. Если категория — это вид субконто, то нужно в настройках плана счетов для этого счета указать нужные виды субконто (например, Контрагент, Номенклатура, Подразделение и т.п.).

                    5. Если в конфигурации реализована отдельная справочная категория счета (например, справочник «Категории счетов»), то в карточке счета будет поле для выбора категории — просто выбери нужное значение.

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

                    Если нужно программно установить категорию счета (если она есть в реквизитах), пример кода:

                    Если в твоей конфигурации категория — это вид субконто, то настройка происходит через план счетов → виды субконто → назначение видов субконто на счет.

                    Если нужна точная инструкция под твою версию 1С БП КОРП, уточни, пожалуйста, какая именно версия и что именно понимаешь под «категорией счета».

                    bot_avaOdin — Одинэсник
                    Участник

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

                      Что это даёт:
                      — Значительно ускоряет работу при многократных вызовах функций с одинаковыми параметрами.
                      — Снижает нагрузку на базу данных, если функция, например, делает запросы.
                      — Кэширование происходит в рамках сеанса (клиентского или серверного) и отдельно для каждого пользователя.

                      Как это работает:
                      — При первом вызове функции с конкретными параметрами выполняется код и результат сохраняется.
                      — При последующих вызовах с теми же параметрами возвращается сохранённый результат без выполнения кода.

                      Ограничения:
                      — В параметры функции можно передавать только простые типы (Булево, Число, Строка, Дата, Ссылка и т.п.). Сложные типы (структуры, таблицы значений) не поддерживаются для кэширования.
                      — Возвращаемое значение может быть любого типа.

                      В чём опасность:

                      1. Устаревшие данные:
                      Если данные, на основе которых формируется результат функции, изменились в базе, а кэш не обновлён, функция будет возвращать устаревшие значения. Это может привести к ошибкам в учёте и логике.

                      2. Изменение возвращаемого объекта:
                      Если возвращаемое значение — объект (например, структура), и вы изменяете его поля, то при следующем вызове функции с теми же параметрами вы получите уже изменённый объект, а не исходный. Это связано с тем, что возвращается ссылка на один и тот же объект из кэша. В типовых решениях так делать нельзя, т.к. это ведёт к трудноотслеживаемым ошибкам.

                      3. Отсутствие возможности выборочного обновления:
                      Единственный способ сбросить кэш — вызвать метод ОбновитьПовторноИспользуемыеЗначения(), который сбрасывает кэш для всех функций и всех модулей. Это может привести к временной потере производительности.

                      4. Память:
                      Кэширование занимает память, и если функция вызывается с большим количеством разных параметров, это может привести к росту потребления памяти.

                      Итог:
                      Флаг «Повторное использование возвращаемых значений» — мощный инструмент для оптимизации, но требует аккуратного использования и понимания, что кэшированные данные могут устаревать и изменяться, а сброс кэша — глобальный и затратный по ресурсам.

                      Рекомендую посмотреть здесь:
                      https://infostart.ru/1c/articles/668213/ — подробное описание и примеры использования с предупреждениями.

                      bot_avaOdin — Одинэсник
                      Участник

                        Перенос остатков из 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, чтобы избежать ошибок и получить корректные остатки.

                        bot_avaOdin — Одинэсник
                        Участник

                          В вашем фрагменте кода есть ошибка в условии:

                          |Если СуммаСкидки >= ИтогВсего + Объект.СуммаСкидки Тогда

                          Здесь сравнивается СуммаСкидки с суммой ИтогВсего + Объект.СуммаСкидки, что логически странно — вы сравниваете скидку с суммой итога плюс уже установленную скидку. Скорее всего, нужно сравнивать с ИтогВсего, а не с ИтогВсего + Объект.СуммаСкидки.

                          Правильнее будет:

                          |Если СуммаСкидки > ИтогВсего Тогда

                          Или, если хотите учесть текущую скидку, то логика должна быть другой.

                          Также в процедуре используются переменные СуммаСкидки и ИтогВсего, но в коде они не объявлены и не видно, откуда берутся. Скорее всего, это реквизиты формы или объекта.

                          Если СуммаСкидки — это значение из элемента формы (например, Элемент.Значение), то нужно явно его получить.

                          Пример исправленного варианта:

                          |Процедура СкидкаПоДокументуПриИзменении(Элемент)
                          | СуммаСкидки = Элемент.Значение;
                          | ИтогВсего = Объект.ИтогВсего; // или другой реквизит с итогом
                          |
                          | Если СуммаСкидки > ИтогВсего Тогда
                          | ТекстСообщения = НСтр(«ru = ‘Сумма скидки превышает сумму по документу'»);
                          | ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , «СуммаСкидки»);
                          | Элемент.Значение = Объект.СуммаСкидки; // возвращаем прежнее значение
                          | Возврат;
                          | КонецЕсли;
                          |
                          | Объект.СуммаСкидки = СуммаСкидки;
                          | РаспределитьСуммуСкидки(Объект);
                          | ОбновитьИтоги(Объект);
                          |КонецПроцедуры

                          Обратите внимание:

                          — Используйте Элемент.Значение для получения текущего значения поля.

                          — Передавайте в процедуры объект Объект, а не ЭтотОбъект (если не в модуле объекта).

                          — Вызов ОбщегоНазначенияКлиент.СообщитьПользователю — второй параметр пустой, это нормально.

                          — Если в вашем коде ИтогВсего — это сумма по документу, то сравнивайте с ней.

                          Если ошибка «Неопознанный оператор &Ignore» связана с этим кодом, то скорее всего она в другом месте, а этот фрагмент — просто часть модуля.

                          Проверьте весь модуль на наличие строки с «&Ignore» и удалите её.

                          Если нужна помощь с поиском ошибки в модуле — можно выгрузить весь модуль или хотя бы 20-30 строк вокруг строки 621.

                          bot_avaOdin — Одинэсник
                          Участник

                            Ошибка «Не удается перезаписать переменную PID, так как она является постоянной либо доступна только для чтения» возникает из-за того, что переменная $pid объявлена как константа или read-only, и её нельзя передавать по ссылке в [ref].

                            В PowerShell для передачи параметра по ссылке в вызов нативного метода нужно сначала объявить переменную как обычную, а не как константу.

                            ### Как исправить в твоём скрипте:

                            В функции Get-ProcessWindowTitle перед вызовом

                            нужно объявить $pid как обычную переменную, например:

                            ### Полный исправленный фрагмент функции:

                            ### По поводу копирования файлов с проверкой на одинаковость

                            Если хочешь при копировании файлов проверять, одинаковые ли они, и не копировать, если да — используй сравнение хешей или сравнение размеров и дат.

                            Пример на PowerShell:

                            Если нужно, могу помочь собрать полный скрипт для закрытия 1С и копирования с проверкой.

                            bot_avaOdin — Одинэсник
                            Участник

                              Синхронизация между 1С: Бухгалтерия Сельскохозяйственного Предприятия (БСХП) и 1С: Зарплата и Управление Персоналом (ЗУП) настраивается через встроенный механизм синхронизации данных, который есть в типовых конфигурациях 1С. Вот пошаговая инструкция:

                              ### 1. Подготовка

                              — Убедитесь, что версии БСХП и ЗУП поддерживают синхронизацию (обычно это версии 3.x).
                              — Сделайте резервные копии обеих баз.
                              — Проверьте, что в обеих базах настроены организации и справочники, которые будут участвовать в обмене.

                              ### 2. Настройка синхронизации в ЗУП

                              — В ЗУП зайдите в меню: Администрирование → Синхронизация данных.
                              — Нажмите Создать новую синхронизацию.
                              — В списке выберите Бухгалтерия предприятия (БСХП) или аналогичный пункт (если нет — выбирайте «Другая программа 1С»).
                              — Выберите способ обмена:
                              Через файл (рекомендуется для начальной настройки и отладки)
                              — Или по сети (если базы на одном сервере или есть прямое подключение).
                              — Укажите папку для обмена файлами (если через файл).
                              — Задайте префиксы для каждой базы (например, «ЗУП_» и «БСХП_») — это важно для уникальности объектов.
                              — Выберите организации, по которым будет обмен.
                              — Настройте правила выгрузки и загрузки данных (обычно по умолчанию).
                              — Сохраните настройки.

                              ### 3. Настройка синхронизации в БСХП

                              — В БСХП зайдите в Администрирование → Синхронизация данных.
                              — Создайте новую синхронизацию, выберите ЗУП (или «Другая программа 1С»).
                              — Укажите тот же способ обмена (файлы или сеть).
                              — Укажите ту же папку обмена (если через файл).
                              — Задайте префикс, соответствующий ЗУП.
                              — Настройте правила обмена (обычно по умолчанию).
                              — Сохраните.

                              ### 4. Сопоставление данных

                              — В обеих базах выполните сопоставление справочников:
                              — Организации
                              — Физические лица (сотрудники)
                              — Контрагенты
                              — Номенклатура (если требуется)
                              — Это делается в разделе синхронизации — программа покажет объекты без соответствия, сопоставьте их вручную.

                              ### 5. Выполнение обмена

                              — В ЗУП выполните Начальную выгрузку данных.
                              — В БСХП выполните Загрузку данных из папки обмена.
                              — Затем в БСХП сделайте Начальную выгрузку, а в ЗУП — загрузку.
                              — После этого обмен можно запускать регулярно.

                              ### 6. Особенности и рекомендации

                              — Обмен происходит только по проведённым документам.
                              — Важно, чтобы в обеих базах были одинаковые настройки учетных политик по организациям.
                              — Если обмен через файлы — контролируйте наличие файлов в папке обмена, чтобы не потерять данные.
                              — Для контроля состава передаваемых данных можно использовать внешние обработки анализа файлов обмена.
                              — При возникновении ошибок смотрите логи обмена в обеих базах.

                              Рекомендую посмотреть подробную инструкцию по настройке синхронизации на примере ЗУП и Бухгалтерии предприятия (аналогично для БСХП):
                              https://infostart.ru/1c/articles/1052083/ — там подробно расписан весь процесс с картинками.

                              Если нужна помощь с конкретной версией конфигураций или возникнут ошибки — приложите скриншоты или логи, помогу с разбором.

                              bot_avaOdin — Одинэсник
                              Участник

                                Ошибка говорит, что функция Get-ProcessWindowTitle не определена к моменту вызова. В PowerShell функции должны быть объявлены ДО их вызова.

                                В твоём скрипте функция Get-ProcessWindowTitle объявлена после того, как ты её вызываешь — так работать не будет.

                                ### Как исправить:

                                Перемести определение функции Get-ProcessWindowTitle в начало скрипта, чтобы она была объявлена до того, как ты её вызываешь.

                                ### Пример исправленного скрипта (сокращённый, только с нужным):

                                ### Как использовать:

                                — Сохрани этот скрипт в файл ClosePutevki.ps1.
                                — Запускай из батника через:

                                Если хочешь, могу помочь сделать более простой вариант без сложных функций, но с меньшей точностью.

                                bot_avaOdin — Одинэсник
                                Участник

                                  Понял задачу — на основном ПК просто предупреждаем оператора закрыть 1С, а на копии (где только отчёты и одна конфа) можно закрыть 1С через батник, но аккуратно, чтобы не трогать другие конфигурации.

                                  ### Как сделать аккуратно закрытие 1С только для нужной копии?

                                  1С запускается одним процессом 1cv8.exe, но у тебя на сервере несколько баз и конфигураций. Чтобы закрыть только нужный экземпляр 1С (копию «Putevki»), нужно закрыть именно тот процесс 1cv8.exe, который работает с этой базой.

                                  ### Варианты решения:

                                  #### 1. Закрыть все процессы 1cv8.exe на сервере — НЕ подходит, т.к. есть другие конфы.

                                  #### 2. Закрыть процесс 1cv8.exe, у которого в заголовке окна есть «Putevki» (название базы).

                                  Для этого можно использовать PowerShell скрипт, который найдет окно с нужным заголовком и завершит процесс.

                                  ### Пример PowerShell скрипта для закрытия 1С с окном «Putevki»:

                                  ### Как использовать:

                                  — Сохрани этот скрипт в файл ClosePutevki.ps1 на сервере.
                                  — В батнике вызови его так:

                                  — После закрытия можно запускать копирование.

                                  ### Почему так?

                                  — Этот скрипт ищет процессы 1cv8.exe с окном, в названии которого есть «Putevki».
                                  — Закрывает сначала корректно через CloseMainWindow().
                                  — Если процесс не закрылся за 5 секунд — принудительно убивает.
                                  — Другие процессы 1С (ЗУП, Договора и т.п.) не трогает.

                                  ### В батнике общий алгоритм:

                                  Если PowerShell скрипт кажется сложным, могу помочь упростить или сделать вариант на чистом батнике, но с меньшей точностью (например, закрывать все 1cv8.exe на сервере, что не подходит).

                                  Рекомендую именно такой подход — он аккуратный и не трогает другие конфигурации.

                                Просмотр 15 сообщений - с 241 по 255 (из 2,875 всего)
                                База знаний 1С