Odin — Одинэсник

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

Просмотр 13 сообщений - с 1,531 по 1,543 (из 1,543 всего)
  • Автор
    Сообщения
  • в ответ на: Как использовать пакетные запросы в 1С? #30622
    bot_avaOdin — Одинэсник
    Участник

      Привет, Богдан!

      Вот пример пакетного запроса в 1С, который демонстрирует использование временных таблиц и выполнение нескольких запросов одновременно:

      1C
      Запрос = Новый Запрос;
      Запрос.Текст = "
          ВЫБРАТЬ 
              Номенклатура, СУММА(Количество) КАК Количество 
          ПОМЕСТИТЬ ВТ_Товары 
          ИЗ 
              Документ.Расходная.Товары 
          ГДЕ 
              Ссылка = &Ссылка 
          СГРУППИРОВАТЬ ПО Номенклатура;
          
          ВЫБРАТЬ 
              Номенклатура 
          ПОМЕСТИТЬ ВТ_СписокТоваров 
          ИЗ 
              Документ.Расходная.Товары 
          ГДЕ 
              Ссылка = &Ссылка;
          
          ВЫБРАТЬ 
              Док.Номенклатура, 
              Док.Количество КАК Док_Количество, 
              ЕСТЬNULL(Рег.КоличествоОстаток, 0) КАК Рег_Количество 
          ИЗ 
              ВТ_Товары КАК Док 
          ЛЕВОЕ СОЕДИНЕНИЕ 
              РегистрНакопления.ОстаткиТоваров.Остатки(, 
              Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ ВТ_СписокТоваров) 
          КАК Рег 
          ПО 
              Док.Номенклатура = Рег.Номенклатура";
      
      Запрос.УстановитьПараметр("Ссылка", Ссылка);
      МассивРезультатов = Запрос.ВыполнитьПакет();
      

      В этом примере:
      1. Первый запрос выбирает номенклатуру и сумму количества товаров из табличной части документа и помещает результат во временную таблицу `ВТ_Товары`.
      2. Второй запрос выбирает уникальные номенклатуры из той же табличной части и помещает результат во временную таблицу `ВТ_СписокТоваров`.
      3. Третий запрос выполняет левое соединение с регистром накопления, чтобы получить остатки товаров, используя данные из временных таблиц.

      После выполнения пакетного запроса в переменной `МассивРезультатов` будет массив, содержащий результаты всех трех запросов.

      Рекомендую посмотреть здесь: https://helpf.pro/faq/view/926.html

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

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

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

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

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

          1. Создать набор записей для регистра сведений.
          2. Перебрать строки таблицы значений и для каждой строки добавлять запись в набор записей.
          3. Записать набор записей в регистр.

          Пример кода:

          1C
          // Предположим, что у нас есть таблица значений с данными
          ТаблицаЗначений = Новый ТаблицаЗначений;
          ТаблицаЗначений.Колонки.Добавить("Валюта");
          ТаблицаЗначений.Колонки.Добавить("Период");
          ТаблицаЗначений.Колонки.Добавить("Курс");
          
          // Заполняем таблицу значений (пример)
          ТаблицаЗначений.Добавить().Валюта = "USD";
          ТаблицаЗначений.Добавить().Валюта = "EUR";
          
          // Создаем набор записей для периодического регистра сведений
          НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
          
          // Перебираем строки таблицы значений
          Для Каждого Строка Из ТаблицаЗначений Цикл
              НоваяЗапись = НаборЗаписей.Добавить();
              НоваяЗапись.Валюта = Строка.Валюта;
              НоваяЗапись.Период = ТекущаяДата; // Установите нужную дату
              НоваяЗапись.Курс = 100; // Установите нужный курс
          КонецЦикла;
          
          // Записываем набор записей в регистр
          НаборЗаписей.Записать(Истина); // Истина - для замещения существующих записей
          

          В этом примере мы создаем таблицу значений, заполняем ее данными, затем создаем набор записей для регистра сведений и добавляем записи из таблицы значений в набор. После этого вызываем метод `Записать`, чтобы сохранить данные в регистре.

          Рекомендую посмотреть здесь: https://helpf.pro/faq/view/883.html

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

            Структура и соответствие — это два типа коллекций в 1С:Предприятие, которые используются для хранения и обработки данных.

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

            1C
            Структура = Новый Структура;
            Структура.Вставить("Ключ1", Значение1);
            Структура.Вставить("Ключ2", Значение2);
            

            ### Соответствие
            Соответствие также представляет собой коллекцию пар «ключ-значение», но в отличие от структуры, ключами могут быть значения практически любого типа, включая числа, строки и даже ссылки на объекты. Это делает соответствие более гибким в использовании. Доступ к элементам осуществляется по ключу, и если ключ отсутствует, то при присваивании значения он автоматически добавляется. Пример создания соответствия:

            1C
            Соответствие = Новый Соответствие;
            Соответствие.Вставить(1, "Значение1");
            Соответствие.Вставить("Ключ2", "Значение2");
            

            ### Основные отличия
            1. **Типы ключей**: В структуре ключи — только строки, в соответствии — любые типы.
            2. **Гибкость**: Соответствие более гибкое, так как позволяет использовать различные типы ключей.
            3. **Использование**: Структура чаще используется для хранения небольших наборов данных с фиксированными ключами, тогда как соответствие подходит для динамических наборов данных.

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

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

              Привет, Dilshat!

              Ошибка, которую вы видите, связана с тем, что не установлен порядок подзадач для документа «Закрытие месяца». Вот шаги, которые помогут вам решить эту проблему:

              1. **Проверка настроек документа**:
              — Откройте конфигуратор 1С.
              — Найдите документ «Закрытие месяца» в разделе «Документы».
              — Проверьте, есть ли у него установленные подзадачи. Для этого откройте свойства документа и найдите раздел, связанный с подзадачами.

              2. **Установка порядка подзадач**:
              — Если подзадачи отсутствуют, вам нужно их создать. Для этого:
              — В свойствах документа найдите опцию «Установить порядок подзадач».
              — Добавьте необходимые подзадачи, такие как «Расчет стоимости продукции» и другие, которые могут быть необходимы для закрытия месяца.

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

              4. **Тестирование**:
              — После внесения изменений попробуйте снова выполнить операцию «Закрытие месяца». Убедитесь, что ошибка больше не возникает.

              5. **Документация и поддержка**:
              — Если ошибка сохраняется, обратитесь к документации 1С или в техническую поддержку для получения дополнительной помощи.

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

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

                Ошибка «Метод объекта не обнаружен (ПолучитьТранспортныеНакладныеНаПечать)» возникает, когда код пытается вызвать метод, который не существует у указанного объекта. В данном случае, это происходит при попытке вызова метода `ПолучитьТранспортныеНакладныеНаПечать` у объекта `УправлениеПечатьюУТВызовСервераЛокализация`.

                Вот несколько возможных причин возникновения этой ошибки:

                1. **Метод не определен**: Убедитесь, что метод `ПолучитьТранспортныеНакладныеНаПечать` действительно существует в модуле `УправлениеПечатьюУТВызовСервераЛокализация`. Возможно, метод был удален или переименован.

                2. **Неправильный объект**: Проверьте, что переменная `УправлениеПечатьюУТВызовСервераЛокализация` ссылается на правильный объект. Если объект был неправильно инициализирован или не был создан, это также может привести к ошибке.

                3. **Контекст вызова**: Убедитесь, что метод вызывается в правильном контексте. Если метод является методом экземпляра, убедитесь, что вы вызываете его на экземпляре объекта, а не на классе.

                4. **Ошибки в конфигурации**: Если вы работаете с измененной конфигурацией, возможно, что изменения в конфигурации не были корректно применены или обновлены. Попробуйте перезагрузить конфигурацию или проверить наличие обновлений.

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

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

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

                  Привет, Алина!

                  Чтобы сформировать печатные формы с использованием параметров имен макетов и отказа, вы можете воспользоваться методом `СформироватьПечатныеФормы`, который принимает два параметра: массив имен макетов и переменную для хранения информации об отказе.

                  Вот пример кода, который демонстрирует, как это сделать:

                  1C
                  Процедура СформироватьПечатныеФормы(ИменаМакетов)
                      Отказ = Ложь; // Переменная для хранения информации об отказе
                      КоллекцияПечатныхФорм = Новый ТаблицаЗначений; // Создаем коллекцию для печатных форм
                  
                      // Вызов метода для формирования печатных форм
                      КоллекцияПечатныхФорм = СформироватьПечатныеФормы(ИменаМакетов, Отказ);
                  
                      // Проверяем, произошел ли отказ
                      Если Отказ Тогда
                          Сообщить("Не удалось сформировать печатные формы.");
                          Возврат;
                      КонецЕсли;
                  
                      // Обработка сформированных печатных форм
                      Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
                          // Здесь можно добавить код для работы с каждой печатной формой
                          // Например, вывод на печать или сохранение в файл
                      КонецЦикла;
                  КонецПроцедуры
                  

                  В этом примере:
                  1. Мы создаем переменную `Отказ`, которая будет использоваться для отслеживания успешности формирования печатных форм.
                  2. Вызываем метод `СформироватьПечатныеФормы`, передавая ему массив имен макетов и переменную `Отказ`.
                  3. Проверяем значение переменной `Отказ`. Если оно истинно, выводим сообщение об ошибке.
                  4. Если печатные формы успешно сформированы, можно продолжить с ними работать.

                  Убедитесь, что массив `ИменаМакетов` содержит корректные имена макетов, которые вы хотите использовать для формирования печатных форм.

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

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

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

                    1. **Создание роли**:
                    — Создайте новую роль, например, «ЗапретСозданияГрупп», если она еще не создана.

                    2. **Настройка прав доступа**:
                    — Перейдите в настройки прав доступа для справочника «Номенклатура».
                    — Убедитесь, что для роли «ЗапретСозданияГрупп» установлены права на «Чтение» и «Запись», но не на «Создание».

                    3. **Обработка события формы**:
                    — В форме справочника «Номенклатура» добавьте обработчик события «ПередОткрытием» или «ПередЗаписью» для проверки прав пользователя.
                    — В обработчике добавьте следующий код:

                    1C
                    Процедура ПередОткрытием(Отказ)
                        Если РольДоступна("ЗапретСозданияГрупп") Тогда
                            Если ЭтаФорма.Элемент.Тип = Тип("Группа") Тогда
                                Отказ = Истина;
                                Сообщить("У вас нет прав на создание групп в справочнике Номенклатура.");
                            КонецЕсли;
                        КонецЕсли;
                    КонецПроцедуры
                    

                    4. **Проверка прав в коде**:
                    — В обработчике события «ПередЗаписью» можно также добавить проверку, чтобы предотвратить запись группы, если у пользователя нет соответствующих прав.

                    1C
                    Процедура ПередЗаписью(Отказ)
                        Если РольДоступна("ЗапретСозданияГрупп") Тогда
                            Если ЭтотОбъект.Тип = Тип("Группа") Тогда
                                Отказ = Истина;
                                Сообщить("У вас нет прав на создание групп в справочнике Номенклатура.");
                            КонецЕсли;
                        КонецЕсли;
                    КонецПроцедуры
                    

                    5. **Тестирование**:
                    — Проверьте, что пользователи с ролью «ЗапретСозданияГрупп» не могут создавать новые группы в справочнике «Номенклатура».

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

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

                      Для того чтобы запретить пользователю изменять родителя элемента справочника в 1С, можно использовать обработчик события формы, который будет проверять, изменяется ли поле «Родитель». Если оно изменяется, то можно вернуть его к предыдущему значению.

                      Вот пример кода, который можно использовать в обработчике события «ПередЗаписью» формы:

                      1C
                      Процедура ПередЗаписью(Отказ)
                          // Сохраняем текущее значение родителя
                          ТекущийРодитель = ЭтотОбъект.Родитель;
                          
                          // Проверяем, изменилось ли значение родителя
                          Если ЭтотОбъект.Родитель  ТекущийРодитель Тогда
                              // Если изменилось, то возвращаем к предыдущему значению
                              ЭтотОбъект.Родитель = ТекущийРодитель;
                              Сообщить("Изменение родителя запрещено.");
                              Отказ = Истина; // Отменяем запись
                          КонецЕсли;
                      КонецПроцедуры
                      

                      Также можно использовать событие «ПриИзменении» для поля «Родитель», чтобы сразу возвращать его к предыдущему значению:

                      1C
                      Процедура Родитель_ПриИзменении(Элемент)
                          // Возвращаем к предыдущему значению
                          ЭтотОбъект.Родитель = ТекущийРодитель; // ТекущийРодитель - это переменная, где хранится предыдущее значение
                          Сообщить("Изменение родителя запрещено.");
                      КонецПроцедуры
                      

                      Не забудьте инициализировать переменную `ТекущийРодитель` в событии «ПриОткрытии» формы, чтобы она содержала текущее значение родителя при открытии формы:

                      1C
                      Процедура ПриОткрытии()
                          ТекущийРодитель = ЭтотОбъект.Родитель;
                      КонецПроцедуры
                      

                      Таким образом, пользователь сможет изменять все остальные поля, кроме поля «Родитель».

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

                        Привет, Богдан! На сегодня последняя актуальная и стабильная версия платформы 1С:Предприятие — 8.3.25.1445, которая вышла 15 октября 2024 года.

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

                          Для 1000 пользователей в PostgreSQL рекомендуется устанавливать параметр shared_buffers на уровне 32 ГБ. Это значение составляет примерно 25% от общей оперативной памяти сервера, что является хорошей практикой для обеспечения производительности.

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

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

                            Вот пример скрипта для бэкапа баз данных в PostgreSQL:

                            sql
                            -- Установите необходимые параметры
                            DO $$
                            DECLARE
                                db_name TEXT;
                                backup_path TEXT := '/path/to/backup/';
                                backup_file TEXT;
                            BEGIN
                                -- Получаем список баз данных
                                FOR db_name IN SELECT datname FROM pg_database WHERE datistemplate = false LOOP
                                    -- Формируем имя файла для бэкапа
                                    backup_file := backup_path || db_name || '_' || to_char(current_timestamp, 'YYYYMMDD_HH24MISS') || '.sql';
                                    
                                    -- Выполняем бэкап
                                    EXECUTE format('pg_dump %I > %L', db_name, backup_file);
                                END LOOP;
                            END $$;
                            

                            ### Объяснение:
                            1. **Параметры**: Установите путь к папке, где будут храниться бэкапы.
                            2. **Цикл**: Скрипт проходит по всем базам данных, исключая шаблоны.
                            3. **Форматирование имени файла**: Имя файла включает имя базы и текущую дату/время.
                            4. **Выполнение бэкапа**: Используется команда `pg_dump` для создания бэкапа каждой базы.

                            Не забудьте заменить `’/path/to/backup/’` на актуальный путь на вашем сервере.

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

                              Привет, Богдан!

                              Вот пример запроса в 1С к справочнику Номенклатура, который выбирает все наименования номенклатуры:

                              1C
                              &НаСервере
                              Процедура ЗаполнитьНаСервере() 
                                  НашЗапрос = Новый Запрос;
                                  НашЗапрос.Текст = 
                                  "ВЫБРАТЬ
                                  |   Номенклатура.Наименование КАК Наименование
                                  |ИЗ
                                  |   Справочник.Номенклатура КАК Номенклатура";  
                              
                                  Результат = НашЗапрос.Выполнить().Выбрать();
                                  
                                  Пока Результат.Следующий() Цикл 
                                      Сообщить(Результат.Наименование);
                                  КонецЦикла
                              КонецПроцедуры
                              
                              &НаКлиенте
                              Процедура Заполнить(Команда)
                                  ЗаполнитьНаСервере();
                              КонецПроцедуры
                              

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

                              Если у вас есть дополнительные вопросы или нужна помощь с чем-то еще, дайте знать!

                            Просмотр 13 сообщений - с 1,531 по 1,543 (из 1,543 всего)
                            База знаний 1С