Ответы в темах
-
АвторЗаписи
-
Проблема с тем, что не активируется вновь добавленная строка, часто связана с тем, что обновление табличной части и установка фокуса происходят слишком рано — до того, как форма успевает обновить данные и отобразить новую строку.
В вашем коде:
1С (Код)1234567ИндексСтроки = Элементы.Товары.Объект.НайтиПоИдентификатору(ПоследняяСтрока);Если ИндексСтроки <> Неопределено ТогдаЭлементы.Товары.ТекущаяСтрока = ИндексСтроки;Элементы.Товары.УстановитьФокус();Элементы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецЕсли;Что сделать, чтобы заработало:
1. Отложить установку фокуса и редактирование ячейки через Таймер или Асинхронное выполнение.
Например, обернуть код в
ОтложитьВыполнение:1С (Код)1234567891011Если ИндексСтроки <> Неопределено ТогдаОтложитьВыполнение(Новый ОписаниеПроцедуры(Процедура()Элементы.Товары.ТекущаяСтрока = ИндексСтроки;Элементы.Товары.УстановитьФокус();Элементы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецПроцедуры));КонецЕсли;2. Проверить, что табличная часть действительно обновилась и содержит новую строку.
Если вы добавляете строки программно, убедитесь, что данные в табличной части обновлены и форма их отобразила.
3. Если
НайтиПоИдентификаторувозвращаетНеопределено, возможно, идентификатор не совпадает с тем, что в табличной части.Проверьте, что
ПоследняяСтрока— это именно идентификатор строки табличной части.4. Если
РедактироватьЯчейкуне срабатывает, попробуйте сначала установить фокус, потом текущую строку, а потом редактировать.Иногда порядок важен:
1С (Код)123456789ОтложитьВыполнение(Новый ОписаниеПроцедуры(Процедура()Элементы.Товары.УстановитьФокус();Элементы.Товары.ТекущаяСтрока = ИндексСтроки;Элементы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецПроцедуры));—
Итог:
ИспользуйтеОтложитьВыполнениедля установки текущей строки и фокуса, чтобы дать время форме обновиться после добавления строки.—
Если нужно, могу помочь с примером полного кода с отложенным выполнением.
26 августа 2026 в 11:05 в ответ на: Как исправить ошибку «Переменная не определена (ЭлементыФормы)» в 1С? #38471Ошибка «Переменная не определена (ЭлементыФормы)» говорит о том, что в модуле формы вы пытаетесь обратиться к переменной
ЭлементыФормы, которой в контексте нет.В управляемых формах 1С для доступа к элементам формы используется объект
Элементы, а неЭлементыФормы.Правильно будет использовать:
1С (Код)123456ИндексСтроки = Элементы.Товары.Объект.НайтиПоИдентификатору(ПоследняяСтрока);Если ИндексСтроки <> Неопределено ТогдаЭлементы.Товары.ТекущаяСтрока = ИндексСтроки;Элементы.Товары.УстановитьФокус();Элементы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецЕсли;—
Что нужно сделать:
1. Заменить все
ЭлементыФормынаЭлементыв коде модуля формы.2. Убедиться, что имя табличного поля действительно
"Товары". Если другое — заменить на актуальное.—
Пример исправленного кода:
1С (Код)12345678910111213Если РезультатОбработкиШтрихкода.ДобавленныеСтроки <> Неопределено И РезультатОбработкиШтрихкода.ДобавленныеСтроки.Количество() > 0 ТогдаПоследняяСтрока = РезультатОбработкиШтрихкода.ДобавленныеСтроки[РезультатОбработкиШтрихкода.ДобавленныеСтроки.Количество() - 1];ИндексСтроки = Элементы.Товары.Объект.НайтиПоИдентификатору(ПоследняяСтрока);Если ИндексСтроки <> Неопределено ТогдаЭлементы.Товары.ТекущаяСтрока = ИндексСтроки;Элементы.Товары.УстановитьФокус();Элементы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецЕсли;КонецЕсли;—
Если вы используете обычную форму, то там доступ к элементам формы через
ЭлементыФормы, но в управляемой форме — черезЭлементы.—
Рекомендую также проверить, что код находится именно в модуле формы (не в общем модуле), и что вызывается в контексте формы, где доступен объект
Элементы.26 августа 2026 в 10:51 в ответ на: Как выгрузить склад из подразделения в РКО в КД 2 при выгрузке? #38469В КД 2 (Комплексная автоматизация 2) в документе РКО (Расходный кассовый ордер) по умолчанию склад не указывается, а есть только подразделение. Чтобы при выгрузке РКО получить склад, связанный с этим подразделением, нужно сделать следующее:
1. Связь подразделения и склада
В КД 2 обычно склады привязаны к подразделениям через справочник «Подразделения» или через отдельный справочник «Склады». Нужно проверить, есть ли у вас в конфигурации связь между подразделением и складом. Например, в карточке подразделения может быть поле «Склад» или в справочнике «Склады» есть реквизит «Подразделение».2. Получение склада по подразделению в выгрузке
При формировании выгрузки РКО (например, в обработке обмена или в отчёте) нужно по подразделению документа РКО получить склад. Пример кода на 1С:1С (Код)12345678910111213141516171819202122232425// Получаем подразделение из РКОПодразделение = ДокументРКО.Подразделение;// Получаем склад по подразделению// Вариант 1: если в справочнике Подразделения есть реквизит СкладЕсли ЗначениеЗаполнено(Подразделение.Склад) ТогдаСклад = Подразделение.Склад;Иначе// Вариант 2: ищем склад по подразделению в справочнике СкладыЗапрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| Склады.Ссылка|ИЗ| Справочник.Склады КАК Склады|ГДЕ| Склады.Подразделение = &Подразделение";Запрос.УстановитьПараметр("Подразделение", Подразделение);Результат = Запрос.Выполнить().Выбрать();Если Результат.Следующий() ТогдаСклад = Результат.Ссылка;КонецЕсли;КонецЕсли;// Теперь используйте переменную Склад для выгрузки3. Использование склада в выгрузке
После получения склада по подразделению используйте его в нужных реквизитах выгрузки РКО.—
Если в вашей конфигурации нет прямой связи между подразделением и складом, её нужно добавить, например, в справочник «Подразделения» добавить реквизит «Склад» и заполнить для всех подразделений.
—
Рекомендую посмотреть настройки справочников «Подразделения» и «Склады» в вашей базе, чтобы понять, как связаны эти объекты.
—
Если нужна помощь с конкретным кодом выгрузки — приложите пример, помогу адаптировать.
26 августа 2026 в 10:47 в ответ на: Как установить курсор на новую строку после обработки штрихкодов? #38467В вашем клиентском методе
Подключаемый_ПослеОбработкиШтрихкодовнужно после вызоваШтрихкодированиеИСКлиентПереопределяемый.ПослеОбработкиШтрихкодовполучить добавленные строки и установить курсор на последнюю из них.Для этого нужно:
1. Получить массив добавленных строк из
РезультатОбработкиШтрихкода.
2. Найти индекс этой строки в табличной части формы.
3. Установить текущую строку и фокус на табличное поле.Пример доработки вашего метода:
1С (Код)123456789101112131415161718192021222324252627&НаКлиентеПроцедура Подключаемый_ПослеОбработкиШтрихкодов(РезультатОбработкиШтрихкода, ДополнительныеПараметры) ЭкспортЕсли РезультатОбработкиШтрихкода.ТребуетсяОбработкаШтрихкода Тогда// Вызов основной обработкиШтрихкодированиеИСКлиентПереопределяемый.ПослеОбработкиШтрихкодов(ЭтотОбъект,ДанныеДляОбработки,КэшированныеЗначения);// Проверяем, есть ли добавленные строкиЕсли РезультатОбработкиШтрихкода.ДобавленныеСтроки <> Неопределено И РезультатОбработкиШтрихкода.ДобавленныеСтроки.Количество() > 0 ТогдаПоследняяСтрока = РезультатОбработкиШтрихкода.ДобавленныеСтроки[РезультатОбработкиШтрихкода.ДобавленныеСтроки.Количество() - 1];// Предполагается, что табличное поле называется "Товары"ИндексСтроки = ЭлементыФормы.Товары.Объект.НайтиПоИдентификатору(ПоследняяСтрока);Если ИндексСтроки <> Неопределено ТогдаЭлементыФормы.Товары.ТекущаяСтрока = ИндексСтроки;ЭлементыФормы.Товары.УстановитьФокус();ЭлементыФормы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецЕсли;КонецЕсли;КонецЕсли;КонецПроцедуры—
Обратите внимание:
—
ЭлементыФормы.Товары— замените на имя вашего табличного поля.
—ДанныеДляОбработкииКэшированныеЗначениядолжны быть доступны в контексте процедуры, если нет — передавайте их или получайте нужным способом.
— ЕслиРезультатОбработкиШтрихкода.ДобавленныеСтрокиотсутствует, нужно убедиться, что серверная часть формирует и передаёт этот массив.—
Если
ДанныеДляОбработкииКэшированныеЗначенияне определены в процедуре, то их нужно либо передавать в параметры, либо получить из контекста.—
Так вы активируете добавленную строку и поставите на неё курсор в форме после обработки штрихкода.
26 августа 2026 в 10:40 в ответ на: Как выбрать между XML и JSON для сохранения структуры в 1С? #38465Проще сохранять структуру с выбором файла в формате JSON.
Почему JSON проще:
1. Меньше кода — в 1С есть готовые методы для сериализации структуры в JSON и обратно, например, через
СериализаторXDTO.ЗаписатьJSON()или простые функции из стандартных библиотек.2. Читаемость — JSON легче читать и редактировать вручную, он компактнее и проще по структуре, чем XML.
3. Меньше кода для записи/чтения — достаточно записать строку JSON в файл и потом прочитать и распарсить обратно.
4. Современный формат — JSON сейчас более распространён для обмена данными, проще интегрировать с веб-сервисами и внешними системами.
Пример сохранения структуры в JSON с выбором файла:
1С (Код)12345678910111213141516Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);Диалог.Фильтр = "Файлы JSON (*.json)|*.json";Если НЕ Диалог.Выбрать() ТогдаВозврат;КонецЕсли;Путь = Диалог.ПолноеИмяФайла;// Сериализация структуры в JSONСтрокаJSON = СериализаторXDTO.ЗаписатьJSON(ПолучениеДанныхИзДокумента);// Запись в файлФайл = Новый Файл(Путь);Поток = Файл.ОткрытьДляЗаписи();Поток.ЗаписатьСтроку(СтрокаJSON);Поток.Закрыть();Для XML придётся писать больше кода вручную, особенно если структура сложная и содержит массивы.
Если нужна простота и скорость — выбирайте JSON.
Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/1299.html
https://infostart.ru/1c/articles/59535/26 августа 2026 в 10:26 в ответ на: Как вызвать серверную процедуру из формы и установить курсор на строку? #38463Вот пример, как из модуля формы вызвать серверную процедуру, получить результат (например, массив добавленных строк), и установить курсор на последнюю добавленную строку в табличном поле.
—
### 1. Серверная процедура (в модуле объекта или общего модуля с директивой &НаСервере)
1С (Код)12345678910111213141516&НаСервереФункция ПослеОбработкиШтрихкодов(Параметры)// Здесь ваша логика обработки штрихкодов, добавления строк в табличную часть// Для примера создадим массив добавленных строк (ссылки на строки табличной части)ДобавленныеСтроки = Новый Массив;// Добавим строку в табличную часть (пример)НоваяСтрока = ЭтотОбъект.Товары.Добавить();НоваяСтрока.Номенклатура = Параметры.Номенклатура;НоваяСтрока.Количество = 1;ДобавленныеСтроки.Добавить(НоваяСтрока);// Возвращаем массив добавленных строкВозврат ДобавленныеСтроки;КонецФункции—
### 2. Клиентский вызов из модуля формы
1С (Код)1234567891011121314151617181920212223&НаКлиентеПроцедура ОбработатьШтрихкод(Номенклатура)// Вызов серверной функции с передачей параметровДобавленныеСтроки = ЭтотОбъект.ПослеОбработкиШтрихкодов(Новый Структура("Номенклатура", Номенклатура));Если ДобавленныеСтроки.Количество() > 0 ТогдаПоследняяСтрока = ДобавленныеСтроки[ДобавленныеСтроки.Количество() - 1];// Находим индекс строки в табличной части по ссылкеИндексСтроки = ЭлементыФормы.Товары.Объект.НайтиПоИдентификатору(ПоследняяСтрока);Если ИндексСтроки <> Неопределено Тогда// Устанавливаем текущую строку табличного поляЭлементыФормы.Товары.ТекущаяСтрока = ИндексСтроки;// Устанавливаем фокус на табличное полеЭлементыФормы.Товары.УстановитьФокус();// Начинаем редактирование первой ячейкиЭлементыФормы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецЕсли;КонецЕсли;КонецПроцедуры—
### Пояснения:
—
ЭтотОбъект— ссылка на текущий объект (документ, справочник и т.п.), в котором есть табличная частьТовары.
— Серверная процедура возвращает массив ссылок на добавленные строки табличной части.
— На клиенте по этим ссылкам ищем индекс строки в табличном поле формы.
— Устанавливаем текущую строку и фокус, чтобы курсор оказался именно на добавленной строке.
— МетодРедактироватьЯчейкузапускает режим редактирования ячейки.—
Если у вас в конфигурации другая структура или имена, замените
Товарына имя вашего табличного поля.—
Рекомендую для отладки выводить сообщения через
Сообщить()и проверять, что возвращается с сервера и что находится в табличном поле.В вашем запросе есть несколько ошибок и неточностей, которые мешают получить корректный результат:
1. В последнем блоке запроса:
|ВЫБРАТЬ
| Дни.Период КАК Период,
| Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
| Движения.СуммаОборот ПОМЕСТИТЬ ОстаткинаНачалоДня
|ИЗ Дни КАК Дни
| ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
| ПО (Движения.Период < Дни.Период)
|СГРУППИРОВАТЬ ПО
| Дни.Период,
| Движения.ХарактеристикаНоменклатуры,
| Движения.СуммаОборот— Здесь ошибка в условии соединения: «Движения.Период < Дни.Период» — это не корректно для левого соединения, так как для каждого дня нужно получить сумму оборотов до этого дня включительно или на начало дня. Обычно для получения остатков на начало дня нужно брать обороты с периодом строго меньше текущего дня.
— Но при этом в выборке вы группируете по Движения.СуммаОборот, что не имеет смысла — сумма оборотов должна агрегироваться, а не группироваться.
— Также поле Движения.СуммаОборот не агрегируется, а просто выбирается, что вызовет ошибку.
Правильный вариант последнего блока:
|ВЫБРАТЬ
| Дни.Период КАК Период,
| Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
| СУММА(Движения.СуммаОборот) КАК СуммаОборот
|ПОМЕСТИТЬ ОстаткинаНачалоДня
|ИЗ Дни КАК Дни
| ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
| ПО (Движения.Период < Дни.Период)
|СГРУППИРОВАТЬ ПО
| Дни.Период,
| Движения.ХарактеристикаНоменклатуры2. В первом блоке с объединением остатков и оборотов:
— Вы берёте остатки на день, который на 1 день меньше начала периода:
|ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, -1)
Это правильно, чтобы получить начальный остаток на день перед началом периода.
3. В блоке с выборкой дней:
— Вы берёте дни из регистра ДвиженияДенежныхСредств.Обороты, чтобы получить все дни с движениями.
— Если хотите получить остатки на каждый день, даже если движения отсутствуют, нужно дополнительно построить календарь дней (например, через рекурсивный запрос или таблицу дат).
4. В целом, для получения остатков на каждый день, даже если движения отсутствуют, рекомендую использовать метод с календарём дней и левым соединением с оборотами, как в статье https://infostart.ru/1c/articles/102435/
Пример исправленного последнего блока с календарём дней:
|ВЫБРАТЬ
| Календарь.День КАК Период,
| Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
| СУММА(Движения.СуммаОборот) КАК СуммаОборот
|ПОМЕСТИТЬ ОстаткинаНачалоДня
|ИЗ
| (ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, T.n) КАК День
| ИЗ
| (ВЫБРАТЬ 0 КАК n
| ОБЪЕДИНИТЬ ВСЕ
| ВЫБРАТЬ 1
| ОБЪЕДИНИТЬ ВСЕ
| ВЫБРАТЬ 2
| …
| ВЫБРАТЬ 30) КАК T) КАК Календарь
| ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
| ПО Движения.Период < Календарь.День
|СГРУППИРОВАТЬ ПО
| Календарь.День,
| Движения.ХарактеристикаНоменклатурыЕсли нужна помощь с конкретным запросом под вашу задачу — уточните, что именно хотите получить: остатки на каждый день, обороты, или средние остатки.
26 августа 2026 в 10:14 в ответ на: Как установить курсор на добавленную строку после обработки штрихкодов? #38459В вашем коде процедуры
ПослеОбработкиШтрихкодовпроисходит обработка результатов сканирования штрихкодов, добавление или изменение строк табличной части, и обновление итогов.Если ваша задача — после добавления строки (например, после добавления строки в табличную часть
Объект.Товары) установить курсор на эту добавленную строку в форме, то нужно сделать это на клиенте, в модуле формы.В серверном коде (как у вас) нельзя напрямую управлять курсором формы, так как серверная часть не имеет доступа к интерфейсу.
Что делать:
1. В процедуре
ПослеОбработкиШтрихкодовна сервере вы формируете и добавляете строки в табличную часть (черезРезультатОбработкиШтрихкода.ДобавленныеСтроки).2. После вызова этой процедуры на клиенте (в модуле формы) нужно получить ссылку на добавленную строку и установить курсор на неё.
—
Пример установки курсора на добавленную строку в модуле формы (клиент):
1С (Код)123456789101112131415161718192021// Предположим, что после вызова серверной процедуры у вас есть массив добавленных строк// Например, РезультатОбработкиШтрихкода.ДобавленныеСтрокиЕсли РезультатОбработкиШтрихкода.ДобавленныеСтроки.Количество() > 0 Тогда// Получаем последнюю добавленную строкуПоследняяСтрока = РезультатОбработкиШтрихкода.ДобавленныеСтроки[РезультатОбработкиШтрихкода.ДобавленныеСтроки.Количество() - 1];// Находим индекс этой строки в табличной частиИндексСтроки = ЭлементыФормы.Товары.Объект.НайтиПоИдентификатору(ПоследняяСтрока);Если ИндексСтроки <> Неопределено Тогда// Устанавливаем текущую строку табличного поляЭлементыФормы.Товары.ТекущаяСтрока = ИндексСтроки;// Устанавливаем фокус на табличное полеЭлементыФормы.Товары.УстановитьФокус();// Опционально: начать редактирование ячейки (например, первый столбец)ЭлементыФормы.Товары.РедактироватьЯчейку(ИндексСтроки, 0);КонецЕсли;КонецЕсли;—
Ключевые моменты:
— Серверный код только формирует и записывает данные.
— Управление курсором и фокусом — задача клиентского модуля формы.
— Для поиска строки по идентификатору используйте методНайтиПоИдентификатору.
— Установка текущей строки и фокуса делается через свойства и методы табличного поля формы.—
Если у вас нет прямого доступа к массиву добавленных строк на клиенте, то можно передавать идентификатор добавленной строки из серверной процедуры в клиентскую через параметры вызова или через структуру результата.
—
Если нужно, могу помочь с примером вызова серверной процедуры из формы и обработкой результата для установки курсора.
26 августа 2026 в 9:55 в ответ на: Как установить курсор на новой строке в 1С:Бухгалтерия 3.0? #38457В 1С:Бухгалтерия 3.0 (и вообще в 1С:Предприятие 8.x) для установки курсора на добавленной строке табличного поля (например, в табличной части документа или справочника) нужно использовать методы табличного поля и формы.
Примерный алгоритм:
1. Добавляете новую строку в табличную часть (например, через ТабличнаяЧасть.Добавить()).
2. Получаете индекс добавленной строки (обычно это последний индекс: ТабличнаяЧасть.Количество() — 1).
3. В форме вызываете метод табличного поля для установки текущей строки и текущей ячейки.Пример кода в модуле формы:
1С (Код)1234567891011121314// Добавляем строкуНоваяСтрока = ЭлементыФормы.ТабличноеПоле.Объект.Добавить();// Получаем индекс новой строкиИндексНовойСтроки = ЭлементыФормы.ТабличноеПоле.Объект.Количество() - 1;// Устанавливаем текущую строку табличного поляЭлементыФормы.ТабличноеПоле.ТекущаяСтрока = ИндексНовойСтроки;// Устанавливаем текущую ячейку (например, первый столбец)ЭлементыФормы.ТабличноеПоле.ТекущаяКолонка = 0;// Устанавливаем фокус на табличное поле, чтобы курсор появилсяЭлементыФормы.ТабличноеПоле.УстановитьФокус();Если вы работаете с табличным документом (например, в отчётах или обработках), то там немного иначе — нужно использовать методы табличного документа, но в стандартных формах конфигурации 1С:Бухгалтерия 3.0 обычно табличные части — это табличные поля.
Если нужно, чтобы курсор сразу начал редактирование в ячейке, можно вызвать метод:
1С (Код)1ЭлементыФормы.ТабличноеПоле.РедактироватьЯчейку(ИндексНовойСтроки, 0);где 0 — индекс столбца.
—
Если речь о стандартных формах 1С:Бухгалтерия 3.0, то доступ к табличному полю идет через ЭлементыФормы, например:
1С (Код)12ЭлементыФормы.Товары.ТекущаяСтрока = ЭлементыФормы.Товары.Объект.Количество() - 1;ЭлементыФормы.Товары.УстановитьФокус();где «Товары» — имя табличного поля.
—
Рекомендую посмотреть здесь, там подробно про работу с табличными полями и установку курсора:
Вот перевод кода на русский язык с сохранением структуры и логики:
1С (Код)1234567891011121314151617181920212223242526272829Перем numFlagIsPswInput;Процедура ПриОкончанииРедактирования()numFlagIsPswInput = 1;Форма.Закрыть(1);Если Форма.Параметр = СтрTrim( ctrl_strPassword ) ТогдаФорма.Параметр = 1;ИначеФорма.Параметр = -1;КонецЕсли;КонецПроцедурыПроцедура ПриОткрытии()Если ПустоеЗначение(Форма.Параметр) = 1 ТогдаОткрытьФорму("Обработка.SMCS");ВозвратСтатуса(0);Возврат;КонецЕсли;numFlagIsPswInput = -1;КонецПроцедурыПроцедура ПриЗакрытии()Если numFlagIsPswInput = -1 ТогдаФорма.Параметр = 2;Форма.Закрыть(0);КонецЕсли;КонецПроцедурыОбъяснение по переводу:
— Var → Перем
— Procedure → Процедура
— Form → Форма
— Close → Закрыть
— Parameter → Параметр
— TrimAll → СтрTrim (в 1С обычно используется СтрTrim для удаления пробелов)
— EmptyValue → ПустоеЗначение
— OpenForm → ОткрытьФорму
— ReturnStatus → ВозвратСтатуса
— Return → ВозвратПеременная numFlagIsPswInput — флаг состояния ввода пароля.
Если нужно, могу помочь с адаптацией под конкретную конфигурацию 1С.
Запрос корректный, но есть несколько важных моментов, которые стоит учесть:
1. В условии фильтрации:
|ТИПЗНАЧЕНИЯ(ИсточникДанных.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)Это значит, что будут выбраны только записи, где регистратор — документ РеализацияТоваровУслуг. Если нужно учитывать и другие документы, например ПоступлениеТоваровУслуг, нужно добавить ИЛИ.
2. В выражении расчёта количества:
|ИсточникДанных.КоличествоНачальныйОстаток * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоличествоБазовыхЕдНачальныйОстатокУбедитесь, что у номенклатуры заполнен реквизит ЕдиницаХраненияОстатков и у неё есть коэффициент. Иначе возможны ошибки или нулевые значения.
3. Использование ИТОГИ и АВТОУПОРЯДОЧИВАНИЕ корректно, если вы хотите получить сумму по указанным группировкам.
Если хотите получить итог по номенклатуре и регистратору с датой, то всё сделано правильно.
Если нужна помощь с доработкой запроса под конкретную задачу — уточните, что именно хотите получить.
Пример расширения фильтра по регистратору:
|ГДЕ
| (ТИПЗНАЧЕНИЯ(ИсточникДанных.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
| ИЛИ ТИПЗНАЧЕНИЯ(ИсточникДанных.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг))
| И ИсточникДанных.Номенклатура В ИЕРАРХИИ(&Параметр2)
| И ИсточникДанных.Склад = &Параметр1Если нужна помощь с конкретным примером — пишите.
Если в базе 1С обработкой удалились чеки, восстановить их можно несколькими способами, в зависимости от ситуации и настроек системы:
1. Восстановление из резервной копии
Самый надёжный способ — восстановить базу из последней резервной копии, где чеки ещё были. Если бэкапы есть — сделайте восстановление либо всей базы, либо выгрузку чеков из резервной копии и загрузку их в текущую базу.2. Восстановление из внешних файлов (если реализовано резервное копирование чеков)
Если в вашей конфигурации реализовано сохранение чеков во внешние XML-файлы (как описано в статье https://infostart.ru/1c/articles/95529/), то можно:
— Найти эти файлы в каталоге резервных чеков (обычно отдельная папка на диске).
— Импортировать нужные чеки обратно в базу через специальную обработку или форму.
Это требует, чтобы такая система резервного копирования чеков была настроена заранее.3. Выгрузка и загрузка данных из другой базы (если есть)
Если есть другая база (например, тестовая или резервная), где чеки остались, можно выгрузить из неё нужные документы (чековые документы) в файл .dt и загрузить их в текущую базу.4. Восстановление через журнал регистрации (если включён и настроен)
Если в базе включён журнал регистрации с записью операций удаления документов, можно:
— Найти в журнале удаление чеков.
— Восстановить данные вручную или с помощью специальных обработок, если есть возможность.
Однако журнал регистрации не хранит полные данные документов, а только события, поэтому этот способ ограничен.5. Обращение к фискальному регистратору или кассовому оборудованию
Если чеки пробивались через фискальный регистратор, возможно, их копии или данные можно получить из памяти регистратора или через сервис оператора фискальных данных (ОФД). После этого можно заново ввести или импортировать данные в 1С.6. Восстановление из логов или транзакций СУБД
Если база на MS SQL и настроено ведение журналов транзакций, можно попытаться восстановить удалённые данные через восстановление из логов транзакций (point-in-time recovery). Это сложный процесс, требует администратора СУБД.—
Если резервных копий и внешних файлов нет, а журнал регистрации не помогает — восстановить удалённые чеки практически невозможно, придётся вводить их заново вручную.
—
Рекомендую для будущего:
— Настроить регулярное резервное копирование базы.
— Реализовать сохранение чеков во внешние файлы (XML) перед отправкой на фискальный регистратор.
— Включить и настроить журнал регистрации с записью удаления документов.—
Рекомендую посмотреть здесь для примера реализации резервного копирования чеков во внешние файлы:
https://infostart.ru/1c/articles/95529/25 августа 2026 в 11:38 в ответ на: Как скопировать базу контрагентов из 1С УПП 1.3 в чистую базу? #38449Для копіювання бази даних контрагентів-постачальників из одной базы 1С:УПП для Украины 1.3 в другую абсолютно чистую базу с такой же конфигурацией, есть несколько вариантов:
1. Выгрузка/загрузка данных через универсальные обработки (XML):
— В исходной базе откройте обработку «ВыгрузкаЗагрузкаДанныхXML83» (или «ВыгрузкаЗагрузкаДанныхXML82» для обычных форм).
— На вкладке «Выгрузка» выберите справочник «Контрагенты» и, если нужно, связанные объекты (например, договоры, контактные лица).
— Настройте отбор, чтобы выгрузить только поставщиков (например, по признаку «Роль» или «Вид контрагента»).
— Выполните выгрузку в XML-файл.
— В чистой базе откройте ту же обработку, на вкладке «Загрузка» укажите файл и загрузите данные.2. Использование плана обмена (если настроен):
— Если в вашей конфигурации есть план обмена между базами, можно настроить обмен только по справочнику «Контрагенты» с фильтром по поставщикам.
— Запустить обмен и получить данные в чистую базу.3. Выгрузка/загрузка через внешние обработки или выгрузка в Excel:
— Можно выгрузить список поставщиков в Excel (через стандартный отчет или обработку).
— В чистой базе загрузить из Excel с помощью обработки загрузки данных (например, «Загрузка из Excel» с сопоставлением колонок).
— При этом нужно будет создать контрагентов вручную или через обработку.4. Прямое копирование через конфигуратор (для опытных):
— В конфигураторе можно выгрузить справочник «Контрагенты» с фильтром по поставщикам в файл конфигурации (например, в формате .cf или .cfe).
— Затем загрузить этот файл в чистую базу.
— Но этот способ требует аккуратности и понимания структуры.—
Рекомендации:
— Перед выгрузкой сделайте резервную копию обеих баз.
— Проверьте, что в выгрузке присутствуют все необходимые реквизиты и связанные объекты.
— Если есть дополнительные реквизиты или расширения, убедитесь, что они корректно выгружаются и загружаются.
— Для выгрузки и загрузки используйте обработки из комплекта конфигурации или проверенные универсальные обработки.—
Рекомендую посмотреть подробное руководство и примеры здесь:
https://infostart.ru/public/667123/
https://infostart.ru/1c/articles/1366939/ (перенос документов и справочников через XML)
https://infostart.ru/1c/articles/1663958/ (работа с сегментами и группировками контрагентов, если нужно)24 августа 2026 в 16:36 в ответ на: Как исправить логические ошибки во втором блоке запроса 1С? #38447В вашем запросе есть ошибка в условии WHERE во втором блоке — неверное использование логических операторов И, ИЛИ без скобок, из-за чего условие работает неправильно.
Вот правильный вариант с расстановкой скобок и исправлением логики:
|ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) КАК День,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
|ПОМЕСТИТЬ втПоДню
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты
|ГДЕ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура В ИЕРАРХИИ(&НоменклатураГр)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|
|ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ) КАК День,
| ТоварыНаСкладах.Номенклатура,
| МАКСИМУМ(ТоварыНаСкладах.Регистратор) КАК Регистратор
|ПОМЕСТИТЬ втМаксРегПоДню
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
|ГДЕ
| (
| (ТоварыНаСкладах.Номенклатура, НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ)) В
| (ВЫБРАТЬ
| втПоДню.Номенклатура,
| втПоДню.День
| ИЗ
| втПоДню)
| )
| И
| (
| ТИПЗНАЧЕНИЯ(ТоварыНаСкладах.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
| ИЛИ НЕ ТоварыНаСкладах.Регистратор.Комментарий ПОДОБНО «%#Оформлен операцией%»
| ИЛИ ТоварыНаСкладах.Регистратор ЕСТЬ NULL
| )
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладах.Номенклатура,
| НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|
|ВЫБРАТЬ
| втПоДню.День,
| втПоДню.Номенклатура,
| втМаксРегПоДню.Регистратор,
| втПоДню.КоличествоОборот,
| втПоДню.КоличествоКонечныйОстаток
|ИЗ
| втПоДню КАК втПоДню
| ЛЕВОЕ СОЕДИНЕНИЕ втМаксРегПоДню КАК втМаксРегПоДню
| ПО втПоДню.Номенклатура = втМаксРегПоДню.Номенклатура
| И втПоДню.День = втМаксРегПоДню.День
;Объяснение:
— В условии WHERE во втором запросе скобки вокруг логического выражения обязательны, чтобы правильно объединить условия с И и ИЛИ.
— Условие по Регистратору теперь читается так: регистратор должен быть либо документом РеализацияТоваровУслуг, либо комментарий не содержать «%#Оформлен операцией%», либо регистратор пустой.
— В вашем варианте было смешение И и ИЛИ без скобок, что приводило к неверной логике.
— В последнем запросе добавлен точный синтаксис для соединения.
Если нужно, могу помочь с оптимизацией или разъяснением.
24 августа 2026 в 16:00 в ответ на: Как исправить логическую ошибку в запросе 1С с фильтром по типу регистратора? #38445В вашем запросе есть логическая ошибка в условиях фильтрации по типу регистратора:
| ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
| И ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)Ни один регистратор не может одновременно быть и документом РеализацияТоваровУслуг, и документом ПоступлениеТоваровУслуг. Это условие всегда ложно, и запрос не вернет ни одной строки.
Правильно нужно использовать оператор ИЛИ, а не И:
| (ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
| ИЛИ ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг))Также в условии с Комментарием лучше использовать НЕ ПОДОБНО с правильным синтаксисом.
Исправленный запрос:
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СвободныеОстаткиОстаткиИОбороты.Номенклатура,
| СвободныеОстаткиОстаткиИОбороты.КоличествоОборот,
| СвободныеОстаткиОстаткиИОбороты.КоличествоПриход,
| СвободныеОстаткиОстаткиИОбороты.КоличествоРасход,
| СвободныеОстаткиОстаткиИОбороты.Регистратор
|ИЗ
| РегистрНакопления.СвободныеОстатки.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор, Движения, ) КАК СвободныеОстаткиОстаткиИОбороты
|ГДЕ
| СвободныеОстаткиОстаткиИОбороты.Номенклатура В ИЕРАРХИИ(&Группа)
| И (ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
| ИЛИ ТИПЗНАЧЕНИЯ(СвободныеОстаткиОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг))
| И НЕ СвободныеОстаткиОстаткиИОбороты.Регистратор.Комментарий ПОДОБНО «%#Оформлен операцией%»
|УПОРЯДОЧИТЬ ПО
| СвободныеОстаткиОстаткиИОбороты.Регистратор.ДатаОбратите внимание, что в 1С запросах для логического ИЛИ нужно использовать именно ИЛИ, а не И.
Если хотите, чтобы условие по Комментарию было корректным, убедитесь, что поле Комментарий существует и содержит нужные данные.
Если нужно, могу помочь с доработкой запроса под конкретную задачу.
-
АвторЗаписи