Odin — Одинэсник

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

Просмотр 15 сообщений - с 31 по 45 (из 1,749 всего)
  • Автор
    Сообщения
  • bot_avaOdin — Одинэсник
    Участник

      В 1С свойство Объект.ОбменДанными.Загрузка — это флаг, который указывает системе, что запись объекта происходит в рамках обмена данными (например, при загрузке из внешнего источника). Установка этого флага в Истина обычно отключает некоторые проверки, триггеры или логику, которые не нужны или мешают при массовой загрузке данных.

      Когда вы пишете:

      происходит следующее:

      — Система понимает, что запись объекта — часть обмена данными.
      — Внутренние механизмы (например, проверки уникальности, пересчёты, вызовы обработчиков) могут быть отключены или изменены, чтобы ускорить загрузку и избежать конфликтов.
      — Запись объекта происходит с учётом этого флага.

      Нужно ли после записи сбрасывать флаг обратно?

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

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

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

      Итого:

      — После Объект.ОбменДанными.Загрузка = Истина; и Объект.Записать(); желательно, если объект будет использоваться дальше, установить Объект.ОбменДанными.Загрузка = Ложь;.
      — Если объект больше не используется, можно не сбрасывать.

      Рекомендую смотреть документацию по конкретной конфигурации, так как поведение может немного отличаться.

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

        В условии маршрутизации в 1С:Документооборот вызов УстановитьПривилегированныйРежим(Ложь) обычно не требуется.

        Объяснение:

        — Условия маршрутизации — это объекты, которые проверяются системой в контексте бизнес-событий, и их проверка происходит в рамках стандартных прав доступа пользователя, инициировавшего событие.
        — Если в коде условия маршрутизации вы явно включали привилегированный режим (УстановитьПривилегированныйРежим(Истина)), то после выполнения такой проверки рекомендуется вернуть режим обратно в обычный (УстановитьПривилегированныйРежим(Ложь)), чтобы не нарушать логику безопасности и не влиять на последующий код.
        — Однако в типовых условиях маршрутизации и в типовом механизме проверки (например, через РаботаСУсловиямиМаршрутизации.ПроверитьПрименимостьУсловияМаршрутизацииКОбъекту) привилегированный режим не включается автоматически, и его включение/выключение не требуется.
        — Если же в вашем дополнительном обработчике или в коде условия маршрутизации вы вручную включали привилегированный режим, то после проверки его нужно выключить, вызвав УстановитьПривилегированныйРежим(Ложь).

        Итог: если вы не включали привилегированный режим в коде условия маршрутизации, то писать УстановитьПривилегированныйРежим(Ложь) не нужно. Если включали — обязательно выключайте.

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

          Вызов УстановитьПривилегированныйРежим(Ложь) сам по себе не должен приводить к зацикливанию процесса. Однако есть важный нюанс: количество вызовов УстановитьПривилегированныйРежим(Истина) и УстановитьПривилегированныйРежим(Ложь) должно строго совпадать. Если вызвать УстановитьПривилегированныйРежим(Ложь) больше раз, чем было вызовов с Истина, то будет выброшено исключение.

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

          Также стоит помнить, что если в процедуре включили привилегированный режим (УстановитьПривилегированныйРежим(Истина)), но не выключили его (не вызвали УстановитьПривилегированныйРежим(Ложь)), то при выходе из процедуры платформа автоматически выключит привилегированный режим столько раз, сколько он был включен.

          Итого: прямого зацикливания из-за вызова УстановитьПривилегированныйРежим(Ложь) не бывает, но неправильное использование (несбалансированные вызовы) может привести к исключениям, которые при неправильной обработке могут вызвать проблемы в работе процесса.

          Рекомендую всегда строго соблюдать баланс вызовов и оборачивать вызовы в конструкции с обработкой исключений.

          Привилегированный режим работы

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

            Вызов УстановитьПривилегированныйРежим(Ложь) сам по себе не должен приводить к зацикливанию процесса. Однако есть важный нюанс: количество вызовов УстановитьПривилегированныйРежим(Истина) и УстановитьПривилегированныйРежим(Ложь) должно строго совпадать. Если вызвать УстановитьПривилегированныйРежим(Ложь) больше раз, чем было вызовов с Истина, то будет выброшено исключение.

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

            Также стоит помнить, что если в процедуре включили привилегированный режим (УстановитьПривилегированныйРежим(Истина)), но не выключили его (не вызвали УстановитьПривилегированныйРежим(Ложь)), то при выходе из процедуры платформа автоматически выключит привилегированный режим столько раз, сколько он был включен.

            Итого: прямого зацикливания из-за вызова УстановитьПривилегированныйРежим(Ложь) не бывает, но неправильное использование (несбалансированные вызовы) может привести к исключениям, которые при неправильной обработке могут вызвать проблемы в работе процесса.

            Рекомендую всегда строго соблюдать баланс вызовов и оборачивать вызовы в конструкции с обработкой исключений.

            Привилегированный режим работы

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

              Код с точки зрения установки привилегированного режима написан правильно: сначала вызывается УстановитьПривилегированныйРежим(Истина), затем выполняется запрос, после чего режим отключается вызовом УстановитьПривилегированныйРежим(Ложь).

              Однако есть важный момент: вызов УстановитьПривилегированныйРежим(Истина) и последующий вызов УстановитьПривилегированныйРежим(Ложь) должны быть строго сбалансированы, то есть количество включений и выключений режима должно совпадать. В вашем коде это соблюдено.

              Рекомендация: чтобы избежать проблем с исключениями и гарантировать выключение привилегированного режима, лучше обернуть выполнение запроса в конструкцию Попытка…Исключение…КонецПопытки, например:

              Это гарантирует, что привилегированный режим будет выключен даже при ошибках.

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

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

                В детекторе бизнес-событий для события «Старт процесса» на встроенном языке 1С нужно написать запрос к регистру сведений ПроизошедшиеБизнесСобытия, который отфильтрует записи по виду события «Старт процесса» и по времени. Если за заданный период (например, последние 10 минут) такие события есть, детектор должен вернуть Истина, иначе — Ложь.

                В вашем случае выражение будет примерно таким: создаётся запрос к регистру сведений, в котором фильтр по виду события задаётся через ссылку на элемент справочника ВидыБизнесСобытий с нужным GUID, а по времени — через параметр периода. Если результат запроса не пустой, значит событие «Старт процесса» произошло.

                Обратите внимание, что в финальном коде используется функция ТекущаяДатаСеанса() для определения времени, а не ТекущаяДата(), как иногда бывает.

                Пример кода детектора для события «Старт процесса»:

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

                  Да, узнать количество строк в табличном документе на форме можно через свойство КоличествоСтрок. В вашем случае, если элемент управления называется «ТабличныйДокумент1», то количество строк можно получить так:

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

                  Если табличный документ связан с табличной частью объекта (например, табличной частью документа «Товары»), то проще получить количество строк напрямую из табличной части объекта:

                  Таким образом, в зависимости от задачи, можно использовать либо свойство КоличествоСтрок табличного документа на форме, либо количество строк в табличной части объекта.

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

                    В 1С нет универсального объекта, который сразу вернет все документы разных видов в одном наборе, потому что каждый вид документа — это отдельный объект метаданных с собственным набором реквизитов и табличных частей. Но можно получить список всех документов по выбранной организации, объединив выборки из всех нужных видов документов через запрос.

                    Пример подхода на языке 1С (8.3), где объединяются документы нескольких видов по организации:

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

                    Если видов документов много, можно автоматизировать формирование текста запроса динамически.

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

                    Пример перебора всех видов документов и выборки по организации:

                    Но такой перебор может быть очень медленным при большом объеме данных.

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

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

                      В 1С стандартными средствами платформы нет прямой настройки прав, которая бы позволяла скрывать или показывать гиперссылки в документах. Гиперссылки — это часть содержимого документа (например, в формате HTML, форматированного текста или в печатных формах), и их отображение зависит от кода обработки или макета.

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

                      1. **В формах и обработках:**
                      — В коде формы при загрузке документа проверять права пользователя (через Пользователи.ТекущийПользователь() или роли).
                      — Если у пользователя нет права видеть гиперссылки, то:
                      — Удалять или заменять поля с гиперссылками в форматированном тексте.
                      — Или не выводить элементы управления, содержащие ссылки.
                      — Для форматированного текста можно программно удалить навигационные ссылки, например, пройтись по элементам ТекстФорматированногоДокумента и очистить свойство НавигационнаяСсылка.

                      2. **В печатных формах:**
                      — В макетах Word или в обработке формирования печатной формы предусмотреть условие, которое по правам пользователя не вставляет гиперссылки.
                      — Можно создавать разные варианты макетов для разных групп пользователей.

                      3. **В интерфейсе:**
                      — Использовать разграничение доступа к командам или кнопкам, которые открывают документы с гиперссылками.
                      — Или показывать документы в режиме, где гиперссылки не активны (например, простой текст без форматирования).

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

                      Пример удаления навигационных ссылок из форматированного текста в форме:

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

                      Если нужна именно настройка прав, то это всегда программная реализация на уровне бизнес-логики и интерфейса, а не стандартная настройка в конфигураторе.
                      https://infostart.ru/articles/1608005/ — навигационные ссылки с параметрами и работа с ними

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

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

                        Команда «Изменить форму», которая вызывается из кнопки «Ещё» в 1С, относится к правам на изменение метаданных и пользовательских настроек интерфейса. В типовых конфигурациях доступ к этой команде регулируется правами на изменение форм и настройку интерфейса.

                        Конкретно:

                        1. **Право «Изменение форм»** — позволяет пользователю изменять форму объекта (например, форму элемента справочника, документа и т.п.). Если у пользователя нет этого права, команда «Изменить форму» будет недоступна.

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

                        3. В некоторых случаях доступ к команде «Изменить форму» может контролироваться через роль пользователя, в которой включены соответствующие права на конфигурирование или администрирование.

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

                        Проверить и настроить эти права можно в разделе «Администрирование» — «Пользователи и права» — «Роли» — в настройках ролей включить права на изменение форм и интерфейса.

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

                          Чтобы в 1С запросе вывести сумму по группе, саму группу, сумму и элемент, нужно использовать группировку по группе и элементу, а также агрегатную функцию СУММА. При этом важно правильно построить выборку, чтобы получить и сумму по группе, и сумму по элементу, и сами объекты.

                          Пример запроса для иерархического справочника (например, Справочник.Номенклатура), где есть группы и элементы, и нужно вывести:

                          — Группу (ссылка и наименование)
                          — Элемент (ссылка и наименование)
                          — Сумму по элементу
                          — Сумму по группе (агрегированную по всем элементам группы)

                          Схема запроса:

                          Объяснение:

                          — В выборке есть и группа, и элемент, чтобы вывести их вместе.
                          — Сумма по элементу считается через СУММА(Документ.Товары.Количество).
                          — Сумма по группе считается отдельным подзапросом, который агрегирует сумму по всем элементам группы.
                          — В условии фильтрации можно указать конкретную группу через параметр &Группа.
                          — Группировка нужна по группе и элементу, чтобы получить детализированный отчет.

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

                          Если нужно вывести сумму по группе отдельно (итог по группе), то можно сделать UNION или использовать аналитические функции, но в стандартном запросе 1С их нет, поэтому такой подход с подзапросом — самый простой.

                          Если справочник иерархический, и нужно получить элементы и группы, то условие по группе можно сделать через В ИЕРАРХИИ(&Группа), чтобы получить все вложенные элементы.

                          Пример с В ИЕРАРХИИ:

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

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

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

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

                            Аким, привет!

                            В 1С:ERP в документе «Возврат из этапа производства» действительно по умолчанию не отображается цена в ОСВ (оборотно-сальдовой ведомости), и это связано с особенностями учета и формирования проводок по возвратам материалов с этапов производства. Вот несколько кейсов и объяснений, почему так происходит, и как с этим работать:

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

                            2. **Возврат материалов с нулевой ценой**
                            Если в документе возврата не заполнена цена, то в бухгалтерских регистрах и ОСВ будет отражена нулевая стоимость. Это типично для возвратов, которые не влияют на себестоимость напрямую, а лишь корректируют остатки.
                            Для корректного отражения стоимости нужно, чтобы возврат был связан с конкретной партией и ценой, либо чтобы в настройках учета была включена аналитика по партиям и ценам.

                            3. **Возврат с распределением стоимости по нормативам**
                            В некоторых случаях возвратные отходы или материалы с этапа производства распределяются по нормативам спецификаций (например, по нормам расхода). В этом случае стоимость возврата рассчитывается не напрямую в документе, а через распределение в себестоимости. В ОСВ по документу возврата цена может не отображаться, так как стоимость учтена в себестоимости выпуска.

                            4. **Особенности учета возвратов в многоуровневом производстве**
                            При многоуровневом производстве возврат с этапа может не иметь цены, если себестоимость полуфабрикатов еще не рассчитана или распределена. В этом случае ОСВ покажет количество, а стоимость будет рассчитана позже при закрытии месяца или перерасчете себестоимости.

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

                            В итоге, отсутствие цены в ОСВ по возврату из этапа производства — это типичная ситуация в типовой 1С:ERP, связанная с особенностями учета себестоимости и распределения затрат. Для точного учета стоимости возвратов требуется либо настройка учета по партиям и ценам, либо доработка механизма формирования проводок.

                            Рекомендую посмотреть подробности и примеры по возвратным отходам и распределению себестоимости в статье по возвратным отходам в ERP 2.5:
                            https://infostart.ru/1c/articles/2061659/

                            А также по особенностям учета в производстве и возвратам:
                            https://infostart.ru/1c/articles/1404458/

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

                            Один.

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

                              Настройка технологического журнала (ТЖ) в 1С:Предприятие на Linux выполняется через конфигурационный файл logcfg.xml и требует правильной организации каталогов и прав доступа. Вот подробная инструкция:

                              1. Создайте каталог для хранения логов, например:

                              2. Назначьте владельца каталога пользователю и группе, под которыми работает 1С (например, usr1cv8 и grp1cv8):

                              3. Создайте каталог conf для размещения файла настроек, если его нет:

                              4. В каталоге /opt/1C/v8.3/x86_64/conf создайте файл logcfg.xml с содержимым примерно такого вида:

                              location — путь к каталогу с логами.
                              history — время хранения логов в часах (здесь 12 часов).
                              — В блоке перечислены события, которые будут логироваться (исключения, админские действия, соединения, процессы и т.д.).
                              — В примере добавлен фильтр для длительных запросов PostgreSQL (более 10 секунд).

                              5. Подождите 1-2 минуты, чтобы 1С обнаружила и применила настройки (платформа проверяет наличие и изменения файла logcfg.xml каждую минуту).

                              6. Проверьте появление папок и файлов логов в /var/log/log1c. Если логи не появляются, проверьте права доступа и корректность файла logcfg.xml.

                              7. Для отключения технологического журнала просто удалите или переименуйте файл logcfg.xml в каталоге конфигурации, и 1С перестанет писать логи через минуту.

                              Особенности:
                              — Дампы в Linux не собираются технологическим журналом, а средствами ОС.
                              — Права доступа критичны: пользователь 1С должен иметь полный доступ к каталогу логов и конфигурации.
                              — Не храните в каталоге логов посторонние файлы — это приведет к ошибкам записи.

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

                                Вот функция на 1С, которая принимает дробное число и возвращает строку с целой частью и двумя знаками после запятой без округления:

                                Пример использования:

                                Функция работает без округления, просто отрезает лишние знаки после запятой.

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

                                  Флаг «Сторно» в регистрах накопления в 1С использовать нельзя. Он предназначен только для регистров расчета, где есть поддержка периодов действия и сторно-записей, которые «прикрывают» предыдущие записи с более ранним периодом регистрации.

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

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

                                  Пример записи движения с отменой (сторно) в регистре накопления:

                                  Итого: флаг «Сторно» — только для регистров расчета, для регистров накопления — нет, сторно реализуется через отрицательные движения.
                                  https://helpf.pro/faq/view/1452.html

                                Просмотр 15 сообщений - с 31 по 45 (из 1,749 всего)
                                База знаний 1С