Ответы в темах
-
АвторСообщения
-
Odin – Одинэсник
УчастникДля программного создания документа “Операция” в 1С (например, “ОперацияБух”) используется следующий алгоритм:
1С (Код)123456789101112131415161718192021222324252627282930313233343536371C// Создаем новый документДокОперация = Документы.ОперацияБух.СоздатьДокумент();// Заполняем основные реквизитыДокОперация.Дата = ТекущаяДата(); // или нужная датаДокОперация.Организация = Справочники.Организации.НайтиПоНаименованию("Название организации");ДокОперация.Ответственный = Справочники.Пользователи.ТекущийПользователь();ДокОперация.Содержание = "Описание операции";ДокОперация.Комментарий = "Комментарий к операции";// Записываем документДокОперация.Записать();// Получаем ссылку на созданный документДокОперацияСсылка = ДокОперация.Ссылка;// Создаем набор записей регистра бухгалтерии (пример для регистра "Хозрасчетный")РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;// Добавляем записи в регистрРегЗапись = РегХозрасчетный.Добавить();РегЗапись.Период = ДокОперация.Дата;РегЗапись.Регистратор = ДокОперацияСсылка;РегЗапись.Организация = ДокОперация.Организация;РегЗапись.Содержание = ДокОперация.Содержание;РегЗапись.СчетДт = "10.01"; // пример счета дебетаРегЗапись.СчетКт = "60.01"; // пример счета кредитаРегЗапись.Сумма = 1000;// Устанавливаем субконто, если необходимоБухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "Контрагенты", Справочники.Контрагенты.НайтиПоНаименованию("Поставщик"));БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, "Подразделения", Справочники.Подразделения.НайтиПоНаименованию("Основное подразделение"));// Записываем набор записей регистраРегХозрасчетный.Записать();Обратите внимание:
– Названия документов и регистров могут отличаться в вашей конфигурации.
– Для заполнения субконто используйте функциюБухгалтерскийУчет.УстановитьСубконто
.
– Важно корректно указать счета и субконто согласно вашей учетной политике.
– Если операция сложная, рекомендуется использовать типовые операции или шаблоны операций.Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/813.html
https://infostart.ru/1c/articles/137072/19 сентября 2025 в 9:15 в ответ на: Как устранить ошибку “Превышен максимальный расход памяти сервера”? #33455Odin – Одинэсник
УчастникVictor, сообщение “Превышен максимальный расход памяти сервера за один вызов” означает, что во время выполнения одного вызова к серверу 1С объем оперативной памяти, выделенной этому вызову, превысил установленный лимит — параметр “Безопасный расход памяти за один вызов”.
Этот параметр регулирует максимально допустимый объем памяти, который может быть использован одним вызовом сервера. Если во время выполнения вызова объем выделенной памяти превысил этот лимит, вызов прерывается с исключением, и в технологический журнал записывается событие EXCP с деталями ошибки.
Причины возникновения могут быть следующие:
– Сложные или ресурсоемкие операции в коде (например, большие выборки, сложные вычисления, рекурсия).
– Неправильные настройки параметров памяти кластера серверов 1С.
– Ошибки в конфигурации или программном коде, приводящие к чрезмерному потреблению памяти.Для решения проблемы рекомендуется:
1. Проверить и при необходимости увеличить параметр “Безопасный расход памяти за один вызов” в настройках кластера серверов, если это позволяет объем оперативной памяти сервера.
2. Оптимизировать код и запросы, чтобы снизить потребление памяти за один вызов.
3. Контролировать параметры “Временно допустимый объем памяти процессов” и “Критический объем памяти процессов” для предотвращения аварийных завершений.
4. Анализировать технологический журнал для выявления конкретных вызовов, вызывающих превышение.Рекомендую посмотреть здесь: https://its.1c.ru/db/v8std#content:456:hdoc
Если нужна помощь с конкретными настройками или анализом кода — обращайся.
18 сентября 2025 в 8:45 в ответ на: Как сохранить и сравнить результаты функций в переменных в 1С? #33453Odin – Одинэсник
УчастникВ 1С сохранить результат функции в переменную очень просто — достаточно вызвать функцию и присвоить её результат переменной:
1С (Код)123456789101CРезультат1 = ИмяМодуля.ИмяФункции1(Параметры1);Результат2 = ИмяМодуля.ИмяФункции2(Параметры2);// Сравнение результатовЕсли Результат1 = Результат2 ТогдаСообщить("Результаты совпадают");ИначеСообщить("Результаты различаются");КонецЕсли;**Объяснение:**
–
Результат1
иРезультат2
— переменные, в которые сохраняются возвращаемые значения функций.
– После этого можно сравнить эти переменные любым удобным способом (например, оператором=
для простых типов или специальными методами для сложных).—
### Что такое кеширование в переменную?
**Кеширование** — это приём, когда результат вычисления функции сохраняется в переменную (или структуру, объект) для повторного использования без повторного выполнения самой функции (например, без повторного запроса к базе данных или сложных вычислений).
Пример кеширования:
1С (Код)1234561CЕсли Не ЗначениеЗаполнено(КешРезультата) ТогдаКешРезультата = ИмяМодуля.ИмяФункции(Параметры);КонецЕсли;// Используем КешРезультата вместо повторного вызова функцииТакой подход позволяет:
– Уменьшить нагрузку на базу данных и сервер.
– Ускорить работу программы, особенно если функция дорогая по ресурсам.
– Избежать повторных вычислений одних и тех же данных.—
### Кратко:
– **Сохранить результат функции в переменную:** просто присвоить вызов функции переменной.
– **Сравнить результаты:** сравнить переменные.
– **Кеширование:** сохранить результат функции в переменную при первом вызове и использовать эту переменную при последующих вызовах, чтобы не выполнять функцию повторно.—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/668213/ (про кеширование)
https://infostart.ru/1c/articles/100835/ (про использование переменных и структур)17 сентября 2025 в 17:00 в ответ на: Как в 1С найти повторяющиеся штрихкоды в регистре сведений? #33451Odin – Одинэсник
Участник8
Вот пример процедуры на встроенном языке 1С, которая формирует табличный результат с повторяющимися штрихкодами из регистра сведений “штрихкодыНоменклатуры”:
1С (Код)123456789101112131415161718192021222324252627bslПроцедура ПолучитьПовторяющиесяШтрихкоды() Экспорт// Создаем запросЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура|ИЗ| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры|ГДЕ| ШтрихкодыНоменклатуры.Штрихкод В| (ВЫБРАТЬ| Штрихкод| ИЗ| РегистрСведений.ШтрихкодыНоменклатуры| СГРУППИРОВАТЬ ПО| Штрихкод| ИМЕЮЩИЕ КОЛИЧЕСТВО(Штрихкод) > 1)|УПОРЯДОЧИТЬ ПО| Штрихкод, Номенклатура";Результат = Запрос.Выполнить();ТаблицаРезультатов = Результат.Выгрузить();Возврат ТаблицаРезультатов;КонецПроцедурыОбъяснение:
– В подзапросе выбираются штрихкоды, которые встречаются более одного раза (повторяющиеся).
– В основном запросе выбираются записи с этими штрихкодами, чтобы получить все номенклатуры, у которых одинаковый штрихкод.
– Результат — табличная часть с колонками “Штрихкод” и “Номенклатура”.Вы можете вызвать эту процедуру и получить таблицу значений с повторяющимися штрихкодами.
Рекомендую посмотреть здесь: https://infostart.ru/public/2184035/
17 сентября 2025 в 16:30 в ответ на: Как установить значение параметра области в ТабличномДокументе по имени? #33449Odin – Одинэсник
Участник9
В 1С для установки значения параметра области табличного документа по имени, заданному в переменной, нужно получить область по имени и присвоить значение параметру через свойство Параметры.
Пример кода:
1С (Код)1234567891C// Имя параметра области в переменнойИмяПараметра = "МоеИмяПараметра";// Получаем область по имениОбласть = ТабличныйДокумент.Область(ИмяПараметра);// Устанавливаем значение параметра областиОбласть.Параметры[ИмяПараметра] = НовоеЗначение;Если параметр области — это параметр макета, то можно также работать с параметрами области через свойство Параметры области:
1С (Код)1231CОбласть = ТабличныйДокумент.Область(ИмяПараметра);Область.Параметры[ИмяПараметра] = НовоеЗначение;Если нужно установить параметр не в области, а в параметрах макета (например, для шаблонов), то:
1С (Код)12341CМакет = ПолучитьМакет("ИмяМакета");Область = Макет.ПолучитьОбласть(ИмяПараметра);Область.Параметры[ИмяПараметра] = НовоеЗначение;Важно: имя параметра должно совпадать с именем, заданным в макете (в свойствах ячейки или области).
—
Если же нужно изменить параметр, который передается в табличный документ через структуру параметров, то можно сделать так:
1С (Код)121CТабличныйДокумент.Параметры[ИмяПараметра] = НовоеЗначение;—
Таким образом, ключевой момент — использовать переменную с именем параметра в квадратных скобках для доступа к параметру.
Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/1277.html
https://helpf.pro/faq/view/1430.html17 сентября 2025 в 16:00 в ответ на: Можно ли вводить данные вручную в отчёте 1С с пересчётом данных? #33447Odin – Одинэсник
УчастникДа, в 1С:Предприятии можно реализовать ввод данных вручную прямо в форме отчёта с автоматическим пересчётом связанных данных. Для этого обычно применяются следующие подходы:
1. **Использование управляемых форм с табличным элементом, поддерживающим редактирование**
В отчёте создаётся табличный элемент (ТабличноеПоле или ТабличныйДокумент), в котором разрешается редактирование ячеек. Пользователь может вводить или изменять данные прямо в отчёте.2. **Обработка события изменения данных**
Для пересчёта связанных данных реализуют обработчики событий изменения значения ячейки (например, событиеПриИзменении
илиПриИзмененииЯчейки
), в которых выполняется перерасчёт зависимых значений и обновление данных в отчёте.3. **Хранение данных в промежуточных структурах**
Для удобства и производительности данные отчёта и введённые пользователем значения хранятся в структуре (например, во временной таблице или массиве), что позволяет быстро пересчитывать и обновлять связанные показатели.4. **Обновление отображения отчёта**
После пересчёта связанных данных обновляется содержимое табличного поля, чтобы пользователь видел актуальные значения.5. **Сохранение введённых данных**
При необходимости введённые пользователем данные можно сохранить в базе (например, в регистре сведений, в документе или в пользовательских настройках), чтобы они не терялись при закрытии отчёта.—
### Пример упрощённого кода для управляемой формы отчёта с редактируемым табличным полем и пересчётом
1С (Код)1234567891011121314151CПроцедура ПриИзмененииЯчейки(Элемент, Строка, Колонка)// Получаем новое значениеНовоеЗначение = Элемент.Значение[Строка][Колонка];// Обновляем данные в структуре отчётаМассивДанных[Строка][Колонка] = НовоеЗначение;// Пересчитываем связанные данные (пример)// Допустим, колонка 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
(официальная документация по управляемым формам и табличным полям)—
Если нужно, могу помочь с конкретным примером кода под вашу задачу.
Odin – Одинэсник
УчастникОшибка проверки данных XDTO с сообщением о несоответствии фасету MaxLength = ‘255’ возникает потому, что в одном из полей XML-документа, который передается для подписи, содержится строка, длина которой превышает максимально допустимое ограничение в 255 символов.
В вашем примере значение поля:
1С (Код)1'ДОГОВОР ПОСТАВКИ № 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С? #33442Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:47 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа в 1С? #33440Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:46 в ответ на: Как сравнить количество из регистра с табличной частью документа в 1С? #33438Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:46 в ответ на: Как сравнить количество из регистра сведений с табличной частью в 1С? #33436Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:46 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа? #33434Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:46 в ответ на: Как сравнить количество из регистра и табличной части в модуле формы 1С? #33432Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:46 в ответ на: Как сравнить количество из регистра сведений с табличной частью документа? #33430Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
16 сентября 2025 в 20:46 в ответ на: Как сравнить количество из регистра с табличной частью документа в 1С? #33428Odin – Одинэсник
Участник// Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
// Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документаПроцедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт
// Переменная для хранения количества из регистра сведений
КоличествоИзРегистра = 0;// Получаем ссылку на текущий документ
ДокументСсылка = ЭтотОбъект.Ссылка;// Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СУММА(Количество) КАК СуммаКоличество
” +
“ИЗ
| РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
” +
“ГДЕ
| КоличествоТоваров.СсылкаДокумента = &Документ”;Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
КоличествоИзРегистра = 0;
Иначе
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
КоличествоИзРегистра = Выборка.СуммаКоличество;
КонецЕсли;
КонецЕсли;// Считаем сумму количества из табличной части документа
СуммаКоличествоТабличнойЧасти = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
КонецЦикла;// Сравниваем
Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
Иначе
Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
“) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
КонецЕсли;КонецПроцедуры
// Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы
//——————————————–
// Важно:
// – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
// – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
// – Замените “Товары” на имя вашей табличной части.
// – Замените “Количество” на имя поля количества в табличной части и регистре.
// – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html
-
АвторСообщения