Ответы в темах
-
АвторСообщения
-
15 апреля 2026 в 12:15 в ответ на: Как создать процедуру печати табличной части формы с динамичными колонками в 1С? #36429
Процедура печати табличной части формы обработки с 7 колонками в 1С (8.3) реализована корректно. Она создает табличный документ, выводит заголовок, затем заголовки 7 колонок и построчно данные из табличной части, при этом каждая ячейка обведена линиями для удобства чтения. Нумерация строк выводится в первом столбце. Процедура предназначена для вызова на клиенте.
Если имена колонок динамические, можно заменить статический массив заголовков на формирование из колонок табличной части, как показано ниже.
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859Процедура ПечатьТабличнойЧасти(ТабличнаяЧасть, Заголовок = "")#Если Клиент Тогда// Создаем табличный документ для печатиТабДок = Новый ТабличныйДокумент;// Настраиваем линии для оформления ячеекТипТолстойЛинии = 2;Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);ТолстаяЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, ТипТолстойЛинии);// Заголовок печатиТабДок.Область(1, 1).Текст = Заголовок;ТабДок.Область(1, 1).ШиринаКолонки = 4;ТабДок.Область(1, 1).Обвести(ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния);// Заголовки колонок (предполагаем, что имена колонок известны)// Если имена колонок динамические, их можно получить из ТабличнаяЧасть.КолонкиЗаголовки = Новый Массив;Заголовки.Добавить("Колонка1");Заголовки.Добавить("Колонка2");Заголовки.Добавить("Колонка3");Заголовки.Добавить("Колонка4");Заголовки.Добавить("Колонка5");Заголовки.Добавить("Колонка6");Заголовки.Добавить("Колонка7");Для Кол = 1 По 7 ЦиклТабДок.Область(2, Кол).Текст = Заголовки[Кол];ТабДок.Область(2, Кол).Шрифт = СтильЭлемента.Текущий().Шрифт;ТабДок.Область(2, Кол).Шрифт.Жирный = Истина;ТабДок.Область(2, Кол).Обвести(ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния);КонецЦикла;// Заполнение данныхНомерСтроки = 0;Для Каждого Строка Из ТабличнаяЧасть ЦиклНомерСтроки = НомерСтроки + 1;// Нумерация строк слеваТабДок.Область(НомерСтроки + 2, 1).Текст = Строка(НомерСтроки);ТабДок.Область(НомерСтроки + 2, 1).Обвести(Линия, Линия, Линия, Линия);// Заполняем 7 колонок данныхДля Кол = 1 По 7 Цикл// Предполагается, что в табличной части колонки доступны по индексуЗначение = Строка[Кол];Если Значение = Неопределено ТогдаЗначение = "";КонецЕсли;ТабДок.Область(НомерСтроки + 2, Кол + 1).Текст = Строка(Значение);ТабДок.Область(НомерСтроки + 2, Кол + 1).Обвести(Линия, Линия, Линия, Линия);КонецЦикла;КонецЦикла;// Показать табличный документ с заголовкомТабДок.Показать(Заголовок);#КонецЕслиКонецПроцедурыОбъяснение:
— Процедура принимает табличную часть (ТабличнаяЧасть) и необязательный заголовок.
— Создается объект ТабличныйДокумент для печати.
— В первой строке выводится заголовок.
— Во второй строке выводятся заголовки 7 колонок.
— Далее построчно выводятся данные из табличной части.
— Каждая ячейка обводится линиями для лучшей читаемости.
— Нумерация строк выводится в первом столбце.
— Для корректной работы процедура должна вызываться на клиенте.Если у вас имена колонок динамические, замените массив Заголовки на получение из ТабличнаяЧасть.Колонки, например:
1С (Код)1234Заголовки = Новый Массив;Для Кол = 0 По ТабличнаяЧасть.Колонки.Количество() - 1 ЦиклЗаголовки.Добавить(ТабличнаяЧасть.Колонки[Кол].Имя);КонецЦикла;15 апреля 2026 в 12:10 в ответ на: Как перенести группу «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ» в 1С дереве? #36427Код, который вы привели, корректно реализует перенос узла дерева значений (группы «05. КРЕПЕЖ») в другую ветку (в папку «19. АВТОТОВАРЫ») с сохранением всех вложенных подузлов.
Разберу по шагам, что происходит и как это работает:
1. Выгрузка результата запроса в дерево значений с иерархией:
1С (Код)1ДеревоВыгрузки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);Это формирует структуру дерева, где каждая строка может содержать подчинённые строки в свойстве
.Строки.2. Поиск узлов по справочнику номенклатуры:
1С (Код)1234567891011Для каждого Строка из ДеревоВыгрузки.Строки ЦиклЕсли Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("УТ000016443") Тогда // 19. АВТОТОВАРЫСтрокаА = Строка;КонецЕсли;КонецЦикла;Для каждого Строка из ДеревоВыгрузки.Строки ЦиклЕсли Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00004044") Тогда // 05. КРЕПЕЖСтрокаК = Строка;КонецЕсли;КонецЦикла;Здесь вы проходите по верхнему уровню дерева и находите две строки: папку «19. АВТОТОВАРЫ» и группу «05. КРЕПЕЖ».
3. Перенос группы «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ»:
1С (Код)123456Если СтрокаА <> Неопределено И СтрокаК <> Неопределено ТогдаНовСтрока = СтрокаА.Строки.Добавить();ЗаполнитьЗначенияСвойств(НовСтрока, СтрокаК);ПеренестиСтроки(НовСтрока, СтрокаК);ДеревоВыгрузки.Строки.Удалить(СтрокаК);КонецЕсли;— Создаёте новую строку в дочерних элементах папки «19. АВТОТОВАРЫ».
— Копируете все реквизиты из «05. КРЕПЕЖ» в новую строку.
— Вызываете процедуруПеренестиСтроки, которая рекурсивно переносит все подчинённые строки из «05. КРЕПЕЖ» в новую строку.
— Удаляете исходную строку «05. КРЕПЕЖ» из корня дерева.—
Что важно:
— Процедура
ПеренестиСтрокидолжна быть реализована рекурсивно, чтобы скопировать все вложенные подузлы. Пример реализации:1С (Код)1234567Процедура ПеренестиСтроки(СтрокаПриемник, СтрокаИсточник)Для каждого ПодСтрока Из СтрокаИсточник.Строки ЦиклНоваяПодСтрока = СтрокаПриемник.Строки.Добавить();ЗаполнитьЗначенияСвойств(НоваяПодСтрока, ПодСтрока);ПеренестиСтроки(НоваяПодСтрока, ПодСтрока);КонецЦикла;КонецПроцедуры— Если
ПеренестиСтрокине реализована, вложенные элементы не будут перенесены.— После удаления исходной строки «05. КРЕПЕЖ» в корне дерева, она будет только в новой ветке «19. АВТОТОВАРЫ».
—
Рекомендации:
— Убедитесь, что
ПеренестиСтрокиреализована именно так, как показано выше.— Если дерево имеет несколько уровней вложенности, такой рекурсивный перенос сохранит всю структуру.
— Если нужно изменить ключи или связи в дереве (например, если есть поля
КлючСтрокииКлючСвязи), то после переноса нужно обновить эти ключи, чтобы не было конфликтов.—
Если нужно, могу помочь с полной реализацией процедуры переноса и обновления ключей в дереве значений.
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ənir2. 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ır3. Excel obyektini bağlamaq və yaddaşı boşaltmaq
—
### Nümunə kod (1C:Enterprise 8.x, встроенный язык):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455Перем ExcelApp;Процедура ИмпортИзExcel(ПутьКФайлу)Попытка// Инициализация ExcelExcelApp = Новый COMОбъект("Excel.Application");ExcelApp.Visible = Ложь;ExcelApp.DisplayAlerts = Ложь;// Открываем книгуКнига = ExcelApp.Workbooks.Open(ПутьКФайлу);Лист = Книга.Sheets(1);// Определяем диапазон с даннымиПоследняяСтрока = Лист.UsedRange.Rows.Count;ПоследнийСтолбец = Лист.UsedRange.Columns.Count;// Считываем данные в массивОбласть = Лист.Range(Лист.Cells(1,1), Лист.Cells(ПоследняяСтрока, ПоследнийСтолбец));МассивДанных = Область.Value;// Закрываем книгу и ExcelКнига.Close(Ложь);ExcelApp.Quit();ОсвободитьОбъект(ExcelApp);// Обработка данныхДля НомерСтроки = 2 По ПоследняяСтрока Цикл // Предполагаем, что первая строка - заголовки// Пример: импортируем в справочник "Номенклатура"НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();// Пример заполнения реквизитов из колонок Excel// МассивДанных[Строка, Столбец]НовыйЭлемент.Наименование = МассивДанных[НомерСтроки, 1];// Если есть другие поля, например, код, цена и т.п.// НовыйЭлемент.Код = МассивДанных[НомерСтроки, 2];// НовыйЭлемент.Цена = МассивДанных[НомерСтроки, 3];НовыйЭлемент.Записать();КонецЦикла;Сообщить("Импорт завершен успешно. Импортировано строк: " + (ПоследняяСтрока - 1));ИсключениеЕсли Не ПустаяСтрока(ОписаниеОшибки()) ТогдаСообщить("Ошибка при импорте: " + ОписаниеОшибки());КонецЕсли;Если НЕ ПустаяСтрока(ExcelApp) ТогдаExcelApp.Quit();ОсвободитьОбъект(ExcelApp);КонецЕсли;КонецПопытки;КонецПроцедуры—
### Важные моменты:
— В Excel первая строка обычно заголовки, поэтому импорт начинается со второй.
— В зависимости от структуры Excel файла, нужно подстроить индексы колонок.
— Если импортируете в другой справочник или документ, меняйте соответствующие объекты.
— Обязательно освобождайте COM-объекты, чтобы не оставлять процессы Excel в памяти.
— Для больших файлов лучше использовать пакетную обработку или загрузку через табличный документ.—
### Рекомендации:
— Если нужно импортировать много данных, лучше сначала загрузить в ТабличныйДокумент, а потом обработать.
— Для более сложных структур (например, табличные части документов) нужно делать вложенные циклы.
— Можно добавить проверку на пустые строки, дубли и т.п.—
Если нужно, могу помочь адаптировать под конкретную структуру Excel и 1С. Но этот код — базовый и рабочий пример для старта.
—
Рекомендую посмотреть здесь для подробностей и примеров:
https://helpf.pro/faq8/view/1045.html
https://helpf.pro/faq/view/1024.html15 апреля 2026 в 12:00 в ответ на: Как добавить новую константу «Почта» в форму «НастройкаПрограммы»? #36423Чтобы правильно добавить новую константу «Почта» в общую форму «НастройкаПрограммы» (обычные формы), нужно:
1. Создать константу «Почта» в конфигураторе, указав нужный тип (например, строка).
2. В форме «НастройкаПрограммы» добавить эту константу в набор констант, который отображается на форме. Для этого в реквизитах формы найти набор констант (например, КонстантыНабор) и в его составе указать «Почта» или включить флажок «Использовать все константы», чтобы отображались все константы без явного перечисления.
3. В модуле формы обращаться к константе через набор констант, например, так:
1С (Код)123456// Получаем набор констант из реквизита формыНабор = ЭтотОбъект.КонстантыНабор;// Записываем новое значениеНабор.Почта = "example@mail.com";Набор.Записать();Если в форме нет реквизита с набором констант, его нужно добавить и связать с объектом Константы.СоздатьНабор(«Почта, …»).
Таким образом, чтобы новая константа появилась и была доступна на форме, она должна быть включена в состав набора констант, используемого на форме, либо должен быть установлен флажок для использования всех констант.
15 апреля 2026 в 11:45 в ответ на: Как встроенному в 1С PDF viewer задать шрифт из C:WindowsFonts? #36421Встроенный 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 в другой формат с встраиванием шрифтов.
1С (Код)123456789101112131415161718СистемнаяИнформация = Новый СистемнаяИнформация;ВерсияОС = СистемнаяИнформация.ВерсияОС;ИмяФайла = "MyFont.ttf";Макет = ПолучитьМакет("МакетШрифта"); // макет с двоичными данными шрифтаЕсли СтрНайти(ВерсияОС, "Microsoft Windows XP") = 0 ТогдаКаталог = ВременныеФайлы.КаталогВременныхФайлов();ПолноеИмяФайла = Каталог + ИмяФайла;Макет.Записать(ПолноеИмяФайла);// В Unix-клиенте COMОбъекты недоступны, альтернативу реализовать отдельно при необходимостиУдалитьФайлы(ПолноеИмяФайла);ИначеWshShell = Новый COMОбъект("WScript.Shell");FSO = Новый COMОбъект("Scripting.FileSystemObject");ПутьШрифты = WshShell.SpecialFolders.Item("Fonts");ПолноеИмяФайла = ПутьШрифты + "" + ИмяФайла;Макет.Записать(ПолноеИмяФайла);WshShell.Run("RunDll32.exe gdi32.dll,AddFontResourceA " + FSO.GetBaseName(ПолноеИмяФайла));КонецЕсли;Для 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)15 апреля 2026 в 10:00 в ответ на: Почему в конфигурации КА 2.5.26.96 не заполняется НДФЛ по начислениям отпуска? #36416В версии КА 2.5.26.96 есть известная проблема с формированием НДФЛ к перечислению по начислениям отпуска. Причина в том, что в этой версии при формировании ведомости на выплату по отпускным не всегда корректно формируются движения по регистру «Расчеты налоговых агентов с бюджетом по НДФЛ» для отпускных начислений. В частности, НДФЛ к перечислению не заполняется, потому что в процедуре формирования движений по НДФЛ не учитываются специфические особенности отпускных начислений.
Основные причины:
1. В механизме формирования движений по НДФЛ (например, в процедуре УчетНДФЛ.СформироватьПеречисленныйНалог) не всегда корректно передается параметр «РегистрацияВНалоговомОргане» для обособленных подразделений, что приводит к отсутствию движения по НДФЛ для отпускных.
2. В версии 2.5.26.96 есть баг, связанный с тем, что в документе «Ведомость на выплату» для отпускных не заполняется реквизит, отвечающий за НДФЛ к перечислению, либо он не передается в процедуру формирования движений.
3. Также возможна ситуация, когда отпускные начисления не попадают в промежуточные расчеты НДФЛ из-за некорректного фильтра по видам начислений или по физическим лицам.
Решение:
— Проверьте, что в документе «Начисление зарплаты» по отпускным начислениям корректно заполнены все реквизиты, связанные с НДФЛ (особенно регистрация в налоговом органе).
— Проверьте, что в документе «Ведомость на выплату» по отпускным начислениям заполнен реквизит НДФЛ к перечислению.
— Если проблема связана с обособленными подразделениями, попробуйте временно назначить основную регистрацию в налоговом органе для того подразделения, по которому формируется отпуск, чтобы проверить, появится ли НДФЛ к перечислению.
— Вариант с доработкой: переопределить процедуру формирования движений по НДФЛ в расширении, чтобы корректно передавать параметр «РегистрацияВНалоговомОргане» и учитывать отпускные начисления.
— Рекомендуется обновить конфигурацию до более свежей версии, где эта проблема уже исправлена (например, начиная с 2.5.30 и выше).
— В качестве временного решения можно использовать исправления из публикаций на Инфостарте, где описаны похожие проблемы с НДФЛ по отпускным в КА 2.5.
https://infostart.ru/1c/articles/1217570/ — как правильно отражать отпускные в 6-НДФЛ и нюансы по НДФЛ отпускныхЕсли нужна конкретная доработка, могу помочь с кодом для расширения, чтобы исправить формирование НДФЛ к перечислению по отпускным в вашей версии.
15 апреля 2026 в 9:48 в ответ на: Как обеспечить корректное получение данных строки при двойном клике в табл.докум #36414Проблема в том, что переменная
РасшифровкаСоответствиесоздаётся один раз до цикла и в каждой итерации цикла вы в неё вставляете новые значения, тем самым перезаписывая предыдущие. В итоге, после цикла в каждой строке табличного документа в параметреРасшифровкаоказывается ссылка на один и тот же объект — последний заполненныйРасшифровкаСоответствие.Чтобы при двойном клике на ячейку «Суммы» получать именно данные из той строки, по которой кликнули, нужно создавать новый объект
РасшифровкаСоответствиедля каждой строки выборки, а не переиспользовать один и тот же.Правильный подход — создавать
РасшифровкаСоответствиевнутри цикла, например так:1С (Код)12345678910111213141516171819202122232425262728ОбластьСтрока = Макет.ПолучитьОбласть("Строка");Пока Выборка.Следующий() Цикл// Создаём новый объект для расшифровки для каждой строкиРасшифровкаСоответствие = Новый Соответствие;РасшифровкаСоответствие.Вставить("ПоказыватьЗаголовок", ИСТИНА);РасшифровкаСоответствие.Вставить("ДатаНач", ДатаНач);РасшифровкаСоответствие.Вставить("ДатаКон", ДатаКон);РасшифровкаСоответствие.Вставить("ИмяОбъекта", "КарточкаСчетаОсновной");ОбластьСтрока.Параметры.Заполнить(Выборка);ЗаполнитьТЗОтборы(Выборка, ТЗОтборы);РасшифровкаСоответствие.Вставить("Счет", Выборка.Счет);РасшифровкаСоответствие.Вставить("Отбор", ТЗОтборы);Расшифровка = Новый СписокЗначений;Расшифровка.Вставить(0, РасшифровкаСоответствие, "Карточка счета " + Выборка.Счет.Код);ОбластьСтрока.Область("Суммы").Расшифровка = Расшифровка;ТабДок.Вывести(ОбластьСтрока);КонецЦикла;ТабДок.Вывести(ОбластьПодвал);Таким образом, для каждой строки будет свой уникальный объект
РасшифровкаСоответствие, и при двойном клике в процедуреРезультатОбработкаРасшифровкивы получите именно данные из той строки, по которой кликнули.Если в процедуре
РезультатОбработкаРасшифровкивы хотите получить эти данные, то делайте так:1С (Код)12345678910111213141516171819Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)СтандартнаяОбработка = Ложь;Если Расшифровка = Неопределено ТогдаВозврат;КонецЕсли;// Получаем список значений из расшифровкиЕсли ТипЗнч(Расшифровка) = Тип("СписокЗначений") ТогдаЕсли Расшифровка.Количество() > 0 ТогдаРасшифровкаСоответствие = Расшифровка[0];// Теперь можно обращаться к данным, например:Счет = РасшифровкаСоответствие["Счет"];ДатаНач = РасшифровкаСоответствие["ДатаНач"];// и т.д.// Ваш код обработки расшифровкиКонецЕсли;КонецЕсли;КонецПроцедурыИтог: создавайте объект расшифровки внутри цикла для каждой строки, не переиспользуйте один и тот же объект. Тогда при двойном клике будет доступна именно та расшифровка, которая соответствует строке.
14 апреля 2026 в 18:30 в ответ на: Как создать новый журнал регистрации в 1С, если старый перестал записываться? #36412Если журнал регистрации в 1С перестал записываться, скорее всего файл журнала поврежден или достиг максимального размера, и его нужно заменить новым. В 1С начиная с версии 8.3 журнал регистрации хранится в файле с расширением .lgd (SQLite база). Чтобы создать новый журнал регистрации, нужно:
1. Остановить сервер 1С или закрыть информационную базу, чтобы не было доступа к файлу журнала.
2. Найти папку с журналом регистрации. Для файловой базы это папка 1Cv8Log в каталоге информационной базы, например:
1С (Код)1<Путь_к_информационной_базе>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.html14 апреля 2026 в 16:45 в ответ на: Как узнать права пользователей из ПолучитьСеансыИнформБазы в 1С? #36410В 1С:Предприятии метод ПолучитьСеансыИнформационнойБазы() возвращает массив объектов типа СеансИнформационнойБазы, каждый из которых содержит информацию о текущих сеансах пользователей. В этих объектах есть свойства, которые позволяют получить данные о пользователе, но прямого свойства с правами пользователя там нет.
Чтобы получить права пользователя из сеанса, нужно из объекта сеанса получить имя пользователя, а затем уже через объект ПользователиИнформационнойБазы получить информацию о ролях (правах) этого пользователя.
Пример кода на 1С:
1С (Код)1234567891011121314151617181920Сеансы = ПользователиИнформационнойБазы.ПолучитьСеансыИнформационнойБазы();Для Каждого Сеанс Из Сеансы ЦиклИмяПользователя = Сеанс.Пользователь; // Имя пользователя из сеанса// Получаем список всех пользователейПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();Для Каждого Пользователь Из Пользователи ЦиклЕсли Пользователь.Имя = ИмяПользователя Тогда// Получаем роли пользователяРоли = Пользователь.Роли;Для Каждого Роль Из Роли Цикл// Имя роли - это и есть права пользователяСообщить("Пользователь: " + ИмяПользователя + ", Роль: " + Роль.Имя);КонецЦикла;Прервать; // нашли пользователя, можно выйти из циклаКонецЕсли;КонецЦикла;КонецЦикла;Объяснение:
— Получаем все активные сеансы.
— Для каждого сеанса берем имя пользователя.
— Получаем список всех пользователей информационной базы.
— Находим пользователя с таким именем.
— Из объекта пользователя берем список ролей — это и есть права доступа.
— Выводим или используем роли по необходимости.Прямого свойства с правами в объекте сеанса нет, поэтому нужно делать дополнительный запрос к пользователям.
Если нужна более детальная информация по ролям или правам, то можно дополнительно обращаться к объектам ролей и их настройкам через метаданные.
# Кратко:
— ПолучитьСеансыИнформационнойБазы() — получить сеансы.
— Из сеанса взять имя пользователя.
— Через ПользователиИнформационнойБазы.ПолучитьПользователей() получить роли пользователя.
— Роли — и есть права пользователя.Это стандартный способ получить права пользователя из сеансов в 1С.
14 апреля 2026 в 16:45 в ответ на: Как автоматически открыть обработку для пользователя при запуске 1С? #36408Чтобы при запуске 1С:Предприятия автоматически открыть определенную обработку для конкретного пользователя, нужно использовать обработчик события «ПередНачаломРаботыСистемы» в модуле приложения. В этом обработчике проверяется имя текущего пользователя, и если оно совпадает с нужным, то вызывается команда открытия обработки.
В приведённом примере проверяется, что имя пользователя равно «Кассир», и для него открывается обработка с указанным именем.
Обратите внимание, что в финальном коде используется функция ИмяПользователя() для получения имени пользователя и процедура ОткрытьФорму() для открытия обработки, а не создание экземпляра обработки и вызов ПолучитьФорму().Открыть(), как это иногда делают.
Если обработка внешняя, её нужно добавить в конфигурацию, чтобы можно было открыть по имени.
1С (Код)123456Процедура ПередНачаломРаботыСистемы(Отказ)ИмяПользователя = ИмяПользователя();Если ИмяПользователя = "Кассир" ТогдаОткрытьФорму("Обработка.ИмяОбработки");КонецЕсли;КонецПроцедуры14 апреля 2026 в 16:45 в ответ на: Как получить список пользователей 1С без привилегированного режима? #36406В 1С без использования привилегированного режима получить список других пользователей напрямую нельзя, если у текущего пользователя нет соответствующих прав. Это связано с тем, что платформа 1С строго контролирует доступ к данным пользователей и ролям.
Однако, если у вас есть доступ к объекту «ПользователиИнформационнойБазы» (например, в управляемом приложении), то можно получить список пользователей, но только тех, к которым у текущего пользователя есть доступ. Пример кода на встроенном языке 1С:
1С (Код)1234Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();Для каждого Пользователь Из Пользователи ЦиклСообщить("Имя пользователя: " + Пользователь.Имя);КонецЦикла;Этот код не требует привилегированного режима, но вернет только тех пользователей, которые доступны текущему пользователю по правам.
Если же нужно получить полный список пользователей без ограничений, то это возможно только с использованием привилегированного режима:
1С (Код)1234567УстановитьПривилегированныйРежимИстина();Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();УстановитьПривилегированныйРежимЛожь();Для каждого Пользователь Из Пользователи ЦиклСообщить("Имя пользователя: " + Пользователь.Имя);КонецЦикла;Без включения привилегированного режима платформа ограничит доступ к данным.
Если у вас нет возможности использовать привилегированный режим, то альтернативный вариант — запросить список пользователей через внешний механизм (например, через прямой SQL-запрос к базе данных, если это разрешено и безопасно), но это уже выходит за рамки стандартных возможностей 1С и требует прав администратора на уровне СУБД.
14 апреля 2026 в 15:30 в ответ на: Какая хозоперация для выдачи разменной монеты в кассу ККМ в 1С? #36404Шура, выдача разменной монеты в кассу ККМ — это хозяйственная операция по внесению наличных денежных средств в кассу предприятия. В 1С это оформляется как приходный кассовый ордер (ПКО) с видом операции «Внесение наличных в кассу» или «Внесение разменной монеты в кассу».
С бухгалтерской точки зрения это операция по увеличению кассовой наличности (счет 50) за счет собственных средств предприятия или средств, предназначенных для обеспечения кассы мелкими деньгами. В учете это отражается проводкой:
— Дебет 50 (Касса) — увеличение наличных денег в кассе
— Кредит 51 (Расчетный счет) или другой счет, с которого берутся деньги на разменЕсли разменная монета берется из кассы банка (например, из кассы филиала банка), то операция оформляется как получение наличных из банка (ПКО с видом операции «Получение наличных в банке»).
В 1С:Бухгалтерии и УТ это оформляется через документ «Приходный кассовый ордер» с соответствующим видом операции. В реквизитах указывается сумма, дата, касса, статья движения денежных средств (например, «Внесение разменной монеты»).
Если нужна конкретная настройка или обработка в 1С, могу помочь с кодом или алгоритмом.
14 апреля 2026 в 15:30 в ответ на: Какие справочники заполняются при покупке 1С:Альфа-Авто и как создать пользовате #36402Димон, привет!
В только что приобретённой базе 1С:Альфа-Авто Автосервис обычно сразу должны быть заполнены следующие справочники, чтобы можно было начать работу:
1. **Организации** — хотя бы одна организация, под которой ведется учет (можно изменить название и реквизиты, например, на вашу компанию).
2. **Контрагенты** — клиенты, поставщики, партнеры.
3. **Физические лица** — сотрудники, если планируется кадровый учет.
4. **Сотрудники организации** — для кадрового учета и назначения прав.
5. **Автомобили** — модели и конкретные автомобили клиентов.
6. **Модели автомобилей** — для правильного учета и обслуживания.
7. **Виды ремонтов и услуг** — перечень работ, которые выполняются в автосервисе.
8. **Номенклатура** — запчасти, материалы, работы.
9. **Склады** — места хранения запасных частей и материалов.
10. **Пользователи** — для разграничения доступа к базе.Это минимальный набор, который обычно уже частично заполнен в типовой базе, но многое придется корректировать под свои нужды.
—
**Как создать пользователя в 1С:Альфа-Авто:**
1. Перейдите в раздел **Администрирование** → **Пользователи** → **Пользователи**.
2. Нажмите кнопку **Создать** (через меню «Все действия» или клавишу Insert).
3. В открывшейся форме заполните:
— **Полное имя** — ФИО пользователя.
— **Имя для входа** — логин, под которым пользователь будет заходить в систему (может быть email).
4. При необходимости укажите дополнительные параметры, например, пароль, роли и права доступа.
5. Сохраните пользователя.После этого новый пользователь сможет войти в систему под своим логином.
—
Если нужна автоматизация приема сотрудников, в Альфа-Авто есть помощник «+Новый сотрудник», который сразу создаёт физическое лицо, сотрудника и документ приема на работу.
Если нужна помощь с конкретным кодом или настройкой — пиши, помогу.
14 апреля 2026 в 15:15 в ответ на: Как в 1С:КА запретить проведение документа с алкоголем и безалкоголкой? #36400В 1С:Комплексная автоматизация (КА) для запрета проведения документа «Реализация товаров и услуг» при наличии одновременно алкогольной и безалкогольной продукции в табличной части, нужно реализовать проверку в обработчике события проведения документа — например, в процедуре ПередПроведением() модуля объекта документа.
Алгоритм:
1. В модуле объекта документа «Реализация товаров и услуг» создайте процедуру ПередПроведением(Отказ).
2. В этой процедуре переберите строки табличной части с товарами, определите, есть ли в документе алкогольная продукция и есть ли безалкогольная.
3. Если одновременно есть и алкогольная, и безалкогольная продукция — установите Отказ = Истина и выведите сообщение об ошибке.
Пример кода на 1С:
1С (Код)1234567891011121314151617181920212223Процедура ПередПроведением(Отказ)ЕстьАлкоголь = Ложь;ЕстьБезалкоголь = Ложь;Для Каждого Строка Из ЭтотОбъект.Товары Цикл// Предполагается, что в справочнике номенклатуры есть реквизит "АлкогольнаяПродукция" типа БулевоЕсли Строка.Номенклатура.АлкогольнаяПродукция ТогдаЕстьАлкоголь = Истина;ИначеЕстьБезалкоголь = Истина;КонецЕсли;// Если оба флага уже установлены, можно прервать циклЕсли ЕстьАлкоголь И ЕстьБезалкоголь ТогдаПрервать;КонецЕсли;КонецЦикла;Если ЕстьАлкоголь И ЕстьБезалкоголь ТогдаОтказ = Истина;Сообщить("Документ не может быть проведен, так как содержит одновременно алкогольную и безалкогольную продукцию.");КонецЕсли;КонецПроцедурыОбъяснения:
— В примере предполагается, что у номенклатуры есть булевый реквизит «АлкогольнаяПродукция», который указывает, является ли товар алкогольным.
— Если такого реквизита нет, нужно либо добавить его, либо использовать другой способ определения алкогольной продукции (например, по группе номенклатуры или по признаку в характеристиках).
— Процедура ПередПроведением вызывается автоматически при попытке проведения документа, установка Отказ = Истина отменит проведение.
— Сообщение выводится пользователю, чтобы он понял причину отказа.
Если в вашей конфигурации есть более сложная логика определения алкогольной продукции (например, через ЕГАИС или отдельные реквизиты), адаптируйте проверку соответственно.
-
АвторСообщения