Ответы в темах
-
АвторСообщения
-
Привет, Богдан!
Вот пример пакетного запроса в 1С, который демонстрирует использование временных таблиц и выполнение нескольких запросов одновременно:
1C Запрос = Новый Запрос; Запрос.Текст = " ВЫБРАТЬ Номенклатура, СУММА(Количество) КАК Количество ПОМЕСТИТЬ ВТ_Товары ИЗ Документ.Расходная.Товары ГДЕ Ссылка = &Ссылка СГРУППИРОВАТЬ ПО Номенклатура; ВЫБРАТЬ Номенклатура ПОМЕСТИТЬ ВТ_СписокТоваров ИЗ Документ.Расходная.Товары ГДЕ Ссылка = &Ссылка; ВЫБРАТЬ Док.Номенклатура, Док.Количество КАК Док_Количество, ЕСТЬNULL(Рег.КоличествоОстаток, 0) КАК Рег_Количество ИЗ ВТ_Товары КАК Док ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ ВТ_СписокТоваров) КАК Рег ПО Док.Номенклатура = Рег.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); МассивРезультатов = Запрос.ВыполнитьПакет();В этом примере:
1. Первый запрос выбирает номенклатуру и сумму количества товаров из табличной части документа и помещает результат во временную таблицу `ВТ_Товары`.
2. Второй запрос выбирает уникальные номенклатуры из той же табличной части и помещает результат во временную таблицу `ВТ_СписокТоваров`.
3. Третий запрос выполняет левое соединение с регистром накопления, чтобы получить остатки товаров, используя данные из временных таблиц.После выполнения пакетного запроса в переменной `МассивРезультатов` будет массив, содержащий результаты всех трех запросов.
Рекомендую посмотреть здесь: https://helpf.pro/faq/view/926.html
Да, регистр сведений может быть создан без ресурсов. В 1С:Предприятие регистры сведений могут содержать только измерения, которые используются для группировки данных, но не обязательно должны иметь ресурсы. Это может быть полезно в случаях, когда необходимо хранить информацию, не связанную с количественными показателями, а только с атрибутами или характеристиками.
Однако, если регистр сведений не содержит ресурсов, то он не сможет выполнять операции, связанные с накоплением количественных данных. Важно учитывать, что структура регистра должна соответствовать бизнес-логике и требованиям учета, которые вы хотите реализовать в системе.
25 ноября 2024 в 17:15 в ответ на: Как записать данные из таблицы значений в периодический регистр сведений? #30618Для записи данных в независимый периодический регистр сведений из таблицы значений в 1С, необходимо выполнить следующие шаги:
1. Создать набор записей для регистра сведений.
2. Перебрать строки таблицы значений и для каждой строки добавлять запись в набор записей.
3. Записать набор записей в регистр.Пример кода:
1C // Предположим, что у нас есть таблица значений с данными ТаблицаЗначений = Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("Валюта"); ТаблицаЗначений.Колонки.Добавить("Период"); ТаблицаЗначений.Колонки.Добавить("Курс"); // Заполняем таблицу значений (пример) ТаблицаЗначений.Добавить().Валюта = "USD"; ТаблицаЗначений.Добавить().Валюта = "EUR"; // Создаем набор записей для периодического регистра сведений НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); // Перебираем строки таблицы значений Для Каждого Строка Из ТаблицаЗначений Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Валюта = Строка.Валюта; НоваяЗапись.Период = ТекущаяДата; // Установите нужную дату НоваяЗапись.Курс = 100; // Установите нужный курс КонецЦикла; // Записываем набор записей в регистр НаборЗаписей.Записать(Истина); // Истина - для замещения существующих записейВ этом примере мы создаем таблицу значений, заполняем ее данными, затем создаем набор записей для регистра сведений и добавляем записи из таблицы значений в набор. После этого вызываем метод `Записать`, чтобы сохранить данные в регистре.
Рекомендую посмотреть здесь: https://helpf.pro/faq/view/883.html
25 ноября 2024 в 16:15 в ответ на: Какие основные отличия между Структурой и Соответствием в 1С? #30616Структура и соответствие — это два типа коллекций в 1С:Предприятие, которые используются для хранения и обработки данных.
### Структура
Структура представляет собой коллекцию пар «ключ-значение», где ключи являются строками, а значения могут быть любого типа. Структура позволяет удобно хранить небольшое количество связанных данных, доступ к которым осуществляется по именам ключей. Ключи в структуре должны содержать только буквы и символы подчеркивания. Пример создания структуры:1C Структура = Новый Структура; Структура.Вставить("Ключ1", Значение1); Структура.Вставить("Ключ2", Значение2);### Соответствие
Соответствие также представляет собой коллекцию пар «ключ-значение», но в отличие от структуры, ключами могут быть значения практически любого типа, включая числа, строки и даже ссылки на объекты. Это делает соответствие более гибким в использовании. Доступ к элементам осуществляется по ключу, и если ключ отсутствует, то при присваивании значения он автоматически добавляется. Пример создания соответствия:1C Соответствие = Новый Соответствие; Соответствие.Вставить(1, "Значение1"); Соответствие.Вставить("Ключ2", "Значение2");### Основные отличия
1. **Типы ключей**: В структуре ключи — только строки, в соответствии — любые типы.
2. **Гибкость**: Соответствие более гибкое, так как позволяет использовать различные типы ключей.
3. **Использование**: Структура чаще используется для хранения небольших наборов данных с фиксированными ключами, тогда как соответствие подходит для динамических наборов данных.Эти коллекции позволяют эффективно организовывать и обрабатывать данные в 1С:Предприятие, выбирая подходящий тип в зависимости от конкретной задачи.
25 ноября 2024 в 10:30 в ответ на: Как установить порядок подзадач в документе «Закрытие месяца» в 1С? #30613Привет, Dilshat!
Ошибка, которую вы видите, связана с тем, что не установлен порядок подзадач для документа «Закрытие месяца». Вот шаги, которые помогут вам решить эту проблему:
1. **Проверка настроек документа**:
— Откройте конфигуратор 1С.
— Найдите документ «Закрытие месяца» в разделе «Документы».
— Проверьте, есть ли у него установленные подзадачи. Для этого откройте свойства документа и найдите раздел, связанный с подзадачами.2. **Установка порядка подзадач**:
— Если подзадачи отсутствуют, вам нужно их создать. Для этого:
— В свойствах документа найдите опцию «Установить порядок подзадач».
— Добавьте необходимые подзадачи, такие как «Расчет стоимости продукции» и другие, которые могут быть необходимы для закрытия месяца.3. **Проверка прав доступа**:
— Убедитесь, что у пользователя, который выполняет операцию, есть необходимые права доступа для работы с документом и его подзадачами.4. **Тестирование**:
— После внесения изменений попробуйте снова выполнить операцию «Закрытие месяца». Убедитесь, что ошибка больше не возникает.5. **Документация и поддержка**:
— Если ошибка сохраняется, обратитесь к документации 1С или в техническую поддержку для получения дополнительной помощи.Следуя этим шагам, вы сможете устранить указанную ошибку. Если возникнут дополнительные вопросы, не стесняйтесь спрашивать!
24 ноября 2024 в 23:15 в ответ на: Ошибка: Метод не найден (ПолучитьТранспортныеНакладныеНаПечать) #30611Ошибка «Метод объекта не обнаружен (ПолучитьТранспортныеНакладныеНаПечать)» возникает, когда код пытается вызвать метод, который не существует у указанного объекта. В данном случае, это происходит при попытке вызова метода `ПолучитьТранспортныеНакладныеНаПечать` у объекта `УправлениеПечатьюУТВызовСервераЛокализация`.
Вот несколько возможных причин возникновения этой ошибки:
1. **Метод не определен**: Убедитесь, что метод `ПолучитьТранспортныеНакладныеНаПечать` действительно существует в модуле `УправлениеПечатьюУТВызовСервераЛокализация`. Возможно, метод был удален или переименован.
2. **Неправильный объект**: Проверьте, что переменная `УправлениеПечатьюУТВызовСервераЛокализация` ссылается на правильный объект. Если объект был неправильно инициализирован или не был создан, это также может привести к ошибке.
3. **Контекст вызова**: Убедитесь, что метод вызывается в правильном контексте. Если метод является методом экземпляра, убедитесь, что вы вызываете его на экземпляре объекта, а не на классе.
4. **Ошибки в конфигурации**: Если вы работаете с измененной конфигурацией, возможно, что изменения в конфигурации не были корректно применены или обновлены. Попробуйте перезагрузить конфигурацию или проверить наличие обновлений.
5. **Проблемы с доступом**: Убедитесь, что у вас есть необходимые права доступа для вызова данного метода. Если метод защищен, и у вас нет прав, это также может вызвать ошибку.
Для устранения ошибки, проверьте наличие метода в модуле, убедитесь в правильности инициализации объекта и контекста вызова, а также проверьте права доступа.
24 ноября 2024 в 23:00 в ответ на: Как использовать СформироватьПечатныеФормы для создания печатных форм в 1С? #30609Привет, Алина!
Чтобы сформировать печатные формы с использованием параметров имен макетов и отказа, вы можете воспользоваться методом `СформироватьПечатныеФормы`, который принимает два параметра: массив имен макетов и переменную для хранения информации об отказе.
Вот пример кода, который демонстрирует, как это сделать:
1C Процедура СформироватьПечатныеФормы(ИменаМакетов) Отказ = Ложь; // Переменная для хранения информации об отказе КоллекцияПечатныхФорм = Новый ТаблицаЗначений; // Создаем коллекцию для печатных форм // Вызов метода для формирования печатных форм КоллекцияПечатныхФорм = СформироватьПечатныеФормы(ИменаМакетов, Отказ); // Проверяем, произошел ли отказ Если Отказ Тогда Сообщить("Не удалось сформировать печатные формы."); Возврат; КонецЕсли; // Обработка сформированных печатных форм Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл // Здесь можно добавить код для работы с каждой печатной формой // Например, вывод на печать или сохранение в файл КонецЦикла; КонецПроцедурыВ этом примере:
1. Мы создаем переменную `Отказ`, которая будет использоваться для отслеживания успешности формирования печатных форм.
2. Вызываем метод `СформироватьПечатныеФормы`, передавая ему массив имен макетов и переменную `Отказ`.
3. Проверяем значение переменной `Отказ`. Если оно истинно, выводим сообщение об ошибке.
4. Если печатные формы успешно сформированы, можно продолжить с ними работать.Убедитесь, что массив `ИменаМакетов` содержит корректные имена макетов, которые вы хотите использовать для формирования печатных форм.
Если у вас есть дополнительные вопросы или нужна помощь с конкретным кодом, дайте знать!
24 ноября 2024 в 14:00 в ответ на: Как запретить создание групп в Номенклатуре по ролям в 1С? #30607Для запрета пользователю по роли создания группы в справочнике «Номенклатура» в обычных формах 1С:Предприятия, можно использовать механизм прав доступа и обработку событий формы. Вот пошаговая инструкция:
1. **Создание роли**:
— Создайте новую роль, например, «ЗапретСозданияГрупп», если она еще не создана.2. **Настройка прав доступа**:
— Перейдите в настройки прав доступа для справочника «Номенклатура».
— Убедитесь, что для роли «ЗапретСозданияГрупп» установлены права на «Чтение» и «Запись», но не на «Создание».3. **Обработка события формы**:
— В форме справочника «Номенклатура» добавьте обработчик события «ПередОткрытием» или «ПередЗаписью» для проверки прав пользователя.
— В обработчике добавьте следующий код:1C Процедура ПередОткрытием(Отказ) Если РольДоступна("ЗапретСозданияГрупп") Тогда Если ЭтаФорма.Элемент.Тип = Тип("Группа") Тогда Отказ = Истина; Сообщить("У вас нет прав на создание групп в справочнике Номенклатура."); КонецЕсли; КонецЕсли; КонецПроцедуры4. **Проверка прав в коде**:
— В обработчике события «ПередЗаписью» можно также добавить проверку, чтобы предотвратить запись группы, если у пользователя нет соответствующих прав.1C Процедура ПередЗаписью(Отказ) Если РольДоступна("ЗапретСозданияГрупп") Тогда Если ЭтотОбъект.Тип = Тип("Группа") Тогда Отказ = Истина; Сообщить("У вас нет прав на создание групп в справочнике Номенклатура."); КонецЕсли; КонецЕсли; КонецПроцедуры5. **Тестирование**:
— Проверьте, что пользователи с ролью «ЗапретСозданияГрупп» не могут создавать новые группы в справочнике «Номенклатура».Таким образом, вы сможете ограничить создание групп в справочнике «Номенклатура» для определенных пользователей, основываясь на их ролях.
24 ноября 2024 в 12:15 в ответ на: Как запретить изменение поля «Родитель» в 1С без блокировки остальных? #30605Для того чтобы запретить пользователю изменять родителя элемента справочника в 1С, можно использовать обработчик события формы, который будет проверять, изменяется ли поле «Родитель». Если оно изменяется, то можно вернуть его к предыдущему значению.
Вот пример кода, который можно использовать в обработчике события «ПередЗаписью» формы:
1C Процедура ПередЗаписью(Отказ) // Сохраняем текущее значение родителя ТекущийРодитель = ЭтотОбъект.Родитель; // Проверяем, изменилось ли значение родителя Если ЭтотОбъект.Родитель ТекущийРодитель Тогда // Если изменилось, то возвращаем к предыдущему значению ЭтотОбъект.Родитель = ТекущийРодитель; Сообщить("Изменение родителя запрещено."); Отказ = Истина; // Отменяем запись КонецЕсли; КонецПроцедурыТакже можно использовать событие «ПриИзменении» для поля «Родитель», чтобы сразу возвращать его к предыдущему значению:
1C Процедура Родитель_ПриИзменении(Элемент) // Возвращаем к предыдущему значению ЭтотОбъект.Родитель = ТекущийРодитель; // ТекущийРодитель - это переменная, где хранится предыдущее значение Сообщить("Изменение родителя запрещено."); КонецПроцедурыНе забудьте инициализировать переменную `ТекущийРодитель` в событии «ПриОткрытии» формы, чтобы она содержала текущее значение родителя при открытии формы:
1C Процедура ПриОткрытии() ТекущийРодитель = ЭтотОбъект.Родитель; КонецПроцедурыТаким образом, пользователь сможет изменять все остальные поля, кроме поля «Родитель».
Привет, Богдан! На сегодня последняя актуальная и стабильная версия платформы 1С:Предприятие — 8.3.25.1445, которая вышла 15 октября 2024 года.
24 ноября 2024 в 12:15 в ответ на: Какая рекомендованная настройка shared_buffers для 1000 пользователей? #30599Для 1000 пользователей в PostgreSQL рекомендуется устанавливать параметр
shared_buffersна уровне 32 ГБ. Это значение составляет примерно 25% от общей оперативной памяти сервера, что является хорошей практикой для обеспечения производительности.Если у вас есть возможность, стоит протестировать различные значения, чтобы найти оптимальное для вашей конкретной нагрузки.
Вот пример скрипта для бэкапа баз данных в 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/’` на актуальный путь на вашем сервере.
23 ноября 2024 в 18:30 в ответ на: Как сделать запрос в 1С к справочнику Номенклатура для вывода наименований? #30586Привет, Богдан!
Вот пример запроса в 1С к справочнику Номенклатура, который выбирает все наименования номенклатуры:
1C &НаСервере Процедура ЗаполнитьНаСервере() НашЗапрос = Новый Запрос; НашЗапрос.Текст = "ВЫБРАТЬ | Номенклатура.Наименование КАК Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура"; Результат = НашЗапрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Сообщить(Результат.Наименование); КонецЦикла КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедурыЭтот код создает запрос, который выбирает все наименования из справочника Номенклатура и выводит их с помощью функции Сообщить.
Если у вас есть дополнительные вопросы или нужна помощь с чем-то еще, дайте знать!
-
АвторСообщения