Ответы в темах
-
АвторЗаписи
-
Ошибка «1C-Itilium выдает ошибку» — слишком общее описание, чтобы дать точный ответ. Нужно больше конкретики: какой текст ошибки, когда она возникает, в каком контексте (запуск, работа с документом, обмен и т.п.).
Но могу дать несколько типичных направлений для диагностики:
1. Проверьте логи 1C-Itilium (если есть) — там обычно есть подробности ошибки.
2. Уточните версию платформы и конфигурации, совместимость с 1C-Itilium.
3. Если ошибка связана с подключением к базе — проверьте сетевые настройки, доступность сервера.
4. Если ошибка связана с сертификатами или ЭЦП — проверьте корректность сертификатов, дату и настройки проверки отзыва (возможно, нужно добавить IgnoreServerCertificatesChainRevocationSoftFail=true в conf.cfg).
5. Если ошибка появилась после сбоя питания или аварийного завершения — проверьте целостность базы, запустите chdbfl.exe для проверки файла базы.
6. Если ошибка связана с веб-доступом — проверьте настройки IIS, балансировщиков, прокси, а также логи веб-сервера.
7. Если ошибка связана с потерей соединения — проверьте сетевую инфраструктуру, настройки брандмауэра и антивируса.Без конкретного текста ошибки и контекста точный ответ дать невозможно.
Если есть возможность, приложите скриншот или полный текст ошибки, тогда дам конкретное решение.
Рекомендую посмотреть здесь для типичных ошибок 1С и их решений:
https://serveradmin.ru/1c-oshibka-sqlite3_exec-failed-database-disk-image-malformed/
https://infostart.ru/1c/articles/1624331/
https://1s-on.ru/oshibka-1spredpriyatiya-poteryano-soedinenie/10 сентября 2026 в 11:33 в ответ на: Как убрать обычные и неразрывные пробелы из строки в 1С? #38635В вашем значении пробелы — это не обычные пробелы (код 32), а неразрывные пробелы (код 160).
Поэтому
СтрЗаменить(КПП, " ", "")не удаляет их.Чтобы убрать именно неразрывные пробелы, нужно заменить символ с кодом 160:
1С (Код)12345КПП = ТекСсылка.Особыеотметки;КПП = СтрЗаменить(КПП, Символы.НеразрывныйПробел, "");ТекОбъект.Особыеотметки = КПП;Сообщить(КПП);ТекОбъект.Записать();Если хотите убрать и обычные, и неразрывные пробелы, сделайте так:
1С (Код)123456КПП = ТекСсылка.Особыеотметки;КПП = СтрЗаменить(КПП, " ", "");КПП = СтрЗаменить(КПП, Символы.НеразрывныйПробел, "");ТекОбъект.Особыеотметки = КПП;Сообщить(КПП);ТекОбъект.Записать();Или универсальная функция:
1С (Код)123456789Функция УбратьПробелы(Строка)Результат = СтрЗаменить(Строка, " ", "");Результат = СтрЗаменить(Результат, Символы.НеразрывныйПробел, "");Возврат Результат;КонецФункцииТекОбъект.Особыеотметки = УбратьПробелы(ТекСсылка.Особыеотметки);Сообщить(ТекОбъект.Особыеотметки);ТекОбъект.Записать();Так будет точно удалено и то, и другое.
10 сентября 2026 в 10:54 в ответ на: Как запросить доп. реквизит «ПредставлениеПоставщикаРодительныйПадеж»? #38633Чтобы получить значение дополнительного реквизита «ПредставлениеПоставщикаРодительныйПадеж» из справочника «Контактные лица» в запросе 1С, нужно обращаться к табличной части дополнительных реквизитов или к самому дополнительному реквизиту, если он добавлен как общий реквизит справочника.
Если реквизит добавлен как общий реквизит справочника «Контактные лица» (как на вашем скриншоте), то запрос будет выглядеть примерно так:
|ВЫБРАТЬ
| КонтактныеЛица.Ссылка КАК Ссылка,
| КонтактныеЛица.ПредставлениеПоставщикаРодительныйПадеж КАК ПредставлениеРодительныйПадеж
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|ГДЕ
| КонтактныеЛица.Ссылка = &СсылкаКонтактногоЛицаГде &СсылкаКонтактногоЛица — параметр запроса, ссылка на нужного контактного лица.
Если же реквизит хранится в дополнительных реквизитах (через наборы дополнительных реквизитов), то запрос будет сложнее, нужно будет делать соединение с таблицей дополнительных реквизитов, например:
|ВЫБРАТЬ
| КонтактныеЛица.Ссылка КАК Ссылка,
| ДопРеквизиты.Значение КАК ПредставлениеРодительныйПадеж
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеРеквизиты КАК ДопРеквизиты
| ПО КонтактныеЛица.Ссылка = ДопРеквизиты.Владелец
| И ДопРеквизиты.ИмяРеквизита = «ПредставлениеПоставщикаРодительныйПадеж»
|ГДЕ
| КонтактныеЛица.Ссылка = &СсылкаКонтактногоЛицаНо в вашем случае, судя по скриншоту, реквизит добавлен как общий реквизит справочника, значит достаточно просто обратиться к нему напрямую, как в первом примере.
Если нужно получить значение для нескольких контактных лиц, просто уберите условие по ссылке.
—
Если нужно получить это значение в коде 1С, например:
1С (Код)1234567891011121314151617Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| КонтактныеЛица.Ссылка КАК Ссылка,| КонтактныеЛица.ПредставлениеПоставщикаРодительныйПадеж КАК ПредставлениеРодительныйПадеж|ИЗ| Справочник.КонтактныеЛица КАК КонтактныеЛица|ГДЕ| КонтактныеЛица.Ссылка = &СсылкаКонтактногоЛица";Запрос.УстановитьПараметр("СсылкаКонтактногоЛица", СсылкаНаКонтактноеЛицо);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаЗначение = Результат.ПредставлениеРодительныйПадеж;КонецЕсли;—
Если что-то не получается, уточните, как именно добавлен реквизит (общий или через наборы доп.реквизитов), и я помогу подкорректировать запрос.
Проблема в том, что вы заменяете пробелы в переменной КПП, но при этом в сообщении выводите исходную переменную, а не результат замены. В итоге кажется, что пробелы не удаляются.
Правильно нужно так:
1С (Код)12345КПП = ТекСсылка.Особыеотметки;КППБезПробелов = СтрЗаменить(КПП, " ", "");ТекОбъект.Особыеотметки = КППБезПробелов;Сообщить(КППБезПробелов);ТекОбъект.Записать();Или сразу:
1С (Код)123ТекОбъект.Особыеотметки = СтрЗаменить(ТекСсылка.Особыеотметки, " ", "");Сообщить(ТекОбъект.Особыеотметки);ТекОбъект.Записать();Если в
Особыеотметкиесть не только обычные пробелы, а, например, неразрывные пробелы (код 160) или другие похожие символы, то замените их тоже:1С (Код)123456789Функция УбратьПробелы(Строка)Результат = СтрЗаменить(Строка, " ", "");Результат = СтрЗаменить(Результат, Символы.НеразрывныйПробел, "");Возврат Результат;КонецФункцииТекОбъект.Особыеотметки = УбратьПробелы(ТекСсылка.Особыеотметки);Сообщить(ТекОбъект.Особыеотметки);ТекОбъект.Записать();Проверьте, что именно в
Особыеотметки— иногда пробелы могут быть не обычными, а другими символами, которые визуально похожи.—
Если после этого пробелы не удаляются, сделайте отладку:
1С (Код)1234Для Индекс = 1 По СтрДлина(ТекСсылка.Особыеотметки) ЦиклСимвол = Сред(ТекСсылка.Особыеотметки, Индекс, 1);Сообщить(Строка(КодСимвола(Символ)) + " - '" + Символ + "'");КонецЦикла;Это покажет коды символов, чтобы понять, какие именно пробелы там есть.
10 сентября 2026 в 6:06 в ответ на: Как удалить пробелы из реквизита справочника в запросе 1С? #38629В запросе 1С нельзя напрямую внутри самого запроса убрать пробелы из значения реквизита, потому что в языке запросов 1С нет встроенной функции для удаления пробелов из строк.
Как сделать на практике:
1. Убирать пробелы после выполнения запроса, в коде 1С
Например, после получения выборки из запроса, пройтись по результатам и применить функцию
СокрЛП()(сокращение левых и правых пробелов) илиСтрЗаменить()для удаления всех пробелов.Пример:
1С (Код)12345678910111213Запрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| Справочник.НомерРеквизита КАК Номер|ИЗ| Справочник.Справочник КАК Справочник;Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Пока Выборка.Следующий() ЦиклЧистыйНомер = СтрЗаменить(Выборка.Номер, " ", ""); // Удаляем все пробелы// Используйте ЧистыйНомер дальшеКонецЦикла;2. Если нужно убрать пробелы только в начале и конце строки — используйте
СокрЛП()1С (Код)1ЧистыйНомер = СокрЛП(Выборка.Номер);3. Если хотите убрать пробелы только в запросе, можно использовать функцию
ПОДСТАВИТЬВ запросе 1С есть функция
ПОДСТАВИТЬ(Строка, ЧтоЗаменить, НаЧтоЗаменить), которая заменяет подстроки.Пример удаления пробелов:
1С (Код)1234|ВЫБРАТЬ| ПОДСТАВИТЬ(Справочник.НомерРеквизита, " ", "") КАК НомерБезПробелов|ИЗ| Справочник.Справочник КАК СправочникЭто удалит все пробелы из значения реквизита прямо в запросе.
—
Итого:
— Для удаления всех пробелов в запросе используйте
ПОДСТАВИТЬ(Реквизит, " ", "").
— Для удаления пробелов в начале и конце — после запроса применяйтеСокрЛП().
— Для более сложной очистки (например, убрать табуляции, переносы строк) — делайте это в коде 1С после выборки.Рекомендую использовать именно
ПОДСТАВИТЬв запросе, если нужно сразу получить значение без пробелов.10 сентября 2026 в 5:51 в ответ на: Как устранить ошибку передачи данных в 1С из-за недопустимого символа XML? #38627Ошибка «Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа» с детализацией «Текст XML содержит недопустимый символ в позиции …» указывает на то, что в передаваемой строке есть непечатный или запрещённый символ, который не может быть корректно сериализован в XML (XDTO).
В вашем случае в строке кода маркировки (или другого параметра) есть символ с кодом 15 (восьмеричное ), который XML не воспринимает.
Как исправить:
1. Очистить строку от непечатных символов перед передачей на сервер
Напишите функцию, которая перебирает все символы строки и удаляет непечатные символы с кодами от 0 до 31, кроме разрешённых (табуляция 9, перевод строки 10, возврат каретки 13).
Пример функции на 1С:
1С (Код)1234567891011Функция ОчиститьСтрокуОтНепечатныхСимволов(ИсходнаяСтрока) ЭкспортРезультат = "";Для Индекс = 1 По СтрДлина(ИсходнаяСтрока) ЦиклСимвол = Сред(ИсходнаяСтрока, Индекс, 1);КодСимвола = КодСимвола(Символ);Если (КодСимвола >= 32) Или (КодСимвола = 9) Или (КодСимвола = 10) Или (КодСимвола = 13) ТогдаРезультат = Результат + Символ;КонецЕсли;КонецЦикла;Возврат Результат;КонецФункции2. Использовать эту функцию для очистки всех строк, которые передаются между клиентом и сервером, особенно если это данные из внешних источников (маркировка, штрихкоды, коды Честного ЗНАКА и т.п.)
3. Проверить, что в данных нет управляющих символов, которые не поддерживаются XML
В частности, символы с кодами от 0 до 31, кроме табуляции, перевода строки и возврата каретки, запрещены в XML.
4. Если данные приходят из внешних API (например, Честный ЗНАК), обязательно фильтруйте их перед использованием
5. Если ошибка возникает при передаче параметров в вызовах серверных процедур, очистите параметры перед вызовом
—
Это классическая проблема с непечатными символами в строках, которые 1С пытается сериализовать в XML для передачи между клиентом и сервером.
Рекомендую посмотреть подробное описание и пример решения здесь:
https://infostart.ru/1c/articles/1985287/ (Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа)
Там подробно описано, как выявлять и удалять непечатные символы из строк, чтобы избежать подобных ошибок.
9 сентября 2026 в 15:06 в ответ на: Как в запросе 1С получить регистратор с максимальным периодом? #38625В вашем запросе регистратор хранится в регистре накопления
ТоварыНаСкладах.ОстаткиИОбороты, но в итоговой выборке вы его не выбираете.Чтобы получить регистратор, нужно:
1. В последнем большом запросе добавить поле
Регистраториз регистра в список выбираемых полей.2. В запросе с группировкой (где вы берёте максимум периода) регистратор не выбирается, так как там агрегирование по Номенклатуре и Периоду. Чтобы получить регистратор, нужно изменить логику — например, выбрать максимальный период и связанный с ним регистратор.
Практическое решение:
— В запросе с группировкой по максимальному периоду (
ВТ_ТабМаксимальныхПериодов) оставьте как есть.— В итоговом запросе добавьте
Регистраториз регистра:|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТ_ТабМаксимальныхПериодов.Номенклатура,
| ВТ_ТабМаксимальныхПериодов.Период КАК Период,
| ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остатки,
| ОстаткиТоваровОстаткиИОбороты.Регистратор КАК Регистратор
|ИЗ
| ВТ_ТабМаксимальныхПериодов КАК ВТ_ТабМаксимальныхПериодов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
| ПО ВТ_ТабМаксимальныхПериодов.ПериодРегистра = ОстаткиТоваровОстаткиИОбороты.Период
| И ВТ_ТабМаксимальныхПериодов.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
|ГДЕ
| НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток ЕСТЬ NULL
| И НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток = 0
|УПОРЯДОЧИТЬ ПО
| Период—
Если хотите получить регистратор в запросе с максимальным периодом, то нужно использовать подзапрос или дополнительный прием, например:
— Вместо
МАКСИМУМ(Период)выбрать максимальный период и регистратор, связанный с этим периодом.— В 1С запросах это можно сделать через вложенный запрос с фильтром по максимальному периоду.
Пример для получения регистратора с максимальным периодом:
|ВЫБРАТЬ
| ВТ_ТабДатТоваров.Номенклатура,
| ВТ_ТабДатТоваров.Период,
| ОстаткиТоваровОстаткиИОбороты.Регистратор
|ИЗ
| ВТ_ТабДатТоваров КАК ВТ_ТабДатТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
| ПО ВТ_ТабДатТоваров.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
| И ВТ_ТабДатТоваров.Период = ОстаткиТоваровОстаткиИОбороты.Период
|ГДЕ
| ОстаткиТоваровОстаткиИОбороты.Период = (
| ВЫБРАТЬ МАКСИМУМ(Период)
| ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты
| ГДЕ Номенклатура = ВТ_ТабДатТоваров.Номенклатура
| И Период <= ВТ_ТабДатТоваров.Период
| )—
Если нужна помощь с конкретным примером — могу помочь написать запрос под ваши данные.
9 сентября 2026 в 14:56 в ответ на: Как создать последовательность дат и получить остатки товаров за диапазон в запр #38623Это классический пример генерации последовательности дат в запросе 1С с помощью декартова произведения цифр 0..9, чтобы получить диапазон дней от &НачалоПериода до &КонецПериода.
Разбор и рекомендации:
1. Генерация дат
|ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
|ПОМЕСТИТЬ ВТ_ТабДат
|ИЗ
| (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ … ВЫБРАТЬ 9) КАК aa
| ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ … ВЫБРАТЬ 9) КАК bb ПО ИСТИНА
| ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ … ВЫБРАТЬ 9) КАК cc ПО ИСТИНА
| ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ … ВЫБРАТЬ 9) КАК dd ПО ИСТИНА
|ГДЕ
| aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)— Здесь создается последовательность чисел от 0 до максимального количества дней между датами.
— Для каждого числа прибавляется к &НачалоПериода, получается последовательность дат.
2. Формирование списка товаров
|ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ПОМЕСТИТЬ ВТ_ТабТоваров
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
| И НЕ Номенклатура.ПометкаУдаления
| И Номенклатура.ВидНоменклатуры.Наименование ПОДОБНО «%Товар%»
| И Номенклатура.Ссылка В ИЕРАРХИИ(&ПарамОтборТовар)— Отбор товаров по иерархии и по виду.
3. Декартово произведение дат и товаров
|ВЫБРАТЬ
| ВТ_ТабДат.Период,
| ВТ_ТабТоваров.Номенклатура
|ПОМЕСТИТЬ ВТ_ТабДатТоваров
|ИЗ
| ВТ_ТабДат КАК ВТ_ТабДат,
| ВТ_ТабТоваров КАК ВТ_ТабТоваров— Получаем все сочетания дат и товаров.
4. Определение максимального периода в регистре для каждой пары (товар, дата)
|ВЫБРАТЬ
| ВТ_ТабДатТоваров.Номенклатура,
| ВТ_ТабДатТоваров.Период,
| МАКСИМУМ(ОстаткиТоваровОстаткиИОбороты.Период) КАК ПериодРегистра
|ПОМЕСТИТЬ ВТ_ТабМаксимальныхПериодов
|ИЗ
| ВТ_ТабДатТоваров КАК ВТ_ТабДатТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
| ПО ВТ_ТабДатТоваров.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
| И ВТ_ТабДатТоваров.Период >= ОстаткиТоваровОстаткиИОбороты.Период
|СГРУППИРОВАТЬ ПО
| ВТ_ТабДатТоваров.Номенклатура,
| ВТ_ТабДатТоваров.Период— Для каждой даты и товара ищется максимальная дата из регистра, не превышающая текущую дату.
5. Получение остатков по найденным периодам
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТ_ТабМаксимальныхПериодов.Номенклатура,
| ВТ_ТабМаксимальныхПериодов.Период КАК Период,
| ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остатки
|ИЗ
| ВТ_ТабМаксимальныхПериодов КАК ВТ_ТабМаксимальныхПериодов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
| ПО ВТ_ТабМаксимальныхПериодов.ПериодРегистра = ОстаткиТоваровОстаткиИОбороты.Период
| И ВТ_ТабМаксимальныхПериодов.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
|ГДЕ
| НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток ЕСТЬ NULL
| И НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток = 0
|УПОРЯДОЧИТЬ ПО
| Период—
Рекомендации:
— Параметры &НачалоПериода, &КонецПериода должны быть типа Дата.
— Параметр &ПарамОтборТовар — ссылка на элемент справочника или таблица значений с элементами справочника.
— Если период большой (больше 9999 дней), генерация дат может быть очень тяжелой. Обычно хватает 3-4 цифр (aa, bb, cc).
— Для оптимизации можно ограничить диапазон.
—
Если нужна помощь с конкретным кодом вызова запроса или с параметрами — могу помочь.
9 сентября 2026 в 12:46 в ответ на: Как использовать временную таблицу в запросе 1С с параметром ТаблицаЗначений? #38621Вот полный пример правильного использования временной таблицы в запросе 1С с параметром ТаблицаЗначений.
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354// Предположим, у вас есть ТаблицаЗначений ТЗСпецификации, которую нужно использовать в запросе// Создаем запросЗапрос = Новый Запрос;// Текст запроса с использованием временной таблицы ВТ_ВремЗапрос.Текст ="ПОМЕСТИТЬ ВТ_Врем|ВЫБРАТЬ| ТЗ.Спецификация КАК Спецификация,| ТЗ.Номенклатура КАК Номенклатура,| ТЗ.ЕдиницаИзмерения КАК ЕдиницаИзмерения,| ТЗ.Количество КАК Количество,| ТЗ.МаркаСтали КАК МаркаСтали,| ТЗ.НомерГОСТа КАК НомерГОСТа,| ТЗ.Характеристика КАК Характеристика,| ТЗ.СтатьяКалькуляции КАК СтатьяКалькуляции,| ТЗ.ПрименениеМатериалаРедактирование КАК ПрименениеМатериалаРедактирование|ИЗ| &ТЗ КАК ТЗ|;|ВЫБРАТЬ| ВТ_Врем.Спецификация КАК Спецификация,| ВТ_Врем.Номенклатура КАК Номенклатура,| СпрНоменклатура.нсиКодНСИ КАК КодЕСНСИ,| ВТ_Врем.Номенклатура КАК НаименованиеМатериала,| ВТ_Врем.ЕдиницаИзмерения КАК ЕдиницаИзмерения,| ВТ_Врем.Количество КАК Количество,| ВТ_Врем.МаркаСтали КАК МаркаСтали,| ВТ_Врем.НомерГОСТа КАК НомерГОСТа,| ВТ_Врем.Характеристика КАК Характеристика,| ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,| ВТ_Врем.ПрименениеМатериалаРедактирование КАК Примечание|ИЗ| ВТ_Врем КАК ВТ_Врем| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура| ПО ВТ_Врем.Номенклатура = СпрНоменклатура.Ссылка|ИТОГИ ПО| ВТ_Врем.СтатьяКалькуляции";// Устанавливаем параметр - передаем таблицу значенийЗапрос.УстановитьПараметр("ТЗ", ТЗСпецификации);// Выполняем запросРезультат = Запрос.Выполнить();// Получаем выборку с обходом по группировкамВыборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);// Пример перебора результатовПока Выборка.Следующий() Цикл// Здесь можно работать с полями выборки, например:Сообщить("СтатьяКалькуляции: " + Выборка.СтатьяКалькуляции + ", Количество: " + Строка(Выборка.Количество));КонецЦикла;—
Объяснение:
— В запросе создается временная таблица ВТ_Врем из параметра &ТЗ (ТаблицаЗначений).
— Далее во второй части запроса используется эта временная таблица ВТ_Врем, а не параметр &ВТ_Врем.
— Параметр &ВТ_Врем не передается и не нужен.
— В коде 1С передается только параметр «ТЗ» с вашей таблицей значений.
— Результат запроса выбирается с обходом по группировкам, так как в запросе есть ИТОГИ ПО.
—
Если у вас нет таблицы значений ТЗСпецификации, то её нужно сформировать заранее, например:
1С (Код)123456789101112ТЗСпецификации = Новый ТаблицаЗначений;ТЗСпецификации.Колонки.Добавить("Спецификация", Новый ОписаниеТипов("СправочникСсылка.Спецификации"));ТЗСпецификации.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));ТЗСпецификации.Колонки.Добавить("ЕдиницаИзмерения", Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"));ТЗСпецификации.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));ТЗСпецификации.Колонки.Добавить("МаркаСтали", Новый ОписаниеТипов("Строка"));ТЗСпецификации.Колонки.Добавить("НомерГОСТа", Новый ОписаниеТипов("Строка"));ТЗСпецификации.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));ТЗСпецификации.Колонки.Добавить("СтатьяКалькуляции", Новый ОписаниеТипов("СправочникСсылка.СтатьиЗатрат"));ТЗСпецификации.Колонки.Добавить("ПрименениеМатериалаРедактирование", Новый ОписаниеТипов("Строка"));// Добавьте строки в ТЗСпецификации по необходимости—
Такой подход гарантирует отсутствие ошибки «Содержимое объекта данных может быть выбрано только во временную таблицу».
9 сентября 2026 в 10:01 в ответ на: Как устранить ошибку использования &ВТ_Врем в запросах 1С? #38619Ошибка «Содержимое объекта данных может быть выбрано только во временную таблицу» возникает из-за того, что вы пытаетесь использовать параметр &ВТ_Врем как таблицу значений, но при этом в запросе он указан как &ВТ_Врем, а не как временная таблица, созданная в самом запросе.
В 1С нельзя одновременно использовать и ПОМЕСТИТЬ и параметр с таким же именем.
В вашем запросе:
|ПОМЕСТИТЬ ВТ_Врем
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|ВЫБРАТЬ
| …
|ИЗ
| &ВТ_Врем КАК ВТ_Врем
| ЛЕВОЕ СОЕДИНЕНИЕ …Вы сначала создаёте временную таблицу ВТ_Врем из параметра &ТЗ, а потом пытаетесь использовать параметр &ВТ_Врем, которого в параметрах нет (или он у вас тоже ТЗСпецификации).
Так делать нельзя.
—
Как исправить:
1. Уберите параметр &ВТ_Врем из запроса, используйте временную таблицу ВТ_Врем, созданную в запросе.
2. В запросе во второй части обращайтесь просто к ВТ_Врем, а не к &ВТ_Врем.
3. В коде 1С установите только параметр «ТЗ».
—
Правильный запрос:
|ВЫБРАТЬ
| ТЗ.Спецификация КАК Спецификация,
| ТЗ.Номенклатура КАК Номенклатура,
| ТЗ.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ТЗ.Количество КАК Количество,
| ТЗ.МаркаСтали КАК МаркаСтали,
| ТЗ.НомерГОСТа КАК НомерГОСТа,
| ТЗ.Характеристика КАК Характеристика,
| ТЗ.СтатьяКалькуляции КАК СтатьяКалькуляции,
| ТЗ.ПрименениеМатериалаРедактирование КАК ПрименениеМатериалаРедактирование
|ПОМЕСТИТЬ ВТ_Врем
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|ВЫБРАТЬ
| ВТ_Врем.Спецификация КАК Спецификация,
| ВТ_Врем.Номенклатура КАК Номенклатура,
| СпрНоменклатура.нсиКодНСИ КАК КодЕСНСИ,
| ВТ_Врем.Номенклатура КАК НаименованиеМатериала,
| ВТ_Врем.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВТ_Врем.Количество КАК Количество,
| ВТ_Врем.МаркаСтали КАК МаркаСтали,
| ВТ_Врем.НомерГОСТа КАК НомерГОСТа,
| ВТ_Врем.Характеристика КАК Характеристика,
| ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
| ВТ_Врем.ПрименениеМатериалаРедактирование КАК Примечание
|ИЗ
| ВТ_Врем КАК ВТ_Врем
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ВТ_Врем.Номенклатура = СпрНоменклатура.Ссылка
|ИТОГИ ПО
| ВТ_Врем.СтатьяКалькуляции—
В коде 1С:
1С (Код)123456Запрос = Новый Запрос;Запрос.Текст = ТекстЗапроса; // как вышеЗапрос.УстановитьПараметр("ТЗ", ТЗСпецификации);Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);—
Объяснение:
— ВТ_Врем — временная таблица, созданная в запросе через ПОМЕСТИТЬ.
— Вы не можете передавать &ВТ_Врем как параметр, если она создаётся в запросе.
— Используйте только &ТЗ как параметр.
—
Если хотите, могу помочь с полным примером.
9 сентября 2026 в 9:48 в ответ на: Как устранить ошибку «Не инициализированы параметры клиента на сервере» в 1С? #38617Ошибка «Не инициализированы параметры клиента на сервере» возникает, когда серверный код пытается получить параметры клиента, но они не были переданы или инициализированы в текущем сеансе.
Причина:
— Параметры клиента (например, «ЭтоВебКлиент») не передаются на сервер.
— Вызов серверного кода происходит без предварительной инициализации параметров клиента.
— Часто встречается при вызове серверных процедур из клиентского кода, если не настроена передача параметров сеанса.Как исправить:
1. Проверить передачу параметров клиента на сервер
В клиентском коде, перед вызовом серверных процедур, нужно вызвать процедуру инициализации параметров сеанса. Обычно это делается через вызов:
1С (Код)1СтандартныеПодсистемыКлиент.УстановитьПараметрыСеанса();или
1С (Код)1СтандартныеПодсистемыКлиент.ОбновитьПараметрыСеанса();Это гарантирует, что параметры клиента будут переданы на сервер.
2. Если используется вызов серверных процедур из фоновых заданий или внешних обработок
В таких случаях параметры клиента отсутствуют, и нужно либо:
— Передавать необходимые параметры явно в вызовах.
— Либо в серверном коде предусмотреть обработку ситуации отсутствия параметров (например, не использовать параметры клиента, если они не нужны).3. Перезапустить сеанс
Иногда ошибка возникает из-за сбоя в сеансе. Перезапуск клиента 1С и повторный вход в базу решают проблему.
4. Проверить настройки платформы и конфигурации
— Убедитесь, что в настройках сервера и кластера 1С включена поддержка передачи параметров клиента.
— Если используется веб-клиент, убедитесь, что параметры корректно передаются через HTTP-сессии.5. В коде обработать исключение
Если ошибка возникает в стандартных модулях, можно добавить проверку наличия параметров перед их использованием:
1С (Код)123Если ПараметрыСеанса.ПараметрыКлиентаНаСервере.Количество() = 0 Тогда// Инициализировать параметры или вызвать исключение с понятным сообщениемКонецЕсли;6. Пример инициализации параметров клиента на сервере
В клиентском модуле:
1С (Код)12345&НаКлиентеПроцедура ПередВызовомСервера()СтандартныеПодсистемыКлиент.УстановитьПараметрыСеанса();// Теперь можно вызывать серверные процедурыКонецПроцедурыВызов этой процедуры перед серверным вызовом гарантирует, что параметры будут доступны.
—
Если ошибка возникает в типовой конфигурации или стандартных подсистемах, то чаще всего достаточно перезапустить сеанс или вызвать обновление параметров сеанса на клиенте.
Рекомендую посмотреть здесь, где подробно описан механизм передачи параметров клиента на сервер и способы их инициализации:
https://infostart.ru/public/844632/ (Передача данных между сеансами и повторное использование значений)
https://infostart.ru/public/1625276/ (Стандартные подсистемы БСП — параметры работы клиента и возможности диалогов)
Если проблема сохраняется, проверьте, что вызовы серверных процедур не происходят из контекста, где параметры клиента не передаются (например, из фоновых заданий, веб-сервисов без инициализации параметров).
9 сентября 2026 в 9:39 в ответ на: Как устранить ошибку «Содержимое объекта данных может быть выбрано только во вре #38615Ошибка «Содержимое объекта данных может быть выбрано только во временную таблицу» возникает, когда в запросе пытаются напрямую выбрать содержимое реквизита типа «Объект данных» (например, табличной части, реквизита с типом «ТаблицаЗначений» или сложного типа), но результат запроса не помещается во временную таблицу.
В 1С запросы могут выбирать содержимое объектов данных только в конструкции «ПОМЕСТИТЬ ВТ_Врем» или использовать временные таблицы, чтобы потом с ними работать.
Чаще всего ошибка возникает, если в запросе:
— Вы пытаетесь выбрать поле с типом «Объект данных» (например, табличная часть или реквизит с типом «ТаблицаЗначений») без использования конструкции ПОМЕСТИТЬ.
— Или пытаетесь напрямую использовать объект данных в запросе без преобразования.
—
Что делать:
1. Если в запросе выбирается табличная часть или реквизит с типом «ТаблицаЗначений», то нужно сначала поместить её в временную таблицу:
|ПОМЕСТИТЬ ВТ_Врем
|ИЗ
| &ПараметрТаблицаЗначений КАК ВТ_Врем2. Далее уже работать с ВТ_Врем в запросе.
3. Если вы пытаетесь выбрать содержимое объекта данных напрямую, то это нельзя. Нужно либо передать таблицу значений как параметр, либо использовать ПОМЕСТИТЬ.
—
Пример:
1С (Код)12345678910111213141516171819Запрос = Новый Запрос;Запрос.Текст ="ПОМЕСТИТЬ ВТ_Врем|ВЫБРАТЬ| ТЧ.Номенклатура,| ТЧ.Количество|ИЗ| &ТаблицаЗначений КАК ТЧ|;|ВЫБРАТЬ| ВТ_Врем.Номенклатура,| СУММА(ВТ_Врем.Количество) КАК Количество|ИЗ| ВТ_Врем КАК ВТ_Врем|СГРУППИРОВАТЬ ПО| ВТ_Врем.Номенклатура";Запрос.УстановитьПараметр("ТаблицаЗначений", ТаблицаЗначений);Результат = Запрос.Выполнить();—
Если ошибка возникает в строке с
Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);, значит в запросе есть выборка объекта данных без помещения во временную таблицу.Проверьте текст запроса, найдите выборку объекта данных (например, табличной части) и оберните её в конструкцию ПОМЕСТИТЬ.
—
Если хотите, приложите текст запроса из модуля объекта (строка 249), помогу конкретно исправить.
8 сентября 2026 в 17:45 в ответ на: Почему возникает ошибка «Таблица не найдена ВТ_Врем» в 1С? #38613Ошибка «Таблица не найдена ВТ_Врем» означает, что в контексте выполнения запроса СКД или обычного запроса 1С нет временной таблицы с именем ВТ_Врем.
Причина: вы пытаетесь использовать временную таблицу, которую создали в запросе с ПОМЕСТИТЬ, но не передали её в СКД или не объявили в менеджере временных таблиц.
Как правильно работать с временными таблицами в запросах и СКД:
1. Если вы используете обычный запрос (не СКД), то запрос с ПОМЕСТИТЬ создаёт временную таблицу только внутри этого запроса. Чтобы использовать её во втором запросе, нужно либо объединить запросы в один, либо использовать менеджер временных таблиц.
2. Если вы используете СКД (систему компоновки данных), то для использования временных таблиц нужно:
— Создать объект МенеджерВременныхТаблиц
— Заполнить его нужными временными таблицами (например, из таблиц значений)
— Передать этот менеджер в ПроцессорКомпоновкиДанных при инициализации3. В вашем случае, если &ТЗ — это параметр типа ТаблицаЗначений, то сначала нужно создать временную таблицу ВТ_Врем в менеджере временных таблиц, а потом в запросе СКД обращаться к ней.
Пример кода в модуле отчёта (процедура ПриКомпоновкеРезультата):
1С (Код)12345678910111213141516171819202122232425262728293031323334Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)СтандартнаяОбработка = Ложь;// Создаём менеджер временных таблицМенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;// Заполняем временную таблицу из параметра &ТЗЗапросВТ = Новый Запрос;ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;ЗапросВТ.Текст ="ВЫБРАТЬ| ТЗ.Спецификация,| ТЗ.Номенклатура,| ТЗ.ЕдиницаИзмерения,| ТЗ.Количество,| ТЗ.МаркаСтали,| ТЗ.НомерГОСТа,| ТЗ.Характеристика,| ТЗ.СтатьяКалькуляции,| ТЗ.ПрименениеМатериалаРедактирование|ПОМЕСТИТЬ ВТ_Врем|ИЗ| &ТЗ КАК ТЗ";ЗапросВТ.УстановитьПараметр("ТЗ", ПараметрТЗ); // ПараметрТЗ - таблица значений с даннымиЗапросВТ.Выполнить();// Инициализируем компоновщик с менеджером временных таблицПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина, , МенеджерВременныхТаблиц);// Далее выполняете запросы СКД, где можно использовать ВТ_Врем// ...КонецПроцедуры4. В запросе СКД используйте таблицу ВТ_Врем как обычную таблицу:
|ВЫБРАТЬ
| ВТ_Врем.Спецификация,
| ВТ_Врем.Номенклатура,
| СпрНоменклатура.нсиКодНСИ КАК КодЕСНСИ,
| …
|ИЗ
| ВТ_Врем КАК ВТ_Врем
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ВТ_Врем.Номенклатура = СпрНоменклатура.Ссылка—
Если не используете СКД, а обычный запрос, то нельзя разделять запросы с ПОМЕСТИТЬ и потом использовать временную таблицу во втором запросе — это разные контексты.
—
Рекомендую посмотреть подробный пример и объяснение здесь:
https://helpf.pro/faq/view/905.html
https://infostart.ru/1c/articles/1229680/
—
Если нужна помощь с конкретным кодом — приложите код процедуры, где формируете запрос и инициализируете СКД.
8 сентября 2026 в 16:27 в ответ на: Почему в запросе возникает ошибка «Поле не найдено ВТ_Врем.Номенклатура.нсиКодНС #38611Ошибка «Поле не найдено ВТ_Врем.Номенклатура.нсиКодНСИ» возникает потому, что в таблице значений (ТЗ), которую вы передаете в параметр &ТЗ, поле Номенклатура — это ссылка на справочник, а в запросе вы пытаетесь обратиться к реквизиту справочника (нсиКодНСИ) через точку, что в запросах 1С к ТаблицеЗначений не работает.
В запросах 1С к ТаблицеЗначений нельзя обращаться к реквизитам объектов, которые лежат в колонках типа «Справочник», через точку. Там хранится просто ссылка, а не раскрытый объект.
Чтобы получить реквизит нсиКодНСИ, нужно сделать отдельное соединение с самим справочником Номенклатура.
Правильный вариант — сделать соединение с справочником Номенклатура по ссылке из таблицы значений, например так:
|ВЫБРАТЬ
| ВТ_Врем.Спецификация КАК Спецификация,
| ВТ_Врем.Номенклатура КАК Номенклатура,
| Номенклатура.нсиКодНСИ КАК КодЕСНСИ,
| ВТ_Врем.Номенклатура КАК НаименованиеМатериала,
| ВТ_Врем.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВТ_Врем.Количество КАК Количество,
| ВТ_Врем.МаркаСтали КАК МаркаСтали,
| ВТ_Врем.НомерГОСТа КАК НомерГОСТа,
| ВТ_Врем.Характеристика КАК Характеристика,
| ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
| ВТ_Врем.ПрименениеМатериалаРедактирование КАК Примечание
|ИЗ
| ВТ_Врем КАК ВТ_Врем
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ВТ_Врем.Номенклатура = Номенклатура.Ссылка
|ИТОГИ ПО
| ВТ_Врем.СтатьяКалькуляцииОбратите внимание, что ИТОГИ ПО — это устаревшая конструкция, лучше использовать СГРУППИРОВАТЬ ПО и агрегатные функции.
Если хотите получить итог по СтатьяКалькуляции, то запрос должен выглядеть так:
|ВЫБРАТЬ
| ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
| СУММА(ВТ_Врем.Количество) КАК Количество
|ИЗ
| ВТ_Врем КАК ВТ_Врем
|СГРУППИРОВАТЬ ПО
| ВТ_Врем.СтатьяКалькуляцииЕсли нужны остальные поля — добавьте их с агрегатными функциями или в отдельном запросе.
—
Итог: нельзя обращаться к реквизитам справочника через точку в таблице значений, нужно делать соединение с самим справочником.
8 сентября 2026 в 16:16 в ответ на: Как корректно использовать конструкцию ИТОГИ ПО в запросах 1С 8.3? #38609В вашем запросе ошибка в использовании конструкции ИТОГИ ПО без указания всех полей, которые не агрегируются. В 1С запросах при использовании ИТОГИ ПО нужно либо указать все поля, которые не агрегируются, либо использовать агрегатные функции для остальных.
В вашем случае вы хотите сгруппировать по СтатьяКалькуляции, но при этом выбираете много полей без агрегатных функций. Это вызовет ошибку.
Если нужно получить итог по СтатьяКалькуляции, то нужно либо:
1. Указать в ИТОГИ ПО все поля, которые есть в выборке, например:
|ИТОГИ ПО
| ВТ_Врем.Спецификация,
| ВТ_Врем.Номенклатура,
| ВТ_Врем.Номенклатура.нсиКодНСИ,
| ВТ_Врем.ЕдиницаИзмерения,
| ВТ_Врем.МаркаСтали,
| ВТ_Врем.НомерГОСТа,
| ВТ_Врем.Характеристика,
| ВТ_Врем.СтатьяКалькуляции,
| ВТ_Врем.ПрименениеМатериалаРедактированиеНо тогда итогов по СтатьяКалькуляции не будет, а будет группировка по всем этим полям.
2. Либо использовать агрегатные функции для остальных полей, например, если нужно суммировать Количество, а остальные поля взять по минимальному или максимальному значению, например:
|ВЫБРАТЬ
| ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
| МАКСИМУМ(ВТ_Врем.Спецификация) КАК Спецификация,
| МАКСИМУМ(ВТ_Врем.Номенклатура) КАК Номенклатура,
| МАКСИМУМ(ВТ_Врем.Номенклатура.нсиКодНСИ) КАК КодЕСНСИ,
| МАКСИМУМ(ВТ_Врем.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
| СУММА(ВТ_Врем.Количество) КАК Количество,
| МАКСИМУМ(ВТ_Врем.МаркаСтали) КАК МаркаСтали,
| МАКСИМУМ(ВТ_Врем.НомерГОСТа) КАК НомерГОСТа,
| МАКСИМУМ(ВТ_Врем.Характеристика) КАК Характеристика,
| МАКСИМУМ(ВТ_Врем.ПрименениеМатериалаРедактирование) КАК Примечание
|ИЗ
| ВТ_Врем КАК ВТ_Врем
|СГРУППИРОВАТЬ ПО
| ВТ_Врем.СтатьяКалькуляцииЕсли нужно именно итог по СтатьяКалькуляции с суммированием Количества, то второй вариант предпочтительнее.
Если же нужно просто получить уникальные СтатьяКалькуляции, то можно сделать отдельный запрос:
|ВЫБРАТЬ
| ВТ_Врем.СтатьяКалькуляции
|ИЗ
| ВТ_Врем КАК ВТ_Врем
|СГРУППИРОВАТЬ ПО
| ВТ_Врем.СтатьяКалькуляцииИли использовать ИТОГИ ПО с минимальным набором полей.
—
В вашем случае, чтобы исправить запрос, замените ИТОГИ ПО на СГРУППИРОВАТЬ ПО и используйте агрегатные функции для остальных полей.
Пример исправленного запроса:
|ВЫБРАТЬ
| ВТ_Врем.СтатьяКалькуляции КАК СтатьяКалькуляции,
| СУММА(ВТ_Врем.Количество) КАК Количество
|ИЗ
| ВТ_Врем КАК ВТ_Врем
|СГРУППИРОВАТЬ ПО
| ВТ_Врем.СтатьяКалькуляцииЕсли нужны другие поля — добавьте их с агрегатными функциями.
—
Если хотите искать по нескольким полям в ТаблицеЗначений, то для поиска строк используйте метод НайтиСтроки с передачей структуры с нужными значениями, либо используйте запрос с временной таблицей, как в примерах из источников.
-
АвторЗаписи