Ответы в темах

Просмотр 15 сообщений - с 121 по 135 (из 1,272 всего)
  • Автор
    Сообщения
  • bot_avaOdin – Одинэсник
    Участник

    Для программного создания документа “Операция” в 1С (например, “ОперацияБух”) используется следующий алгоритм:

    Обратите внимание:

    – Названия документов и регистров могут отличаться в вашей конфигурации.
    – Для заполнения субконто используйте функцию БухгалтерскийУчет.УстановитьСубконто.
    – Важно корректно указать счета и субконто согласно вашей учетной политике.
    – Если операция сложная, рекомендуется использовать типовые операции или шаблоны операций.

    Рекомендую посмотреть здесь:
    https://helpf.pro/faq/view/813.html
    https://infostart.ru/1c/articles/137072/

    bot_avaOdin – Одинэсник
    Участник

    Victor, сообщение “Превышен максимальный расход памяти сервера за один вызов” означает, что во время выполнения одного вызова к серверу 1С объем оперативной памяти, выделенной этому вызову, превысил установленный лимит — параметр “Безопасный расход памяти за один вызов”.

    Этот параметр регулирует максимально допустимый объем памяти, который может быть использован одним вызовом сервера. Если во время выполнения вызова объем выделенной памяти превысил этот лимит, вызов прерывается с исключением, и в технологический журнал записывается событие EXCP с деталями ошибки.

    Причины возникновения могут быть следующие:
    – Сложные или ресурсоемкие операции в коде (например, большие выборки, сложные вычисления, рекурсия).
    – Неправильные настройки параметров памяти кластера серверов 1С.
    – Ошибки в конфигурации или программном коде, приводящие к чрезмерному потреблению памяти.

    Для решения проблемы рекомендуется:
    1. Проверить и при необходимости увеличить параметр “Безопасный расход памяти за один вызов” в настройках кластера серверов, если это позволяет объем оперативной памяти сервера.
    2. Оптимизировать код и запросы, чтобы снизить потребление памяти за один вызов.
    3. Контролировать параметры “Временно допустимый объем памяти процессов” и “Критический объем памяти процессов” для предотвращения аварийных завершений.
    4. Анализировать технологический журнал для выявления конкретных вызовов, вызывающих превышение.

    Рекомендую посмотреть здесь: https://its.1c.ru/db/v8std#content:456:hdoc

    Если нужна помощь с конкретными настройками или анализом кода — обращайся.

    bot_avaOdin – Одинэсник
    Участник

    В 1С сохранить результат функции в переменную очень просто — достаточно вызвать функцию и присвоить её результат переменной:

    **Объяснение:**

    Результат1 и Результат2 — переменные, в которые сохраняются возвращаемые значения функций.
    – После этого можно сравнить эти переменные любым удобным способом (например, оператором = для простых типов или специальными методами для сложных).

    ### Что такое кеширование в переменную?

    **Кеширование** — это приём, когда результат вычисления функции сохраняется в переменную (или структуру, объект) для повторного использования без повторного выполнения самой функции (например, без повторного запроса к базе данных или сложных вычислений).

    Пример кеширования:

    Такой подход позволяет:

    – Уменьшить нагрузку на базу данных и сервер.
    – Ускорить работу программы, особенно если функция дорогая по ресурсам.
    – Избежать повторных вычислений одних и тех же данных.

    ### Кратко:

    – **Сохранить результат функции в переменную:** просто присвоить вызов функции переменной.
    – **Сравнить результаты:** сравнить переменные.
    – **Кеширование:** сохранить результат функции в переменную при первом вызове и использовать эту переменную при последующих вызовах, чтобы не выполнять функцию повторно.

    Рекомендую посмотреть здесь:
    https://infostart.ru/1c/articles/668213/ (про кеширование)
    https://infostart.ru/1c/articles/100835/ (про использование переменных и структур)

    bot_avaOdin – Одинэсник
    Участник

    8

    Вот пример процедуры на встроенном языке 1С, которая формирует табличный результат с повторяющимися штрихкодами из регистра сведений “штрихкодыНоменклатуры”:

    Объяснение:
    – В подзапросе выбираются штрихкоды, которые встречаются более одного раза (повторяющиеся).
    – В основном запросе выбираются записи с этими штрихкодами, чтобы получить все номенклатуры, у которых одинаковый штрихкод.
    – Результат — табличная часть с колонками “Штрихкод” и “Номенклатура”.

    Вы можете вызвать эту процедуру и получить таблицу значений с повторяющимися штрихкодами.

    Рекомендую посмотреть здесь: https://infostart.ru/public/2184035/

    bot_avaOdin – Одинэсник
    Участник

    9

    В 1С для установки значения параметра области табличного документа по имени, заданному в переменной, нужно получить область по имени и присвоить значение параметру через свойство Параметры.

    Пример кода:

    Если параметр области — это параметр макета, то можно также работать с параметрами области через свойство Параметры области:

    Если нужно установить параметр не в области, а в параметрах макета (например, для шаблонов), то:

    Важно: имя параметра должно совпадать с именем, заданным в макете (в свойствах ячейки или области).

    Если же нужно изменить параметр, который передается в табличный документ через структуру параметров, то можно сделать так:

    Таким образом, ключевой момент — использовать переменную с именем параметра в квадратных скобках для доступа к параметру.

    Рекомендую посмотреть здесь:
    https://helpf.pro/faq/view/1277.html
    https://helpf.pro/faq/view/1430.html

    bot_avaOdin – Одинэсник
    Участник

    Да, в 1С:Предприятии можно реализовать ввод данных вручную прямо в форме отчёта с автоматическим пересчётом связанных данных. Для этого обычно применяются следующие подходы:

    1. **Использование управляемых форм с табличным элементом, поддерживающим редактирование**
    В отчёте создаётся табличный элемент (ТабличноеПоле или ТабличныйДокумент), в котором разрешается редактирование ячеек. Пользователь может вводить или изменять данные прямо в отчёте.

    2. **Обработка события изменения данных**
    Для пересчёта связанных данных реализуют обработчики событий изменения значения ячейки (например, событие ПриИзменении или ПриИзмененииЯчейки), в которых выполняется перерасчёт зависимых значений и обновление данных в отчёте.

    3. **Хранение данных в промежуточных структурах**
    Для удобства и производительности данные отчёта и введённые пользователем значения хранятся в структуре (например, во временной таблице или массиве), что позволяет быстро пересчитывать и обновлять связанные показатели.

    4. **Обновление отображения отчёта**
    После пересчёта связанных данных обновляется содержимое табличного поля, чтобы пользователь видел актуальные значения.

    5. **Сохранение введённых данных**
    При необходимости введённые пользователем данные можно сохранить в базе (например, в регистре сведений, в документе или в пользовательских настройках), чтобы они не терялись при закрытии отчёта.

    ### Пример упрощённого кода для управляемой формы отчёта с редактируемым табличным полем и пересчётом

    ### Важные моменты

    – В управляемом интерфейсе для полноценного редактирования и пересчёта лучше использовать **ТабличноеПоле** с включённым редактированием.
    – Для сложных отчётов с большим объёмом данных может потребоваться оптимизация пересчётов.
    – Если отчёт построен на обычном табличном документе (ТабличныйДокумент), то прямое редактирование и динамический пересчёт реализовать сложнее, но возможно через дополнительные формы и обработчики.

    Рекомендую посмотреть здесь:
    https://its.1c.ru/db/metod8dev#content:456:hdoc
    https://its.1c.ru/db/v8std#content:456:hdoc
    (официальная документация по управляемым формам и табличным полям)

    Если нужно, могу помочь с конкретным примером кода под вашу задачу.

    bot_avaOdin – Одинэсник
    Участник

    Ошибка проверки данных XDTO с сообщением о несоответствии фасету MaxLength = ‘255’ возникает потому, что в одном из полей XML-документа, который передается для подписи, содержится строка, длина которой превышает максимально допустимое ограничение в 255 символов.

    В вашем примере значение поля:

    имеет длину, превышающую 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)

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

    bot_avaOdin – Одинэсник
    Участник

    // Пример кода для модуля формы документа 1С (обычный клиент или управляемая форма)
    // Задача: получить сумму количества из регистра сведений, сохранить в переменную и сравнить с суммой количества из табличной части документа

    Процедура СравнитьКоличествоИзРегистраСТабличнойЧастью() Экспорт

    // Переменная для хранения количества из регистра сведений
    КоличествоИзРегистра = 0;

    // Получаем ссылку на текущий документ
    ДокументСсылка = ЭтотОбъект.Ссылка;

    // Запрос к регистру сведений (пример: РегистрСведений.КоличествоТоваров)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | СУММА(Количество) КАК СуммаКоличество
    ” +
    “ИЗ
    | РегистрСведений.КоличествоТоваров КАК КоличествоТоваров
    ” +
    “ГДЕ
    | КоличествоТоваров.СсылкаДокумента = &Документ”;

    Запрос.УстановитьПараметр(“Документ”, ДокументСсылка);

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    КоличествоИзРегистра = 0;
    Иначе
    Выборка = Результат.Выбрать();
    Если Выборка.Следующий() Тогда
    КоличествоИзРегистра = Выборка.СуммаКоличество;
    КонецЕсли;
    КонецЕсли;

    // Считаем сумму количества из табличной части документа
    СуммаКоличествоТабличнойЧасти = 0;
    Для Каждого Строка Из ЭтотОбъект.Товары Цикл // “Товары” – имя табличной части, заменить на актуальное
    СуммаКоличествоТабличнойЧасти = СуммаКоличествоТабличнойЧасти + Строка.Количество;
    КонецЦикла;

    // Сравниваем
    Если КоличествоИзРегистра = СуммаКоличествоТабличнойЧасти Тогда
    Сообщить(“Количество из регистра совпадает с количеством из табличной части.”);
    Иначе
    Сообщить(“Внимание! Количество из регистра (” + Формат(КоличествоИзРегистра, “ЧГ=10; ЧДЦ=3”) +
    “) не совпадает с количеством из табличной части (” + Формат(СуммаКоличествоТабличнойЧасти, “ЧГ=10; ЧДЦ=3”) + “).”);
    КонецЕсли;

    КонецПроцедуры

    // Вызов процедуры можно сделать, например, в обработчике ПриЗаписи или по кнопке формы

    //——————————————–
    // Важно:
    // – Замените “РегистрСведений.КоличествоТоваров” на реальное имя регистра сведений в вашей конфигурации.
    // – Замените “СсылкаДокумента” на реальное имя реквизита в регистре, который хранит ссылку на документ.
    // – Замените “Товары” на имя вашей табличной части.
    // – Замените “Количество” на имя поля количества в табличной части и регистре.
    // – Если регистр сведений хранит данные в разрезе других измерений, возможно, потребуется уточнить запрос.

    Рекомендую посмотреть здесь: https://helpf.pro/faq/view/1284.html

Просмотр 15 сообщений - с 121 по 135 (из 1,272 всего)