Часто в повседневной работе бухгалтера возникает необходимость видеть общее количество проданного товара непосредственно в списке документов Реализация (акты, накладные). Стандартно в конфигурации 1С:Бухгалтерия Предприятия 8.3 такая колонка отсутствует, так как документ может содержать десятки строк с разными единицами измерения, и простое суммирование не всегда корректно с методологической точки зрения. Однако, если специфика бизнеса предполагает однотипный товар или важно видеть общий объем, задачу можно решить несколькими способами.
В этой статье мы разберем, как реализовать данное требование, не снимая конфигурацию с поддержки, чтобы сохранить возможность легкого типового обновления.
С появлением механизма расширений в платформе 1С:Предприятие 8.3, внесение изменений в интерфейс стало безопасным. Мы можем модифицировать запрос динамического списка, который отвечает за вывод данных на экран.
Проанализируем шаги, которые необходимо выполнить программисту:
РеализацияТоваровУслуг и его форму списка (обычно это ФормаСписка).Список, имеющий тип ДинамическийСписок.Рассмотрим, как изменить сам текст запроса. Нам нужно присоединить к основной таблице документов итоги по его табличной части Товары. Примерный запрос будет выглядеть следующим образом:
ВЫБРАТЬ
ДокументРеализация.Ссылка КАК Ссылка,
ДокументРеализация.Дата КАК Дата,
ДокументРеализация.Номер КАК Номер,
ДокументРеализация.Партнер КАК Партнер,
ДокументРеализация.СуммаДокумента КАК СуммаДокумента,
ЕСТЬNULL(ВложенныйЗапрос.ОбщееКоличество, 0) КАК ОбщееКоличество
ИЗ
Документ.РеализацияТоваровУслуг КАК ДокументРеализация
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РеализацияТовары.Ссылка КАК Ссылка,
СУММА(РеализацияТовары.Количество) КАК ОбщееКоличество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
СГРУППИРОВАТЬ ПО
РеализацияТовары.Ссылка) КАК ВложенныйЗапрос
ПО ДокументРеализация.Ссылка = ВложенныйЗапрос.Ссылка
После изменения запроса в окне Размещение данных появится новое поле ОбщееКоличество. Мы просто перетаскиваем его в элементы формы, и вуаля — колонка появилась в списке. Этот метод хорош тем, что он автоматически подсчитывает итоги по всем строкам документа. Для вывода других данных из строк документов в журнал также подойдёт готовое расширение для отображения номенклатурных групп в списке реализаций.
Если вы не хотите работать с кодом, можно воспользоваться механизмом Дополнительных сведений. Это стандартный функционал БСП (Библиотеки стандартных подсистем), встроенный в Бухгалтерию 8.3.
Проанализируем алгоритм действий:
Реализация (акт, накладная) и нажмем Добавить — Новое.Число.Теперь в каждом документе реализации по кнопке Еще — Дополнительные сведения можно вручную вписать общее количество. Чтобы вывести эту колонку в список, пользователю достаточно нажать Еще — Изменить форму в списке реализаций, найти группу Ссылка, развернуть её и поставить галочку напротив созданного нами доп. сведения.
Важный нюанс: Чтобы количество заполнялось автоматически, а не вручную, все же потребуется небольшое расширение, которое в процедуре ПередЗаписью документа будет суммировать итог по табличной части и записывать его в регистр сведений ДополнительныеСведения.
Выясним причину, почему бухгалтеру неудобно "залезать" в каждый документ. Если цель — получить сводную информацию за период, то лучше научить пользователя работать с Универсальным отчетом.
Разберем по шагам настройку такого отчета:
Документ, в поле "Объект" — Реализация товаров и услуг, в поле "Таблица" — Товары.Ссылка (это и будет наш документ).Количество и Сумма.Такой отчет можно сохранить как вариант (например, "Реестр реализаций с количеством") и вывести на панель отчетов. Это позволит видеть список всех документов с итоговым количеством в один клик без внесения каких-либо правок в конфигурацию. А если требуется видеть состав табличных частей и редактировать документы прямо в едином окне без их открытия, можно использовать интерактивный журнал документов с доступом к табличным частям.
Если база данных очень большая, использование ЛЕВОЕ СОЕДИНЕНИЕ в динамическом списке может привести к замедлению работы интерфейса. В таких случаях программисты используют программную подстановку данных.
Посмотрим на пример логики в расширении формы списка:
&НаСервере
Процедура Расш1_ПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
// Строки - это соответствие, где ключ - ссылка на документ
Для Каждого СтрокаСписка Из Строки Цикл
ДанныеСтроки = СтрокаСписка.Значение.Данные;
ДокСсылка = СтрокаСписка.Ключ;
// Вычисляем количество только для видимых на экране строк
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ СУММА(Количество) ИЗ Документ.РеализацияТоваровУслуг.Товары ГДЕ Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокСсылка);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
ДанныеСтроки.Вставить("ОбщееКоличество", Выборка.СуммаКоличества);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот метод позволяет системе не пересчитывать тысячи документов в базе, а делать расчет только для тех 20-30 строк, которые бухгалтер видит на мониторе в данный момент.
Проанализируем ситуацию, упомянутую в обсуждении: что если в накладной одновременно 10 кг картошки и 5 пар сапог? Платформа просто сложит эти числа и выдаст "15".
Рекомендации для корректного учета:
"Смешанное" вместо числа.КоличествоСтрок (через КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НомерСтроки)). Это поможет бухгалтеру быстро оценить объем документа.Таким образом, мы рассмотрели несколько путей решения задачи: от простых пользовательских настроек отчетов до технически продвинутых методов с использованием расширений и оптимизацией запросов. Выбор метода зависит от того, насколько критична производительность системы и готовы ли вы к небольшим доработкам в коде.