Ответы в темах
-
АвторСообщения
-
21 сентября 2025 в 7:15 в ответ на: Как программно вычесть две таблицы значений по ключам в 1С? #33470
Функционально задача сводится к вычислению разности двух таблиц значений по ключу (Организация, Подразделение), при этом учитывается Количество, и в итоговой таблице должны остаться только те строки, которые есть в одной из таблиц, но отсутствуют в другой (сравнение по Организация + Подразделение).
Для решения можно использовать алгоритм с объединением таблиц и сверткой с подсчетом разницы, как в классическом способе сравнения таблиц значений.
Пример кода на 1С:
1C Функция ПолучитьРазностьТаблиц(Таблица1, Таблица2) Экспорт // Ключевые колонки для сравнения Ключи = "Организация,Подразделение"; ИмяКолонкиСверки = "__Сверка__"; // Копируем Таблицу1, добавляем колонку для сверки и заполняем -1 ТаблРезультат = Таблица1.Скопировать(); Если Не ТаблРезультат.Колонки.Найти(ИмяКолонкиСверки) Тогда ТаблРезультат.Колонки.Добавить(ИмяКолонкиСверки, Новый ОписаниеТипов("Число")); КонецЕсли; ТаблРезультат.ЗаполнитьЗначения(-1, ИмяКолонкиСверки); // Добавляем строки из Таблица2 с +1 в колонке сверки Для Каждого Строка Из Таблица2 Цикл НоваяСтрока = ТаблРезультат.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); НоваяСтрока[ИмяКолонкиСверки] = 1; КонецЦикла; // Свертываем таблицу по ключам, суммируя колонку сверки и Количество // Для Количество нужно суммирование, для ключей группировка ТаблРезультат.Свернуть(Ключи, "Количество," + ИмяКолонкиСверки); // Оставляем только строки, где сумма сверки не равна 0 (т.е. уникальные) ИтоговаяТаблица = Новый ТаблицаЗначений; // Добавляем колонки из исходных таблиц (Организация, Подразделение, Количество) Для Каждого Колонка Из ТаблРезультат.Колонки Цикл Если Колонка.Имя ИмяКолонкиСверки Тогда ИтоговаяТаблица.Колонки.Добавить(Колонка.Имя, Колонка.Тип); КонецЕсли; КонецЦикла; Для Каждого Строка Из ТаблРезультат Цикл Если Строка[ИмяКолонкиСверки] 0 Тогда НоваяСтрока = ИтоговаяТаблица.Добавить(); Для Каждого Колонка Из ИтоговаяТаблица.Колонки Цикл НоваяСтрока[Колонка.Имя] = Строка[Колонка.Имя]; КонецЦикла; КонецЕсли; КонецЦикла; Возврат ИтоговаяТаблица; КонецФункцииОбъяснение:
— В колонке `__Сверка__` для строк из первой таблицы ставим -1, для второй +1.
— Объединяем обе таблицы.
— Свертываем по ключам (Организация, Подразделение), суммируя Количество и колонку сверки.
— Если сумма в колонке сверки равна 0 — значит строки с таким ключом есть в обеих таблицах, их исключаем.
— В итоговую таблицу попадают только уникальные строки с разницей по ключам.Таким образом, итоговая таблица содержит только те Организации и Подразделения, которые есть либо в первой, либо во второй таблице, но не в обеих одновременно, с суммированным количеством.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/375490/
20 сентября 2025 в 21:15 в ответ на: Как реализовать распознавание и загрузку первичных документов в 1С? #33468Распознавание первичных документов и их загрузка в 1С — это процесс автоматического извлечения данных из внешних файлов (чаще всего Excel, PDF, сканированных изображений) и последующего создания соответствующих документов в базе 1С.
### Как это реализовано в 1С
1. **Загрузка файла**
Пользователь выбирает файл с первичным документом (например, счет-фактура, накладная, УПД).2. **Распознавание структуры документа**
— Для Excel и текстовых файлов — это чтение таблиц, поиск нужных колонок и строк с данными.
— Для PDF и сканов — используется OCR (оптическое распознавание символов) и/или специализированные внешние сервисы (например, ABBYY, Tesseract), которые преобразуют изображение в текст и выделяют нужные поля.3. **Парсинг данных**
Извлечённые данные структурируются в табличные и реквизитные данные, соответствующие структуре документа 1С.4. **Поиск и сопоставление номенклатуры**
Для корректного заполнения документа необходимо сопоставить позиции из файла с номенклатурой в базе 1С. Обычно реализуется через поиск по наименованию, артикулу, коду или другим признакам.5. **Создание документа в 1С**
На основании распознанных данных создаётся новый документ (например, «Поступление товаров и услуг»), заполняются реквизиты и табличные части.6. **Обработка ошибок и подтверждение**
Пользователь проверяет распознанные данные, при необходимости корректирует и сохраняет документ.—
### Пример упрощённого кода загрузки из Excel с распознаванием и созданием документа
bsl &НаКлиенте Процедура ЗагрузитьДокументИзExcel(Команда) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Фильтр = "Excel файлы (*.xls;*.xlsx)|*.xls;*.xlsx"; Если Диалог.Выбрать() Тогда ПутьКФайлу = Диалог.ПолноеИмяФайла; Результат = ВызватьНаСервере("РаспознатьИДозагрузитьДокумент", ПутьКФайлу); Если Результат = Истина Тогда Сообщить("Документ успешно загружен"); Иначе Сообщить("Ошибка при загрузке документа"); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Функция РаспознатьИДозагрузитьДокумент(ПутьКФайлу) Попытка // Читаем Excel-файл ТаблицаДанных = Новый ТаблицаЗначений; ТаблицаДанных.ЗагрузитьИзФайла(ПутьКФайлу, Новый ФорматТаблицы("XLSX")); // Создаем новый документ Поступление товаров и услуг Документ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); Документ.Дата = ТекущаяДата(); Документ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик"); // пример // Предположим, что в таблице есть колонки: "Номенклатура", "Количество", "Цена" Для Каждого Строка Из ТаблицаДанных Цикл НоваяСтрока = Документ.Товары.Добавить(); // Поиск номенклатуры по наименованию Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура); Если ЗначениеЗаполнено(Номенклатура) Тогда НоваяСтрока.Номенклатура = Номенклатура; НоваяСтрока.Количество = Строка.Количество; НоваяСтрока.Цена = Строка.Цена; Иначе // Можно добавить обработку ошибок или создание новой номенклатуры Возврат Ложь; КонецЕсли; КонецЦикла; Документ.Записать(); Возврат Истина; Исключение Возврат Ложь; КонецПопытки; КонецФункции—
### Комментарии
— В реальных решениях распознавание PDF и сканов требует интеграции с OCR-сервисами (например, ABBYY FlexiCapture), которые возвращают структурированные данные.
— Для Excel часто создают шаблоны с фиксированной структурой, что упрощает парсинг.
— Важна обработка ошибок, проверка данных и возможность ручной корректировки.
— Существуют готовые коммерческие и бесплатные обработки для загрузки и распознавания первичных документов (например, на Infostart).—
Рекомендую посмотреть здесь:
https://infostart.ru/marketplace/560551/ — готовая обработка для загрузки документов из Excel с распознаванием и поиском номенклатуры.
https://infostart.ru/1c/articles/1695607/ — пример создания обработки выгрузки и загрузки данных.
https://infostart.ru/1c/articles/1839854/ — работа с файлами и вложениями в 1С.Если нужно, могу помочь с более сложным примером под конкретную задачу.
Связать 1С с нейронной сетью можно несколькими способами, и это открывает широкие возможности для автоматизации и повышения качества бизнес-процессов.
—
### Как связать 1С с нейронной сетью?
1. **Внешние компоненты и библиотеки**
Создание внешних компонент на C++, .NET, Java или Python, которые реализуют работу с нейросетями (например, через TensorFlow, PyTorch, ONNX) и вызываются из 1С. Это позволяет использовать мощные алгоритмы ИИ без переписывания их на языке 1С.2. **Веб-сервисы и REST API**
Развертывание нейросетевых моделей на отдельном сервере (например, на Python Flask, FastAPI, Node.js) и взаимодействие с ними из 1С через HTTP-запросы. Такой подход удобен для облачных решений и масштабируемых систем.3. **Интеграция с облачными AI-сервисами**
Использование API популярных облачных платформ (Яндекс.Облако, Google Cloud AI, Microsoft Azure Cognitive Services) для распознавания изображений, текста, речи и других задач. 1С отправляет данные в облако и получает результаты.4. **Использование встроенных средств 1С**
В 1С есть базовые возможности машинного обучения (например, деревья решений), которые можно применять для простых задач без внешних интеграций.—
### Зачем это нужно делать?
— **Автоматизация рутинных задач**: распознавание документов (OCR), классификация данных, прогнозирование продаж, анализ клиентских обращений.
— **Повышение качества данных**: выявление аномалий, очистка и нормализация данных.
— **Улучшение пользовательского опыта**: чат-боты, голосовые помощники, интеллектуальные рекомендации.
— **Оптимизация бизнес-процессов**: прогнозирование спроса, управление запасами, маршрутизация.—
### Перспективные направления
— **Распознавание и обработка документов** (OCR, классификация первичных документов).
— **Анализ естественного языка (NLP)**: автоматическая обработка обращений клиентов, чат-боты, анализ тональности.
— **Компьютерное зрение**: распознавание лиц, объектов, контроль качества на производстве.
— **Прогнозная аналитика и предиктивное моделирование**: прогноз продаж, финансовое планирование.
— **RPA с элементами ИИ**: автоматизация интерфейсных действий с использованием распознавания образов.—
### Что уже сейчас может делать 1С в связке с ИИ?
— Встроенные алгоритмы машинного обучения (деревья решений, регрессии).
— Вызов внешних компонентов и веб-сервисов для сложных задач.
— Интеграция с облачными AI-сервисами (например, Яндекс.Облако для распознавания речи и изображений).
— Использование RPA для автоматизации повторяющихся действий с элементами ИИ.
— Примеры: распознавание первичных документов, интеграция с голосовыми ассистентами (Яндекс.Алиса), классификация данных.—
### Что можно прочитать, изучить, посмотреть?
— Статья «Применение нейронных сетей и генетических алгоритмов в прикладных решениях на платформе 1С» — https://infostart.ru/1c/articles/640325/
Отличное введение в тему нейросетей и их применение с 1С.— Обзор «Необходимый минимум по AI для 1С-ника» — https://infostart.ru/1c/articles/1482928/
Теория, виды ИИ, практические советы по интеграции.— Практические кейсы интеграции 1С с внешними AI-сервисами, например, статья про Яндекс.Алису и 1С — https://infostart.ru/1c/articles/1692505/
— Статья «Чем воспользоваться для распознавания котиков в 1С?» — https://infostart.ru/1c/articles/1422482/
О практическом использовании внешних компонентов и облачных функций.— Изучение REST API и веб-сервисов в 1С (например, https://infostart.ru/1c/articles/1400564/ и https://infostart.ru/1c/articles/1550574/), чтобы понимать, как строить интеграцию.
— Курсы и видео по машинному обучению и нейросетям на Python (TensorFlow, PyTorch) для понимания основ, которые потом можно применять через внешние компоненты.
—
### Итог
1С — это не только ERP и бухгалтерия, но и платформа, способная интегрироваться с современными технологиями ИИ. Использование нейронных сетей и машинного обучения позволяет расширить возможности автоматизации, повысить качество данных и улучшить бизнес-процессы. Для этого применяются внешние компоненты, веб-сервисы и облачные AI-сервисы. Изучение теории ИИ, практических примеров и освоение интеграционных технологий — ключ к успешному применению ИИ в 1С.
—
Рекомендую посмотреть здесь:
— https://infostart.ru/1c/articles/640325/
— https://infostart.ru/1c/articles/1482928/
— https://infostart.ru/1c/articles/1422482/
— https://infostart.ru/1c/articles/1692505/Вот пример вопроса с игрой слов, который получил оценку 10 из 10:
Задача 1 с платформы CodeWars:
Название: «!a == a ?! (! a == a?!)»
Ссылка: https://www.codewars.com/kata/59f9796cffe75f9299000025
Описание:
Требуется пройти только эти тесты:
— `a == false`
— `!a == false`
— `a == !a`Пояснение:
Эти тесты проверяют логику значения переменной `a`. Первый тест проверяет, что `a` равно `false`, второй – что оно не равно `false`, а третий – что `a` равно `!a`, то есть инвертированному значению `a`.Это игра слов и логики с булевыми значениями, где переменная `a` должна удовлетворять одновременно противоречивым условиям, что заставляет задуматься о типах и приведениях в языке программирования.
Рекомендую посмотреть здесь: https://www.codewars.com/kata/59f9796cffe75f9299000025
19 сентября 2025 в 18:00 в ответ на: Почему склад в 1С назван «Собачка» и как это воспринимается пользователями? #33462Оценка вопроса — 8 из 10, интересная игра слов и контекста 1С.
Разбор:
1. Девочка увидела в 1С склад с названием «Собачка». В 1С склад — это объект учета, место хранения товаров или материалов. Название «Собачка» — скорее всего, условное, возможно, шутливое или тестовое.
2. Что она могла захотеть?
— Собачку — как животное, питомца. Но в 1С склад — это не животное, а просто название. Если девочка не знакома с 1С, она может подумать, что «Собачка» — это именно собака.
— Склад — как место хранения. Если девочка — пользователь 1С, она может заинтересоваться самим складом, его содержимым, организацией учета.
— Стать 1С-ником — то есть специалистом по 1С. Это более абстрактное желание, связанное с профессиональным интересом.
3. Аргументация:
— Если девочка — ребенок или человек, не знакомый с 1С, увидев слово «Собачка», скорее всего, она захочет именно собачку — животное, потому что это слово ассоциируется с питомцем.
— Если девочка — пользователь 1С, она поймет, что «Собачка» — это просто название склада, и, возможно, заинтересуется складом, его содержимым, то есть захотит изучить или работать с этим складом.
— Если девочка — начинающий программист или пользователь 1С, увидев такой объект, может заинтересоваться профессией 1С-ника, чтобы создавать и управлять такими объектами.
4. Итог:
Наиболее вероятный и прямой ответ — девочка захотела собачку, потому что слово «Собачка» в сознании человека — это животное, а не склад. Название склада — это просто метка, не вызывающая желания стать 1С-ником или работать со складом, если не учитывать контекст.
Если же рассматривать с точки зрения профессионала, то можно предположить и другие варианты, но в общем случае — девочка захотела собачку.
—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/817239/ (для понимания объектов 1С и их названий)
https://infostart.ru/1c/articles/728423/ (о восприятии 1С-объектов)19 сентября 2025 в 15:15 в ответ на: Почему НДС по счёту 51 не попадает в строку 4121 в ОДДС 1С ERP? #33460В 1С:ERP отчет по ОДДС (Отчет о движении денежных средств) формируется на основании движений по счетам бухгалтерского учета и аналитике, настроенной в системе. Строка 4121 в ОДДС обычно отражает поступления и выплаты по НДС, связанному с расчетами по налогам и сборам.
Причина, почему НДС по счету 51 (расчетный счет) не попадает в строку 4121, связана с тем, что в учете НДС по счету 51 отражаются только денежные операции (платежи), а в строку 4121 попадает НДС, отраженный в налоговом учете и регламентированных операциях, а не просто движение денег по расчетному счету.
Основные причины:
1. **Отражение НДС в ОДДС по строке 4121 связано с налоговыми обязательствами, а не с движением денег по счету 51.**
В строку 4121 попадают суммы НДС, которые отражены в налоговом учете (например, начисленный или предъявленный НДС), а не просто платежи по счету 51.2. **В настройках отчета ОДДС не настроено включение движений по счету 51 с аналитикой по НДС.**
Для попадания сумм НДС по счету 51 в строку 4121 необходимо, чтобы в отчете были правильно настроены источники данных, учитывающие именно налоговые операции, а не просто движения по счету 51.3. **НДС по счету 51 — это движение денежных средств, а в ОДДС по строке 4121 учитываются налоговые обязательства и их погашение, а не просто платежи.**
Платежи по НДС отражаются в других строках отчета, например, в разделе «Движение денежных средств по налогам и сборам» могут быть отдельные строки для уплаты НДС.4. **Возможна некорректная настройка аналитики или классификаторов в учете, из-за чего система не связывает платежи по счету 51 с НДС.**
Рекомендации по решению:
— Проверьте настройки отчета ОДДС, особенно источники данных и правила отбора по счетам и аналитике.
— Убедитесь, что в учете НДС правильно отражены налоговые обязательства и их погашение.
— Проверьте, что платежи по НДС по счету 51 связаны с соответствующими налоговыми операциями (например, через документ «Оплата налогов и сборов»).
— Если необходимо, настройте дополнительную аналитику или правила формирования отчета, чтобы платежи по НДС попадали в нужную строку.Если нужна конкретика по настройке отчета или коду, могу помочь с примером обработки или настройки.
Рекомендую посмотреть здесь:
https://infostart.ru/public/1042547/ (по учету НДС и отчетам)
https://infostart.ru/1c/articles/1269171/ (по учету НДС в ERP)Для программного создания документа «Операция» в 1С (например, «ОперацияБух») используется следующий алгоритм:
1C // Создаем новый документ ДокОперация = Документы.ОперацияБух.СоздатьДокумент(); // Заполняем основные реквизиты ДокОперация.Дата = ТекущаяДата(); // или нужная дата ДокОперация.Организация = Справочники.Организации.НайтиПоНаименованию("Название организации"); ДокОперация.Ответственный = Справочники.Пользователи.ТекущийПользователь(); ДокОперация.Содержание = "Описание операции"; ДокОперация.Комментарий = "Комментарий к операции"; // Записываем документ ДокОперация.Записать(); // Получаем ссылку на созданный документ ДокОперацияСсылка = ДокОперация.Ссылка; // Создаем набор записей регистра бухгалтерии (пример для регистра "Хозрасчетный") РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка; // Добавляем записи в регистр РегЗапись = РегХозрасчетный.Добавить(); РегЗапись.Период = ДокОперация.Дата; РегЗапись.Регистратор = ДокОперацияСсылка; РегЗапись.Организация = ДокОперация.Организация; РегЗапись.Содержание = ДокОперация.Содержание; РегЗапись.СчетДт = "10.01"; // пример счета дебета РегЗапись.СчетКт = "60.01"; // пример счета кредита РегЗапись.Сумма = 1000; // Устанавливаем субконто, если необходимо БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "Контрагенты", Справочники.Контрагенты.НайтиПоНаименованию("Поставщик")); БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, "Подразделения", Справочники.Подразделения.НайтиПоНаименованию("Основное подразделение")); // Записываем набор записей регистра РегХозрасчетный.Записать();Обратите внимание:
— Названия документов и регистров могут отличаться в вашей конфигурации.
— Для заполнения субконто используйте функцию `БухгалтерскийУчет.УстановитьСубконто`.
— Важно корректно указать счета и субконто согласно вашей учетной политике.
— Если операция сложная, рекомендуется использовать типовые операции или шаблоны операций.Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/813.html
https://infostart.ru/1c/articles/137072/19 сентября 2025 в 9:15 в ответ на: Как устранить ошибку «Превышен максимальный расход памяти сервера»? #33455Victor, сообщение «Превышен максимальный расход памяти сервера за один вызов» означает, что во время выполнения одного вызова к серверу 1С объем оперативной памяти, выделенной этому вызову, превысил установленный лимит — параметр «Безопасный расход памяти за один вызов».
Этот параметр регулирует максимально допустимый объем памяти, который может быть использован одним вызовом сервера. Если во время выполнения вызова объем выделенной памяти превысил этот лимит, вызов прерывается с исключением, и в технологический журнал записывается событие EXCP с деталями ошибки.
Причины возникновения могут быть следующие:
— Сложные или ресурсоемкие операции в коде (например, большие выборки, сложные вычисления, рекурсия).
— Неправильные настройки параметров памяти кластера серверов 1С.
— Ошибки в конфигурации или программном коде, приводящие к чрезмерному потреблению памяти.Для решения проблемы рекомендуется:
1. Проверить и при необходимости увеличить параметр «Безопасный расход памяти за один вызов» в настройках кластера серверов, если это позволяет объем оперативной памяти сервера.
2. Оптимизировать код и запросы, чтобы снизить потребление памяти за один вызов.
3. Контролировать параметры «Временно допустимый объем памяти процессов» и «Критический объем памяти процессов» для предотвращения аварийных завершений.
4. Анализировать технологический журнал для выявления конкретных вызовов, вызывающих превышение.Рекомендую посмотреть здесь: https://its.1c.ru/db/v8std#content:456:hdoc
Если нужна помощь с конкретными настройками или анализом кода — обращайся.
18 сентября 2025 в 8:45 в ответ на: Как сохранить и сравнить результаты функций в переменных в 1С? #33453В 1С сохранить результат функции в переменную очень просто — достаточно вызвать функцию и присвоить её результат переменной:
1C Результат1 = ИмяМодуля.ИмяФункции1(Параметры1); Результат2 = ИмяМодуля.ИмяФункции2(Параметры2); // Сравнение результатов Если Результат1 = Результат2 Тогда Сообщить("Результаты совпадают"); Иначе Сообщить("Результаты различаются"); КонецЕсли;**Объяснение:**
— `Результат1` и `Результат2` — переменные, в которые сохраняются возвращаемые значения функций.
— После этого можно сравнить эти переменные любым удобным способом (например, оператором `=` для простых типов или специальными методами для сложных).—
### Что такое кеширование в переменную?
**Кеширование** — это приём, когда результат вычисления функции сохраняется в переменную (или структуру, объект) для повторного использования без повторного выполнения самой функции (например, без повторного запроса к базе данных или сложных вычислений).
Пример кеширования:
1C Если Не ЗначениеЗаполнено(КешРезультата) Тогда КешРезультата = ИмяМодуля.ИмяФункции(Параметры); КонецЕсли; // Используем КешРезультата вместо повторного вызова функцииТакой подход позволяет:
— Уменьшить нагрузку на базу данных и сервер.
— Ускорить работу программы, особенно если функция дорогая по ресурсам.
— Избежать повторных вычислений одних и тех же данных.—
### Кратко:
— **Сохранить результат функции в переменную:** просто присвоить вызов функции переменной.
— **Сравнить результаты:** сравнить переменные.
— **Кеширование:** сохранить результат функции в переменную при первом вызове и использовать эту переменную при последующих вызовах, чтобы не выполнять функцию повторно.—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/668213/ (про кеширование)
https://infostart.ru/1c/articles/100835/ (про использование переменных и структур)17 сентября 2025 в 17:00 в ответ на: Как в 1С найти повторяющиеся штрихкоды в регистре сведений? #334518
Вот пример процедуры на встроенном языке 1С, которая формирует табличный результат с повторяющимися штрихкодами из регистра сведений «штрихкодыНоменклатуры»:
bsl Процедура ПолучитьПовторяющиесяШтрихкоды() Экспорт // Создаем запрос Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод, | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура |ИЗ | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры |ГДЕ | ШтрихкодыНоменклатуры.Штрихкод В | (ВЫБРАТЬ | Штрихкод | ИЗ | РегистрСведений.ШтрихкодыНоменклатуры | СГРУППИРОВАТЬ ПО | Штрихкод | ИМЕЮЩИЕ КОЛИЧЕСТВО(Штрихкод) > 1) |УПОРЯДОЧИТЬ ПО | Штрихкод, Номенклатура"; Результат = Запрос.Выполнить(); ТаблицаРезультатов = Результат.Выгрузить(); Возврат ТаблицаРезультатов; КонецПроцедурыОбъяснение:
— В подзапросе выбираются штрихкоды, которые встречаются более одного раза (повторяющиеся).
— В основном запросе выбираются записи с этими штрихкодами, чтобы получить все номенклатуры, у которых одинаковый штрихкод.
— Результат — табличная часть с колонками «Штрихкод» и «Номенклатура».Вы можете вызвать эту процедуру и получить таблицу значений с повторяющимися штрихкодами.
Рекомендую посмотреть здесь: https://infostart.ru/public/2184035/
17 сентября 2025 в 16:30 в ответ на: Как установить значение параметра области в ТабличномДокументе по имени? #334499
В 1С для установки значения параметра области табличного документа по имени, заданному в переменной, нужно получить область по имени и присвоить значение параметру через свойство Параметры.
Пример кода:
1C // Имя параметра области в переменной ИмяПараметра = "МоеИмяПараметра"; // Получаем область по имени Область = ТабличныйДокумент.Область(ИмяПараметра); // Устанавливаем значение параметра области Область.Параметры[ИмяПараметра] = НовоеЗначение;
Если параметр области — это параметр макета, то можно также работать с параметрами области через свойство Параметры области:
1C Область = ТабличныйДокумент.Область(ИмяПараметра); Область.Параметры[ИмяПараметра] = НовоеЗначение;
Если нужно установить параметр не в области, а в параметрах макета (например, для шаблонов), то:
1C Макет = ПолучитьМакет("ИмяМакета"); Область = Макет.ПолучитьОбласть(ИмяПараметра); Область.Параметры[ИмяПараметра] = НовоеЗначение;Важно: имя параметра должно совпадать с именем, заданным в макете (в свойствах ячейки или области).
—
Если же нужно изменить параметр, который передается в табличный документ через структуру параметров, то можно сделать так:
1C ТабличныйДокумент.Параметры[ИмяПараметра] = НовоеЗначение;
—
Таким образом, ключевой момент — использовать переменную с именем параметра в квадратных скобках для доступа к параметру.
Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/1277.html
https://helpf.pro/faq/view/1430.html17 сентября 2025 в 16:00 в ответ на: Можно ли вводить данные вручную в отчёте 1С с пересчётом данных? #33447Да, в 1С:Предприятии можно реализовать ввод данных вручную прямо в форме отчёта с автоматическим пересчётом связанных данных. Для этого обычно применяются следующие подходы:
1. **Использование управляемых форм с табличным элементом, поддерживающим редактирование**
В отчёте создаётся табличный элемент (ТабличноеПоле или ТабличныйДокумент), в котором разрешается редактирование ячеек. Пользователь может вводить или изменять данные прямо в отчёте.2. **Обработка события изменения данных**
Для пересчёта связанных данных реализуют обработчики событий изменения значения ячейки (например, событие `ПриИзменении` или `ПриИзмененииЯчейки`), в которых выполняется перерасчёт зависимых значений и обновление данных в отчёте.3. **Хранение данных в промежуточных структурах**
Для удобства и производительности данные отчёта и введённые пользователем значения хранятся в структуре (например, во временной таблице или массиве), что позволяет быстро пересчитывать и обновлять связанные показатели.4. **Обновление отображения отчёта**
После пересчёта связанных данных обновляется содержимое табличного поля, чтобы пользователь видел актуальные значения.5. **Сохранение введённых данных**
При необходимости введённые пользователем данные можно сохранить в базе (например, в регистре сведений, в документе или в пользовательских настройках), чтобы они не терялись при закрытии отчёта.—
### Пример упрощённого кода для управляемой формы отчёта с редактируемым табличным полем и пересчётом
1C Процедура ПриИзмененииЯчейки(Элемент, Строка, Колонка) // Получаем новое значение НовоеЗначение = Элемент.Значение[Строка][Колонка]; // Обновляем данные в структуре отчёта МассивДанных[Строка][Колонка] = НовоеЗначение; // Пересчитываем связанные данные (пример) // Допустим, колонка 3 = колонка 1 * колонка 2 МассивДанных[Строка][3] = МассивДанных[Строка][1] * МассивДанных[Строка][2]; // Обновляем отображение Элемент.Значение[Строка][3] = МассивДанных[Строка][3]; КонецПроцедуры—
### Важные моменты
— В управляемом интерфейсе для полноценного редактирования и пересчёта лучше использовать **ТабличноеПоле** с включённым редактированием.
— Для сложных отчётов с большим объёмом данных может потребоваться оптимизация пересчётов.
— Если отчёт построен на обычном табличном документе (ТабличныйДокумент), то прямое редактирование и динамический пересчёт реализовать сложнее, но возможно через дополнительные формы и обработчики.—
Рекомендую посмотреть здесь:
https://its.1c.ru/db/metod8dev#content:456:hdoc
https://its.1c.ru/db/v8std#content:456:hdoc
(официальная документация по управляемым формам и табличным полям)—
Если нужно, могу помочь с конкретным примером кода под вашу задачу.
Ошибка проверки данных XDTO с сообщением о несоответствии фасету MaxLength = ‘255’ возникает потому, что в одном из полей XML-документа, который передается для подписи, содержится строка, длина которой превышает максимально допустимое ограничение в 255 символов.
В вашем примере значение поля:
'ДОГОВОР ПОСТАВКИ № 2811/4-22 (КАНЦ) от 28.11.2022; Проект: Собственные нужды; Субподрядчик: СШС; Заявки в снабжение 00-000044509 от 12.08.2025; Комментарий: 44509 Общая заявка канц. товары АВГУСТ 2025 ОК Надежный внесенна по согласованой (в занесенной кол'
имеет длину, превышающую 255 символов, что не соответствует ограничению фасета (ограничения по длине строки), установленному в XDTO-схеме.
Причины возникновения ошибки:
1. В конфигурации 1С или в используемом XDTO-описании (XML-схеме) для данного поля установлен фасет MaxLength=255, то есть максимальная длина строки ограничена 255 символами.
2. При формировании данных для подписи в это поле записывается строка, превышающая это ограничение.
3. При проверке данных XDTO происходит валидация по фасетам, и если длина строки превышает MaxLength, возникает ошибка.
Как исправить:
— Укоротить значение поля, чтобы оно не превышало 255 символов.
— Если поле действительно должно содержать более длинный текст, необходимо изменить XDTO-схему, увеличив значение MaxLength для данного поля (если это возможно и не противоречит требованиям).
— Проверить логику формирования данных, возможно, стоит разбить длинный текст на несколько полей или сократить комментарии.
— В 1С можно добавить проверку длины перед формированием XML, чтобы не допускать превышения фасетов.
Итог: ошибка возникает из-за превышения длины строки в поле, ограниченном фасетом MaxLength=255 в XDTO-схеме, и для решения нужно привести длину значения в соответствие с этим ограничением.
Рекомендую посмотреть здесь: https://infostart.ru/public/412202/ (пример с ограничениями по длине в регистрах и индексах, аналогично работает и в XDTO)
16 сентября 2025 в 21:00 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа в 1С? #33442// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
» +
«ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
» +
«ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ»;Запрос.УстановитьПараметр(«Документ», ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // «Товары» — имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(«Количество из регистра совпадает с количеством из табличной части.»);
Иначе
Сообщить(«Внимание! Количество из регистра (» + Формат(КоличествоИзРегистра, «ЧГ=10; ЧДЦ=3») +
«) не совпадает с количеством из табличной части (» + Формат(СуммаКоличествоТабличнойЧасти, «ЧГ=10; ЧДЦ=3») + «).»);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//———————————————
// Важно:
// — Замените «РегистрСведений.КоличествоТоваров» на реальное имя регистра сведений в вашей конфигурации.
// — Замените «СсылкаДокумента» на реальное имя реквизита в регистре, который хранит ссылку на документ.
// — Замените «Товары» на имя вашей табличной части.
// — Замените «Количество» на имя поля количества в табличной части и регистре.
// — Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:47 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа в 1С? #33440// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
» +
«ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
» +
«ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ»;Запрос.УстановитьПараметр(«Документ», ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // «Товары» — имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(«Количество из регистра совпадает с количеством из табличной части.»);
Иначе
Сообщить(«Внимание! Количество из регистра (» + Формат(КоличествоИзРегистра, «ЧГ=10; ЧДЦ=3») +
«) не совпадает с количеством из табличной части (» + Формат(СуммаКоличествоТабличнойЧасти, «ЧГ=10; ЧДЦ=3») + «).»);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//———————————————
// Важно:
// — Замените «РегистрСведений.КоличествоТоваров» на реальное имя регистра сведений в вашей конфигурации.
// — Замените «СсылкаДокумента» на реальное имя реквизита в регистре, который хранит ссылку на документ.
// — Замените «Товары» на имя вашей табличной части.
// — Замените «Количество» на имя поля количества в табличной части и регистре.
// — Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
-
АвторСообщения