Как пересчитать суммы в документе «Акт списания ЕГАИС» в 1С:Розница 2.2 при массовом изменении цен?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с конфигурацией «1С:Розница 2.2» пользователи часто сталкиваются с необходимостью массовой корректировки данных в документах. Типичная ситуация: в документе Акт списания ЕГАИС, содержащем тысячи позиций (например, более 19 000 строк), необходимо обновить цены и, соответственно, пересчитать итоговые суммы. Стандартная обработка Групповое изменение реквизитов позволяет быстро заполнить колонку Цена, однако колонка Сумма при этом часто остается без изменений. Рассмотрим подробнее, почему это происходит и как решить задачу с помощью программных инструментов.

Почему стандартное «Групповое изменение реквизитов» не обновляет суммы?

Разберем причину такого поведения системы. Программа 1С устроена так, что логика автоматического вычисления (в данном случае формула Сумма = Количество * Цена) обычно прописана в обработчиках событий экранной формы, таких как ПриИзменении. Когда мы используем «Групповое изменение реквизитов», система записывает новые значения напрямую в базу данных, минуя интерфейс формы. В результате «событие» изменения цены не наступает, и алгоритм пересчета суммы не запускается. Проанализируем ситуацию: даже если нажать кнопку пересчета в самом документе, он может не сработать, если в системе не настроены типы цен для списания или если поля заблокированы для редактирования программным кодом формы.

Решение №1: Использование консоли кода

Наиболее эффективным и быстрым способом для обработки 19 700 позиций является использование консоли кода (или консоли запросов с возможностью выполнения произвольного кода). Этот метод позволяет нам программно «перебрать» все строки документа и принудительно вычислить значения. Посмотрим на алгоритм действий:

  1. Откроем консоль кода (например, из состава «Инструментов разработчика»).
  2. На вкладке «Параметры» создадим новый параметр ДокументСписания с типом ссылки на документ Акт списания ЕГАИС и выберем нужный нам объект.
  3. В поле для выполнения кода вставим следующий фрагмент:

ДокОбъект = Параметры.ДокументСписания.ПолучитьОбъект();
Для каждого СтрокаТЧ Из ДокОбъект.Товары Цикл
    СтрокаТЧ.Сумма = СтрокаТЧ.Количество * СтрокаТЧ.Цена;
КонецЦикла;
ДокОбъект.Записать();

Проанализируем этот код: метод ПолучитьОбъект() позволяет нам перейти от ссылки на документ к его редактируемой версии. Цикл Для каждого обходит каждую строку табличной части Товары, выполняет арифметическое действие и записывает результат в реквизит Сумма. Метод Записать() сохраняет все изменения в базе данных.

Решение №2: Групповое изменение реквизитов с произвольным алгоритмом

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

  1. Выберем объект Акт списания ЕГАИС и настроим отбор по конкретному документу.
  2. Перейдем в режим выполнения произвольного алгоритма (доступно в дополнительных настройках обработки).
  3. Вставим код, аналогичный приведенному выше, но адаптированный под контекст обработки.

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

Решение №3: Использование механизма расширений или внешних обработок

Если задача по пересчету возникает регулярно, целесообразно создать небольшое расширение конфигурации или внешнюю обработку. Это позволит автоматизировать процесс без изменения основной конфигурации, что критически важно для базовых версий «1С:Розница». Выясним преимущества этого подхода:

Технические нюансы и предостережения

При работе с документами ЕГАИС важно помнить о статусах. Если документ уже имеет статус «Передан в УТМ» или «Принят ЕГАИС», любое программное изменение сумм в 1С может привести к расхождению между вашей учетной системой и данными в системе Росалкогольрегулирования. Хотя ЕГАИС в актах списания в первую очередь контролирует количество и марки, финансовые показатели важны для вашего внутреннего бухгалтерского и управленческого учета.

Также обратим внимание на поле Цена. В Рознице 2.2 цены в актах списания могут подтягиваться автоматически из регистра сведений Цены номенклатуры. Если после программного пересчета вы решите вручную изменить количество в строке, форма может снова сбросить сумму, если не найдет актуальную цену в регистре. Поэтому перед выполнением обработки убедитесь, что цены в документе установлены корректно и соответствуют вашему виду цен (например, Себестоимость).

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

← На главную