Ответы в темах
-
АвторЗаписи
-
28 сентября 2026 в 0:16 в ответ на: Как получить остаток бонусных баллов из регистра в 1С:УТ 11.5? #38737
В УТ 11.5 остаток бонусов обычно получают из виртуальной таблицы регистра накопления:
РегистрНакопления.БонусныеБаллы.ОстаткиОсновные аналитики, как правило:
—
Партнер
—БонуснаяПрограммаЛояльностиРесурс регистра обычно называется
Сумма.## Получение остатка по партнеру и бонусной программе
1С (Код)1234567891011121314151617181920212223242526272829303132Функция ПолучитьОстатокБонусныхБаллов(Партнер, БонуснаяПрограммаЛояльности, ДатаОстатков = Неопределено) ЭкспортЕсли Не ЗначениеЗаполнено(ДатаОстатков) ТогдаДатаОстатков = ТекущаяДатаСеанса();КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,| Остатки.Партнер КАК Партнер,| Остатки.СуммаОстаток КАК ОстатокБонусныхБаллов|ИЗ| РегистрНакопления.БонусныеБаллы.Остатки(| &ДатаОстатков,| Партнер = &Партнер| И БонуснаяПрограммаЛояльности = &БонуснаяПрограммаЛояльности| ) КАК Остатки";Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);Запрос.УстановитьПараметр("Партнер", Партнер);Запрос.УстановитьПараметр("БонуснаяПрограммаЛояльности", БонуснаяПрограммаЛояльности);Выборка = Запрос.Выполнить().Выбрать();Если Выборка.Следующий() ТогдаВозврат Выборка.ОстатокБонусныхБаллов;КонецЕсли;Возврат 0;КонецФункцииПример вызова:
1С (Код)123456ОстатокБонусов = ПолучитьОстатокБонусныхБаллов(Партнер,БонуснаяПрограммаЛояльности);Сообщить("Остаток бонусов: " + ОстатокБонусов);## Получение остатков по всем бонусным программам клиента
Если нужно получить остатки партнера сразу в разрезе всех бонусных программ:
1С (Код)12345678910111213141516171819202122232425Функция ПолучитьОстаткиБонусныхБалловПоПартнеру(Партнер, ДатаОстатков = Неопределено) ЭкспортЕсли Не ЗначениеЗаполнено(ДатаОстатков) ТогдаДатаОстатков = ТекущаяДатаСеанса();КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,| Остатки.СуммаОстаток КАК ОстатокБонусныхБаллов|ИЗ| РегистрНакопления.БонусныеБаллы.Остатки(| &ДатаОстатков,| Партнер = &Партнер| ) КАК Остатки|ГДЕ| Остатки.СуммаОстаток > 0";Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);Запрос.УстановитьПараметр("Партнер", Партнер);Возврат Запрос.Выполнить().Выгрузить();КонецФункцииИспользование:
1С (Код)1234567891011ТаблицаОстатков = ПолучитьОстаткиБонусныхБалловПоПартнеру(Партнер);Для каждого СтрокаОстатка Из ТаблицаОстатков ЦиклСообщить(СтрокаОстатка.БонуснаяПрограммаЛояльности+ ": "+ СтрокаОстатка.ОстатокБонусныхБаллов);КонецЦикла;## Вариант без запроса, через типовой серверный метод
В УТ 11.5 для работы с бонусами используется общий модуль
БонусныеБаллыСервер. В типовом коде встречается вызов:1С (Код)1234ОстаткиБонусныхБаллов = БонусныеБаллыСервер.ОстаткиИДвиженияБонусныхБаллов(БонуснаяПрограммаЛояльности,Партнер);Далее из результата можно получить начальный остаток:
1С (Код)12345678910111213ОстаткиБонусныхБаллов = БонусныеБаллыСервер.ОстаткиИДвиженияБонусныхБаллов(БонуснаяПрограммаЛояльности,Партнер);ОстатокБонусов = 0;Если ОстаткиБонусныхБаллов <> НеопределеноИ ОстаткиБонусныхБаллов.Количество() > 0 ТогдаОстатокБонусов = ОстаткиБонусныхБаллов[0].Сумма;КонецЕсли;Этот вариант предпочтительнее, если необходимо повторить типовую логику УТ, поскольку типовой метод может учитывать не только простой остаток регистра, но и движения, особенности списания и расчет доступного остатка.
## Важный момент по структуре регистра
В разных релизах УТ 11.5 состав измерений и точные имена ресурсов могут немного отличаться. Перед использованием запроса проверьте структуру регистра в конфигураторе:
Конфигурация → Регистры накопления → БонусныеБаллыПроверьте:
— измерение клиента может называться
Партнер;
— измерение программы может называтьсяБонуснаяПрограммаЛояльности;
— ресурс может называтьсяСумма;
— в виртуальной таблице остатка ресурс будет доступен какСуммаОстаток.Если в вашей базе клиент хранится не в измерении
Партнер, а, например, через карту лояльности, сначала нужно получить партнера, связанного с картой:1С (Код)1Партнер = ДанныеКартыЛояльности.Партнер;Получать остаток только по партнеру без указания бонусной программы нежелательно, если у клиента может быть несколько программ. В этом случае остатки по разным программам нужно либо выводить отдельными строками, либо явно суммировать их.
В КД2 дополнительные сведения к документу нужно переносить не как реквизиты самого документа, а как записи регистра сведений, в котором БСП хранит дополнительные сведения.
Обычно запись содержит:
1С (Код)123Объект ДокументСсылкаСвойство Элемент справочника дополнительных сведенийЗначение Значение дополнительного сведенияТочные названия регистра и его полей зависят от конфигурации. Чаще всего используются регистры с названиями:
1С (Код)123ДополнительныеСведенияЗначенияСвойствОбъектовДополнительныеРеквизитыСначала нужно определить, где именно хранятся ваши данные.
## 1. Проверьте, что переносится
В 1С есть два разных механизма.
### Дополнительные сведения
Открываются обычно отдельной командой или через меню:
1С (Код)12ЕщеДополнительные сведенияОни хранятся отдельно от объекта и обычно доступны даже пользователям, которые не редактируют сам документ.
### Дополнительные реквизиты
Отображаются непосредственно в форме документа в группе дополнительных реквизитов. Они считаются частью объекта.
Для КД2 оба варианта обычно необходимо переносить через соответствующие регистры сведений.
## 2. Найдите регистр в конфигурации
В конфигураторе источника откройте объект документа и посмотрите, какие регистры используют ссылку на этот документ.
Можно также найти регистры по измерению типа:
1С (Код)1ДокументСсылка.НужныйДокументПроверьте записи регистра в режиме 1С:Предприятие. У записи должны быть примерно такие значения:
1С (Код)123Объект = Документ.LES_ПроектЛесовосстановленияСвойство = ДополнительноеСведениеЗначение = ЗначениеСведенияНужно проверить:
1. имя регистра;
2. какие поля являются измерениями;
3. где хранится ссылка на документ;
4. где хранится свойство;
5. где хранится значение;
6. тип значения.Особенно важно проверить тип поля
Значение. Оно часто бывает составного типа и может содержать:1С (Код)1234567СтрокаЧислоДатаБулевоСправочникСсылкаДокументСсылкаХарактеристика## 3. Настройте перенос самого документа
В КД2 сначала должно быть создано и настроено ПКО для документа.
Например:
1С (Код)1ПКО LES_ПроектЛесовосстановленияДокумент должен переноситься раньше, чем записи регистра дополнительных сведений. Иначе при загрузке регистра система не сможет определить ссылку на документ-приемник.
Также должны быть настроены ПКО для:
— свойства дополнительного сведения;
— значения, если оно является ссылкой;
— владельца свойства, если используется подчиненный справочник;
— других ссылочных значений.Например, если дополнительное сведение имеет значение
СправочникСсылка.LES_Лесосеки, для справочникаLES_Лесосекитакже нужно настроить ПКО.## 4. Создайте ПКО для регистра сведений
В КД2 создайте правило конвертации объекта для регистра сведений, в котором хранятся дополнительные сведения.
Например:
1С (Код)1ПКО РегистрСведений.ДополнительныеСведенияВ настройке ПКО укажите соответствие полей:
1С (Код)123ОбъектСвойствоЗначениеПример логики соответствия:
1С (Код)1234567891011ОбъектИсточник: ОбъектПриемник: ОбъектСвойствоИсточник: СвойствоПриемник: СвойствоЗначениеИсточник: ЗначениеПриемник: ЗначениеЕсли поле
Объектявляется составным или имеет типТипОбъекта, необходимо настроить преобразование ссылки через ПКО документа.## 5. Создайте ПОД для регистра
После создания ПКО создайте правило обработки данных.
В КД2 обычно нужно указать:
1С (Код)12345Источник:Регистр сведений.ДополнительныеСведенияПКО:ПКО ДополнительныеСведенияДля отбора лучше выгружать только записи, относящиеся к нужным документам. Не следует без отбора переносить весь регистр дополнительных сведений, особенно если в базе много объектов.
Пример запроса для отбора записей по документам:
1С (Код)12345678|ВЫБРАТЬ| ДополнительныеСведения.Объект,| ДополнительныеСведения.Свойство,| ДополнительныеСведения.Значение|ИЗ| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения|ГДЕ| ДополнительныеСведения.Объект ССЫЛКА Документ.LES_ПроектЛесовосстановленияВ КД2 запрос задается в настройках правила обработки данных или в обработчике выгрузки, в зависимости от реализации конкретной версии конфигурации.
## 6. Настройте перенос ссылки на документ
Главное поле регистра, которое нужно правильно обработать, это
Объект.При переносе записи:
1С (Код)12345Источник:Документ.LES_ПроектЛесовосстановленияПриемник:Документ.LES_ПроектЛесовосстановленияКД2 должна найти соответствующий документ в приемнике по ПКО документа.
Если конфигурации источника и приемника разные, настройте:
1С (Код)12ПКО документаПКС ОбъектВ обработчике значения поля
Объектиногда используется получение ссылки на объект-приемник. В конкретных конфигурациях код может выглядеть по-разному, но смысл такой:1С (Код)1Значение = ПолучитьОбъектПриемник(Источник.Объект);Не следует передавать GUID документа строкой, если в приемнике требуется настоящая ссылка.
## 7. Настройте перенос свойства
Поле
Свойствообычно является ссылкой на элемент справочника дополнительных реквизитов и сведений.Для него нужно создать отдельное ПКО, например:
1С (Код)1ПКО Справочник.ДополнительныеРеквизитыИСведенияили настроить передачу свойства по коду, наименованию либо уникальному идентификатору.
Рекомендуемый вариант:
1С (Код)1234Свойство источникаПКО свойстваСвойство приемникаНайденный элемент справочникаЕсли свойство уже есть в обеих базах и имеет одинаковый уникальный идентификатор, можно использовать стандартное сопоставление по GUID.
Если свойства были созданы вручную отдельно в каждой базе, их GUID могут отличаться. Тогда сопоставление по GUID не сработает. В таком случае нужно настроить поиск:
1С (Код)1По кодуили:
1С (Код)1По наименованиюНо поиск по наименованию менее надежен, потому что наименования могут повторяться или изменяться.
## 8. Настройте поле «Значение»
Поле
Значениетребует особого внимания.### Если значение строковое
Настройте обычное соответствие:
1С (Код)12Источник.ЗначениеПриемник.Значение### Если значение числовое
Также используется прямое соответствие, но проверьте:
— разрядность;
— точность;
— пустое значение;
— нулевое значение.### Если значение является датой или булевым значением
Проверьте, что тип значения в источнике и приемнике одинаковый.
### Если значение является ссылкой
Например:
1С (Код)1СправочникСсылка.LES_Лесосекито необходимо создать ПКО для соответствующего справочника и передавать значение через это ПКО.
Иначе в приемнике может появиться:
— пустая ссылка;
— строковое представление ссылки;
— ошибка преобразования типа;
— ссылка на несуществующий объект.## 9. Ограничьте выгрузку только нужными документами
Если переносится конкретный набор документов, лучше использовать отбор по документам или по периоду.
Например:
1С (Код)123456789101112131415|ВЫБРАТЬ| ДополнительныеСведения.Объект,| ДополнительныеСведения.Свойство,| ДополнительныеСведения.Значение|ИЗ| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения|ГДЕ| ДополнительныеСведения.Объект ССЫЛКА Документ.LES_ПроектЛесовосстановления| И ДополнительныеСведения.Объект В| (ВЫБРАТЬ| Документы.Ссылка| ИЗ| Документ.LES_ПроектЛесовосстановления КАК Документы| ГДЕ| Документы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания)В КД2 параметры и способ передачи отбора зависят от используемого правила обработки данных. Если в запросе используются параметры, их нужно задать в настройках правила.
## 10. Если стандартный перенос регистра не срабатывает
В некоторых конфигурациях регистр дополнительных сведений не предназначен для прямого обмена через КД2. Например:
— регистр не включен в план обмена;
— у регистра нет удобного ПКО;
— значение хранится в специальном формате;
— объект имеет составной тип;
— данные формируются БСП специальными процедурами;
— в источнике и приемнике отличаются структуры дополнительных сведений.В этом случае можно переносить сведения из ПКО документа.
### На стороне источника
В обработчике
Перед выгрузкойдокумента получить записи дополнительных сведений и добавить их в структуру выгружаемых данных.Примерная логика:
1С (Код)12345678НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Объект.Установить(Источник.Ссылка);НаборЗаписей.Прочитать();ТаблицаСведений = НаборЗаписей.Выгрузить();ДанныеXDTO.Вставить("ДополнительныеСведения", ТаблицаСведений);Название объекта
Источник,ДанныеXDTOи точное место обработчика зависят от структуры правил КД2.### На стороне приемника
В обработчике загрузки документа получить переданную таблицу и записать сведения в регистр.
Примерная логика:
1С (Код)1234567891011121314151617Если ДанныеXDTO.Свойство("ДополнительныеСведения") ТогдаДля Каждого СтрокаСведения Из ДанныеXDTO.ДополнительныеСведения ЦиклНаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Объект.Установить(Объект.Ссылка);Запись = НаборЗаписей.Добавить();Запись.Объект = Объект.Ссылка;Запись.Свойство = ПолучитьСвойствоПриемника(СтрокаСведения.Свойство);Запись.Значение = ПолучитьЗначениеПриемника(СтрокаСведения.Значение);НаборЗаписей.Записать();КонецЦикла;КонецЕсли;Но при таком варианте нужно учитывать существующие записи. Если документ загружается повторно, могут появиться дубли.
Перед записью обычно удаляют старые записи по документу:
1С (Код)123НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Объект.Установить(Объект.Ссылка);НаборЗаписей.Записать();Такой код удаляет записи регистра по установленному отбору, после чего новые сведения записываются заново. Применять его нужно осторожно, если в приемнике есть сведения, которые не должны заменяться обменом.
## Рекомендуемый порядок настройки
Для обычного случая порядок такой:
1. Создать ПКО документа.
2. Создать ПКО свойства дополнительного сведения.
3. Создать ПКО справочников и документов, которые могут находиться в полеЗначение.
4. Создать ПКО регистра дополнительных сведений.
5. Создать ПОД регистра.
6. Ограничить выгрузку регистра нужными документами.
7. Настроить полеОбъектчерез ПКО документа.
8. Настроить полеСвойствочерез ПКО свойства.
9. Настроить полеЗначениес учетом его фактического типа.
10. Выполнить тестовую выгрузку одного документа.
11. Проверить наличие записи регистра в приемнике.
12. Открыть документ и убедиться, что дополнительное сведение отображается в форме.## Важный нюанс
Если дополнительные сведения создавались пользователем вручную, в источнике и приемнике могут отличаться ссылки на элементы справочника свойств. Поэтому недостаточно перенести только регистр.
Нужно переносить одновременно:
1С (Код)1234ДокументСвойство дополнительного сведенияЗначение свойстваЗапись регистра дополнительных сведенийЕсли передать только запись регистра, но не перенести или не сопоставить
Свойство, запись может загрузиться некорректно или не будет отображаться в форме документа.25 сентября 2026 в 12:22 в ответ на: Как устранить ошибку отсутствия регистратора для регистра в 1С? #38733Ошибка означает, что регистр сведений
LES_ПородныйСоставЛесосекнастроен как регистр, подчиненный регистраторам, но в его свойствах не указан ни один документ-регистратор.Из-за этого 1С не понимает, каким документом должны записываться движения регистра.
## Вариант 1. Регистр должен заполняться документами
Это наиболее распространенный вариант для регистра породного состава лесосек.
### Что сделать в конфигураторе
1. Откройте:
1С (Код)12Регистры сведенийLES_ПородныйСоставЛесосек2. В свойствах регистра найдите:
1С (Код)1Подчинение регистраторуДолжно быть установлено:
1С (Код)1Регистратору3. Ниже откройте список:
1С (Код)1Регистраторы4. Добавьте документы, которые должны записывать движения регистра.
Например:
1С (Код)1Документ.LES_ПроектЛесовосстановленияили другой документ, в котором формируется породный состав лесосек.
5. Откройте свойства документа-регистратора:
1С (Код)12ДокументыLES_ПроектЛесовосстановления6. Проверьте, что регистр присутствует в списке регистров, по которым документ может формировать движения.
В зависимости от версии конфигуратора это может находиться в:
1С (Код)1Движенияили в свойствах документа в списке регистров.
Добавьте туда:
1С (Код)1LES_ПородныйСоставЛесосек7. В модуле объекта документа должны формироваться движения регистра.
Пример:
1С (Код)123456789101112Движения.LES_ПородныйСоставЛесосек.Записывать = Истина;Для Каждого СтрокаПородногоСостава Из ПородныйСостав ЦиклДвижение = Движения.LES_ПородныйСоставЛесосек.Добавить();Движение.Период = Дата;Движение.Лесосека = СтрокаПородногоСостава.Лесосека;Движение.Порода = СтрокаПородногоСостава.Порода;Движение.Доля = СтрокаПородногоСостава.Доля;КонецЦикла;Названия измерений и ресурсов нужно заменить на фактические названия в вашем регистре.
Важно: если регистр подчинен регистратору, записи должны создаваться через движения документа, а не произвольной записью регистра.
## Какой документ выбрать регистратором
Нужно определить, какой документ является источником данных породного состава.
Например:
—
LES_ПроектЛесовосстановления;
—LES_ФормированиеЛесосеки;
—LES_Таксация;
—LES_ИзменениеПородногоСостава.Регистратором должен быть документ, после проведения которого появляется или изменяется породный состав лесосеки.
Если данные вводятся непосредственно в форме документа
LES_ПроектЛесовосстановления, то именно этот документ логично указать регистратором:1С (Код)1Документ.LES_ПроектЛесовосстановления## Вариант 2. Регистр не должен иметь регистратора
Если регистр заполняется напрямую общим модулем, обработкой или программным кодом и движения документов ему не нужны, тогда регистр не следует подчинять регистратору.
### Что сделать
Откройте:
1С (Код)12Регистры сведенийLES_ПородныйСоставЛесосекИзмените свойство:
1С (Код)1Подчинение регистраторус:
1С (Код)1Регистраторуна:
1С (Код)1НезависимыйПосле этого регистр можно будет записывать напрямую:
1С (Код)12345678НаборЗаписей = РегистрыСведений.LES_ПородныйСоставЛесосек.СоздатьНаборЗаписей();Запись = НаборЗаписей.Добавить();Запись.Лесосека = Лесосека;Запись.Порода = Порода;Запись.Доля = Доля;НаборЗаписей.Записать();Для независимого регистра не используется
Регистраторв качестве обязательной связи с документом.## Как выбрать правильный вариант
### Оставляйте регистр подчиненным регистратору, если:
— записи должны появляться при проведении документа;
— нужно видеть движения документа;
— нужно отменять движения при распроведении;
— регистр хранит историю изменений по документам;
— данные должны удаляться или замещаться при перепроведении документа.В этом случае нужно обязательно добавить хотя бы один документ-регистратор.
### Делайте регистр независимым, если:
— он заполняется напрямую программным кодом;
— записи не связаны с проведением документа;
— это вспомогательное хранилище текущего состояния;
— регистр используется как самостоятельная таблица данных;
— документы не должны формировать движения.## Возможная причина после обновления или работы с расширением
Если раньше ошибка не появлялась, проверьте следующие ситуации.
### Удален документ-регистратор
В свойствах регистра мог быть указан документ, который затем удалили или переименовали.
Откройте список регистраторов и проверьте, не пустой ли он.
### Документ-регистратор отключен в расширении
Если регистр находится в расширении, а документ-регистратор находится в основной конфигурации, проверьте, что ссылка на документ не потерялась после обновления расширения.
Также проверьте, не отключено ли расширение, в котором был добавлен регистратор.
### Регистр добавлен, но движения документа не настроены
Самого указания документа в списке регистраторов недостаточно. Нужно также:
1. Добавить регистр в движения документа.
2. УстановитьДвижения.LES_ПородныйСоставЛесосек.Записывать = Истина.
3. Заполнить движения в модуле объекта документа.## Что сделать в вашей ситуации
Судя по названию регистра
LES_ПородныйСоставЛесосек, наиболее правильная схема, вероятно, такая:1С (Код)12345678Регистр сведений:LES_ПородныйСоставЛесосекПодчинение:РегистраторуРегистратор:Документ.LES_ПроектЛесовосстановленияЗатем в документе
LES_ПроектЛесовосстановлениянужно включить движения по этому регистру и сформировать записи при проведении.Если же
LES_ПородныйСоставЛесосексоздавался исключительно для хранения данных, которые записываются отдельной обработкой, установите:1С (Код)1Подчинение регистратору = НезависимыйПосле изменения:
1. Запишите изменения в конфигураторе.
2. Выполните проверку конфигурации.
3. Обновите конфигурацию базы данных.
4. Проверьте проведение документа-регистратора, если выбран первый вариант.Текущая ошибка не связана с данными регистра. Это ошибка структуры метаданных: у регистра установлен режим записи через регистратор, но список регистраторов пуст.
25 сентября 2026 в 12:16 в ответ на: Как исправить ошибку в критерии отбора LES_ДокументыПоЛесномуУчастку? #38731Ошибка означает, что в критерий отбора
LES_ДокументыПоЛесномуУчасткудобавлен реквизит:1С (Код)1Документ.LES_ПроектЛесовосстановления.Лесосекано тип реквизита
Лесосекане совпадает с типом, заданным у самого критерия отбора.Критерий отбора может включать только поля совместимого типа. Например, если критерий предназначен для отбора по ссылке на справочник
Лесосеки, то реквизит документаЛесосекадолжен иметь тип:1С (Код)1СправочникСсылка.Лесосеки## Как исправить в конфигураторе
Откройте:
1С (Код)123ОбщиеКритерии отбораLES_ДокументыПоЛесномуУчастку### 1. Проверьте тип критерия
В свойствах критерия посмотрите поле:
1С (Код)1ТипЕсли
Лесосекаявляется ссылкой на справочник, тип критерия должен соответствовать этому справочнику, например:1С (Код)1СправочникСсылка.ЛесосекиНазвание справочника у вас может отличаться, например:
1С (Код)123СправочникСсылка.ЛесныеУчасткиСправочникСсылка.ЛесосекиСправочникСсылка.ЛесныеОбъектыВажно, чтобы это был именно тот справочник, на который ссылается реквизит документа.
### 2. Проверьте тип реквизита документа
Откройте:
1С (Код)1234ДокументыLES_ПроектЛесовосстановленияРеквизитыЛесосекаПосмотрите свойство
Тип.Возможные варианты:
1С (Код)1СправочникСсылка.Лесосекиили составной тип:
1С (Код)12СправочникСсылка.ЛесосекиСправочникСсылка.ДругойСправочникили вообще другой тип:
1С (Код)123СтрокаЧислоСправочникСсылка.ЛесныеУчасткиТип реквизита должен быть совместим с типом критерия.
## Пример правильной настройки
Допустим:
1С (Код)123Документ: LES_ПроектЛесовосстановленияРеквизит: ЛесосекаТип реквизита: СправочникСсылка.ЛесосекиТогда настройка критерия должна быть такой:
1С (Код)1234Критерий отбора: LES_ДокументыПоЛесномуУчасткуТип критерия: СправочникСсылка.ЛесосекиСостав:Документ.LES_ПроектЛесовосстановления.ЛесосекаПосле этого критерий будет возвращать документы, в которых реквизит
Лесосекаравен выбранной ссылке на элемент справочникаЛесосеки.## Частая причина ошибки
Например, критерий настроен на:
1С (Код)1СправочникСсылка.ЛесныеУчасткиа реквизит документа имеет тип:
1С (Код)1СправочникСсылка.ЛесосекиНесмотря на похожий смысл названий, для 1С это два разных типа. Такой реквизит нельзя добавить в данный критерий.
Нужно либо изменить тип критерия на:
1С (Код)1СправочникСсылка.Лесосекилибо добавить в состав критерия другой реквизит документа, который действительно имеет тип:
1С (Код)1СправочникСсылка.ЛесныеУчастки## Если реквизит имеет составной тип
Если у
Лесосекаустановлен составной тип, например:1С (Код)12СправочникСсылка.ЛесосекиСправочникСсылка.ЛесныеУчасткито в критерии отбора нужно проверить, поддерживает ли его тип все варианты состава.
На практике надежнее:
1. Создать отдельный критерий для каждого типа.
2. Либо ограничить тип реквизита одним нужным справочником.
3. Удалить реквизит из состава критерия.
4. Добавить его повторно после исправления типа.Например:
1С (Код)1234LES_ДокументыПоЛесосекеТип: СправочникСсылка.ЛесосекиСостав:Документ.LES_ПроектЛесовосстановления.ЛесосекаЕсли требуется отбор еще и по лесному участку:
1С (Код)1234LES_ДокументыПоЛесномуУчасткуТип: СправочникСсылка.ЛесныеУчасткиСостав:Документ.LES_ПроектЛесовосстановления.ЛеснойУчастокНе следует включать реквизит
Лесосекав критерий по типуЛесныеУчастки, если это разные справочники.## Важный момент после исправления типа
После изменения типа критерия удалите проблемный элемент из состава и добавьте его заново:
1С (Код)1234Критерий отбораСоставудалить LES_ПроектЛесовосстановления.Лесосекадобавить этот реквизит повторноЗатем:
1. Обновите конфигурацию базы данных.
2. Выполните проверку конфигурации.
3. Перезапустите 1С:Предприятие.
4. Проверьте открытие списка или формы критерия.Иногда конфигуратор сохраняет старую привязку реквизита, и простого изменения типа бывает недостаточно.
## Если
Лесосекаимеет типСтрокаЕсли реквизит документа хранит не ссылку, а текст:
1С (Код)1Строкато критерий отбора должен быть строковым. Но критерий по строке не будет работать как отбор по элементу справочника.
В таком случае правильнее изменить реквизит
Лесосекана ссылочный тип:1С (Код)1СправочникСсылка.ЛесосекиЭто позволит:
— выбирать лесосеку из справочника;
— выполнять критерий отбора по ссылке;
— использовать стандартные формы выбора;
— избежать несоответствия представлений и дублей по наименованию.## Если
Лесосекаявляется реквизитом табличной частиЕсли поле находится не в реквизитах документа, а в табличной части, путь должен быть указан через табличную часть, например:
1С (Код)1Документ.LES_ПроектЛесовосстановления.ТабличнаяЧасть.ЛесосекаВ составе критерия нужно выбирать именно реквизит табличной части через интерфейс конфигуратора, а не добавлять реквизит документа вручную.
При этом тип критерия все равно должен совпадать с типом поля
Лесосека.## Что, скорее всего, нужно сделать в вашем случае
Проверьте тип
Документ.LES_ПроектЛесовосстановления.Лесосека. Затем у критерияLES_ДокументыПоЛесномуУчасткуустановите такой же тип.Например, если результат проверки:
1С (Код)12Реквизит Лесосека:СправочникСсылка.LES_Лесосекито у критерия должно быть:
1С (Код)12Тип:СправочникСсылка.LES_ЛесосекиА в составе:
1С (Код)1Документ.LES_ПроектЛесовосстановления.ЛесосекаЕсли же реквизит имеет тип:
1С (Код)1СправочникСсылка.LES_ЛесныеУчасткито устанавливайте именно этот тип.
Если критерий называется
LES_ДокументыПоЛесномуУчастку, но в его состав добавлен реквизитЛесосека, это также может быть логической ошибкой. В таком случае проверьте, не должен ли состав включать реквизит:1С (Код)1Документ.LES_ПроектЛесовосстановления.ЛеснойУчастока не:
1С (Код)1Документ.LES_ПроектЛесовосстановления.ЛесосекаИмена
ЛесосекаиЛеснойУчастоксами по себе ничего не определяют. Решающее значение имеют фактические типы реквизита и критерия.25 сентября 2026 в 10:58 в ответ на: Как исправить ошибку: значение не является значением объектного типа (Колонки) в #38729Ошибка означает, что в строке:
1С (Код)1ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");переменная
ОбъектыРасчетовДокументаОплатысодержит неТаблицаЗначений.Свойство
Колонкиесть уТаблицаЗначений,ТабличнаяЧастьи некоторых других табличных объектов. В вашем случае там, скорее всего:—
Неопределено;
—Структура;
—Массив;
—СписокЗначений;
— результат функции, возвращаемый не того типа;
— данные от старой версии конфигурации.## Где искать причину
Откройте общий модуль:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйПерейдите к строке 4015 и посмотрите примерно 20-30 строк выше. Должна быть инициализация переменной примерно такого вида:
1С (Код)1ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;После нее должны добавляться колонки:
1С (Код)123ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");Если инициализации нет, добавьте ее перед первым обращением к
.Колонки:1С (Код)123ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");Но просто добавлять эту строку нужно только после проверки логики процедуры. Возможно, переменная должна заполняться результатом другой функции.
## Как точно определить, что находится в переменной
Перед строкой 4015 временно добавьте:
1С (Код)123456Сообщить("Тип ОбъектыРасчетовДокументаОплаты: "+ Строка(ТипЗнч(ОбъектыРасчетовДокументаОплаты)));Если ОбъектыРасчетовДокументаОплаты = Неопределено ТогдаСообщить("ОбъектыРасчетовДокументаОплаты = Неопределено");КонецЕсли;Если используется серверный общий модуль, лучше поставить точку останова и посмотреть значение переменной в отладчике.
Ожидаемый результат:
1С (Код)1ТаблицаЗначенийЕсли увидите:
1С (Код)1Неопределенозначит переменная не была инициализирована.
Если:
1С (Код)1Структураили:
1С (Код)1Массивзначит в коде нарушена логика формирования результата.
## Правильный вариант создания таблицы
Если процедура должна формировать таблицу расчетов, блок должен выглядеть примерно так:
1С (Код)1234567891011ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты",Новый ОписаниеТипов("ДокументСсылка.ПриходныйКассовыйОрдер"));ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументРасчетов",Новый ОписаниеТипов("ДокументСсылка"));Но конкретные типы колонок должны соответствовать вашей конфигурации. Если в типовом коде колонки создаются без
ОписаниеТипов, оставьте так:1С (Код)1234ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументРасчетов");## Наиболее вероятная причина в вашем случае
По стеку видно, что ошибка возникает при фискализации приходного кассового ордера:
1С (Код)1Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента.Форма(973)Далее вызывается:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйНазвание модуля с суффиксом
Переопределяемыйобычно означает, что это код расширения или переопределяемая копия типового общего модуля.На практике такая ошибка чаще всего появляется в одной из следующих ситуаций.
### 1. В расширении остался старый код
Конфигурацию обновили, а общий модуль:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйостался от предыдущего релиза.
В новом релизе типовой код мог изменить:
— тип переменной;
— возвращаемое значение функции;
— состав параметров;
— порядок формирования таблицы;
— структуру объектов расчетов;
— состав колонок таблицы.В итоге одна часть кода ожидает
ТаблицаЗначений, а другая передаетНеопределеноилиСтруктура.### 2. Расширение переопределяет типовой общий модуль
Проверьте в конфигураторе:
1С (Код)123Расширения конфигурацииОбщие модулиФормированиеФискальныхЧековСерверПереопределяемыйЕсли модуль изменен в расширении, временно отключите расширение и проверьте пробитие чека в основной конфигурации.
Если без расширения ошибка исчезает, причина точно в коде расширения.
### 3. Не совпадают версии основной конфигурации и расширения
Проверьте:
— релиз конфигурации;
— релиз БСП;
— релиз расширения;
— дату последнего обновления расширения;
— наличие изменений в общих модулях, связанных с фискальными чеками.Если расширение содержит скопированный типовой код, его нужно обновить из текущей версии основной конфигурации, а не исправлять одну строку вручную.
## Что сделать в первую очередь
### Шаг 1. Отключить расширения
В пользовательском режиме откройте:
1С (Код)123АдминистрированиеПечатные формы, отчеты и обработкиРасширенияОтключите расширения, которые могут влиять на:
— кассу;
— фискальные чеки;
— ПКО;
— продажи;
— подключаемое оборудование;
— БСП;
— формы документов.После этого повторите действие.
Если ошибка пропала, включайте расширения по одному и найдите виновное.
### Шаг 2. Сравнить переопределяемый модуль
В конфигураторе сравните код:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйс текущей типовой версией.
Особенно проверьте процедуру или функцию, в которой находится строка 4015. Нельзя копировать только отдельную строку из нового релиза. Нужно переносить весь согласованный блок процедуры.
### Шаг 3. Найти присваивания переменной
В модуле выполните поиск по имени:
1С (Код)1ОбъектыРасчетовДокументаОплатыПроверьте все строки, где переменной присваивается значение:
1С (Код)1ОбъектыРасчетовДокументаОплаты = ...Нужно найти место, после которого переменная перестает быть
ТаблицаЗначений.Например, проблемным может быть такой код:
1С (Код)1ОбъектыРасчетовДокументаОплаты = Неопределено;или:
1С (Код)12ОбъектыРасчетовДокументаОплаты =ОбъектыРасчетовПоДокументамОплаты.Получить(ДокументОплаты);Если
Получить()возвращаетНеопределено, последующее обращение к.Колонкивызовет именно вашу ошибку.## Защитная проверка
Для диагностики можно временно поставить проверку перед строкой 4015:
1С (Код)1234567Если ТипЗнч(ОбъектыРасчетовДокументаОплаты) <> Тип("ТаблицаЗначений") ТогдаВызватьИсключение"Ожидалась ТаблицаЗначений, получен тип: "+ Строка(ТипЗнч(ОбъектыРасчетовДокументаОплаты));КонецЕсли;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");Если переменная может быть
Неопределено, диагностический код лучше написать так:1С (Код)12345678910Если ОбъектыРасчетовДокументаОплаты = Неопределено ТогдаВызватьИсключение"ОбъектыРасчетовДокументаОплаты не инициализирована";КонецЕсли;Если ТипЗнч(ОбъектыРасчетовДокументаОплаты) <> Тип("ТаблицаЗначений") ТогдаВызватьИсключение"Неверный тип ОбъектыРасчетовДокументаОплаты: "+ Строка(ТипЗнч(ОбъектыРасчетовДокументаОплаты));КонецЕсли;## Не следует исправлять так
Не нужно без проверки заменять код на:
1С (Код)1ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;в любом месте, где возникает ошибка.
Это уберет исключение, но может привести к тому, что:
— потеряются объекты расчетов;
— чек сформируется без нужных строк;
— не определится документ оплаты;
— неправильно определится вид оплаты;
— неверно рассчитается НДС;
— чек не пройдет проверку ККТ.Сначала нужно понять, почему таблица оказалась не таблицей.
## Если ошибка появилась после обновления
Наиболее правильное исправление:
1. Сделать резервную копию информационной базы.
2. Обновить основную конфигурацию до актуального релиза.
3. Обновить БСП, если конфигурация ее использует.
4. Обновить расширение.
5. Выполнить проверку конфигурации.
6. Перезапустить клиент и сервер 1С.
7. Повторить фискализацию ПКО.Если модуль был изменен вручную, перенесите только собственные доработки в актуальную типовую процедуру.
## Если ошибка появилась после добавления собственной команды
Если недавно добавлялась собственная команда печати или фискализации ПКО, проверьте, что в нее передается именно документ, а не форма, структура или ссылка другого типа.
Например, для проверки перед фискализацией:
1С (Код)12345Сообщить("Тип объекта: " + Строка(ТипЗнч(Объект)));Если ТипЗнч(Объект) <> Тип("ДокументОбъект.ПриходныйКассовыйОрдер") ТогдаВызватьИсключение "В фискальный механизм передан неправильный объект";КонецЕсли;Вызов должен выполняться для объекта документа, а не для:
1С (Код)1Формаили:
1С (Код)1ДокументСсылкаесли конкретная процедура ожидает именно объект документа.
По вашему стеку первично нужно проверять не сам ПКО, а процедуру в
ФормированиеФискальныхЧековСерверПереопределяемыйоколо строки 4015 и все места формирования переменнойОбъектыРасчетовДокументаОплаты. Ошибка находится именно в несоответствии фактического типа этой переменной ожидаемому типуТаблицаЗначений.25 сентября 2026 в 9:07 в ответ на: Как передать содержимое файла из КД 2, а не только ссылку? #38727В КД 2 это типичная ситуация: ПКО переносит объект «Присоединенный файл» и его реквизиты, но само содержимое файла не переносится. В приемнике создается новая ссылка или элемент справочника, а двоичные данные остаются в источнике.
Нужно передавать не только ПКО присоединенного файла, но и его содержимое из хранилища файлов.
## Что проверить сначала
### 1. Включена ли передача файлов в настройках обмена
В обработке универсального обмена XML проверьте настройки:
— включена передача присоединенных файлов;
— файлы не исключены отбором;
— в правилах есть ПКО для объекта присоединенного файла;
— в ПВД выгружается не только владелец файла, но и сами присоединенные файлы.Если используется типовой обмен между конфигурациями на БСП, сначала нужно проверить типовой механизм передачи файлов. В типовых конфигурациях присоединенные файлы часто обмениваются отдельным объектом, а не обычным реквизитом документа.
### 2. Что именно переносит ПКО
Если ПКО переносит только такие поля:
1С (Код)12345ВладелецНаименованиеРасширениеРазмерДатаИзменениято оно переносит только описание файла.
Сам файл обычно хранится отдельно:
— в реквизите типа
ХранилищеЗначения;
— в регистре сведений хранения файлов;
— в файловом хранилище БСП;
— в томе хранения;
— в адресе временного хранилища;
— в справочнике присоединенных файлов, а двоичные данные находятся в другом объекте или регистре.Поэтому нужно найти место фактического хранения файла в конкретной конфигурации.
## Вариант для КД 2: передача файла через параметр объекта
Общий принцип такой:
1. В источнике получить двоичные данные файла.
2. Передать их в параметр объекта.
3. В приемнике получить параметр.
4. Записать двоичные данные в новый присоединенный файл.
5. Присвоить созданный файл документу или другому владельцу.### На стороне источника
В ПКО присоединенного файла или в ПКС, отвечающем за файл, передается параметр, например
ДвоичныеДанныеФайла.В обработчике «Перед выгрузкой»:
1С (Код)1234567891011121314151617Если ЗначениеЗаполнено(Источник.Ссылка) ТогдаФайлОбъект = Источник.Ссылка.ПолучитьОбъект();Если ФайлОбъект <> Неопределено Тогда// Ниже нужно использовать фактический реквизит// или функцию вашей конфигурации, где хранится содержимое файла.//// Пример, если данные хранятся непосредственно в реквизите:ДвоичныеДанныеФайла = ФайлОбъект.ХранилищеФайла;Значение = ДвоичныеДанныеФайла;КонецЕсли;КонецЕсли;Но имя
ХранилищеФайлаздесь условное. В вашей конфигурации оно может называться иначе. Часто встречаются варианты:1С (Код)12345Источник.ХранилищеФайлаИсточник.ДвоичныеДанныеИсточник.ФайлИсточник.ХранилищеИсточник.ДанныеФайлаЕсли файл хранится не в самом объекте, нужно использовать функцию общего модуля конфигурации, например механизм БСП для получения данных присоединенного файла.
## Более надежный вариант через
ХранилищеЗначенияДля КД 2 обычно удобнее передавать не сами двоичные данные напрямую, а
ХранилищеЗначения.В обработчике на стороне источника:
1С (Код)12345ДвоичныеДанныеФайла = ПолучитьДвоичныеДанныеФайла(Источник);Если ДвоичныеДанныеФайла <> Неопределено ТогдаЗначение = Новый ХранилищеЗначения(ДвоичныеДанныеФайла);КонецЕсли;Приемник получает значение:
1С (Код)12345ХранилищеФайла = ПараметрыОбъекта.Получить("ДвоичныеДанныеФайла");Если ХранилищеФайла <> Неопределено ТогдаДвоичныеДанныеФайла = ХранилищеФайла.Получить();КонецЕсли;Однако для больших файлов этот способ может сильно увеличивать XML-файл обмена и потребление памяти. Для файлов размером в несколько мегабайт и больше лучше использовать отдельное файловое или сетевое хранилище.
## Пример логики загрузки в приемнике
После загрузки ПКО присоединенного файла нужно получить двоичные данные и записать их в объект файла:
1С (Код)123456789101112131415161718192021ХранилищеФайла = ПараметрыОбъекта.Получить("ДвоичныеДанныеФайла");Если ХранилищеФайла <> Неопределено ТогдаДвоичныеДанныеФайла = ХранилищеФайла.Получить();Если ДвоичныеДанныеФайла <> Неопределено Тогда// Объект уже создан стандартным механизмом КД// или создаем его самостоятельно.Объект.Размер = ДвоичныеДанныеФайла.Размер();// Если в конфигурации есть реквизит типа ХранилищеЗначения:Объект.ХранилищеФайла =Новый ХранилищеЗначения(ДвоичныеДанныеФайла);Объект.Записать();КонецЕсли;КонецЕсли;Здесь
Объект.ХранилищеФайлатоже нужно заменить на фактический реквизит приемника.## Если файл хранится в регистре сведений
В современных типовых конфигурациях данные присоединенных файлов нередко находятся не в самом справочнике
ПрисоединенныеФайлы, а в отдельном регистре или общем механизме БСП.Тогда схема будет такой:
### На стороне источника
В обработчике ПКО нужно получить запись хранилища по ссылке файла:
1С (Код)12345678910111213141516Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Хранилище.Хранилище КАК Хранилище|ИЗ| РегистрСведений.ХранилищеФайлов КАК Хранилище|ГДЕ| Хранилище.Файл = &Файл";Запрос.УстановитьПараметр("Файл", Источник.Ссылка);Выборка = Запрос.Выполнить().Выбрать();Если Выборка.Следующий() ТогдаЗначение = Выборка.Хранилище;КонецЕсли;Названия регистра и полей нужно заменить на фактические из вашей конфигурации. В разных конфигурациях они отличаются, поэтому этот код нельзя вставлять без проверки метаданных.
### На стороне приемника
После создания элемента присоединенного файла нужно записать полученное хранилище в соответствующий регистр:
1С (Код)123456789101112ХранилищеФайла = ПараметрыОбъекта.Получить("ДвоичныеДанныеФайла");Если ХранилищеФайла <> Неопределено ТогдаМенеджерЗаписи = РегистрыСведений.ХранилищеФайлов.СоздатьМенеджерЗаписи();МенеджерЗаписи.Файл = Объект.Ссылка;МенеджерЗаписи.Хранилище = ХранилищеФайла;МенеджерЗаписи.Записать();КонецЕсли;Конкретные измерения регистра нужно смотреть в конфигураторе. Обычно кроме файла могут использоваться:
— владелец файла;
— идентификатор файла;
— версия файла;
— ключ записи;
— тип хранения;
— имя файла.## Важный момент: порядок загрузки
Если файл присоединен к документу, сначала должен быть создан или найден сам документ, затем присоединенный файл.
Правильный порядок:
1. Загрузить владельца, например документ.
2. Найти или создать присоединенный файл.
3. Получить двоичные данные из параметров.
4. Записать содержимое файла.
5. Установить владельца файла.
6. Записать файл и запись хранилища.Если сначала загружать присоединенный файл, а документ-владелец еще не создан, ссылка владельца может не разрешиться.
## Если файл должен просто физически лежать в каталоге
Иногда не требуется хранить файл в стандартном механизме присоединенных файлов. Тогда проще передавать:
— имя файла;
— расширение;
— двоичные данные.На приемнике сохранить его в каталог:
1С (Код)123ВременныйФайл = ПолучитьИмяВременногоФайла(РасширениеФайла);ДвоичныеДанныеФайла.Записать(ВременныйФайл);Если требуется потом прикрепить файл к документу, после сохранения нужно зарегистрировать его штатными процедурами конфигурации.
## Почему не стоит передавать путь к файлу
Путь вида:
1С (Код)1C:ДокументыСкан.pdfпереносить бессмысленно, потому что на приемнике такого файла может не быть.
Путь можно передавать только если:
— обе базы работают на одном сервере;
— каталог общий;
— у пользователя 1С есть права на него;
— путь одинаковый или заранее настроен;
— файл не удаляется до загрузки.В обычном обмене нужно передавать либо содержимое файла, либо ссылку на общее сетевое/облачное хранилище.
## Что исправить в вашем случае
Скорее всего сейчас ПКО переносит только ссылку на элемент
ПрисоединенныеФайлы. Нужно добавить в ПКО отдельный параметр, например:1С (Код)1ДвоичныеДанныеФайлаВ ПКС этого параметра указать передачу данных через параметр объекта.
На стороне выгрузки:
1С (Код)123456ФайлИсточник = Источник.Ссылка.ПолучитьОбъект();Если ФайлИсточник <> Неопределено ТогдаДвоичныеДанные = ПолучитьДанныеПрисоединенногоФайла(ФайлИсточник);Значение = Новый ХранилищеЗначения(ДвоичныеДанные);КонецЕсли;На стороне загрузки:
1С (Код)1234567891011ХранилищеФайла =ПараметрыОбъекта.Получить("ДвоичныеДанныеФайла");Если ХранилищеФайла <> Неопределено ТогдаДвоичныеДанные = ХранилищеФайла.Получить();ЗаписатьДанныеПрисоединенногоФайла(Объект,ДвоичныеДанные);КонецЕсли;Функции
ПолучитьДанныеПрисоединенногоФайлаиЗаписатьДанныеПрисоединенногоФайланужно реализовать под конкретную конфигурацию, потому что в БП, УТ, ERP, КА и самописных конфигурациях структура хранения файлов может отличаться.Для типовой конфигурации сначала рекомендуется проверить штатный механизм обмена файлами. Если в типовом обмене файлы не передаются, обычно причина в том, что в настройке синхронизации отключен обмен файлами или ПВД выгружает только ссылку на присоединенный файл.
25 сентября 2026 в 8:45 в ответ на: Как добавить условие проверки движений по регистру склада на «Приход»? #38725Условие по виду движения нужно добавить в секцию
ПОлевого соединения, а не вГДЕ.Иначе, если поставить
ВидДвижения = ПриходвГДЕ, левое соединение фактически превратится во внутреннее, и документы без движений не попадут в результат.Запрос для поиска перемещений, у которых отсутствует движение Приход по регистру
ТоварыНаСкладах:1С (Код)12345678910111213141516171819202122232425262728|ВЫБРАТЬ РАЗЛИЧНЫЕ| Реализация.Ссылка КАК Ссылка|ПОМЕСТИТЬ ВТ_Доки|ИЗ| Документ.ПеремещениеТоваров КАК Реализация| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров.Товары КАК РеализацияТовары| ПО РеализацияТовары.Ссылка = Реализация.Ссылка|ГДЕ| Реализация.Проведен| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода| И Реализация.Статус <>| ЗНАЧЕНИЕ(Перечисление.СтатусыПеремещенийТоваров.Принято)| И РеализацияТовары.Номенклатура.ТипНоменклатуры =| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)|;||////////////////////////////////////////////////////////////////////////////////||ВЫБРАТЬ| ВТ_Доки.Ссылка КАК Ссылка|ИЗ| ВТ_Доки КАК ВТ_Доки| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах| ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор| И ТоварыНаСкладах.ВидДвижения =| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)|ГДЕ| ТоварыНаСкладах.Регистратор ЕСТЬ NULLЭтот запрос вернет документы, по которым нет ни одного движения с видом
Приходв регистреТоварыНаСкладах.## Если нужно проверять движение прихода именно по складу
Если нужно проверять приход только по конкретному складу, например склад передается параметром
&Склад, добавьте условие также вПО:1С (Код)1234567891011|ВЫБРАТЬ| ВТ_Доки.Ссылка КАК Ссылка|ИЗ| ВТ_Доки КАК ВТ_Доки| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах| ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор| И ТоварыНаСкладах.ВидДвижения =| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)| И ТоварыНаСкладах.Склад = &Склад|ГДЕ| ТоварыНаСкладах.Регистратор ЕСТЬ NULLВ этом случае необходимо установить параметр:
1С (Код)1Запрос.УстановитьПараметр("Склад", Склад);## Если нужно проверить наличие прихода на любом складе
Тогда условие по
Складдобавлять не нужно. Первый вариант проверяет движениеПриходпо любому складу.## Если нужно исключить помеченные на удаление документы
Добавьте в первый блок:
1С (Код)1| И НЕ Реализация.ПометкаУдаленияПолный фрагмент условий:
1С (Код)12345678|ГДЕ| Реализация.Проведен| И НЕ Реализация.ПометкаУдаления| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода| И Реализация.Статус <>| ЗНАЧЕНИЕ(Перечисление.СтатусыПеремещенийТоваров.Принято)| И РеализацияТовары.Номенклатура.ТипНоменклатуры =| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)## Если нужно проверить конкретно склад-получатель из документа
В зависимости от конфигурации у документа могут быть реквизиты вроде:
1С (Код)1|Реализация.СкладПолучательили:
1С (Код)1|Реализация.СкладТогда вместо параметра можно сравнивать склад регистра со складом документа:
1С (Код)1234| ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор| И ТоварыНаСкладах.ВидДвижения =| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)| И ТоварыНаСкладах.Склад = ВТ_Доки.Ссылка.СкладПолучательНо такой вариант нужно использовать только в том случае, если в вашей конфигурации у документа действительно есть реквизит
СкладПолучатель, а в регистреТоварыНаСкладахдвижение прихода записывается именно по нему.Для обычной проверки отсутствия прихода по документу достаточно основного условия:
1С (Код)12| И ТоварыНаСкладах.ВидДвижения =| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)25 сентября 2026 в 7:54 в ответ на: Являются ли «пометка удаления» и «не проведен» одним и тем же в 1С? #38723Нет, это два разных независимых свойства документа.
## Пометка удаления
Проверяется свойством:
1С (Код)1Документ.ПометкаУдаленияУсловие:
1С (Код)1Документ.ПометкаУдаленияозначает, что документ помечен на удаление.
В запросе:
1С (Код)12|ГДЕ| Реализация.ПометкаУдаленияЧтобы выбрать документы, не помеченные на удаление:
1С (Код)12|ГДЕ| НЕ Реализация.ПометкаУдаленияили:
1С (Код)12|ГДЕ| Реализация.ПометкаУдаления = ЛОЖЬ## Проведен или не проведен
Проверяется свойством:
1С (Код)1Документ.ПроведенУсловие:
1С (Код)1Документ.Проведенозначает, что документ проведен.
Чтобы выбрать документы, которые не проведены:
1С (Код)12|ГДЕ| НЕ Реализация.Проведенили:
1С (Код)12|ГДЕ| Реализация.Проведен = ЛОЖЬ## Примеры условий
### Проведенные документы, не помеченные на удаление
1С (Код)123|ГДЕ| Реализация.Проведен| И НЕ Реализация.ПометкаУдаления### Непроведенные документы, не помеченные на удаление
1С (Код)123|ГДЕ| НЕ Реализация.Проведен| И НЕ Реализация.ПометкаУдаления### Проведенные документы, помеченные на удаление
1С (Код)123|ГДЕ| Реализация.Проведен| И Реализация.ПометкаУдаления### Все документы, которые нужно исключить из обработки
Например, исключить документы, если они либо помечены на удаление, либо не проведены:
1С (Код)123|ГДЕ| НЕ Реализация.ПометкаУдаления| И Реализация.Проведен## Важная особенность
При интерактивной установке пометки удаления на проведенный документ 1С обычно автоматически снимает проведение. Поэтому часто получается такое:
1С (Код)12Проведен = ЛожьПометкаУдаления = ИстинаНо это результат конкретного действия пользователя, а не равенство свойств.
Возможны и другие состояния:
| Проведен | Пометка удаления | Что означает |
|—|—:|—|
| Истина | Ложь | Обычный действующий документ |
| Ложь | Ложь | Непроведенный документ, не помечен на удаление |
| Ложь | Истина | Документ помечен на удаление |
| Истина | Истина | Может существовать при программной записи или особенностях конфигурации, но обычно так быть не должно |Для вашей задачи, если нужно выбрать документы для перепроведения, условие должно быть примерно таким:
1С (Код)1234|ГДЕ| Реализация.Проведен| И НЕ Реализация.ПометкаУдаления| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериодаЕсли нужно проверить непроведенные документы без пометки удаления:
1С (Код)123|ГДЕ| НЕ Реализация.Проведен| И НЕ Реализация.ПометкаУдаленияА если нужно найти документы, по которым отсутствуют движения, не забудьте дополнительно проверить и то, что документ не помечен на удаление:
1С (Код)123|ГДЕ| Реализация.Проведен| И НЕ Реализация.ПометкаУдаленияПроведенотвечает за наличие движений документа, аПометкаУдаленияотвечает только за последующее удаление объекта.24 сентября 2026 в 16:38 в ответ на: Почему при запуске копии базы 1С запускается обработчик обновления конфигурации? #38721При запуске копии базы обработчик обновления релиза запускается потому, что вместе с данными копируется и служебная информация о состоянии обновления. 1С видит, что конфигурация базы данных еще не полностью приведена к версии конфигурации, и продолжает выполнение отложенных обработчиков.
## Почему это происходит
Наиболее частые причины:
1. Копия сделана во время незавершенного обновления
Например, в рабочей базе уже была загружена новая конфигурация, но еще не завершились отложенные обработчики. В копию попадает:
— новая конфигурация;
— данные о зарегистрированных объектах;
— очередь обработчиков;
— их текущие статусы;
— признак незавершенного обновления.При первом запуске копии 1С продолжает обработку.
2. Обновление рабочей базы было прервано
Это может произойти из-за:
— закрытия Конфигуратора;
— аварийного завершения процесса1cv8.exe;
— отключения электричества;
— нехватки места на диске;
— блокировки базы другим пользователем;
— ошибки в обработчике;
— тайм-аута или сбоя фонового задания.3. Копия была сделана после обновления конфигурации, но до окончания обработки данных
В 1С обновление состоит не только из замены конфигурации. После обновления структуры могут запускаться длительные обработчики, которые переносят и преобразуют данные.
Поэтому надпись о том, что конфигурация обновлена, еще не всегда означает, что все данные обработаны.
4. Копия сделана средствами, которые сохранили служебное состояние базы
Это относится к:
— копированию файловой базы
1Cv8.1CD;
— восстановлению резервной копии;
— копии серверной базы средствами СУБД;
— выгрузке и загрузке.dt.Восстановленная база может продолжить ранее начатое обновление.
5. Копия запускается на другой версии платформы
Иногда при открытии копии более новой платформой запускаются дополнительные процедуры обновления данных или служебных объектов. Это не всегда означает обновление прикладной конфигурации, но внешне выглядит похожим образом.
## Что сначала проверить
Перед любыми исправлениями нужно определить, действительно ли идет обновление и не выполняется ли оно в другом сеансе.
### 1. Сделать резервную копию именно зависшей копии
Для файловой базы нужно скопировать файл:
1С (Код)11Cv8.1CDДля клиент-серверной базы желательно сделать отдельную резервную копию средствами СУБД.
Не следует сразу запускать «Тестирование и исправление», удалять записи из служебных регистров или менять статусы обработчиков. Сначала нужно сохранить исходное состояние.
### 2. Проверить, есть ли другие пользователи
В клиент-серверном варианте проверьте активные соединения в консоли администрирования 1С. В файловом варианте проверьте, что файл базы не открыт другими процессами.
Если обработчик запускается в копии, где никто больше не работает, это нормально. Если же одновременно работает несколько пользователей, обработка может постоянно останавливаться или запускаться повторно.
### 3. Посмотреть стандартный отчет о ходе обновления
В зависимости от конфигурации это может быть:
— «Результат обновления программы»;
— «Монитор обновления программы»;
— форма выполнения отложенных обработчиков;
— сообщение при запуске информационной базы;
— раздел администрирования, связанный с обновлением программы.В отчете нужно посмотреть:
— имя обработчика;
— количество объектов к обработке;
— текущий прогресс;
— текст последней ошибки;
— сколько попыток выполнения уже было;
— дату последнего запуска.Если количество объектов уменьшается, обработчик не завис, а просто выполняется долго.
## Как отличить медленный обработчик от действительно зависшего
Обработчик можно считать работающим, если:
— меняется количество обработанных объектов;
— изменяется время последней обработки;
— в журнале регистрации появляются новые записи;
— растет загрузка процессора, диска или базы данных;
— уменьшается размер очереди;
— меняются данные, которые должен формировать обработчик.Признаки зависания:
— количество объектов не меняется длительное время;
— одна и та же ошибка повторяется при каждой попытке;
— обработчик стартует снова и снова;
— в журнале регистрации есть ошибки «Объект не найден», «Поле не заполнено», «Нарушение ограничения уникальности»;
— обработчик не может обработать один или несколько конкретных объектов;
— нет активности в базе, но статус остается «Выполняется»;
— обновление прерывалось на одном и том же месте.Если обработчик работает с миллионами записей, отсутствие видимого прогресса несколько минут или даже десятков минут еще не доказывает зависание. Оценивать нужно по журналу регистрации и нагрузке.
## Что делать с зависшим обработчиком
### Вариант 1. Дать обработчику завершиться
Если это тестовая или восстановленная копия и обработчик не выдает ошибок, сначала оставьте базу в монопольном режиме и дождитесь окончания.
Для ускорения:
— запускайте обработку без пользователей;
— используйте локальный диск для файловой базы;
— убедитесь, что на диске достаточно места;
— не запускайте параллельно тяжелые регламентные задания;
— не прерывайте процесс повторно.В некоторых конфигурациях в форме результата обновления можно выбрать режим обработки:
— «Работа пользователей»;
— «Обработка данных».Режим «Обработка данных» обычно обрабатывает данные более интенсивно и может поддерживать несколько потоков. Но его следует применять на копии после проверки, что обработчики не имеют проблем с параллельным выполнением.
### Вариант 2. Найти ошибку в журнале регистрации
Откройте журнал регистрации и отберите события за период запуска обновления. Ищите:
—
Ошибка;
—Исключение;
—Обработчик обновления;
—Отложенное обновление;
— имя обработчика;
— текст «Объект не найден»;
— ошибки записи объекта;
— ошибки нарушения ограничений;
— ошибки обращения к несуществующему реквизиту или регистру.Часто обработчик не является зависшим. Он повторяет попытку, потому что каждый раз встречает один некорректный объект.
Типовые причины:
— документ помечен на удаление;
— документ не проводится из-за старых некорректных данных;
— в объекте не заполнено обязательное поле;
— есть битая ссылка;
— удален владелец или подчиненный объект;
— в выборку попадает пользовательский документ, который типовой обработчик не умеет обрабатывать;
— запрос обработчика возвращает дубли;
— один обработчик ожидает данные, которые должен создать другой обработчик.После исправления причины обработчик обычно можно запустить повторно.
### Вариант 3. Проверить зарегистрированные объекты
В конфигурациях, где используется стандартный механизм отложенного обновления, может применяться регистр сведений «Обработчики обновления» или аналогичный служебный объект.
В нем обычно видны:
— имя обработчика;
— статус;
— дата начала;
— дата последней попытки;
— количество обработанных объектов;
— оставшееся количество;
— сообщение об ошибке.Особенно внимательно проверьте обработчики со статусами:
— «Выполняется»;
— «Приостановлен»;
— «Ошибка»;
— «Ожидает обработки».Если обработчик имеет статус «Выполняется», но фактически процесс давно завершился аварийно, на копии иногда можно перевести его в состояние, допускающее повторную обработку. Конкретное название статуса зависит от конфигурации.
Не меняйте статус без резервной копии. Простая смена статуса не исправляет данные и может только привести к повторному выполнению обработчика.
### Вариант 4. Исправить проблемные данные
Если в журнале найден конкретный объект, нужно проверить его в пользовательском режиме или обработкой.
Например:
— заполнить отсутствующий реквизит;
— восстановить владельца;
— снять ошибочную пометку удаления;
— перепровести документ, если это допустимо;
— удалить некорректную запись из копии;
— исключить объект из обработки, если он не должен участвовать в обновлении.Для рабочей базы исправление в закрытом периоде требует отдельного анализа. В копии можно сначала проверить способ исправления, затем переносить его в рабочую базу.
### Вариант 5. Запустить базу в режиме отладки обновления
Для анализа длительных отложенных обработчиков полезен запуск с параметром:
1С (Код)1/С РежимОтладкиВ этом режиме длительные операции выполняются более прозрачно, что позволяет:
— увидеть конкретный обработчик;
— поймать ошибку в отладчике;
— исследовать параметры;
— понять, на каком объекте останавливается обработка;
— анализировать запрос, выполняемый обработчиком.Для файловой базы запуск может выглядеть примерно так:
1С (Код)1"C:Program Files1cv88.3.XX.XXXXbin1cv8.exe" ENTERPRISE /F"C:BasesTest" /C"РежимОтладки"Для серверной базы вместо
/Fуказываются параметры/S, пользователь и пароль.Точное имя параметра и поддержка режима зависят от версии платформы и конфигурации. Если параметр не распознается, его нужно проверить для конкретного релиза платформы.
## Можно ли просто удалить зависший обработчик
Обычно нет.
Нельзя без анализа:
— удалять записи из регистра «Обработчики обновления»;
— очищать регистрацию изменений;
— удалять служебные записи напрямую через SQL;
— откатывать дату обновления вручную;
— загружать старую конфигурацию поверх базы;
— несколько раз подряд запускать «Тестирование и исправление»;
— принудительно устанавливать статус «Завершен».Обработчик мог не только формировать очередь, но и частично изменить данные. Если просто отметить его завершенным, часть базы останется в старом состоянии, а конфигурация будет считаться обновленной. Впоследствии это может проявиться в отчетах, проведении документов или обменах.
Удаление регистрации допустимо только в обоснованных случаях, например если:
— данные уже были обработаны ранее;
— объект ошибочно зарегистрирован;
— объект не относится к типовому сценарию;
— разработчик точно определил, что его обработка не требуется.В таких случаях лучше использовать штатную обработку или доработанный механизм отмены регистрации, а не удалять записи напрямую из базы данных.
## Если обработчик запускается в копии каждый раз
Порядок действий:
1. Закройте все сеансы с копией.
2. Сделайте копию файла1Cv8.1CDили резервную копию серверной базы.
3. Запустите копию монопольно.
4. Откройте результат обновления программы.
5. Определите конкретное имя обработчика.
6. Посмотрите его прогресс и последнюю ошибку.
7. Проверьте журнал регистрации по этому обработчику.
8. Исправьте проблемные данные или код обработчика.
9. Повторно запустите обработку.
10. Убедитесь, что очередь обработчиков полностью завершена.
11. Только после этого используйте копию для тестирования или дальнейшего обновления.Если копия нужна только для просмотра данных и обработчики запускать не требуется, правильнее сделать копию уже после полного завершения обновления рабочей базы. Если это невозможно, копию следует рассматривать как базу, в которой еще продолжается технологическая операция обновления.
## Когда нужен разработчик
Разработчик конфигурации нужен, если:
— обработчик зацикливается;
— выборка возвращает одни и те же строки;
— обработчик не учитывает документы расширения;
— возникает ошибка в типовом коде;
— обработчики зависят друг от друга;
— в многопоточном режиме один обработчик использует данные, которые еще не созданы другим;
— проблема воспроизводится только на большом объеме данных;
— обработчик постоянно возвращает статус «Выполняется», но количество объектов не меняется.В таких случаях анализируют код процедуры обновления, запросы, регистрацию объектов и порядок выполнения обработчиков. Иногда помогает изменение порядка обработчиков: сначала выполняется обработчик, создающий необходимые данные, затем обработчики, которые эти данные используют.
При обновлении нетиповой конфигурации также проверяют доработки. Частая ситуация: типовой обработчик рассчитан на стандартные документы, а в базе появились собственные документы или регистраторы. Они попадают в очередь, но типовая процедура не умеет их обрабатывать, из-за чего обновление повторяет одну и ту же попытку.
23 сентября 2026 в 17:26 в ответ на: Как проверить и провести документы в 1С без движений в регистре? #38719Ваш запрос уже выбирает все проведенные документы, по которым нет движений в регистре
ТоварыНаСкладах. Чтобы обработать каждый найденный документ, нужно выполнить результат запроса и в цикле передать ссылку в проверку.## 1. Запрос для получения документов без движений
Лучше ограничить проверку регистра условием по нужному виду регистратора. Сам запрос можно оставить таким:
1С (Код)123456789101112131415161718192021222324|ВЫБРАТЬ РАЗЛИЧНЫЕ| Реализация.Ссылка КАК Ссылка|ПОМЕСТИТЬ ВТ_Доки|ИЗ| Документ.ВозвратТоваровПоставщику КАК Реализация| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровПоставщику.Товары КАК РеализацияТовары| ПО РеализацияТовары.Ссылка = Реализация.Ссылка|ГДЕ| Реализация.Проведен| И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода| И РеализацияТовары.Номенклатура.ТипНоменклатуры =| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)|;||////////////////////////////////////////////////////////////////////////////////||ВЫБРАТЬ| ВТ_Доки.Ссылка КАК Ссылка|ИЗ| ВТ_Доки КАК ВТ_Доки| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах| ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор|ГДЕ| ТоварыНаСкладах.Регистратор ЕСТЬ NULLПараметры запроса нужно установить обязательно:
1С (Код)12Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);Запрос.УстановитьПараметр("КонецПериода", КонецПериода);## 2. Проверка всех найденных документов
Например, если нужно просто вывести список документов без движений:
1С (Код)123456789101112131415161718Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();КоличествоДокументов = 0;Пока Выборка.Следующий() ЦиклКоличествоДокументов = КоличествоДокументов + 1;Сообщить("Нет движений в регистре ТоварыНаСкладах: "+ Строка(Выборка.Ссылка));КонецЦикла;Сообщить("Всего документов без движений: "+ Строка(КоличествоДокументов));## 3. Если для каждого документа нужно вызвать свою проверку
Допустим, у вас есть процедура:
1С (Код)1ПроверитьДокумент(СсылкаДокумента);Тогда вызов всех документов будет таким:
1С (Код)12345678Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклПроверитьДокумент(Выборка.Ссылка);КонецЦикла;Например:
1С (Код)12345678910111213Процедура ПроверитьДокумент(СсылкаДокумента) ЭкспортЕсли Не ЗначениеЗаполнено(СсылкаДокумента) ТогдаВозврат;КонецЕсли;Сообщить("Проверяется документ: "+ Строка(СсылкаДокумента));// Здесь размещается ваша проверкаКонецПроцедуры## 4. Если нужно повторно провести все найденные документы
Если задача состоит в том, чтобы перепровести документы и сформировать движения, можно получить объект документа и записать его с проведением:
1С (Код)12345678910111213141516171819202122232425262728Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклСсылкаДокумента = Выборка.Ссылка;ОбъектДокумента = СсылкаДокумента.ПолучитьОбъект();ПопыткаОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);Сообщить("Документ проведен: "+ Строка(СсылкаДокумента));ИсключениеСообщить("Ошибка проведения документа "+ Строка(СсылкаДокумента)+ ": "+ ОписаниеОшибки());КонецПопытки;КонецЦикла;Но для массового проведения лучше использовать транзакцию и блокировку, особенно если документов много.
## 5. Вариант с транзакцией
1С (Код)12345678910111213141516171819202122232425НачатьТранзакцию();ПопыткаРезультат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклОбъектДокумента =Выборка.Ссылка.ПолучитьОбъект();ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);КонецЦикла;ЗафиксироватьТранзакцию();ИсключениеОтменитьТранзакцию();ВызватьИсключение;КонецПопытки;Минус этого варианта в том, что при ошибке в одном документе будут отменены изменения по всем документам. Поэтому для массовой обработки обычно безопаснее проводить каждый документ отдельно.
## 6. Рекомендуемый вариант для массового проведения
Такой вариант не откатывает уже успешно проведенные документы, если следующий документ завершился ошибкой:
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклСсылкаДокумента = Выборка.Ссылка;ПопыткаОбъектДокумента = СсылкаДокумента.ПолучитьОбъект();Если Не ОбъектДокумента.Проведен ТогдаОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);Сообщить("Проведен документ: "+ Строка(СсылкаДокумента));Иначе// Для уже проведенного документа перепроведение обычно// выполняется записью с режимом проведенияОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);Сообщить("Перепроведен документ: "+ Строка(СсылкаДокумента));КонецЕсли;ИсключениеСообщить("Не удалось провести документ "+ Строка(СсылкаДокумента)+ ". "+ ОписаниеОшибки());КонецПопытки;КонецЦикла;## 7. Если нужно только проверить наличие движений после проведения
После перепроведения исходный результат запроса уже не обновится. Нужно повторно выполнить запрос:
1С (Код)1234567891011121314151617181920Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Если Не Выборка.Следующий() ТогдаСообщить("Документов без движений не найдено.");ИначеПока Истина ЦиклСообщить("По-прежнему нет движений: "+ Строка(Выборка.Ссылка));Если Не Выборка.Следующий() ТогдаПрервать;КонецЕсли;КонецЦикла;КонецЕсли;## 8. Важная проверка
В вашем запросе документ считается проблемным, если у него нет вообще ни одной записи в регистре
ТоварыНаСкладах.Если документ должен делать движения только по товарам определенного типа, это условие корректно:
1С (Код)12|И РеализацияТовары.Номенклатура.ТипНоменклатуры =| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)Но если в документе есть и услуги, и товары, то наличие движений нужно проверять не просто по регистратору, а по конкретной номенклатуре. Иначе документ может иметь движения по одной строке, а другая товарная строка останется без движений.
Для простой проверки всех документов ваш основной алгоритм такой:
1С (Код)12345678910111213Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);Запрос.УстановитьПараметр("КонецПериода", КонецПериода);Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклОбъектДокумента = Выборка.Ссылка.ПолучитьОбъект();ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);КонецЦикла;То есть запрос формирует список ссылок, а цикл
Пока Выборка.Следующий()последовательно обрабатывает все найденные документы.23 сентября 2026 в 17:25 в ответ на: Почему в 1С 7.7 журнал документов не показывает все счета? #38717Понял, речь идет о 1С:Предприятие 7.7, а не о 1С 8.3. Предыдущий пример запроса для 8.3 к версии 7.7 неприменим.
В 1С 7.7 список документов обычно открывается через журнал документов. Если в журнале отображаются не все счета, проверьте следующее.
### 1. Установленный период журнала
В верхней части журнала может быть установлен период просмотра:
— текущий день;
— текущий месяц;
— текущий квартал;
— произвольный ограниченный период.Из-за этого старые счета не будут видны.
Установите максимально широкий период через пункт меню, обычно:
Действия → Интервал дат
или кнопку выбора интервала на панели журнала.
Укажите, например:
— начало:
01.01.2000;
— конец: текущая дата.Точное название пункта зависит от конфигурации и настроек интерфейса.
### 2. Отбор в журнале
В 1С 7.7 журнал может иметь установленный отбор. Проверьте:
Действия → Отбор
или соответствующую кнопку на панели инструментов.
Уберите отборы по:
— организации;
— контрагенту;
— договору;
— ответственному;
— пользователю;
— виду операции;
— состоянию документа;
— номеру;
— дате.Если доступна команда сброса отбора, используйте:
Действия → Сбросить отбор
### 3. Журнал может показывать не все виды документов
В 7.7 один журнал может быть настроен на отображение только определенных видов документов. Проверьте настройку журнала:
Действия → Настройка журнала
Убедитесь, что в составе отображаемых документов выбран именно документ «Счет на оплату покупателю».
В некоторых конфигурациях счет может находиться:
— в отдельном журнале;
— в общем журнале документов;
— в журнале расчетов с покупателями;
— в журнале заказов или реализации.### 4. Счета могли быть введены другим документом
В УТ 7.7 счет иногда оформляется не отдельным документом, а как:
— заказ покупателя;
— заявка покупателя;
— документ реализации;
— документ, печатная форма которого называется «Счет на оплату».То есть название печатной формы не всегда совпадает с видом документа в метаданных.
Проверьте, какой именно документ открывается при создании счета. В меню:
Документы
найдите документ, который используется для оформления счета, и откройте его журнал напрямую.
### 5. Ограничения прав пользователя
Если один пользователь видит счета, а другой нет, вероятная причина в правах доступа.
В 1С 7.7 проверьте:
— права пользователя на сам документ;
— права на журнал документов;
— доступ к организации;
— рабочее место пользователя;
— ограничения по подразделению или ответственному;
— настройки пользователя в конфигурации.Для проверки войдите под пользователем с полными правами и откройте тот же журнал.
Если администратор видит все документы, а обычный пользователь только часть, проблема, скорее всего, в правах или программном отборе.
### 6. Документы помечены на удаление
Проверьте, не помечены ли отсутствующие счета на удаление. В зависимости от конфигурации такие документы могут:
— отображаться другим цветом;
— скрываться из обычного списка;
— показываться только при включенной настройке отображения удаляемых объектов.Откройте меню журнала и включите отображение помеченных на удаление документов, если такая команда предусмотрена.
### 7. Программный отбор в модуле формы журнала
В конфигурациях 7.7 часто в модуле формы журнала устанавливают отбор программно. Например, журнал может показывать только документы:
— текущей организации;
— текущего менеджера;
— текущего склада;
— за определенный период;
— с незакрытым состоянием;
— связанные с конкретным заказом.Если ручной сброс отбора не помогает, нужно открыть конфигуратор и проверить форму журнала документа.
Ищите в модуле формы журнала процедуры:
—
ПриОткрытии;
—ПриИзмененииИнтервала;
—ОбработкаВыбора;
—УстановитьОтбор;
—УстановитьФильтр;
—НачалоВыбораЗначения.В 1С 7.7 отборы могли задаваться как через настройки журнала, так и непосредственно кодом формы.
### 8. Как проверить наличие документа в базе через встроенный запрос 7.7
В 1С 7.7 используется другой язык запросов. Синтаксис 8.3 вида
Документ.СчетНаОплатуПокупателюс полями через точку здесь использовать нельзя.Пример запроса 7.7 имеет примерно такой вид:
|Период с ДатаНач по ДатаКон;
|Документ = Документ.СчетНаОплатуПокупателю.ТекущийДокумент;
|ДатаДок = Документ.СчетНаОплатуПокупателю.ДатаДок;
|НомерДок = Документ.СчетНаОплатуПокупателю.НомерДок;
|Фирма = Документ.СчетНаОплатуПокупателю.Фирма;
|Контрагент = Документ.СчетНаОплатуПокупателю.Контрагент;
|Группировка Документ;
|Упорядочить по ДатаДок;Но этот текст сработает только если в конкретной конфигурации действительно существует документ с идентификатором:
СчетНаОплатуПокупателюВ 7.7 имя документа в конфигураторе могло быть другим, например:
—
Счет;
—СчетПокупателю;
—СчетФактура;
—ЗаказПокупателя.Поэтому точное имя нужно посмотреть в конфигураторе в дереве Документы.
Для вашей ситуации в первую очередь проверьте:
1. Интервал дат журнала.
2. Отбор журнала.
3. Состав документов журнала.
4. Права текущего пользователя.
5. Программный отбор в форме журнала.Для 1С 7.7 наиболее частая причина именно в ограниченном интервале дат или в отборе журнала, сохраненном пользователем.
23 сентября 2026 в 15:48 в ответ на: Как извлечь весь текст из XML в 1С с помощью `ЧтениеXML`? #38715Ваша функция удаляет все фрагменты между
<и>, а оставшийся текст объединяет в одну строку. Для простого XML она может работать, но это не полноценный разбор XML.Проблемы текущего варианта:
— текст комментариев попадёт в результат;
— содержимоеCDATAобрабатывается некорректно;
— символ>внутри значения атрибута может преждевременно завершить тег;
— XML-сущности, например&, не преобразуются в&;
— XML-декларации, инструкции обработки иDOCTYPEкорректно не учитываются;
— при некорректном XML функция не сообщает об ошибке.Для XML лучше использовать объект
ЧтениеXML.### Вариант функции для извлечения всего текстового содержимого
1С (Код)12345678910111213141516171819202122232425262728Функция ИзвлечьТекстИзXML(СтрокаXML) ЭкспортЕсли ПустаяСтрока(СтрокаXML) ТогдаВозврат "";КонецЕсли;ЧтениеXML = Новый ЧтениеXML;ПопыткаЧтениеXML.УстановитьСтроку(СтрокаXML);Результат = "";Пока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст ТогдаРезультат = Результат + ЧтениеXML.Значение;КонецЕсли;КонецЦикла;Возврат СокрЛП(Результат);ИсключениеВызватьИсключение "Некорректная XML-строка: " + ОписаниеОшибки();КонецПопытки;КонецФункцииНапример, для XML:
1С (Код)12345<Документ><Номер>123</Номер><Дата>2026-09-23</Дата><Комментарий>Текст & описание</Комментарий></Документ>результатом будет примерно:
1С (Код)11232026-09-23Текст & описаниеXML-парсер автоматически преобразует
&в символ&.Если между значениями нужны пробелы или переводы строк, добавьте их при объединении:
1С (Код)1234567891011121314151617181920212223242526Функция ИзвлечьТекстИзXML(СтрокаXML) ЭкспортЕсли ПустаяСтрока(СтрокаXML) ТогдаВозврат "";КонецЕсли;ЧтениеXML = Новый ЧтениеXML;ЧтениеXML.УстановитьСтроку(СтрокаXML);МассивТекста = Новый Массив;Пока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст ТогдаТекстУзла = СокрЛП(ЧтениеXML.Значение);Если ЗначениеЗаполнено(ТекстУзла) ТогдаМассивТекста.Добавить(ТекстУзла);КонецЕсли;КонецЕсли;КонецЦикла;Возврат СтрСоединить(МассивТекста, " ");КонецФункцииДля получения только текста определённого элемента, например
<Комментарий>, лучше проверять имя текущего элемента и учитывать уровень вложенности. Простая функция сТипУзлаXML.Текстизвлекает текст из всех элементов XML, включая вложенные узлы.Если XML содержит только один известный тег и гарантированно имеет простой вид, ваш вариант можно немного улучшить, но для общего случая рекомендуется использовать
ЧтениеXML.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Если Значение <> Неопределено ТогдаЗначение = Новый ХранилищеЗначения(Значение);КонецЕсли; -
АвторЗаписи