Odin — Одинэсник

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

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

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

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

      Объяснение:
      — Процедура принимает табличную часть (ТабличнаяЧасть) и необязательный заголовок.
      — Создается объект ТабличныйДокумент для печати.
      — В первой строке выводится заголовок.
      — Во второй строке выводятся заголовки 7 колонок.
      — Далее построчно выводятся данные из табличной части.
      — Каждая ячейка обводится линиями для лучшей читаемости.
      — Нумерация строк выводится в первом столбце.
      — Для корректной работы процедура должна вызываться на клиенте.

      Если у вас имена колонок динамические, замените массив Заголовки на получение из ТабличнаяЧасть.Колонки, например:

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

        Код, который вы привели, корректно реализует перенос узла дерева значений (группы «05. КРЕПЕЖ») в другую ветку (в папку «19. АВТОТОВАРЫ») с сохранением всех вложенных подузлов.

        Разберу по шагам, что происходит и как это работает:

        1. Выгрузка результата запроса в дерево значений с иерархией:

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

        2. Поиск узлов по справочнику номенклатуры:

        Здесь вы проходите по верхнему уровню дерева и находите две строки: папку «19. АВТОТОВАРЫ» и группу «05. КРЕПЕЖ».

        3. Перенос группы «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ»:

        — Создаёте новую строку в дочерних элементах папки «19. АВТОТОВАРЫ».
        — Копируете все реквизиты из «05. КРЕПЕЖ» в новую строку.
        — Вызываете процедуру ПеренестиСтроки, которая рекурсивно переносит все подчинённые строки из «05. КРЕПЕЖ» в новую строку.
        — Удаляете исходную строку «05. КРЕПЕЖ» из корня дерева.

        Что важно:

        — Процедура ПеренестиСтроки должна быть реализована рекурсивно, чтобы скопировать все вложенные подузлы. Пример реализации:

        — Если ПеренестиСтроки не реализована, вложенные элементы не будут перенесены.

        — После удаления исходной строки «05. КРЕПЕЖ» в корне дерева, она будет только в новой ветке «19. АВТОТОВАРЫ».

        Рекомендации:

        — Убедитесь, что ПеренестиСтроки реализована именно так, как показано выше.

        — Если дерево имеет несколько уровней вложенности, такой рекурсивный перенос сохранит всю структуру.

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

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

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

          Salam! Excel-dən 1C-yə siyahı import etmək üçün aşağıdakı addımları və nümunə kodu təqdim edirəm. Bu nümunə 1C:Предприятие 8.x üçün yazılıb, COM-obyekt vasitəsilə Excel faylını oxuyur və məlumatları справочник (məsələn, «Номенклатура») və ya başqa obyektə yükləyir.

          ### Addımlar:

          1. Excel faylını açmaq və məlumatları oxumaq:

          — COM-obyekt yaradılır: Excel.Application
          — Fayl açılır, aktiv səhifə seçilir
          — Məlumatların sonuncu sətir və sütun sayı tapılır
          — Məlumatlar massivə yüklənir

          2. Məlumatları 1C obyektinə yazmaq:

          — Dövr vasitəsilə massivdəki sətirlər oxunur
          — Hər sətirdən məlumatlar alınır
          — Yeni элемент yaradılır və doldurulur
          — Записать() çağırılır

          3. Excel obyektini bağlamaq və yaddaşı boşaltmaq

          ### Nümunə kod (1C:Enterprise 8.x, встроенный язык):

          ### Важные моменты:

          — В Excel первая строка обычно заголовки, поэтому импорт начинается со второй.
          — В зависимости от структуры Excel файла, нужно подстроить индексы колонок.
          — Если импортируете в другой справочник или документ, меняйте соответствующие объекты.
          — Обязательно освобождайте COM-объекты, чтобы не оставлять процессы Excel в памяти.
          — Для больших файлов лучше использовать пакетную обработку или загрузку через табличный документ.

          ### Рекомендации:

          — Если нужно импортировать много данных, лучше сначала загрузить в ТабличныйДокумент, а потом обработать.
          — Для более сложных структур (например, табличные части документов) нужно делать вложенные циклы.
          — Можно добавить проверку на пустые строки, дубли и т.п.

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

          Рекомендую посмотреть здесь для подробностей и примеров:
          https://helpf.pro/faq8/view/1045.html
          https://helpf.pro/faq/view/1024.html

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

            Чтобы правильно добавить новую константу «Почта» в общую форму «НастройкаПрограммы» (обычные формы), нужно:

            1. Создать константу «Почта» в конфигураторе, указав нужный тип (например, строка).

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

            3. В модуле формы обращаться к константе через набор констант, например, так:

            Если в форме нет реквизита с набором констант, его нужно добавить и связать с объектом Константы.СоздатьНабор(«Почта, …»).

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

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

              Встроенный PDF viewer в Windows-сервере 1С берет шрифты из системного каталога шрифтов Windows, обычно это папка C:WindowsFonts. Именно оттуда операционная система загружает шрифты для отображения, в том числе и для PDF-просмотрщиков, встроенных в 1С.

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

              Чтобы добавить свой шрифт и исправить отображение, нужно установить нужный шрифт в систему штатным способом, чтобы он был доступен всем приложениям, включая 1С и встроенный PDF viewer. Это можно сделать вручную через копирование файла шрифта в папку C:WindowsFonts или через контекстное меню «Установить». Также можно программно установить шрифт из 1С с помощью COM-объекта Shell.Application и метода InvokeVerb(«Install»), пример такого кода приведён ниже.

              После установки шрифта желательно перезапустить службу 1С или сервер, чтобы обновить кэш шрифтов.

              Если встроенный PDF viewer в 1С не поддерживает нужный шрифт, можно рассмотреть использование внешних PDF-просмотрщиков или конвертацию PDF в другой формат с встраиванием шрифтов.

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

                Для 1000 пользователей 1С в PostgreSQL параметр shared_buffers рекомендуется устанавливать примерно в 25% от объёма оперативной памяти сервера СУБД.

                Пример из практики и рекомендаций:

                — Если у вас сервер с 128 ГБ ОЗУ, то shared_buffers = 32GB.
                — Для 100 пользователей обычно ставят около 4 ГБ, для 1000 — масштабируют пропорционально.

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

                Рекомендации по настройке для 1000 пользователей 1С:

                |shared_buffers = 32GB

                Также обратите внимание на другие параметры, важные для 1С:

                |temp_buffers = 128-256MB
                |work_mem = 256MB
                |maintenance_work_mem = 512-1024MB

                Эти значения можно корректировать в зависимости от нагрузки и объёма временных таблиц.

                Рекомендую посмотреть здесь, где подробно описаны настройки PostgreSQL для 1С на 1000 пользователей:
                https://infostart.ru/1c/articles/1003015/
                (там есть пример с 128 ГБ RAM и shared_buffers = 32GB)

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

                  В версии КА 2.5.26.96 есть известная проблема с формированием НДФЛ к перечислению по начислениям отпуска. Причина в том, что в этой версии при формировании ведомости на выплату по отпускным не всегда корректно формируются движения по регистру «Расчеты налоговых агентов с бюджетом по НДФЛ» для отпускных начислений. В частности, НДФЛ к перечислению не заполняется, потому что в процедуре формирования движений по НДФЛ не учитываются специфические особенности отпускных начислений.

                  Основные причины:

                  1. В механизме формирования движений по НДФЛ (например, в процедуре УчетНДФЛ.СформироватьПеречисленныйНалог) не всегда корректно передается параметр «РегистрацияВНалоговомОргане» для обособленных подразделений, что приводит к отсутствию движения по НДФЛ для отпускных.

                  2. В версии 2.5.26.96 есть баг, связанный с тем, что в документе «Ведомость на выплату» для отпускных не заполняется реквизит, отвечающий за НДФЛ к перечислению, либо он не передается в процедуру формирования движений.

                  3. Также возможна ситуация, когда отпускные начисления не попадают в промежуточные расчеты НДФЛ из-за некорректного фильтра по видам начислений или по физическим лицам.

                  Решение:

                  — Проверьте, что в документе «Начисление зарплаты» по отпускным начислениям корректно заполнены все реквизиты, связанные с НДФЛ (особенно регистрация в налоговом органе).

                  — Проверьте, что в документе «Ведомость на выплату» по отпускным начислениям заполнен реквизит НДФЛ к перечислению.

                  — Если проблема связана с обособленными подразделениями, попробуйте временно назначить основную регистрацию в налоговом органе для того подразделения, по которому формируется отпуск, чтобы проверить, появится ли НДФЛ к перечислению.

                  — Вариант с доработкой: переопределить процедуру формирования движений по НДФЛ в расширении, чтобы корректно передавать параметр «РегистрацияВНалоговомОргане» и учитывать отпускные начисления.

                  — Рекомендуется обновить конфигурацию до более свежей версии, где эта проблема уже исправлена (например, начиная с 2.5.30 и выше).

                  — В качестве временного решения можно использовать исправления из публикаций на Инфостарте, где описаны похожие проблемы с НДФЛ по отпускным в КА 2.5.
                  https://infostart.ru/1c/articles/1217570/ — как правильно отражать отпускные в 6-НДФЛ и нюансы по НДФЛ отпускных

                  Если нужна конкретная доработка, могу помочь с кодом для расширения, чтобы исправить формирование НДФЛ к перечислению по отпускным в вашей версии.

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

                    Проблема в том, что переменная РасшифровкаСоответствие создаётся один раз до цикла и в каждой итерации цикла вы в неё вставляете новые значения, тем самым перезаписывая предыдущие. В итоге, после цикла в каждой строке табличного документа в параметре Расшифровка оказывается ссылка на один и тот же объект — последний заполненный РасшифровкаСоответствие.

                    Чтобы при двойном клике на ячейку «Суммы» получать именно данные из той строки, по которой кликнули, нужно создавать новый объект РасшифровкаСоответствие для каждой строки выборки, а не переиспользовать один и тот же.

                    Правильный подход — создавать РасшифровкаСоответствие внутри цикла, например так:

                    Таким образом, для каждой строки будет свой уникальный объект РасшифровкаСоответствие, и при двойном клике в процедуре РезультатОбработкаРасшифровки вы получите именно данные из той строки, по которой кликнули.

                    Если в процедуре РезультатОбработкаРасшифровки вы хотите получить эти данные, то делайте так:

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

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

                      Если журнал регистрации в 1С перестал записываться, скорее всего файл журнала поврежден или достиг максимального размера, и его нужно заменить новым. В 1С начиная с версии 8.3 журнал регистрации хранится в файле с расширением .lgd (SQLite база). Чтобы создать новый журнал регистрации, нужно:

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

                      2. Найти папку с журналом регистрации. Для файловой базы это папка 1Cv8Log в каталоге информационной базы, например:

                      Для клиент-серверной базы — путь можно посмотреть в настройках сервера или в сообщении об ошибке.

                      3. Сделать резервную копию папки 1Cv8Log (на всякий случай).

                      4. Удалить или переименовать папку 1Cv8Log (например, в 1Cv8Log_old).

                      5. Запустить 1С и открыть базу — система автоматически создаст новый пустой журнал регистрации.

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

                      Если журнал поврежден, можно попытаться восстановить его с помощью утилиты sqlite3 (делать дамп и восстанавливать базу), но проще и надежнее создать новый журнал, как описано.

                      Также проверьте настройки журнала регистрации в конфигураторе: «Администрирование» → «Настройка журнала регистрации…», чтобы убедиться, что журнал включен и настроен на нужный уровень регистрации.

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

                      Рекомендую после создания нового журнала настроить регулярное сокращение журнала, чтобы избежать переполнения и проблем с производительностью.
                      https://infostart.ru/1c/articles/402536/
                      https://helpf.pro/faq/view/963.html

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

                        В 1С:Предприятии метод ПолучитьСеансыИнформационнойБазы() возвращает массив объектов типа СеансИнформационнойБазы, каждый из которых содержит информацию о текущих сеансах пользователей. В этих объектах есть свойства, которые позволяют получить данные о пользователе, но прямого свойства с правами пользователя там нет.

                        Чтобы получить права пользователя из сеанса, нужно из объекта сеанса получить имя пользователя, а затем уже через объект ПользователиИнформационнойБазы получить информацию о ролях (правах) этого пользователя.

                        Пример кода на 1С:

                        Объяснение:
                        — Получаем все активные сеансы.
                        — Для каждого сеанса берем имя пользователя.
                        — Получаем список всех пользователей информационной базы.
                        — Находим пользователя с таким именем.
                        — Из объекта пользователя берем список ролей — это и есть права доступа.
                        — Выводим или используем роли по необходимости.

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

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

                        # Кратко:
                        — ПолучитьСеансыИнформационнойБазы() — получить сеансы.
                        — Из сеанса взять имя пользователя.
                        — Через ПользователиИнформационнойБазы.ПолучитьПользователей() получить роли пользователя.
                        — Роли — и есть права пользователя.

                        Это стандартный способ получить права пользователя из сеансов в 1С.

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

                          Чтобы при запуске 1С:Предприятия автоматически открыть определенную обработку для конкретного пользователя, нужно использовать обработчик события «ПередНачаломРаботыСистемы» в модуле приложения. В этом обработчике проверяется имя текущего пользователя, и если оно совпадает с нужным, то вызывается команда открытия обработки.

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

                          Обратите внимание, что в финальном коде используется функция ИмяПользователя() для получения имени пользователя и процедура ОткрытьФорму() для открытия обработки, а не создание экземпляра обработки и вызов ПолучитьФорму().Открыть(), как это иногда делают.

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

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

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

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

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

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

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

                            Если у вас нет возможности использовать привилегированный режим, то альтернативный вариант — запросить список пользователей через внешний механизм (например, через прямой SQL-запрос к базе данных, если это разрешено и безопасно), но это уже выходит за рамки стандартных возможностей 1С и требует прав администратора на уровне СУБД.

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

                              Шура, выдача разменной монеты в кассу ККМ — это хозяйственная операция по внесению наличных денежных средств в кассу предприятия. В 1С это оформляется как приходный кассовый ордер (ПКО) с видом операции «Внесение наличных в кассу» или «Внесение разменной монеты в кассу».

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

                              — Дебет 50 (Касса) — увеличение наличных денег в кассе
                              — Кредит 51 (Расчетный счет) или другой счет, с которого берутся деньги на размен

                              Если разменная монета берется из кассы банка (например, из кассы филиала банка), то операция оформляется как получение наличных из банка (ПКО с видом операции «Получение наличных в банке»).

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

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

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

                                Димон, привет!

                                В только что приобретённой базе 1С:Альфа-Авто Автосервис обычно сразу должны быть заполнены следующие справочники, чтобы можно было начать работу:

                                1. **Организации** — хотя бы одна организация, под которой ведется учет (можно изменить название и реквизиты, например, на вашу компанию).
                                2. **Контрагенты** — клиенты, поставщики, партнеры.
                                3. **Физические лица** — сотрудники, если планируется кадровый учет.
                                4. **Сотрудники организации** — для кадрового учета и назначения прав.
                                5. **Автомобили** — модели и конкретные автомобили клиентов.
                                6. **Модели автомобилей** — для правильного учета и обслуживания.
                                7. **Виды ремонтов и услуг** — перечень работ, которые выполняются в автосервисе.
                                8. **Номенклатура** — запчасти, материалы, работы.
                                9. **Склады** — места хранения запасных частей и материалов.
                                10. **Пользователи** — для разграничения доступа к базе.

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

                                **Как создать пользователя в 1С:Альфа-Авто:**

                                1. Перейдите в раздел **Администрирование** → **Пользователи** → **Пользователи**.
                                2. Нажмите кнопку **Создать** (через меню «Все действия» или клавишу Insert).
                                3. В открывшейся форме заполните:
                                — **Полное имя** — ФИО пользователя.
                                — **Имя для входа** — логин, под которым пользователь будет заходить в систему (может быть email).
                                4. При необходимости укажите дополнительные параметры, например, пароль, роли и права доступа.
                                5. Сохраните пользователя.

                                После этого новый пользователь сможет войти в систему под своим логином.

                                Если нужна автоматизация приема сотрудников, в Альфа-Авто есть помощник «+Новый сотрудник», который сразу создаёт физическое лицо, сотрудника и документ приема на работу.

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

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

                                  В 1С:Комплексная автоматизация (КА) для запрета проведения документа «Реализация товаров и услуг» при наличии одновременно алкогольной и безалкогольной продукции в табличной части, нужно реализовать проверку в обработчике события проведения документа — например, в процедуре ПередПроведением() модуля объекта документа.

                                  Алгоритм:

                                  1. В модуле объекта документа «Реализация товаров и услуг» создайте процедуру ПередПроведением(Отказ).

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

                                  3. Если одновременно есть и алкогольная, и безалкогольная продукция — установите Отказ = Истина и выведите сообщение об ошибке.

                                  Пример кода на 1С:

                                  Объяснения:

                                  — В примере предполагается, что у номенклатуры есть булевый реквизит «АлкогольнаяПродукция», который указывает, является ли товар алкогольным.

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

                                  — Процедура ПередПроведением вызывается автоматически при попытке проведения документа, установка Отказ = Истина отменит проведение.

                                  — Сообщение выводится пользователю, чтобы он понял причину отказа.

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

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