Ответы в темах
-
АвторЗаписи
-
23 сентября 2026 в 15:13 в ответ на: Как настроить режим «Только изменения» в 1С СКАТ — Профессионал 5.0? #38713
На вашей форме выбран режим «Только изменения», но поля:
— Узел обмена товарами
— Узел обмена заказамине заполнены. Поэтому 1С предлагает выбрать узлы из плана обмена с сайтом.
## Что такое узел обмена
Узел обмена в 1С это не сайт, не пользователь и не адрес
1c_exchange.php.Это служебная запись, которая обозначает конкретного участника обмена, например:
— интернет-магазин;
— сайт организации;
— периферийную базу;
— внешний информационный ресурс.Для режима «Только изменения» узел необходим, потому что 1С должна запоминать:
— какие товары уже выгружались;
— какие товары изменились после последней выгрузки;
— какие заказы были переданы;
— какие объекты еще ожидают отправки;
— до какого момента обмен уже выполнялся.Технически это связано с механизмом плана обмена. План обмена хранит зарегистрированные изменения объектов и узлы, которым эти изменения должны быть переданы.
## Что нужно выбрать в вашей настройке
В поле «Узел обмена товарами» нужно выбрать узел, предназначенный для сайта и выгрузки товаров.
Например, он может называться:
—
Сайт;
—WEB-сайт;
—Интернет-магазин;
—Битрикс;
—Сайт товары;
—Основной сайт.В поле «Узел обмена заказами» нужно выбрать узел, предназначенный для обмена заказами.
Он может называться:
—
Сайт заказы;
—WEB-сайт заказы;
—Интернет-магазин;
—Битрикс заказы.Названия зависят от того, как в конфигурации СКАТ были созданы планы обмена.
## Как выбрать узел
1. Откройте поле «Узел обмена товарами».
2. Нажмите кнопку с лупой справа.
3. В открывшемся списке найдите узел сайта.
4. Выберите его двойным щелчком.
5. Аналогично заполните поле «Узел обмена заказами».Кнопка с тремя точками обычно открывает список или форму выбора, а кнопка с лупой выполняет поиск элемента.
После выбора в полях вместо пустых красных областей должно появиться наименование узла.
## Если список узлов пустой
Если при нажатии на выбор узла список пустой, значит, узел обмена еще не создан или не настроен.
В этом случае нужно проверить план обмена:
1. Откройте раздел Администрирование либо Все функции.
2. Найдите пункт, связанный с:
— планами обмена;
— обменом с WEB-сайтом;
— настройкой обмена с сайтом.
3. Откройте план обмена, который используется для обмена с сайтом.
4. Проверьте список узлов.
5. Создайте узел сайта, если его нет.В разных версиях СКАТ пункт может называться немного по-разному. Обычно используется план обмена с названием вроде:
— Обмен с WEB-сайтом;
— Обмен с сайтом;
— Обмен данными с сайтом;
— Обмен товарами и заказами.В узле указываются, как правило:
— наименование узла;
— код узла;
— признак использования;
— иногда дополнительные параметры подключения.Не нужно создавать произвольный план обмена, если в конфигурации уже есть типовой план для сайта. Нужно использовать именно типовой план, предусмотренный СКАТ.
## Нужно ли использовать один узел или разные
На вашей форме предусмотрены два отдельных поля, поэтому конфигурация может ожидать разные узлы:
— отдельный узел для товаров;
— отдельный узел для заказов.Если в списке типового плана есть только один узел сайта, его можно выбрать в обоих полях, но делать это следует только если именно так предусмотрено конфигурацией.
Обычно безопасный вариант:
— в «Узел обмена товарами» выбрать узел для товаров;
— в «Узел обмена заказами» выбрать узел для заказов.Не следует выбирать узел от другого обмена, например узел бухгалтерии или другой информационной базы.
## Что означает режим «Только изменения»
В вашей форме сейчас установлено:
— Выгрузка товаров;
— Обмен заказами;
— Выгрузка на сайт;
— Только изменения.В этом режиме при каждом запуске обмена 1С передает не весь справочник товаров, а только объекты, которые были изменены после предыдущей выгрузки.
Например, будут переданы:
— новый товар;
— измененная цена;
— измененный остаток;
— измененное описание;
— измененная картинка;
— измененная характеристика;
— измененная группа товара;
— новый или измененный заказ.Однако режим «Только изменения» нормально работает только после того, как:
1. узлы обмена созданы;
2. узлы назначены в настройке;
3. выполнена первоначальная полная выгрузка;
4. сайт корректно принял эту выгрузку;
5. 1С начала регистрировать изменения для выбранного узла.## Рекомендуемый порядок настройки
### 1. Сначала проверить соединение
На форме нажмите «Проверить».
Должна пройти авторизация по адресу обмена:
1С (Код)1http://ваш-сайт/1c_exchange.phpУ пользователя сайта должны быть права на обмен с 1С. Если проверка не проходит, сначала исправьте подключение:
— адрес сайта;
— логин;
— пароль;
— доступность сайта из 1С;
— права пользователя Битрикс;
— настройки веб-сервера;
— протокол HTTP или HTTPS.### 2. Заполнить узлы
Назначьте узел товаров и узел заказов. Пока эти поля пустые, режим «Только изменения» использовать нельзя.
### 3. Выполнить первоначальную полную выгрузку
Для первой загрузки рекомендуется временно выбрать:
1С (Код)1Полная выгрузкаи выгрузить товары на сайт.
Полная выгрузка необходима, чтобы сайт получил исходный полный состав:
— товары;
— группы;
— цены;
— остатки;
— характеристики;
— изображения;
— свойства, участвующие в обмене.Если сразу оставить «Только изменения», на сайте могут отсутствовать объекты, которые были созданы до включения обмена или не зарегистрировались для конкретного узла.
### 4. Переключить обратно на «Только изменения»
После успешной полной выгрузки:
1. установите «Только изменения»;
2. сохраните настройку;
3. измените тестовый товар;
4. запустите обмен;
5. проверьте изменение на сайте.Например, для проверки можно изменить описание или цену одного товара.
## Важный момент по расписанию
На вашей форме флажок «Использовать периодический обмен данными» снят.
Это означает, что обмен не будет запускаться автоматически по расписанию. Его нужно будет запускать вручную через кнопку или команду обмена.
Если требуется автоматический обмен:
1. установите флажок «Использовать периодический обмен данными»;
2. нажмите «Дополнительные настройки расписания»;
3. задайте периодичность;
4. проверьте, что 1С работает в режиме, где выполняются регламентные задания.В клиент-серверном варианте также необходимо, чтобы сервер 1С и регламентные задания были доступны. В файловой базе автоматический обмен обычно зависит от того, запущена ли база и выполняются ли фоновые задания.
## Если после настройки изменения не выгружаются
Проверьте следующие причины:
1. Узлы обмена не назначены.
2. После создания узла не была выполнена первоначальная полная выгрузка.
3. Объект не входит в состав выгружаемых данных.
4. Изменение сделано в реквизите, который не передается на сайт.
5. Обмен запускается не по той настройке.
6. Регламентное задание отключено.
7. У пользователя сайта нет прав на прием данных.
8. В 1С остались ошибки предыдущего обмена.
9. Не настроена регистрация изменений для выбранного узла.
10. В конфигурации используются отдельные узлы для товаров и заказов, но выбран один и тот же узел.На скриншоте основная проблема сейчас именно в том, что оба поля узлов пустые. Сначала нужно выбрать или создать узлы в плане обмена с сайтом, затем выполнить первоначальную полную выгрузку и только после этого использовать режим «Только изменения».
23 сентября 2026 в 14:47 в ответ на: Как в «Альфа-Авто» учесть ГСМ в литрах при продаже в больших упаковках? #38711Для вашей задачи в «Альфа-Авто» следует использовать упаковки номенклатуры и коэффициенты пересчёта единиц измерения. Разукомплектация, комплектация, складской учёт и «Честный знак» для этого не нужны.
Но важный момент: в заказ-наряде количество должно вводиться в литрах, а не в бочках.
## Как настроить
Для каждой позиции ГСМ:
1. В карточке номенклатуры установить базовую единицу измерения:
—литр.2. Создать упаковки:
—Бочка 208 л, коэффициент пересчёта:208;
—Бочка 201 л, коэффициент:201;
—Канистра 40 л, коэффициент:40;
— и так далее.То есть упаковка должна означать не отдельный товар, а способ измерения или реализации этого же товара.
Например:
| Упаковка | Коэффициент |
|—|—:|
| Литр | 1 |
| Бочка 208 л | 208 |
| Бочка 201 л | 201 |
| Канистра 40 л | 40 |## Как задавать цену
Если бочка 208 литров стоит, например, 41 600 рублей, то цена одного литра должна рассчитываться так:
1С (Код)141 600 / 208 = 200 рублей за литрВ заказ-наряде:
1С (Код)123Количество: 30 лЦена: 200 руб.Сумма: 6 000 руб.То есть стоимость должна быть задана или рассчитана за литр, даже если исходный прайс поставщика или ваша внутренняя цена определены за бочку.
## Что указывать в заказ-наряде
В строке заказ-наряда должно быть:
1С (Код)12345Номенклатура: Масло моторное ...Единица: лКоличество: 30Цена: цена за 1 литрСумма: 30 × цена за литрНельзя указывать:
1С (Код)12Единица: Бочка 208 лКоличество: 30В таком случае программа совершенно правильно воспримет это как 30 бочек и посчитает стоимость 6240 литров.
## Для чего тогда нужны упаковки
Упаковки нужны для пересчёта между количеством литров и количеством тары.
Например:
— 1 бочка 208 л = 208 л;
— 30 л = 30 / 208 = 0,14423 бочки;
— 416 л = 2 бочки;
— 20 л из канистры 40 л = половина канистры.При этом в вашем случае в заказ-наряде используется именно литровое количество. Упаковка «Бочка 208 л» нужна для:
— хранения информации о вариантах тары;
— формирования закупочных или отпускных цен;
— пересчёта количества при необходимости;
— отображения, сколько тары соответствует расходу;
— использования в прайсах, если это поддерживается конкретной версией «Альфа-Авто».## Рекомендуемая модель для вашей ситуации
У вас фактически есть два разных понятия:
1. Единица расхода при ремонте: литр.
2. Тара, в которой ГСМ закупается или реализуется: бочка, канистра и т. п.Их не следует смешивать.
Правильная модель:
1С (Код)12345678Номенклатура: Масло XYZБазовая единица: литрУпаковки:Бочка 208 лБочка 201 лКанистра 40 лЦена в заказ-наряде: за 1 литрКоличество в заказ-наряде: в литрах## Если цена должна зависеть от конкретной тары
Если цена литра зависит от выбранной тары, например:
— из бочки 208 л: 200 руб./л;
— из бочки 201 л: 205 руб./л;
— из канистры 40 л: 230 руб./л,то в «Альфа-Авто» нужно использовать либо:
— отдельные виды цен для разных упаковок;
— цены номенклатуры с указанием упаковки;
— либо отдельные позиции номенклатуры, если текущая версия программы не умеет хранить разные цены по упаковкам.В последнем случае можно завести, например:
1С (Код)123Масло XYZ, бочка 208 лМасло XYZ, бочка 201 лМасло XYZ, канистра 40 лНо это менее удобно для аналитики, поскольку одна и та же марка масла будет разбита на несколько элементов номенклатуры.
Предпочтительный вариант для вашей задачи:
1С (Код)1234Одна номенклатураЕдиница расхода: литрУпаковки с коэффициентамиЦена в заказ-наряде: за литр## Что не нужно использовать
Для описанной задачи не требуются:
— комплектация номенклатуры;
— разукомплектация;
— наборы;
— производственные операции;
— складские документы;
— серийный учёт;
— маркировка «Честный знак»;
— списание ГСМ со склада.Если заказ-наряд используется только для расчёта с подрядчиком и аналитики ремонта, то упаковка должна использоваться только как механизм пересчёта единиц и формирования цены, а не как складская операция.
## Важное ограничение
В некоторых версиях «Альфа-Авто» механизм упаковок пересчитывает количество, но не всегда автоматически пересчитывает цену именно так, как требуется в вашем сценарии. Поэтому сначала нужно проверить на тестовой базе:
1. Создать товар с базовой единицей
литр.
2. Добавить упаковкуБочка 208 л.
3. Установить цену бочки.
4. Ввести в заказ-наряд количество30.
5. Проверить, получается ли сумма как:1С (Код)1Цена бочки / 208 × 30Если программа при выборе упаковки сохраняет цену бочки и умножает её на 30, то в заказ-наряде упаковку выбирать не нужно. В этом случае цена должна храниться как цена за литр, а бочка использоваться только как справочная упаковка или при закупочных операциях.
Таким образом, основной инструмент: «Упаковки номенклатуры» с коэффициентами пересчёта, а для заказ-наряда единицей количества следует выбрать литр, с ценой за один литр.
23 сентября 2026 в 12:34 в ответ на: Как перенести присоединенные файлы из регистра двоичных данных в регистр хранили #38709Для переноса присоединенных файлов между информационными базами через КД нужно переносить не ссылку на
ХранилищеЗначения, а сами двоичные данные файла.Обычная схема такая:
1С (Код)123456789Источник:РегистрСведений.ДвоичныеДанныеФайловФайлДвоичныеДанныеФайлаПриемник:РегистрСведений.ХранилищеФайловФайлХранилищеФайлаНазвания ресурсов могут отличаться в конкретной конфигурации. Например, в приемнике ресурс может называться
ДвоичныеДанныеФайла,ХранилищеФайлаилиДанныеФайла.## Важный момент
Значение типа
ХранилищеЗначениянельзя корректно переносить как обычное значение регистра. В источнике нужно:1. получить значение из
ХранилищеЗначения;
2. преобразовать его вДвоичныеДанные;
3. передать двоичные данные через КД;
4. в приемнике снова создатьХранилищеЗначения.## Вариант через обработчик объекта источника
В правиле конвертации объекта для регистра
ДвоичныеДанныеФайловв обработчике перед выгрузкой можно получить двоичные данные следующим образом:1С (Код)12345678910Если Источник.ДвоичныеДанныеФайла <> Неопределено ТогдаДвоичныеДанныеФайла =Источник.ДвоичныеДанныеФайла.Получить();Если ДвоичныеДанныеФайла <> Неопределено ТогдаИсточник.ДвоичныеДанныеФайла = ДвоичныеДанныеФайла;КонецЕсли;КонецЕсли;Но этот вариант сработает только в том случае, если механизм КД допускает изменение значения источника перед формированием сообщения. В некоторых версиях КД изменять объект
Источникв этом обработчике нельзя или нежелательно. Тогда лучше использовать отдельный реквизит передачи.## Рекомендуемый вариант через значение ПКС
Создайте в правилах конвертации реквизита
ДвоичныеДанныеФайлаобработчик значения.В источнике:
1С (Код)1234567Значение = Неопределено;Если Источник.ДвоичныеДанныеФайла <> Неопределено ТогдаЗначение = Источник.ДвоичныеДанныеФайла.Получить();КонецЕсли;В приемнике для реквизита типа
ХранилищеЗначения:1С (Код)123Если Значение <> Неопределено ТогдаЗначение = Новый ХранилищеЗначения(Значение);КонецЕсли;Если в вашей версии КД в обработчике приемника доступна переменная
Источник, а результат записывается вЗначение, код будет выглядеть так:1С (Код)12345Если Источник <> Неопределено ТогдаЗначение = Новый ХранилищеЗначения(Источник);ИначеЗначение = Неопределено;КонецЕсли;Здесь
Источникдолжен содержать именноДвоичныеДанные, а не объектХранилищеЗначения.## Более надежный вариант через временный файл
Для больших файлов лучше не передавать
ХранилищеЗначениянапрямую. Получите двоичные данные, запишите их во временный файл, а затем загрузите в приемнике.### На стороне источника
1С (Код)1234567891011121314151617181920212223242526272829ДвоичныеДанныеФайла = Неопределено;Если Источник.ДвоичныеДанныеФайла <> Неопределено ТогдаДвоичныеДанныеФайла =Источник.ДвоичныеДанныеФайла.Получить();КонецЕсли;Если ДвоичныеДанныеФайла <> Неопределено ТогдаИмяВременногоФайла = ПолучитьИмяВременногоФайла();ПопыткаДвоичныеДанныеФайла.Записать(ИмяВременногоФайла);Значение = Новый ДвоичныеДанные(ИмяВременногоФайла);НаконецЕсли ЗначениеЗаполнено(ИмяВременногоФайла) ТогдаУдалитьФайлы(ИмяВременногоФайла);КонецЕсли;КонецПопытки;ИначеЗначение = Неопределено;КонецЕсли;Однако для обычной передачи через КД запись во временный файл чаще всего не требуется. Двоичные данные можно передавать напрямую.
## Настройка правил конвертации
### 1. Сначала перенесите владельцев файлов
В регистре обычно хранится ссылка на присоединенный файл или элемент справочника
ПрисоединенныеФайлы.Поэтому сначала должны быть перенесены:
— документы;
— справочники;
— элементы справочника присоединенных файлов;
— владельцы присоединенных файлов.И только потом регистр с двоичными данными.
Иначе запись регистра в приемнике не сможет определить значение измерения
Файл.### 2. Создайте правило для регистра-источника
В КД настройте:
1С (Код)1Регистр сведений ДвоичныеДанныеФайловВ качестве объекта-приемника укажите:
1С (Код)1Регистр сведений ХранилищеФайловЕсли регистр приемника имеет другое имя, выбирайте фактический регистр из конфигурации.
### 3. Сопоставьте измерения
Например:
1С (Код)1Источник.Файл -> Приемник.ФайлЕсли в приемнике измерение называется иначе:
1С (Код)1Источник.Файл -> Приемник.ПрисоединенныйФайлДля ссылок нужно настроить правила конвертации объектов, а не передавать ссылку напрямую. Ссылка из одной базы не является ссылкой на объект в другой базе.
### 4. Сопоставьте ресурс с двоичными данными
В источнике:
1С (Код)1ДвоичныеДанныеФайлаВ приемнике:
1С (Код)1ХранилищеФайлаДля источника установите обработчик:
1С (Код)12345Значение = Неопределено;Если Источник.ДвоичныеДанныеФайла <> Неопределено ТогдаЗначение = Источник.ДвоичныеДанныеФайла.Получить();КонецЕсли;Для приемника:
1С (Код)12345Если Значение <> Неопределено ТогдаЗначение = Новый ХранилищеЗначения(Значение);ИначеЗначение = Неопределено;КонецЕсли;## Если регистр приемника записывается вручную
Иногда КД не позволяет удобно передать большой ресурс регистра. Тогда в обработчике загрузки можно создать запись регистра вручную.
Пример:
1С (Код)123456789101112Если ДвоичныеДанныеФайла = Неопределено ТогдаВозврат;КонецЕсли;МенеджерЗаписи =РегистрыСведений.ХранилищеФайлов.СоздатьМенеджерЗаписи();МенеджерЗаписи.Файл = СсылкаНаФайл;МенеджерЗаписи.ХранилищеФайла =Новый ХранилищеЗначения(ДвоичныеДанныеФайла);МенеджерЗаписи.Записать();Названия
Файл,ХранилищеФайла,СсылкаНаФайлнужно заменить на фактические имена измерения и ресурса.Если регистр периодический, дополнительно заполните период:
1С (Код)1МенеджерЗаписи.Период = ТекущаяДата();Если у регистра есть регистратор, нужно заполнить и его:
1С (Код)1МенеджерЗаписи.Регистратор = ДокументИсточник;## Если исходный ресурс уже содержит не
ХранилищеЗначенияВ некоторых конфигурациях ресурс регистра имеет тип:
1С (Код)1ХранилищеЗначенияТогда используется:
1С (Код)12ДвоичныеДанныеФайла =Источник.ДвоичныеДанныеФайла.Получить();Если ресурс уже имеет тип:
1С (Код)1ДвоичныеДанныето
.Получить()вызывать не нужно:1С (Код)12ДвоичныеДанныеФайла =Источник.ДвоичныеДанныеФайла;Универсальная проверка:
1С (Код)123456789101112131415161718ДвоичныеДанныеФайла = Неопределено;Если Источник.ДвоичныеДанныеФайла <> Неопределено ТогдаЕсли ТипЗнч(Источник.ДвоичныеДанныеФайла) =Тип("ХранилищеЗначения") ТогдаДвоичныеДанныеФайла =Источник.ДвоичныеДанныеФайла.Получить();ИначеДвоичныеДанныеФайла =Источник.ДвоичныеДанныеФайла;КонецЕсли;КонецЕсли;## Проверка типа ресурса
Для диагностики в обработчик можно временно добавить:
1С (Код)1234567891011Если Источник.ДвоичныеДанныеФайла = Неопределено ТогдаСообщить("Двоичные данные отсутствуют");ИначеСообщить("Тип ресурса: "+ Строка(ТипЗнч(Источник.ДвоичныеДанныеФайла)));КонецЕсли;Ожидаемый результат обычно такой:
1С (Код)1Тип ресурса: ХранилищеЗначенияили:
1С (Код)1Тип ресурса: ДвоичныеДанные## Проверка результата в приемнике
После загрузки проверьте регистр запросом:
|ВЫБРАТЬ
| ХранилищеФайлов.Файл,
| ХранилищеФайлов.ХранилищеФайла
|ИЗ
| РегистрСведений.ХранилищеФайлов КАК ХранилищеФайловДля проверки размера файла ресурс нужно получить программно:
1С (Код)123456789101112131415161718Выборка = РегистрыСведений.ХранилищеФайлов.Выбрать();Пока Выборка.Следующий() ЦиклЕсли Выборка.ХранилищеФайла <> Неопределено ТогдаДвоичныеДанныеФайла =Выборка.ХранилищеФайла.Получить();Сообщить("Файл: "+ Строка(Выборка.Файл)+ ", размер: "+ Строка(ДвоичныеДанныеФайла.Размер()));КонецЕсли;КонецЦикла;## Что чаще всего является причиной ошибки
1. В источник передается
ХранилищеЗначения, а не его содержимое.
2. В приемник записываетсяДвоичныеДанные, хотя ресурс имеет типХранилищеЗначения.
3. Не создано соответствие для элементаПрисоединенныеФайлы.
4. В регистр приемника не попадает измерениеФайл.
5. Регистр загружается раньше, чем справочник присоединенных файлов.
6. Используется неправильное имя ресурса.
7. Файл нулевого размера или значение ресурса равноНеопределено.
8. У пользователя нет права на чтение исходного регистра.
9. Механизм КД ограничивает размер передаваемого сообщения.
10. В обработчике используетсяИсточник.Складили другое поле объекта, а фактически нужное значение находится в регистре.Практически для КД настройка должна выглядеть так:
1С (Код)12345РегистрСведений.ДвоичныеДанныеФайлов.Файл-> РегистрСведений.ХранилищеФайлов.ФайлРегистрСведений.ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла-> РегистрСведений.ХранилищеФайлов.ХранилищеФайлаОбработчик источника:
1С (Код)12345Значение = Неопределено;Если Источник.ДвоичныеДанныеФайла <> Неопределено ТогдаЗначение = Источник.ДвоичныеДанныеФайла.Получить();КонецЕсли;Обработчик приемника:
1С (Код)123Если Значение <> Неопределено ТогдаЗначение = Новый ХранилищеЗначения(Значение);КонецЕсли;23 сентября 2026 в 12:12 в ответ на: Почему не выполняется условие `Если ЗначениеЗаполнено(Источник.Склад)` в конверт #38707В конвертации проблема чаще всего не в
Если, а в том, чтоИсточник.Складможет быть:—
Неопределено;
— пустой ссылкой;
— структурой или объектом XDTO, у которого нет обычного доступа через точку;
— не загружен в источник;
— значением другого типа;
— реквизитом с другим именем.Ваш код:
1С (Код)123Если ЗначениеЗаполнено(Источник.Склад) ТогдаЗначение = Источник.Склад;КонецЕсли;можно использовать только если
Источник.Складдействительно существует и имеет обычный тип значения.## Надежный вариант для объекта или структуры
Сначала получите значение в отдельную переменную:
1С (Код)123456789101112131415СкладИсточник = Неопределено;Если ТипЗнч(Источник) = Тип("Структура") ТогдаИсточник.Свойство("Склад", СкладИсточник);ИначеСкладИсточник = Источник.Склад;КонецЕсли;Если ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;Но для правил конвертации КД2 обычно лучше проверять наличие свойства через
Свойство():1С (Код)123456789СкладИсточник = Неопределено;Если Источник.Свойство("Склад", СкладИсточник) ТогдаЕсли ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;КонецЕсли;Такой вариант не вызовет ошибку, если в источнике вообще нет свойства
Склад.## Если
Источникявляется объектом 1СДля объекта документа или элемента справочника используйте:
1С (Код)123Если ЗначениеЗаполнено(Источник.Склад) ТогдаЗначение = Источник.Склад;КонецЕсли;Но нужно проверить, что поле действительно называется именно
Склад.Например, в источнике оно может называться:
1С (Код)12345СкладСкладОтправительСкладПолучательМестоХраненияСкладОрганизацииВ правилах конвертации имя должно совпадать с именем реквизита объекта-источника, а не с его представлением на форме.
## Если
Складимеет составной типЕсли реквизит
Складможет содержать несколько типов, например:—
СправочникСсылка.Склады;
—СправочникСсылка.СкладыНоменклатуры;
—СправочникСсылка.СкладыОрганизаций;
—СправочникСсылка.СтруктурныеЕдиницы;то нужно проверить тип значения:
1С (Код)123456789101112СкладИсточник = Источник.Склад;Если ЗначениеЗаполнено(СкладИсточник) ТогдаЕсли ТипЗнч(СкладИсточник) =Тип("СправочникСсылка.Склады") ТогдаЗначение = СкладИсточник;КонецЕсли;КонецЕсли;Если в вашей конфигурации склад хранится не в справочнике
Склады, подставьте фактический тип справочника.Для диагностики временно добавьте:
1С (Код)1234567891011Сообщить("Тип Источник.Склад: "+ Строка(ТипЗнч(Источник.Склад)));Сообщить("Значение Источник.Склад: "+ Строка(Источник.Склад));Сообщить("ЗначениеЗаполнено: "+ Строка(ЗначениеЗаполнено(Источник.Склад)));В некоторых обработчиках КД сообщения не отображаются в пользовательском окне. Тогда используйте запись в журнал регистрации либо стандартную функцию диагностики конкретной версии конвертации.
## Для пустой ссылки лучше использовать явную проверку
В старых версиях платформы и отдельных механизмах конвертации
ЗначениеЗаполнено()может вести себя не так, как ожидается для ссылочных значений. Можно проверить явно:1С (Код)12345678СкладИсточник = Источник.Склад;Если СкладИсточник <> НеопределеноИ ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;Если нужно убедиться, что это именно ссылка на нужный справочник:
1С (Код)12345678910СкладИсточник = Источник.Склад;Если СкладИсточник <> НеопределеноИ ТипЗнч(СкладИсточник) =Тип("СправочникСсылка.Склады")И ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;## Если используется 1С 7.7 или старый обработчик КД
В старом обработчике может отсутствовать современная функция
ЗначениеЗаполнено(), либо она работает иначе. Тогда проверяйте значение черезПустоеЗначение():1С (Код)123Если ПустоеЗначение(Источник.Склад) = 0 ТогдаЗначение = Источник.Склад;КонецЕсли;Для 1С 7.7 также может потребоваться проверка существования реквизита:
1С (Код)1234567Если Источник.ПолучитьАтрибут("Склад") = 1 ТогдаЕсли ПустоеЗначение(Источник.Склад) = 0 ТогдаЗначение = Источник.Склад;КонецЕсли;КонецЕсли;Но этот вариант относится именно к старому встроенному языку 1С 7.7. Для 1С 8.x его применять не нужно.
## Частая ошибка в обработчике ПКС
В правилах конвертации
Значениеможет быть не обычной переменной результата, а уже заполненным значением, которое потом используется механизмом ПКС. Если склад не заполнен, ваш код ничего не делает, и вЗначениеостается прежнее значение.Если при пустом складе нужно явно очищать результат, пишите так:
1С (Код)123456789Значение = Неопределено;Если Источник.Свойство("Склад", СкладИсточник) ТогдаЕсли ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;КонецЕсли;Если ожидается именно пустая ссылка на справочник, а не
Неопределено, используйте пустую ссылку соответствующего типа:1С (Код)12345Значение = Справочники.Склады.ПустаяСсылка();Если ЗначениеЗаполнено(Источник.Склад) ТогдаЗначение = Источник.Склад;КонецЕсли;## Если склад нужно искать в приемнике
Нельзя всегда передавать ссылку склада из базы-источника напрямую. Если базы разные, ссылка из источника не существует в приемнике. В этом случае нужно передавать код или наименование и выполнять поиск в приемнике.
Например, в обработчике перед выгрузкой:
1С (Код)1234567891011Если ЗначениеЗаполнено(Источник.Склад) ТогдаЗначение = Новый Структура;Значение.Вставить("Код",Источник.Склад.Код);Значение.Вставить("Наименование",Источник.Склад.Наименование);КонецЕсли;А в обработчике поиска объекта приемника искать склад по коду или наименованию.
Пример через запрос в 1С:
|ВЫБРАТЬ ПЕРВЫЕ 1
| Склады.Ссылка
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.Код = &КодСкладаНо в правилах конвертации обычно правильнее настроить ПКС по полям:
1С (Код)12Склад.КодСклад.Наименованиеа не передавать ссылку целиком.
## Практический вариант для КД2
Попробуйте заменить код на такой:
1С (Код)123456789101112СкладИсточник = Неопределено;Если Источник.Свойство("Склад", СкладИсточник) ТогдаЕсли СкладИсточник <> НеопределеноИ ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;КонецЕсли;Если это не сработает, добавьте диагностику:
1С (Код)1234567891011121314151617181920212223242526СкладИсточник = Неопределено;Если Источник.Свойство("Склад", СкладИсточник) ТогдаСообщить("Склад найден. Тип: "+ Строка(ТипЗнч(СкладИсточник)));Сообщить("Склад: "+ Строка(СкладИсточник));Сообщить("Заполнен: "+ Строка(ЗначениеЗаполнено(СкладИсточник)));Если ЗначениеЗаполнено(СкладИсточник) ТогдаЗначение = СкладИсточник;КонецЕсли;ИначеСообщить("У Источника отсутствует свойство Склад");КонецЕсли;По результату сообщения будет понятно:
—
Складотсутствует в источнике;
— склад есть, но он пустой;
— склад имеет неправильный тип;
— значение заполнено, но его нельзя напрямую передать в приемник;
— проблема находится уже в поиске соответствия объекта приемника.23 сентября 2026 в 10:38 в ответ на: Как исправить ошибку «Отсутствуют метаданные для расширения конфигурации»? #38705Сообщение относится уже не к внешней обработке
.epf, а к расширению конфигурации:1С (Код)12БонусныеБаллы (1.6)Критичная: Отсутствуют метаданные для расширения конфигурацииЭто означает, что расширение
БонусныеБаллызарегистрировано в информационной базе, но платформа не может найти или прочитать его метаданные. Обычно причина одна из следующих:— расширение было загружено некорректно;
— файл расширения поврежден;
— расширение создано для другой версии конфигурации;
— после обновления основной конфигурации расширение стало несовместимым;
— расширение было удалено физически, но осталось зарегистрированным в базе;
— расширение переносили через.dt,.cf,.cfuили сравнение/объединение;
— расширение разрабатывалось для другой редакции Розницы;
— повреждены служебные данные расширения.## Что сделать сначала
Перед исправлением обязательно создайте резервную копию базы.
Для клиент-серверной базы:
— резервная копия средствами СУБД;
— дополнительно желательно выгрузить.dt, если размер базы позволяет.Для файловой базы:
Администрирование → Выгрузить информационную базу.
## Проверка расширения
Откройте базу в режиме Конфигуратор.
В дереве конфигурации найдите:
Расширения конфигурации
или:
Конфигурация → Расширения конфигурации.
Найдите расширение:
1С (Код)1БонусныеБаллыПроверьте:
1. Отображается ли расширение в списке.
2. Открывается ли оно двойным щелчком.
3. Есть ли внутри объекты метаданных.
4. Указана ли версия расширения1.6.
5. Не помечено ли расширение как поврежденное.
6. Не установлен ли режим совместимости, не соответствующий основной конфигурации.
7. Не отличается ли версия расширения от версии основной конфигурации Розницы.Если расширение не открывается, дерево объектов пустое или появляется сообщение об отсутствии метаданных, текущее расширение фактически непригодно для работы.
## Основной способ исправления
### 1. Отключить расширение
Если база запускается:
1. Откройте раздел администрирования.
2. Перейдите в список расширений конфигурации.
3. ОткройтеБонусныеБаллы.
4. Снимите флаг активности или отключите расширение.
5. Перезапустите базу.
6. Проверьте, исчезла ли ошибка.Если после отключения ошибка исчезла, причина точно находится в расширении, а не в основной конфигурации.
### 2. Удалить поврежденное расширение
Если расширение не нужно или имеется исправленный файл расширения:
1. Сделайте резервную копию.
2. Отключите расширение.
3. УдалитеБонусныеБаллы.
4. Перезапустите 1С.
5. Проверьте запуск и работу базы.Удалять расширение без резервной копии нельзя. Оно могло содержать:
— дополнительные реквизиты;
— дополнительные табличные части;
— документы;
— регистры;
— константы;
— подписки на события;
— общий программный код;
— формы и команды;
— данные в регистрах, созданных расширением.Само удаление метаданных расширения не всегда удаляет данные, но доступ к ним через программу может исчезнуть.
### 3. Установить исправленную версию
Если функциональность нужна, получите у разработчика новый файл расширения, совместимый одновременно с:
— текущей платформой 1С;
— текущим релизом1С:Розницы;
— текущей редакцией конфигурации;
— текущей версией БСП;
— режимом совместимости базы.Не следует просто загружать расширение
БонусныеБаллы (1.6)повторно поверх поврежденного. Надежнее:1. сохранить настройки расширения;
2. отключить старое расширение;
3. удалить старое расширение;
4. перезапустить базу;
5. установить новую версию;
6. проверить функциональность на копии базы;
7. только после этого повторить на рабочей базе.## Если ошибка появилась после обновления Розницы
Это наиболее вероятный сценарий. После обновления типовой конфигурации могли измениться:
— имена объектов;
— состав реквизитов;
— формы;
— команды;
— процедуры общих модулей;
— точки расширения;
— аннотации&После,&Перед,&ИзменениеИКонтроль;
— состав подписок на события;
— требования к режиму совместимости.Расширение версии
1.6могло быть рассчитано на старый релиз Розницы. В этом случае нужно получить обновление расширения именно под новый релиз основной конфигурации.Проверить релиз можно через:
Справка → О программе.
Запишите:
— версию платформы;
— релиз конфигурации;
— редакцию Розницы.Эти данные нужны разработчику расширения.
## Если расширение не видно в списке, но ошибка остается
Такое бывает, если основная конфигурация или служебные данные базы содержат ссылку на расширение, а само описание расширения повреждено.
Попробуйте следующий порядок:
1. Запустить базу в режиме конфигуратора.
2. Выполнить проверку логической целостности:
Администрирование → Тестирование и исправление.
3. На копии базы включить:
— проверку логической целостности;
— пересчет итогов;
— реструктуризацию таблиц при необходимости.
4. Выполнить проверку.
5. Перезапустить базу.Не включайте без необходимости удаление объектов, исправление ссылок и очистку незаполненных ссылок на рабочей базе. Сначала проверяйте результат на копии.
Для клиент-серверной базы также имеет смысл выполнить проверку средствами СУБД, особенно если до появления ошибки были:
— аварийное завершение сервера;
— восстановление базы из неполной копии;
— ошибки диска;
— принудительное завершение процессаrphost;
— сбои при обновлении конфигурации;
— ошибки записи в PostgreSQL или MS SQL Server.## Если база не запускается в режиме «Предприятие»
Удаление или отключение расширения можно выполнить из конфигуратора.
Порядок:
1. Запустите конфигуратор.
2. Откройте Расширения конфигурации.
3. НайдитеБонусныеБаллы.
4. Сначала снимите активность.
5. Сохраните конфигурацию.
6. Запустите базу в режиме «Предприятие».
7. Если база запускается, установите исправленную версию расширения.Если даже конфигуратор не позволяет открыть расширение, не пытайтесь исправлять файл базы вручную через SQL. Внутренние таблицы 1С не предназначены для такого редактирования, и можно окончательно повредить информационную базу.
## Что не поможет
Не поможет:
— очистка кэша пользователя;
— переустановка клиента 1С;
— повторный запуск обработки.epf;
— изменение настроек безопасного режима внешней обработки;
— удаление временных файлов Windows;
— смена пользователя 1С.Кэш можно очистить только если ошибка связана с интерфейсом или старой версией формы. Сообщение:
1С (Код)1Отсутствуют метаданные для расширения конфигурацииуказывает на проблему самого расширения или его регистрации в информационной базе.
## Рекомендуемый порядок именно для вашей ситуации
1. Сделать копию базы.
2. В конфигураторе открыть список расширений.
3. ПроверитьБонусныеБаллы.
4. Отключить его.
5. Запустить базу.
6. Если ошибка исчезла, удалить старую версию расширения на копии.
7. Получить у разработчика версию расширения под текущий релиз Розницы.
8. Установить новую версию на копию.
9. Проверить загрузку поступлений и проведение документов.
10. Только после проверки заменить расширение в рабочей базе.Если расширение было частью поставки или внедрения, самостоятельно удалять его на рабочей базе рискованно. Сначала нужно выяснить, какие объекты и данные оно добавляло. Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/242628/22 сентября 2026 в 14:26 в ответ на: Почему таблица значений заполняется только после второго выбора заявки? #38703Причина в порядке выполнения обработчиков. В момент вызова серверной процедуры реквизит формы
Запись.ЗаявкаНаПроизводствоеще содержит старое значение. Поэтому при первом выборе запрос выполняется со старой ссылкой, обычно с пустой, и таблица остается пустой.После первого выбора реквизит уже записан. При втором выборе серверная процедура видит значение, выбранное в первый раз, поэтому таблица заполняется данными от предыдущей заявки.
Нужно не читать ссылку из
Запись.ЗаявкаНаПроизводствовнутри серверной процедуры, а передавать в нееВыбранноеЗначениеиз клиентского обработчика.### Исправленный вариант
1С (Код)123456789101112131415161718&НаКлиентеПроцедура ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПосле(Элемент,ВыбранноеЗначение,ДополнительныеДанные,ВыборДобавлением,СтандартнаяОбработка)Если ЗначениеЗаполнено(ВыбранноеЗначение) ТогдаЗапись.ЗаявкаНаПроизводство = ВыбранноеЗначение;ИначеЗапись.ЗаявкаНаПроизводство = Неопределено;КонецЕсли;ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПослеНаСервере(ВыбранноеЗначение);КонецПроцедурыСерверную процедуру нужно изменить, чтобы она принимала ссылку параметром:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455&НаСервереПроцедура ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПослеНаСервере(ЗаявкаНаПроизводство)ПустаяТЗ = Новый ТаблицаЗначений;ПустаяТЗ.Колонки.Добавить("Номенклатура");ПустаяТЗ.Колонки.Добавить("Количество");ПустаяТЗ.Колонки.Добавить("ЕдиницаИзмерения");ПустаяТЗ.Колонки.Добавить("Включать");Если Не ЗначениеЗаполнено(ЗаявкаНаПроизводство) ТогдаЗначениеВРеквизитФормы(ПустаяТЗ,"НоменклатураЗаказовПереработчику");Возврат;КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Обеспечение.Номенклатура КАК Номенклатура,| Обеспечение.Упаковка КАК Упаковка,| Обеспечение.Количество КАК Количество|ИЗ| Документ.ЗаказПереработчику2_5.ОбеспечениеМатериаламиИРаботами КАК Обеспечение|ГДЕ| Обеспечение.Ссылка = &Ссылка| И Обеспечение.ВариантОбеспечения = &ВариантОбеспечения";Запрос.УстановитьПараметр("Ссылка",ЗаявкаНаПроизводство);Запрос.УстановитьПараметр("ВариантОбеспечения",Перечисления.ВариантыОбеспечения.КОбеспечению);Результат = Запрос.Выполнить().Выгрузить();Для Каждого СтрРезультата Из Результат ЦиклНоваяСтрока = ПустаяТЗ.Добавить();НоваяСтрока.Номенклатура = СтрРезультата.Номенклатура;НоваяСтрока.Количество = СтрРезультата.Количество;НоваяСтрока.ЕдиницаИзмерения = СтрРезультата.Упаковка;НоваяСтрока.Включать = Ложь;КонецЦикла;ЗначениеВРеквизитФормы(ПустаяТЗ,"НоменклатураЗаказовПереработчику");КонецПроцедурыКлючевые изменения:
1. В клиентской процедуре используется
ВыбранноеЗначение.
2. Выбранное значение сразу присваивается реквизиту:1С (Код)1Запись.ЗаявкаНаПроизводство = ВыбранноеЗначение;3. Эта же ссылка явно передается на сервер:
1С (Код)12ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПослеНаСервере(ВыбранноеЗначение);4. На сервере запрос использует параметр процедуры, а не
Запись.ЗаявкаНаПроизводство:1С (Код)123Запрос.УстановитьПараметр("Ссылка",ЗаявкаНаПроизводство);Дополнительно обратите внимание на этот момент:
1С (Код)1НоваяСтрока.ЕдиницаИзмерения = Стр.Упаковка;В запросе поле называется
Упаковка, а в таблице формы колонка называетсяЕдиницаИзмерения. Это допустимо, если вы сознательно хотите записать упаковку в единицу измерения. Но если в форме должна отображаться именно единица измерения номенклатуры, нужно получать ее отдельным полем запроса, например черезНоменклатура.ЕдиницаИзмерения, если такое поле есть в вашей конфигурации.Можно также оставить вашу текущую серверную процедуру и просто передавать туда выбранную ссылку:
1С (Код)1234567891011121314&НаКлиентеПроцедура ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПосле(Элемент,ВыбранноеЗначение,ДополнительныеДанные,ВыборДобавлением,СтандартнаяОбработка)Запись.ЗаявкаНаПроизводство = ВыбранноеЗначение;ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПослеНаСервере(ВыбранноеЗначение);КонецПроцедурыИ сервер:
1С (Код)123456789101112131415&НаСервереПроцедура ВДС_ЗаявкаНаПроизводствоОбработкаВыбораПослеНаСервере(ЗаявкаНаПроизводство)Если Не ЗначениеЗаполнено(ЗаявкаНаПроизводство) Тогда// очистка таблицыВозврат;КонецЕсли;// Запрос использовать с параметром ЗаявкаНаПроизводствоЗапрос.УстановитьПараметр("Ссылка",ЗаявкаНаПроизводство);КонецПроцедурыГлавная ошибка была именно здесь:
1С (Код)1Запрос.УстановитьПараметр("Ссылка", Запись.ЗаявкаНаПроизводство);В обработчике выбора это значение может быть еще не обновлено. Поэтому на первом выборе используется предыдущее значение, а на втором уже значение, установленное при первом выборе.
22 сентября 2026 в 14:01 в ответ на: Как проверять содержание строкового поля неограниченной длины в запросе 1С? #38701Для строкового поля «Строка неограниченной длины» в запросе 1С сначала нужно ограничить длину через
ВЫРАЗИТЬ, указав типСТРОКА(N).### Проверка на точное соответствие
Например, найти документы с определенным комментарием:
1С (Код)12345678910Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Документы.Ссылка|ИЗ| Документ.РеализацияТоваровУслуг КАК Документы|ГДЕ| ВЫРАЗИТЬ(Документы.Комментарий КАК СТРОКА(1000)) = &Комментарий";Запрос.УстановитьПараметр("Комментарий", "Текст комментария");В данном примере поле
Комментарийприводится к строке длиной 1000 символов, после чего сравнивается с параметром.### Проверка вхождения текста
Для поиска фрагмента строки используйте
ПОДОБНО:1С (Код)1234567891011Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Документы.Ссылка|ИЗ| Документ.РеализацияТоваровУслуг КАК Документы|ГДЕ| ВЫРАЗИТЬ(Документы.Комментарий КАК СТРОКА(1000))| ПОДОБНО &Шаблон";Запрос.УстановитьПараметр("Шаблон", "%ошибка%");Символ
%означает любое количество символов. Например:1С (Код)1Запрос.УстановитьПараметр("Шаблон", "%оплата%");Так будут найдены строки, содержащие слово
оплата.### Проверка начала строки
1С (Код)12345678910Запрос.Текст ="ВЫБРАТЬ| Документы.Ссылка|ИЗ| Документ.РеализацияТоваровУслуг КАК Документы|ГДЕ| ВЫРАЗИТЬ(Документы.Комментарий КАК СТРОКА(1000))| ПОДОБНО &Шаблон";Запрос.УстановитьПараметр("Шаблон", "Ошибка%");### Проверка окончания строки
1С (Код)1Запрос.УстановитьПараметр("Шаблон", "%требует уточнения");### Проверка, что поле заполнено
1С (Код)1234567Запрос.Текст ="ВЫБРАТЬ| Документы.Ссылка|ИЗ| Документ.РеализацияТоваровУслуг КАК Документы|ГДЕ| ВЫРАЗИТЬ(Документы.Комментарий КАК СТРОКА(1000)) <> """;### Проверка, что поле пустое
1С (Код)1234567Запрос.Текст ="ВЫБРАТЬ| Документы.Ссылка|ИЗ| Документ.РеализацияТоваровУслуг КАК Документы|ГДЕ| ВЫРАЗИТЬ(Документы.Комментарий КАК СТРОКА(1000)) = """;### Важное ограничение
Размер
СТРОКА(N)должен быть достаточным для проверяемого значения:1С (Код)1ВЫРАЗИТЬ(Объект.Текст КАК СТРОКА(1000))Если фактическое содержимое длиннее 1000 символов, при приведении оно может быть обрезано. Поэтому:
— для коротких комментариев можно использовать
СТРОКА(100);
— для больших текстов лучше использоватьСТРОКА(1000),СТРОКА(4000)или другое подходящее значение;
— при точном сравнении длинного текста размер должен быть не меньше возможной длины значения.Основной шаблон такой:
1С (Код)1|ВЫРАЗИТЬ(ИмяПоля КАК СТРОКА(1000)) = &Параметрили:
1С (Код)1|ВЫРАЗИТЬ(ИмяПоля КАК СТРОКА(1000)) ПОДОБНО &Параметр22 сентября 2026 в 9:34 в ответ на: Как подключить внешнюю обработку в 1С при ошибке «Действие недоступно в безопасн #38699Ошибка возникает при подключении файла, еще до его регистрации в списке дополнительных обработок. Поэтому проблема находится не в записи документа, а в коде, который выполняется при загрузке внешней обработки:
— в модуле объекта;
— в функцииСведенияОВнешнейОбработке();
— в разделе переменных модуля;
— в обработчике инициализации модуля;
— в общем модуле, который вызывается из этих мест.Сообщение:
1С (Код)1Действие недоступно в безопасном режимеозначает, что 1С загрузила обработку в безопасном режиме и обнаружила запрещенное действие.
## Что проверить в первую очередь
Откройте файл
ITC_ЗагрузкаПоступлений_Розница.epfв конфигураторе и проверьте модуль объекта.В функции:
1С (Код)1Функция СведенияОВнешнейОбработке() Экспортнайдите строку:
1С (Код)1ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);и замените на:
1С (Код)123ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);Минимальная функция регистрации должна выглядеть примерно так:
1С (Код)123456789101112131415161718192021222324252627Функция СведенияОВнешнейОбработке() ЭкспортПараметрыРегистрации = Новый Структура;ПараметрыРегистрации.Вставить("Вид","ДополнительнаяОбработка");ПараметрыРегистрации.Вставить("Наименование","Загрузка поступлений Розница");ПараметрыРегистрации.Вставить("Версия","1.0");ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);ПараметрыРегистрации.Вставить("Информация","Загрузка поступлений");Возврат ПараметрыРегистрации;КонецФункцииНо если ошибка появляется даже после такой замены, значит запрещенное действие выполняется до возврата из этой функции.
## Что нельзя выполнять при инициализации обработки
Проверьте модуль объекта и удалите из верхнего уровня модуля любые вызовы вроде:
1С (Код)1Соединение = Новый COMОбъект(...);1С (Код)1ЗапуститьПриложение(...);1С (Код)1Файл = Новый Файл(...);1С (Код)1Чтение = Новый ЧтениеТекста(...);1С (Код)1Запись = Новый ЗаписьТекста(...);1С (Код)1HTTPСоединение = Новый HTTPСоединение(...);1С (Код)1ВнешниеКомпоненты.Подключить(...);1С (Код)1Выполнить(ТекстКода);1С (Код)1УстановитьПривилегированныйРежим(Истина);Также опасны обращения к внешним файлам, COM-объектам, интернету, внешним компонентам и запуску программ операционной системы.
Особенно важно проверить переменные модуля. Например, такой код выполняется уже во время загрузки обработки:
1С (Код)123Перем Подключение;Подключение = Новый COMОбъект("V83.COMConnector");Его нужно заменить на создание объекта внутри команды обработки:
1С (Код)123456789&НаКлиентеПроцедура Загрузить(Команда)Подключение = Новый COMОбъект("V83.COMConnector");// Дальнейшая работаКонецПроцедурыНо если обработка зарегистрирована с безопасным режимом, даже вызов внутри команды может быть запрещен. В таком случае обработку нужно регистрировать как небезопасную или переделывать механизм работы.
## Важный момент по функции регистрации
Функция
СведенияОВнешнейОбработке()должна только формировать параметры регистрации. В ней не должно быть загрузки файлов, подключения к другой базе, создания COM-объекта или записи данных.Плохой вариант:
1С (Код)123456789101112Функция СведенияОВнешнейОбработке() ЭкспортПодключение = Новый COMОбъект("V83.COMConnector");Настройки = ПолучитьНастройкиИзФайла();ПараметрыРегистрации = Новый Структура;Возврат ПараметрыРегистрации;КонецФункцииПравильный вариант:
1С (Код)123456789101112131415Функция СведенияОВнешнейОбработке() ЭкспортПараметрыРегистрации = Новый Структура;ПараметрыРегистрации.Вставить("Наименование","Загрузка поступлений Розница");ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);Возврат ПараметрыРегистрации;КонецФункции## Если обработка подключается через БСП
В современных конфигурациях для дополнительных обработок может использоваться БСП. Тогда регистрация обычно выглядит примерно так:
1С (Код)12345678910111213141516171819202122Функция СведенияОВнешнейОбработке() ЭкспортПараметрыРегистрации =ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();ПараметрыРегистрации.Вставить("Вид",ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка());ПараметрыРегистрации.Вставить("Наименование","Загрузка поступлений Розница");ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);Возврат ПараметрыРегистрации;КонецФункцииТочный код зависит от версии БСП и конфигурации. Если в вашей конфигурации используется механизм разрешений безопасного режима, одной строки
БезопасныйРежим = Ложьможет быть недостаточно.## Проверьте настройки пользователя
Есть два разных механизма, их часто путают.
### Безопасный режим
Ограничивает выполнение отдельных действий внешней обработки. Именно с ним связано ваше сообщение:
1С (Код)1Действие недоступно в безопасном режиме### Защита от опасных действий
Выдает предупреждение вида:
1С (Код)12Предупреждение безопасности.Открывается внешняя обработка...Это другая настройка.
Если после исправления файла появляется именно предупреждение безопасности, а не ошибка безопасного режима, тогда можно проверить пользователя в конфигураторе:
1. Откройте конфигуратор.
2. Откройте список пользователей информационной базы.
3. Откройте пользователя.
4. Проверьте настройку Защита от опасных действий.Но отключать ее для всех пользователей не рекомендуется. Сначала нужно убедиться, что файл действительно доверенный.
## После изменения файл нужно зарегистрировать заново
Порядок такой:
1. Сделайте резервную копию базы.
2. Откройте.epfв конфигураторе.
3. ИсправьтеСведенияОВнешнейОбработке().
4. Удалите опасный код из верхнего уровня модуля.
5. Сохраните обработку.
6. Закройте конфигуратор.
7. Удалите старую обработку из списка дополнительных обработок.
8. Загрузите исправленный файл заново.
9. Перезапустите клиент 1С.Если обработка уже была зарегистрирована, изменение файла на диске само по себе не обновит обработку в базе.
## Как быстро найти запрещенную строку
В конфигураторе выполните поиск по модулю обработки по словам:
1С (Код)1234567891011121314COMОбъектЗапуститьПриложениеВнешниеКомпонентыУстановитьПривилегированныйРежимВыполнитьЧтениеТекстаЗаписьТекстаПолучитьФайлПоместитьФайлHTTPСоединениеFTPСоединениеФайлЗаписатьУдалитьПроверьте не только
СведенияОВнешнейОбработке(), но и:— объявления переменных модуля;
— основной модуль объекта;
— формы обработки;
— вызываемые общие модули;
— процедуры, выполняемые при открытии формы.## Если исходник обработки закрыт
Если
.epfне открывается в конфигураторе или модуль защищен паролем, самостоятельно исправить обработку невозможно. В таком случае варианты только такие:1. запросить у разработчика новую версию обработки;
2. запросить исходный файл без защиты;
3. попросить разработчика убрать выполнение запрещенных действий из инициализации;
4. проверить совместимость версии платформы и конфигурации.Фраза 1С:
1С (Код)1Возможно, она не подходит для этой версии приложенияв данном случае может быть стандартным общим текстом. Реальная причина указана ниже:
1С (Код)1Действие недоступно в безопасном режимеТо есть сначала нужно исправить безопасный режим и код инициализации, а уже потом проверять совместимость версии приложения.
22 сентября 2026 в 9:20 в ответ на: Как исправить ошибку «Действие недоступно в безопасном режиме» при записи докуме #38697Ошибка означает, что внешняя обработка
ITC_ЗагрузкаПоступлений_Розница.epfвыполняется в безопасном режиме, а в обработчикеПередЗаписьюиспользуется действие, запрещенное этим режимом.По стеку видно:
1С (Код)1234ВнешняяОбработка.ITC_ЗагрузкаПоступлений_Розница.МодульОбъектаОшибка при вызове метода контекста (Записать)Ошибка при выполнении обработчика - 'ПередЗаписью'Действие недоступно в безопасном режимеТо есть обработка пытается записать документ, но во время записи срабатывает обработчик
ПередЗаписью, внутри которого выполняется запрещенная операция.## Вариант 1. Отключить безопасный режим для обработки
Если файл обработки получен из доверенного источника, нужно изменить функцию регистрации обработки.
Откройте файл
.epfв конфигураторе:1. Файл → Открыть.
2. ВыберитеITC_ЗагрузкаПоступлений_Розница.epf.
3. Откройте Модуль объекта.
4. Найдите функцию:1С (Код)1Функция СведенияОВнешнейОбработке() Экспорт5. Найдите строку:
1С (Код)1ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);6. Замените ее на:
1С (Код)1ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);Пример:
1С (Код)12345678910111213141516171819Функция СведенияОВнешнейОбработке() ЭкспортПараметрыРегистрации = Новый Структура;ПараметрыРегистрации.Вставить("Наименование","Загрузка поступлений в Розницу");ПараметрыРегистрации.Вставить("Версия","1.0");ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);Возврат ПараметрыРегистрации;КонецФункцииПосле изменения:
1. Сохраните
.epf.
2. В базе удалите старую зарегистрированную обработку.
3. Добавьте исправленный файл заново.
4. Полностью перезапустите 1С.
5. Повторите загрузку.Простого изменения файла на диске может быть недостаточно, если обработка уже зарегистрирована в информационной базе. В базе могли сохраниться старые параметры регистрации.
## Вариант 2. Если обработка уже зарегистрирована в базе
В типовых конфигурациях обычно используется раздел:
НСИ и администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки
Далее:
1. Найдите
ITC_ЗагрузкаПоступлений_Розница.
2. Откройте карточку обработки.
3. Удалите ее.
4. Добавьте исправленный файл.epf.
5. Проверьте, чтобы обработка была зарегистрирована заново.В некоторых конфигурациях после повторной загрузки есть флаг вроде:
— Безопасный режим;
— Использовать безопасный режим;
— Разрешить небезопасные действия;
— Доверенная внешняя обработка.Если такой параметр доступен, для доверенной обработки его нужно отключить.
## Важно: изменение параметра может не решить проблему
Строка:
1С (Код)1ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);только сообщает конфигурации, что обработка должна выполняться без безопасного режима. Но ошибка может остаться, если запрещенное действие находится не в самой внешней обработке, а в вызываемом общем модуле или обработчике объекта.
Например, в
ПередЗаписьюможет использоваться:1С (Код)1УстановитьПривилегированныйРежим(Истина);или:
1С (Код)1ЗапуститьПриложение(...);или:
1С (Код)1Новый COMОбъект(...);или:
1С (Код)1Выполнить(ТекстКода);или работа с файлами, интернетом, внешними компонентами.
Такие действия нужно либо выполнять в разрешенном контексте, либо переделывать код.
## Как найти точную запрещенную строку
В тексте ошибки нет номера строки, поэтому нужно включить остановку отладчика на исключениях.
### В конфигураторе
1. Запустите базу в режиме отладки.
2. Откройте Отладка → Подключение.
3. Подключите текущий сеанс.
4. Включите остановку по исключениям.
5. Повторите загрузку.Отладчик должен остановиться на конкретной строке обработчика
ПередЗаписью.Также можно открыть модуль внешней обработки и выполнить поиск по следующим словам:
1С (Код)12345678910111213УстановитьПривилегированныйРежимЗапуститьПриложениеНовый COMОбъектВыполнитьНачатьПолучениеФайлаПоместитьФайлПолучитьФайлЗаписатьЧтениеТекстаЗаписьТекстаHTTPСоединениеFTPСоединениеВнешниеКомпонентыОсобенно внимательно проверьте код, который вызывается из
ПередЗаписью.## Почему ошибка появляется именно при
ЗаписатьМетод:
1С (Код)1Документ.Записать();сам по себе не обязательно является причиной ошибки.
При записи объекта 1С автоматически выполняет обработчики:
1С (Код)1234ПередЗаписьюПриЗаписиОбработкаПроведенияОбработкаПроверкиЗаполненияВ вашем случае ошибка возникает внутри
ПередЗаписью. Поэтому сообщение указывает на:1С (Код)1Ошибка при вызове метода контекста (Записать)а реальная причина находится в коде обработчика:
1С (Код)1ПередЗаписьюНапример:
1С (Код)12345Процедура ПередЗаписью(Отказ)УстановитьПривилегированныйРежим(Истина);КонецПроцедурыВ безопасном режиме такой код завершится ошибкой:
1С (Код)1Действие недоступно в безопасном режиме## Если обработка должна работать в безопасном режиме
В этом случае нельзя просто отключать безопасность. Нужно найти запрещенную операцию и заменить ее.
Например, если используется:
1С (Код)1УстановитьПривилегированныйРежим(Истина);то нужно проверить, действительно ли обработчику требуется привилегированный режим. Если он нужен только для чтения данных, запрос можно выполнять в общем серверном модуле с флагом Привилегированный.
Но для внешней обработки, выполняющей загрузку документов, часто требуется запись данных, доступ к регистрам, файлам или внешним сервисам. Безопасный режим в таком случае может быть принципиально несовместим с функциональностью обработки.
## Если обработка загружается программно
Если обработка подключается программно через
ПодключаемыеКоманды,ДополнительныеОтчетыИОбработкиили собственный механизм, проверьте параметр безопасности в месте регистрации.Должно быть примерно так:
1С (Код)123ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь);Если параметр формируется в другой процедуре, найдите по конфигурации поиск:
1С (Код)1БезопасныйРежими проверьте все места, где внешняя обработка регистрируется.
## Что сделать в вашем случае
Для быстрого исправления:
1. Сделайте копию базы.
2. ОткройтеITC_ЗагрузкаПоступлений_Розница.epf.
3. ВСведенияОВнешнейОбработке()установите:1С (Код)1ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);4. Сохраните файл.
5. Удалите старую обработку из списка дополнительных обработок.
6. Загрузите файл заново.
7. Перезапустите 1С.
8. Повторите загрузку поступления.Если после этого ошибка останется, значит запрещенная операция выполняется в коде, который не зависит от параметра регистрации. Тогда нужно отлаживать обработчик
ПередЗаписьюи исправлять конкретную строку, на которой срабатывает ограничение безопасного режима.Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/1531.html22 сентября 2026 в 9:17 в ответ на: Как исправить функцию ПолучитьОбщиеПоказатели для корректной работы? #38695Ниже исправленный вариант функции. Основная замена:
1С (Код)1Мета = мДокументы[0].Метаданные();на получение метаданных по типу:
1С (Код)1Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Также добавлена проверка пустого массива и обработка случая, когда из формы списка передается структура с полем
Ссылка.1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226Функция ПолучитьОбщиеПоказатели(Знач мДокументы) ЭкспортПустойРезультат = Новый Структура("_Вес,_Объем,_Площадь",0,0,0);Если мДокументы = Неопределено ТогдаВозврат ПустойРезультат;КонецЕсли;Если ТипЗнч(мДокументы) <> Тип("Массив") ТогдаВозврат ПустойРезультат;КонецЕсли;Если мДокументы.Количество() = 0 ТогдаВозврат ПустойРезультат;КонецЕсли;// Нормализуем массив.// В массиве должны находиться ссылки на документы.НормализованныеДокументы = Новый Массив;Для Каждого ЭлементМассива Из мДокументы ЦиклЕсли ЭлементМассива = Неопределено ТогдаПродолжить;КонецЕсли;ТипЭлемента = ТипЗнч(ЭлементМассива);// Если из формы списка пришла структура строки,// извлекаем из нее ссылку на документ.Если ТипЭлемента = Тип("Структура") ТогдаСсылкаДокумента = Неопределено;Если ЭлементМассива.Свойство("Ссылка",СсылкаДокумента) ТогдаЕсли ЗначениеЗаполнено(СсылкаДокумента) ТогдаНормализованныеДокументы.Добавить(СсылкаДокумента);КонецЕсли;КонецЕсли;Иначе// Для ссылок и объектов документов добавляем само значение.НормализованныеДокументы.Добавить(ЭлементМассива);КонецЕсли;КонецЦикла;Если НормализованныеДокументы.Количество() = 0 ТогдаВозврат ПустойРезультат;КонецЕсли;мДокументы = НормализованныеДокументы;// Получаем метаданные по типу значения.// Метод Метаданные() у ссылок и объектов документов// в данном случае использовать нельзя.Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Если Мета = Неопределено ТогдаВозврат ПустойРезультат;КонецЕсли;// Если в массиве оказались объекты документов,// преобразуем их в ссылки.Если СтрНачинаетсяС(Строка(ТипЗнч(мДокументы[0])),"ДокументОбъект.") ТогдамРезультат = Новый Массив;Для Каждого ДокументОбъект Из мДокументы ЦиклЕсли ДокументОбъект <> Неопределено ТогдамРезультат.Добавить(ДокументОбъект.Ссылка);КонецЕсли;КонецЦикла;мДокументы = мРезультат;Если мДокументы.Количество() = 0 ТогдаВозврат ПустойРезультат;КонецЕсли;Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Если Мета = Неопределено ТогдаВозврат ПустойРезультат;КонецЕсли;КонецЕсли;// Определяем табличную часть.Если Мета.ТабличныеЧасти.Найти("Товары") <> Неопределено ТогдаИмяТЧ = "Товары";ИначеЕсли Мета.ТабличныеЧасти.Найти("ОтгружаемыеТовары") <> Неопределено ТогдаИмяТЧ = "ОтгружаемыеТовары";ИначеВозврат ПустойРезультат;КонецЕсли;_Вес = 0;_Объем = 0;_Площадь = 0;УстановитьПривилегированныйРежим(Истина);ПопыткаЗапрос = Новый Запрос;Запрос.УстановитьПараметр("МассивДокументов",мДокументы);ШаблонЗапроса ="||ВЫБРАТЬ| Таблица.*,| Таблица.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,| Таблица.Номенклатура.НаименованиеПолное КАК НаименованиеПолное,| Таблица.Номенклатура.Артикул КАК Артикул,| Таблица.Номенклатура.ВесЧислитель КАК ВесЧислитель,| Таблица.Номенклатура.ВесЗнаменатель КАК ВесЗнаменатель,| Таблица.Номенклатура.ВесЕдиницаИзмерения КАК ВесЕдиницаИзмерения,| Таблица.Номенклатура.ОбъемЕдиницаИзмерения КАК ОбъемЕдиницаИзмерения,| Таблица.Номенклатура.ОбъемЧислитель КАК ОбъемЧислитель,| Таблица.Номенклатура.ОбъемЗнаменатель КАК ОбъемЗнаменатель,| Таблица.Номенклатура.ПлощадьЕдиницаИзмерения КАК ПлощадьЕдиницаИзмерения,| Таблица.Номенклатура.ПлощадьЧислитель КАК ПлощадьЧислитель,| Таблица.Номенклатура.ПлощадьЗнаменатель КАК ПлощадьЗнаменатель|ИЗ| Документ.%1.%2 КАК Таблица|ГДЕ| Таблица.Ссылка В (&МассивДокументов)";Запрос.Текст = СтрШаблон(ШаблонЗапроса,Мета.Имя,ИмяТЧ);РезультатЗапроса = Запрос.Выполнить();Если РезультатЗапроса.Пустой() ТогдаВозврат ПустойРезультат;КонецЕсли;Выборка = РезультатЗапроса.Выбрать();Пока Выборка.Следующий() ЦиклЕсли Не ЗначениеЗаполнено(Выборка.Номенклатура) ТогдаПродолжить;КонецЕсли;Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Выборка,"Отменено")И Выборка.Отменено ТогдаПродолжить;КонецЕсли;Реквизиты = РеквизитыНоменклатуры(Выборка);_Вес = _Вес+ ПолучитьВесВСтрокеТЧ(Выборка,Реквизиты);_Объем = _Объем+ ПолучитьОбъемВСтрокеТЧ(Выборка,Реквизиты);Если Реквизиты.ПлощадьЗнаменатель <> 0 Тогда_Площадь = _Площадь+ Выборка.Количество* Реквизиты.ПлощадьЧислитель/ Реквизиты.ПлощадьЗнаменатель;КонецЕсли;КонецЦикла;Исключение// При необходимости здесь можно записать ошибку в журнал регистрации.Возврат ПустойРезультат;КонецПопытки;УстановитьПривилегированныйРежим(Ложь);Возврат Новый Структура("_Вес,_Объем,_Площадь",_Вес,_Объем,_Площадь);КонецФункцииНо в приведенном варианте есть важный нюанс: возврат из блока
Попыткадо выполнения строки:1С (Код)1УстановитьПривилегированныйРежим(Ложь);может оставить привилегированный режим включенным до завершения серверного вызова. Поэтому лучше вынести результат в переменную и отключить привилегированный режим перед единственным возвратом.
Более безопасный фрагмент завершения функции:
1С (Код)1234567891011121314151617181920212223Результат = ПустойРезультат;УстановитьПривилегированныйРежим(Истина);Попытка// Выполнение запроса и расчет показателейРезультат = Новый Структура("_Вес,_Объем,_Площадь",_Вес,_Объем,_Площадь);ИсключениеРезультат = ПустойРезультат;КонецПопытки;УстановитьПривилегированныйРежим(Ложь);Возврат Результат;## Еще одна важная правка
В вашей функции есть этот код:
1С (Код)1Если ОбщегоНазначения.ЭтоРегистрСведений(Мета) ТогдаЕго лучше убрать из данной функции. Функция формирует запрос к объекту:
1С (Код)1Документ.%1.%2То есть она рассчитана именно на документы с табличными частями. Если передать туда регистр сведений, запрос с конструкцией
Документ.ИмяРегистра.ТабличнаяЧастьбудет некорректным.Функция должна получать массив:
1С (Код)12МассивДокументов = Новый Массив;МассивДокументов.Добавить(СсылкаНаДокумент);где элемент имеет тип:
1С (Код)1ДокументСсылка.ИмяДокументаДля вашей формы списка правильное заполнение массива должно выглядеть примерно так:
1С (Код)12345678910МассивДокументов = Новый Массив;Для Каждого СтрокаДокумента Из Документы ЦиклЕсли ЗначениеЗаполнено(СтрокаДокумента.Ссылка) ТогдаМассивДокументов.Добавить(СтрокаДокумента.Ссылка);КонецЕсли;КонецЦикла;Если текущая строка формы уже является ссылкой, тогда достаточно:
1С (Код)1МассивДокументов.Добавить(ТекущаяСтрока);После исправления перед вызовом серверной функции проверьте тип:
1С (Код)1Сообщить(Строка(ТипЗнч(МассивДокументов[0])));Ожидаемый результат:
1С (Код)1ДокументСсылка.РеализацияТоваровУслугили другой тип ссылки на документ.
Ключевая исправленная строка:
1С (Код)12Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));А строку:
1С (Код)1Мета = мДокументы[0].Метаданные();нужно удалить полностью.
22 сентября 2026 в 7:42 в ответ на: Как исправить ошибку: метод объекта не обнаружен (Метаданные) в 1С? #38693Ошибка возникает на строке:
1С (Код)1Мета = мДокументы[0].Метаданные();Метод
Метаданные()у элементамДокументы[0]недоступен. Скорее всего, в массив передаются не ссылки на документы, а:— объекты документов;
— строки динамического списка;
— данные формы;
— структура;
— другой объект, не являющийся ссылкой.Для получения метаданных надежнее использовать тип значения:
1С (Код)1Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Но важно: если в
мДокументынаходятся объекты документов,ТипЗнч()вернет типДокументОбъект.<ИмяДокумента>, а для поиска метаданных документа нужно получить тип ссылки.## Исправление для ссылок на документы
Если
мДокументысодержит ссылки на документы, замените строку:1С (Код)1Мета = мДокументы[0].Метаданные();на:
1С (Код)1Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Например:
1С (Код)1234567891011121314151617181920212223&НаСервереБезКонтекстаФункция ПолучитьОбщиеПоказатели(мДокументы)Если мДокументы = НеопределеноИли мДокументы.Количество() = 0 ТогдаВозврат Неопределено;КонецЕсли;ПервыйДокумент = мДокументы[0];Если Не ЗначениеЗаполнено(ПервыйДокумент) ТогдаВозврат Неопределено;КонецЕсли;Мета = Метаданные.НайтиПоТипу(ТипЗнч(ПервыйДокумент));Если Мета = Неопределено ТогдаВызватьИсключение "Не удалось определить метаданные переданного документа";КонецЕсли;// Дальнейшая обработкаКонецФункцииОднако такой вариант корректен только тогда, когда первый элемент действительно является ссылкой на документ.
## Если в массив передается объект документа
Если
мДокументы[0]является объектом документа, например:1С (Код)1ДокументОбъект = Документы.РеализацияТоваровУслуг.НайтиПоСсылке(Ссылка);то его тип будет примерно таким:
1С (Код)1ДокументОбъект.РеализацияТоваровУслугВ этом случае нужно преобразовать тип объекта документа в тип ссылки:
1С (Код)12345678910ТипДокумента = ТипЗнч(мДокументы[0]);ИмяТипа = Строка(ТипДокумента);ИмяТипаСсылки = СтрЗаменить(ИмяТипа,"ДокументОбъект.","ДокументСсылка.");ТипДокументаСсылка = Новый Тип(ИмяТипаСсылки);Мета = Метаданные.НайтиПоТипу(ТипДокументаСсылка);Но такой вариант менее удобен. Лучше передавать в
ПолучитьОбщиеПоказатели()именно ссылки на документы, а не объекты.## Универсальный вариант для ссылок и объектов
Если ваш общий модуль может получать и ссылки, и объекты, используйте проверку типа:
1С (Код)1234567891011121314151617181920212223242526272829&НаСервереБезКонтекстаФункция ПолучитьМетаданныеДокумента(Документ)Если Документ = Неопределено ТогдаВозврат Неопределено;КонецЕсли;ТипДокумента = ТипЗнч(Документ);ИмяТипа = Строка(ТипДокумента);Если СтрНачинаетсяС(ИмяТипа, "ДокументСсылка.") ТогдаВозврат Метаданные.НайтиПоТипу(ТипДокумента);ИначеЕсли СтрНачинаетсяС(ИмяТипа, "ДокументОбъект.") ТогдаИмяТипаСсылки = СтрЗаменить(ИмяТипа,"ДокументОбъект.","ДокументСсылка.");Возврат Метаданные.НайтиПоТипу(Новый Тип(ИмяТипаСсылки));КонецЕсли;Возврат Неопределено;КонецФункцииТогда в функции
ПолучитьОбщиеПоказатели():1С (Код)12345Мета = ПолучитьМетаданныеДокумента(мДокументы[0]);Если Мета = Неопределено ТогдаВызватьИсключение "В массиве передан объект, который не является документом";КонецЕсли;## Если в массиве находятся строки списка
Судя по вызову:
1С (Код)1ВОП_ОбщийМодульКлиент._ЗаполнитьПоказателиДокументаКлиент(ЭтаФорма);обработка запускается из формы списка документов. В этом случае в массив могли попасть не ссылки, а строки формы или структуры.
Например, ошибочный вариант:
1С (Код)1МассивДокументов.Добавить(ТекущаяСтрока);где
ТекущаяСтрокаявляется данными строки динамического списка.Нужно добавлять именно ссылку на документ:
1С (Код)1МассивДокументов.Добавить(ТекущаяСтрока.Ссылка);В зависимости от формы поле может называться:
1С (Код)1ТекущаяСтрока.Ссылкаили:
1С (Код)1ТекущаяСтрока.Документили:
1С (Код)1ТекущаяСтрока.РегистраторНапример:
1С (Код)1234567891011121314151617&НаКлиентеПроцедура ЗаполнитьПоказатели(Команда)МассивДокументов = Новый Массив;Для Каждого СтрокаДокумента Из Элементы.Список.ТекущиеДанные ЦиклЕсли ЗначениеЗаполнено(СтрокаДокумента.Ссылка) ТогдаМассивДокументов.Добавить(СтрокаДокумента.Ссылка);КонецЕсли;КонецЦикла;Показатели = _ОбщийВызовСервера.ПолучитьОбщиеПоказатели(МассивДокументов);КонецПроцедурыКонкретное имя реквизита зависит от источника динамического списка.
## Как быстро определить фактический тип
Временно добавьте перед строкой с ошибкой:
1С (Код)1Сообщить(Строка(ТипЗнч(мДокументы[0])));Либо в отладчике посмотрите значение:
1С (Код)1ТипЗнч(мДокументы[0])Возможные результаты:
1С (Код)1ДокументСсылка.РеализацияТоваровУслугТогда достаточно:
1С (Код)1Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Если результат:
1С (Код)1ДокументОбъект.РеализацияТоваровУслугнужно либо передавать ссылку:
1С (Код)1мДокументы.Добавить(ДокументОбъект.Ссылка);либо использовать преобразование типа объекта в тип ссылки.
Если результат:
1С (Код)1Структураили:
1С (Код)1ДанныеФормыСтруктуразначит в серверную функцию передается не сам документ, а структура или строка формы. Нужно извлечь из нее ссылку до вызова серверной функции.
## Рекомендуемое исправление
В модуле
_ОбщийВызовСерверазамените:1С (Код)1Мета = мДокументы[0].Метаданные();на:
1С (Код)1Мета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));А в коде формирования массива убедитесь, что добавляется именно ссылка:
1С (Код)1МассивДокументов.Добавить(ТекущаяСтрока.Ссылка);Для формы списка документов оптимальная схема такая:
1С (Код)12345// На клиентеМассивДокументов.Добавить(СтрокаСписка.Ссылка);// На сервереМета = Метаданные.НайтиПоТипу(ТипЗнч(мДокументы[0]));Метод
мДокументы[0].Метаданные()в данном случае использовать не нужно.22 сентября 2026 в 7:38 в ответ на: Почему возникает ошибка «Поле объекта не обнаружено» (НалогообложениеНДСВТабличн #38691Ошибка возникает не в регистре и не при проведении документа. Она появляется в вашей доработке «ДобавлениеДвухСтрок» при вызове:
1С (Код)1234ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаДоставка,СтруктураДействий,Неопределено);Типовой общий модуль при обработке действия «Заполнить ставку НДС» ожидает, что параметры действия содержат поле:
1С (Код)1НалогообложениеНДСВТабличнойЧастиВ переданной структуре этого поля нет, поэтому обращение:
1С (Код)1СтруктураПараметровДействия.НалогообложениеНДСВТабличнойЧастизавершается ошибкой:
1С (Код)1Поле объекта не обнаружено## Что нужно исправить
При формировании
СтруктураДействийдобавьте в параметры действия полеНалогообложениеНДСВТабличнойЧасти.Пример:
1С (Код)123456789СтруктураПараметровДействия = Новый Структура;СтруктураПараметровДействия.Вставить("НалогообложениеНДСВТабличнойЧасти",Истина);СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",СтруктураПараметровДействия);Если в вашей версии общего модуля действие называется иначе, нужно использовать фактическое имя, которое передается в
СтруктураДействий.Например, общий код может выглядеть так:
1С (Код)12345678910111213141516171819202122232425262728293031СтруктураДействий = Новый Структура;// Параметры для заполнения ставки НДСПараметрыЗаполненияСтавкиНДС = Новый Структура;ПараметрыЗаполненияСтавкиНДС.Вставить("НалогообложениеНДСВТабличнойЧасти",Истина);СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",ПараметрыЗаполненияСтавкиНДС);// Остальные действияСтруктураДействий.Вставить("ПересчитатьСуммуНДС",СтруктураПересчетаСуммы);СтруктураДействий.Вставить("ПересчитатьСуммуСНДС",СтруктураПересчетаСуммы);СтруктураДействий.Вставить("ПересчитатьСумму");СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки",Новый Структура("Очищать", Ложь));СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки",Новый Структура("Очищать", Истина));После этого вызов:
1С (Код)1234ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаДоставка,СтруктураДействий,Неопределено);получит необходимые параметры.
## Какое значение указывать
Для документа «Реализация товаров и услуг» значение должно соответствовать настройке налогообложения документа.
Если ставка НДС хранится в строках табличной части
Товары, обычно используется:1С (Код)1ИстинаЕсли НДС определяется не в строках, а на уровне документа или используется режим без налогообложения в табличной части, должно быть:
1С (Код)1ЛожьДля обычной реализации с колонками:
— Ставка НДС;
— Сумма НДС;
— Сумма с НДС;как правило, нужно передавать
Истина:1С (Код)123ПараметрыЗаполненияСтавкиНДС.Вставить("НалогообложениеНДСВТабличнойЧасти",Истина);Но лучше не задавать значение произвольно, а взять алгоритм из типовой формы документа.
## Более правильный вариант
Если в документе или форме уже рассчитывается этот признак, используйте именно типовой источник:
1С (Код)12НалогообложениеНДСВТабличнойЧасти =ПолучитьПризнакНалогообложенияНДСВТабличнойЧасти(ТекущийОбъект);Далее:
1С (Код)123456789ПараметрыЗаполненияСтавкиНДС = Новый Структура;ПараметрыЗаполненияСтавкиНДС.Вставить("НалогообложениеНДСВТабличнойЧасти",НалогообложениеНДСВТабличнойЧасти);СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",ПараметрыЗаполненияСтавкиНДС);Название функции в вашей конфигурации может отличаться. Нужно посмотреть типовой код формы документа в обработчиках:
— изменения ставки НДС;
— изменения номенклатуры;
— изменения вида операции;
— пересчета суммы НДС;
— заполнения строки товара или услуги.Ищите в типовой форме место, где формируется
СтруктураДействий, либо вызов:1С (Код)1ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧСкопируйте оттуда структуру параметров без изменений.
## Возможная ошибка в текущей доработке
Скорее всего, сейчас у вас примерно такой код:
1С (Код)12345678910СтруктураДействий = Новый Структура;СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",Новый Структура);ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаДоставка,СтруктураДействий,Неопределено);Или действие добавлено так:
1С (Код)123СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",Истина);Оба варианта некорректны для вашей версии общего модуля, поскольку внутри процедуры ожидается структура примерно такого вида:
1С (Код)12СтруктураПараметровДействия = Новый Структура;СтруктураПараметровДействия.НалогообложениеНДСВТабличнойЧасти = Истина;Исправьте на:
1С (Код)12345678ПараметрыЗаполненияСтавкиНДС = Новый Структура;ПараметрыЗаполненияСтавкиНДС.Вставить("НалогообложениеНДСВТабличнойЧасти",Истина);СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",ПараметрыЗаполненияСтавкиНДС);## Если вы не хотите автоматически заполнять ставку НДС
Если строка доставки уже содержит ставку НДС и вам не нужно запускать типовую обработку заполнения ставки, можно убрать действие
ЗаполнитьСтавкуНДСизСтруктураДействий.Например:
1С (Код)1234567891011121314151617СтруктураДействий = Новый Структура;СтруктураДействий.Вставить("ПересчитатьСуммуНДС",СтруктураПересчетаСуммы);СтруктураДействий.Вставить("ПересчитатьСуммуСНДС",СтруктураПересчетаСуммы);СтруктураДействий.Вставить("ПересчитатьСумму");ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаДоставка,СтруктураДействий,Неопределено);Но это допустимо только если:
—
СтрокаДоставка.СтавкаНДСуже заполнена;
—СтрокаДоставка.СуммаНДСрассчитывается другим кодом;
— типовая логика документа не должна заново определять ставку НДС.## Проверка в отладчике
Перед строкой 685 установите точку останова и проверьте:
1С (Код)1СтруктураДействийВ ней должен быть элемент:
1С (Код)1ЗаполнитьСтавкуНДСЗначение этого элемента должно быть структурой с полем:
1С (Код)1НалогообложениеНДСВТабличнойЧастиОжидаемая структура:
1С (Код)123СтруктураДействийЗаполнитьСтавкуНДСНалогообложениеНДСВТабличнойЧасти = ИстинаЕсли
ЗаполнитьСтавкуНДСотсутствует, но общий модуль всё равно его обрабатывает, значит структура действий формируется не в том формате, который ожидает конкретный релиз конфигурации. В этом случае нужно ориентироваться на типовой вызов из вашей версии УТ или КА, а не на пример из другой версии.## Что не нужно делать
Не исправляйте общий модуль:
1С (Код)1ОбщийМодуль.ПакетнаяОбработкаТабличнойЧастиСервери не добавляйте туда проверку:
1С (Код)12Если СтруктураПараметровДействия.Свойство("НалогообложениеНДСВТабличнойЧасти") ТогдаЭто скроет ошибку, но может нарушить типовой алгоритм пересчета НДС. Исправлять нужно формирование
СтруктураДействийв процедуре вашей доработки «ДобавлениеДвухСтрок».Наиболее вероятное рабочее исправление в вашем случае:
1С (Код)12345678ПараметрыЗаполненияСтавкиНДС = Новый Структура;ПараметрыЗаполненияСтавкиНДС.Вставить("НалогообложениеНДСВТабличнойЧасти",Истина);СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС",ПараметрыЗаполненияСтавкиНДС);Разместить этот код нужно до вызова:
1С (Код)1234ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаДоставка,СтруктураДействий,Неопределено);21 сентября 2026 в 17:34 в ответ на: Как исправить ошибку в запросе 1С при формировании соответствия даты к периоду? #38689В запросе основная ошибка находится в формировании
ВТ_СоответствиеДатыПериоду.Сейчас соединение выполняется только по условию:
1С (Код)1|ПО ВТ_ОстаткиИОбороты.Период <= ВТ_ДатыНаКаждыйДень.ДатаПри этом отсутствует связь по товару. Поэтому для каждого дня выбираются периоды всех товаров, а
МАКСИМУМ(Период)может быть взят от другого товара. В результате остатки могут подставляться не на тот товар.Кроме того, если в регистре есть измерение
Склад, текущий запрос может дублировать остатки по каждому складу, поскольку группировки по товару и периоду нет.Исправленный вариант:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127|ВЫБРАТЬ| ДатыНаКаждыйДень.Дата КАК Дата|ПОМЕСТИТЬ ВТ_ДатыНаКаждыйДень|ИЗ| &ДатыНаКаждыйДень КАК ДатыНаКаждыйДень|;||////////////////////////////////////////////////////////////////////////////////|ВЫБРАТЬ| Товары.Ссылка КАК Товар,| ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.Период,| &НачалоПериода| ) КАК Период,| СУММА(ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.КоличествоНачальныйОстаток,| 0| )) КАК КоличествоНачальныйОстаток,| СУММА(ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток,| 0| )) КАК КоличествоКонечныйОстаток,| СУММА(ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.КоличествоОборот,| 0| )) КАК КоличествоОборот,| СУММА(ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.КоличествоПриход,| 0| )) КАК КоличествоПриход,| СУММА(ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.КоличествоРасход,| 0| )) КАК КоличествоРасход|ПОМЕСТИТЬ ВТ_ОстаткиИОбороты|ИЗ| Справочник.Номенклатура КАК Товары| ЛЕВОЕ СОЕДИНЕНИЕ| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(| &НачалоПериода,| &КонецПериода,| День,| ДвиженияИГраницыПериода,| ) КАК ОстаткиТоваровОстаткиИОбороты| ПО Товары.Ссылка = ОстаткиТоваровОстаткиИОбороты.Номенклатура|ГДЕ| НЕ Товары.ЭтоГруппа||СГРУППИРОВАТЬ ПО| Товары.Ссылка,| ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.Период,| &НачалоПериода| )||ИНДЕКСИРОВАТЬ ПО| Товар,| Период|;||////////////////////////////////////////////////////////////////////////////////|ВЫБРАТЬ| ВТ_ДатыНаКаждыйДень.Дата КАК День,| ВТ_ОстаткиИОбороты.Товар КАК Товар,| МАКСИМУМ(ВТ_ОстаткиИОбороты.Период) КАК ПериодОстатковИОборотов|ПОМЕСТИТЬ ВТ_СоответствиеДатыПериоду|ИЗ| ВТ_ДатыНаКаждыйДень КАК ВТ_ДатыНаКаждыйДень| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты| ПО ВТ_ОстаткиИОбороты.Период <= ВТ_ДатыНаКаждыйДень.Дата||СГРУППИРОВАТЬ ПО| ВТ_ДатыНаКаждыйДень.Дата,| ВТ_ОстаткиИОбороты.Товар||ИНДЕКСИРОВАТЬ ПО| Товар,| День,| ПериодОстатковИОборотов|;||////////////////////////////////////////////////////////////////////////////////|ВЫБРАТЬ| ВТ_СоответствиеДатыПериоду.День КАК День,| ВТ_ОстаткиИОбороты.Период КАК Период,| ВТ_СоответствиеДатыПериоду.Товар КАК Товар,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоНачальныйОстаток| ИНАЧЕ ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток| КОНЕЦ КАК НачальныйОстаток,|| ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоОборот| ИНАЧЕ 0| КОНЕЦ КАК Оборот,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоПриход| ИНАЧЕ 0| КОНЕЦ КАК Приход,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоРасход| ИНАЧЕ 0| КОНЕЦ КАК Расход|ИЗ| ВТ_СоответствиеДатыПериоду КАК ВТ_СоответствиеДатыПериоду| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты| ПО ВТ_СоответствиеДатыПериоду.Товар =| ВТ_ОстаткиИОбороты.Товар| И ВТ_СоответствиеДатыПериоду.ПериодОстатковИОборотов =| ВТ_ОстаткиИОборОТЫ.Период||УПОРЯДОЧИТЬ ПО| Товар.Наименование,| ДеньВ последнем соединении в приведенном тексте допущена опечатка в имени алиаса. Должно быть именно:
1С (Код)1234| ПО ВТ_СоответствиеДатыПериоду.Товар =| ВТ_ОстаткиИОбороты.Товар| И ВТ_СоответствиеДатыПериоду.ПериодОстатковИОборотов =| ВТ_ОстаткиИОбороты.ПериодТо есть полный последний блок нужно использовать так:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445|ВЫБРАТЬ| ВТ_СоответствиеДатыПериоду.День КАК День,| ВТ_ОстаткиИОбороты.Период КАК Период,| ВТ_СоответствиеДатыПериоду.Товар КАК Товар,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоНачальныйОстаток| ИНАЧЕ ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток| КОНЕЦ КАК НачальныйОстаток,|| ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоОборот| ИНАЧЕ 0| КОНЕЦ КАК Оборот,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоПриход| ИНАЧЕ 0| КОНЕЦ КАК Приход,|| ВЫБОР| КОГДА ВТ_СоответствиеДатыПериоду.День =| ВТ_ОстаткиИОбороты.Период| ТОГДА ВТ_ОстаткиИОбороты.КоличествоРасход| ИНАЧЕ 0| КОНЕЦ КАК Расход|ИЗ| ВТ_СоответствиеДатыПериоду КАК ВТ_СоответствиеДатыПериоду| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты| ПО ВТ_СоответствиеДатыПериоду.Товар =| ВТ_ОстаткиИОбороты.Товар| И ВТ_СоответствиеДатыПериоду.ПериодОстатковИОборотов =| ВТ_ОстаткиИОбороты.Период||УПОРЯДОЧИТЬ ПО| Товар.Наименование,| ДеньНо есть еще один важный нюанс:
ОстаткиИОборотыс периодичностьюДеньможет возвращать несколько строк на один товар и день, например по складам, сериям, характеристикам или организациям. Поэтому перед использованием данных нужно проверить измерения регистра.Если отчет строится по всем складам, агрегация по товару и периоду, приведенная выше, правильна.
Если отчет строится по конкретному складу, склад лучше передать параметром виртуальной таблицы:
1С (Код)1234567|РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(| &НачалоПериода,| &КонецПериода,| День,| ДвиженияИГраницыПериода,| Склад = &Склад|) КАК ОстаткиТоваровОстаткиИОборотыЕсли нужно учитывать также характеристики и серии, их нужно добавить:
1С (Код)123|Товары.Ссылка КАК Товар,|ОстаткиТоваровОстаткиИОбороты.Характеристика КАК Характеристика,|ОстаткиТоваровОстаткиИОбороты.Серия КАК Серия,и включить их:
1С (Код)12345678|В СГРУППИРОВАТЬ ПО| Товары.Ссылка,| ОстаткиТоваровОстаткиИОбороты.Характеристика,| ОстаткиТоваровОстаткиИОбороты.Серия,| ЕСТЬNULL(| ОстаткиТоваровОстаткиИОбороты.Период,| &НачалоПериода| )Также даты в параметре
&ДатыНаКаждыйДеньи периоды регистра должны быть приведены к одному времени, обычно к началу дня. Иначе сравнение:1С (Код)1|ВТ_ОстаткиИОбороты.Период <= ВТ_ДатыНаКаждыйДень.Датаможет работать неправильно, если дата имеет время
00:00:00, а период движения содержит время документа.21 сентября 2026 в 16:56 в ответ на: Как вывести таблицу значений запросом без использования макетов? #38687В обычной форме внешней обработки можно выполнить запрос, выгрузить результат в
ТаблицуЗначений, а затем автоматически вывести ее вТабличныйДокументбез макета.### Вариант 1. Вывести результат запроса в табличный документ без макета
Код можно разместить в процедуре команды обычной формы:
1С (Код)12345678910111213141516171819202122232425262728293031323334Процедура ВыполнитьЗапрос(Кнопка)Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Номенклатура.Ссылка КАК Номенклатура,| Номенклатура.Код КАК Код,| Номенклатура.Наименование КАК Наименование|ИЗ| Справочник.Номенклатура КАК Номенклатура|ГДЕ| НЕ Номенклатура.ПометкаУдаления";РезультатЗапроса = Запрос.Выполнить();// Выгружаем результат запроса в таблицу значенийТаблицаРезультат = РезультатЗапроса.Выгрузить();// Создаем табличный документТабличныйДокумент = Новый ТабличныйДокумент;// Источником данных будет таблица значенийПостроитель = Новый ПостроительОтчета;Построитель.ИсточникДанных =Новый ОписаниеИсточникаДанных(ТаблицаРезультат);// Выводим таблицу в табличный документ без макетаПостроитель.Вывести(ТабличныйДокумент);// Показываем результат пользователюТабличныйДокумент.Показать("Результат запроса");КонецПроцедурыВ результате 1С сама сформирует колонки по колонкам таблицы значений. Макет, области и параметры не нужны.
—
### Вариант 2. Просто показать таблицу значений
Если форматирование и табличный документ не нужны, результат можно сразу показать как таблицу значений:
1С (Код)1234567891011121314151617Процедура ВыполнитьЗапрос(Кнопка)Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Номенклатура.Ссылка КАК Номенклатура,| Номенклатура.Код КАК Код,| Номенклатура.Наименование КАК Наименование|ИЗ| Справочник.Номенклатура КАК Номенклатура";ТаблицаРезультат = Запрос.Выполнить().Выгрузить();ТаблицаРезультат.Показать("Результат запроса");КонецПроцедурыЕсли метод
Показать()дляТаблицаЗначенийв вашей версии платформы недоступен, используйте первый вариант сТабличныйДокумент.—
### Вариант 3. Вывести непосредственно результат запроса
Можно сначала получить таблицу значений из результата запроса:
1С (Код)12РезультатЗапроса = Запрос.Выполнить();ТаблицаРезультат = РезультатЗапроса.Выгрузить();А затем:
1С (Код)12345678ТабличныйДокумент = Новый ТабличныйДокумент;Построитель = Новый ПостроительОтчета;Построитель.ИсточникДанных =Новый ОписаниеИсточникаДанных(ТаблицаРезультат);Построитель.Вывести(ТабличныйДокумент);ТабличныйДокумент.Показать("Результат");Полный минимальный вариант:
1С (Код)123456789101112131415161718192021Процедура Команда1(Кнопка)Запрос = Новый Запрос("ВЫБРАТЬ| Товары.Номенклатура,| Товары.Количество,| Товары.Сумма|ИЗ| Документ.РеализацияТоваровУслуг.Товары КАК Товары");ТаблицаРезультат = Запрос.Выполнить().Выгрузить();ТабличныйДокумент = Новый ТабличныйДокумент;Построитель = Новый ПостроительОтчета;Построитель.ИсточникДанных =Новый ОписаниеИсточникаДанных(ТаблицаРезультат);Построитель.Вывести(ТабличныйДокумент);ТабличныйДокумент.Показать("Результат запроса");КонецПроцедуры### Если в запросе есть параметры
Параметры устанавливаются до выполнения запроса:
1С (Код)1234Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);ТаблицаРезультат = Запрос.Выполнить().Выгрузить();Например:
1С (Код)12345678910111213141516171819202122232425Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Продажи.Номенклатура,| Продажи.Количество,| Продажи.Сумма|ИЗ| РегистрНакопления.Продажи КАК Продажи|ГДЕ| Продажи.Период МЕЖДУ &ДатаНачала И &ДатаОкончания";Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));ТаблицаРезультат = Запрос.Выполнить().Выгрузить();ТабличныйДокумент = Новый ТабличныйДокумент;Построитель = Новый ПостроительОтчета;Построитель.ИсточникДанных =Новый ОписаниеИсточникаДанных(ТаблицаРезультат);Построитель.Вывести(ТабличныйДокумент);ТабличныйДокумент.Показать("Продажи");### Если нужно вывести именно
РезультатЗапроса, не выгружая его в таблицу значенийМожно сформировать табличный документ вручную. Этот вариант удобен, если
ПостроительОтчетапо каким-либо причинам недоступен:1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061Процедура ВывестиРезультатЗапроса(РезультатЗапроса)ТабличныйДокумент = Новый ТабличныйДокумент;КоличествоКолонок = РезультатЗапроса.Колонки.Количество();Если КоличествоКолонок = 0 ТогдаСообщить("Запрос не вернул колонок");Возврат;КонецЕсли;// Создаем строку заголовковОбластьЗаголовок = ТабличныйДокумент.ПолучитьОбласть(1, 1, 1, КоличествоКолонок);Для НомерКолонки = 0 По КоличествоКолонок - 1 ЦиклИмяКолонки = РезультатЗапроса.Колонки[НомерКолонки].Имя;ОбластьЯчейки = ОбластьЗаголовок.Область(1,НомерКолонки + 1,1,НомерКолонки + 1);ОбластьЯчейки.Параметры.Значение = ИмяКолонки;КонецЦикла;ТабличныйДокумент.Вывести(ОбластьЗаголовок);// Вывод строк результатаВыборка = РезультатЗапроса.Выбрать();Пока Выборка.Следующий() ЦиклОбластьСтрока = ТабличныйДокумент.ПолучитьОбласть(1, 1, 1, КоличествоКолонок);Для НомерКолонки = 0 По КоличествоКолонок - 1 ЦиклИмяКолонки = РезультатЗапроса.Колонки[НомерКолонки].Имя;ОбластьЯчейки = ОбластьСтрока.Область(1,НомерКолонки + 1,1,НомерКолонки + 1);ОбластьЯчейки.Параметры.Значение =Выборка[ИмяКолонки];КонецЦикла;ТабличныйДокумент.Вывести(ОбластьСтрока);КонецЦикла;ТабличныйДокумент.Показать("Результат запроса");КонецПроцедурыНо для вашей задачи лучше использовать первый вариант:
1С (Код)123456789ТаблицаРезультат = Запрос.Выполнить().Выгрузить();ТабличныйДокумент = Новый ТабличныйДокумент;Построитель = Новый ПостроительОтчета;Построитель.ИсточникДанных =Новый ОписаниеИсточникаДанных(ТаблицаРезультат);Построитель.Вывести(ТабличныйДокумент);ТабличныйДокумент.Показать();Он автоматически выводит результат запроса без макета.
21 сентября 2026 в 11:11 в ответ на: Как установить ring на 1С: требуется ли Java на сервере или только локально? #38685ringзапускается в той операционной системе, где вы выполняете команды. Поэтому Java нужна именно на этой машине.### Варианты
#### 1. Управляете лицензиями на сервере 1С
Если планируете выполнять команды непосредственно на сервере 1С, например:
1С (Код)1234ring license listring license inforing license validatering license updateто Java и
ringнужно установить на сервере 1С.Это наиболее правильный вариант, если:
— программные лицензии хранятся на сервере;
— сервер 1С работает под отдельной учетной записью;
— нужно обновить лицензии через Интернет с сервера;
— нужно проверить фактическое хранилище лицензий, которое использует сервер 1С.Установка Java только на локальном компьютере в этом случае не поможет.
#### 2. Управляете лицензиями с локального компьютера
Java и
ringможно установить только на рабочую станцию администратора, если:— лицензии находятся на локальном компьютере;
— либо к каталогу лицензий сервера есть доступ по сети;
— либо команды выполняются с явно указанным путем к хранилищу лицензий;
— локальный компьютер может подключиться к Интернету для выполненияlicense update.Но при работе с сетевым каталогом нужно учитывать права доступа.
ringдолжен запускаться от имени пользователя, у которого есть права чтения и записи в каталог лицензий.### Важный момент
ringне является частью обычного запуска сервера 1С. Пользователям Java для работы 1С не нужна. Java требуется только для запуска самой утилитыring.То есть возможна такая схема:
1С (Код)123456789Сервер 1С:сервер 1Схранилище лицензийJavaringРабочая станция администратора:JavaringИли:
1С (Код)12345678Сервер 1С:сервер 1Схранилище лицензийРабочая станция администратора:Javaringдоступ к хранилищу лицензий сервераДля диагностики и обновления лицензий обычно рекомендую первый вариант: устанавливать
ringи Java непосредственно на сервер 1С.## Установка на Windows
### 1. Установите Java
Для старых версий
ringтребуется Java 8 и выше. На практике лучше использовать ту версию Java, которая совместима с вашим дистрибутивомring.Проверьте установку:
1С (Код)1java -versionВ результате должна отображаться версия Java, например:
1С (Код)1java version "1.8.0_xxx"Если команда
javaне найдена, нужно добавить каталогbinJava в системную переменнуюPATHлибо указатьJAVA_HOME.### 2. Установите компонент
ringДля новых версий платформы 1С, начиная примерно с ветки 8.3.14,
ringобычно поставляется вместе с модулями, которым он нужен. Отдельная установка пустой утилитыringпрактического смысла не имеет.Для работы с лицензиями нужен модуль
license.Обычно в каталоге с дистрибутивом находится установщик наподобие:
1С (Код)11ce-installer-cliНа Windows установка выполняется из командной строки от имени администратора. Команда зависит от конкретной версии дистрибутива, но обычно используется установка компонентов из каталога
license-tools.После установки проверьте наличие утилиты:
1С (Код)1ring versionЕсли команда не найдена, найдите файл
ring.cmdв каталоге установки 1С и запускайте его по полному пути.Например, путь может выглядеть примерно так:
1С (Код)1C:Program Files1cv8components1c-enterprise-ring-0.xx.x+xxx-x86_64ring.cmdТочный каталог зависит от версии платформы и разрядности.
### 3. Проверьте список лицензий
На сервере 1С откройте командную строку от имени администратора и выполните:
1С (Код)1ring license listЕсли используется нестандартный каталог лицензий, укажите его явно:
1С (Код)1ring license list --path "C:ProgramData1Clicenses"В разных версиях
ringпуть по умолчанию может отличаться. Поэтому при диагностике лучше сначала определить, где фактически находятся файлы.lic.Частые каталоги Windows:
1С (Код)1C:ProgramData1Clicensesили:
1С (Код)1C:Program Files1cv8confТакже лицензии могут находиться в профиле конкретного пользователя, если они получались не сервером, а клиентским приложением.
### 4. Получите информацию о лицензии
Сначала выполните:
1С (Код)1ring license list --path "C:ProgramData1Clicenses"Из результата возьмите имя нужной лицензии и выполните:
1С (Код)1ring license info --name "ИМЯ_ЛИЦЕНЗИИ" --path "C:ProgramData1Clicenses"Проверка корректности:
1С (Код)1ring license validate --name "ИМЯ_ЛИЦЕНЗИИ" --path "C:ProgramData1Clicenses"Если используется каталог по умолчанию, параметр
--pathможно не указывать:1С (Код)1ring license validate --name "ИМЯ_ЛИЦЕНЗИИ"## Если сервер выходит в Интернет через прокси
Если
ring license updateне работает из-за прокси, Java должна быть установлена на сервере, а параметры прокси нужно передать через переменную окруженияRING_OPTS.Пример для Windows:
1С (Код)1setx RING_OPTS "-Dhttp.proxyHost=proxy.company.ru -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.company.ru -Dhttps.proxyPort=8080" /MПосле этого необходимо открыть новую командную строку и проверить:
1С (Код)1ring license updateЕсли прокси требует авторизацию, параметры логина и пароля лучше не передавать открытым текстом в общесистемной переменной без необходимости. Безопаснее настроить прокси так, чтобы сервер 1С мог выходить к серверам 1С без интерактивной авторизации, либо использовать отдельную техническую учетную запись с ограниченными правами.
## Установка на Linux
На Linux Java устанавливается на тот же сервер, где запускается
ring.Например, для RHEL/CentOS:
1С (Код)1yum install java-1.8.0-openjdkДля Debian/Ubuntu:
1С (Код)1apt install openjdk-8-jreДалее устанавливается модуль
ringиз каталога с дистрибутивомlicense-tools. В типовом варианте:1С (Код)123chmod +x /opt/license-tools/1ce-installer-clicd /opt/license-toolssudo ./1ce-installer-cli installЗатем утилиту можно запускать из каталога, куда установились компоненты, например:
1С (Код)1/opt/1C/1CE/components/1c-enterprise-ring-0.xx.x+xxx-x86_64/ring license listЧтобы не указывать полный путь, каталог с
ringдобавляют вPATH.Пример:
1С (Код)1export PATH=$PATH:/opt/1C/1CE/components/1c-enterprise-ring-0.xx.x+xxx-x86_64Для постоянной настройки эту строку добавляют в профиль пользователя или системный профиль.
## Что выбрать в вашей ситуации
Если вопрос связан с серверными программными лицензиями 1С, устанавливайте:
1. Java на сервер 1С.
2.ringс модулемlicenseна сервер 1С.
3. Запускайте команды от имени учетной записи, которая имеет доступ к каталогу лицензий.
4. Дляlist,infoиvalidateявно указывайте--path, если есть сомнения в расположении лицензий.
5. Дляlicense updateпроверьте доступ сервера к Интернету и настройки прокси.На локальной машине Java и
ringнужны только в том случае, если вы действительно хотите выполнять обслуживание лицензий с локального компьютера. Установка Java на локальный компьютер сама по себе не влияет на работуringна сервере.Рекомендую посмотреть здесь:
— https://1s-on.ru/utilita-ring-license-dlya-1s-versii-8-3-14-i-bolee-pod-linux/
— https://infostart.ru/1c/articles/1111074/
— https://infostart.ru/1c/articles/1055024/ -
АвторЗаписи