Использовано на "Управление торговлей", редакция 10.3 (10.3.18.3), можно адаптировать на другие конфигурации.
Итак, заходим в Журнал документов->Заказы покупателей->Форма списка->Модуль
Меняем в модуле две процедуры или добавляем, если их нет:
///////////////////////////////////////////////////////////////////////////////////////
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
ДатаНач = '00010101000000';
ДатаКон = ТекущаяДата();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Заказы.Контрагент,
| Заказы.СуммаСогласовано КАК СуммаСогласовано,
| Заказы.СуммаЗаказа КАК СуммаЗаказ,
| 0 КАК СуммаПластик,
| 0 КАК СуммаПлатежка,
| 0 КАК СуммаОрдер,
| 0 КАК СуммаНалично,
| Заказы.Дата,
| ""1"" КАК ВидДокумента,
| Заказы.Ссылка КАК Ссылка,
| Заказы.Контрагент.Код + Заказы.Ссылка.Номер КАК КонтИЗаказ
|ИЗ
| (ВЫБРАТЬ
| ЗаказПокупателя.СуммаДокумента КАК СуммаСогласовано,
| СУММА(ЗаказПокупателяТовары.Сумма) КАК СуммаЗаказа,
| ЗаказПокупателя.Контрагент КАК Контрагент,
| ЗаказПокупателя.Дата КАК Дата,
| ЗаказПокупателя.Ссылка КАК Ссылка
| ИЗ
| Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
| ПО ЗаказПокупателяТовары.Ссылка = ЗаказПокупателя.Ссылка
| ГДЕ
| ЗаказПокупателя.Дата <= &ДатаКон
| И ЗаказПокупателя.Проведен
|
| СГРУППИРОВАТЬ ПО
| ЗаказПокупателя.Контрагент,
| ЗаказПокупателя.СуммаДокумента,
| ЗаказПокупателя.Дата,
| ЗаказПокупателя.Ссылка) КАК Заказы
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОплатаОтПокупателяПлатежнойКартой.Контрагент,
| 0,
| 0,
| ВЫБОР
| КОГДА ОплатаОтПокупателяПлатежнойКартой.СуммаДокумента > 0
| ТОГДА ОплатаОтПокупателяПлатежнойКартой.СуммаДокумента
| ИНАЧЕ 0
| КОНЕЦ,
| 0,
| 0,
| 0,
| ОплатаОтПокупателяПлатежнойКартой.Дата,
| ""2"",
| ОплатаОтПокупателяПлатежнойКартой.ДокументОснование,
| ОплатаОтПокупателяПлатежнойКартой.Контрагент.Код + ОплатаОтПокупателяПлатежнойКартой.ДокументОснование.Номер
|ИЗ
| Документ.ОплатаОтПокупателяПлатежнойКартой КАК ОплатаОтПокупателяПлатежнойКартой
|ГДЕ
| ОплатаОтПокупателяПлатежнойКартой.Дата <= &Датакон
| И ОплатаОтПокупателяПлатежнойКартой.Проведен
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПлатежноеПоручениеВходящее.Контрагент,
| 0,
| 0,
| 0,
| ВЫБОР
| КОГДА ПлатежноеПоручениеВходящее.СуммаДокумента > 0
| ТОГДА ПлатежноеПоручениеВходящее.СуммаДокумента
| ИНАЧЕ 0
| КОНЕЦ,
| 0,
| 0,
| ПлатежноеПоручениеВходящее.Дата,
| ""3"",
| ПлатежноеПоручениеВходящее.ДокументОснование,
| ПлатежноеПоручениеВходящее.Контрагент.Код + ПлатежноеПоручениеВходящее.ДокументОснование.Номер
|ИЗ
| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
|ГДЕ
| ПлатежноеПоручениеВходящее.Дата <= &Датакон
| И ПлатежноеПоручениеВходящее.Проведен
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПлатежныйОрдерПоступлениеДенежныхСредств.Контрагент,
| 0,
| 0,
| 0,
| 0,
| ВЫБОР
| КОГДА ПлатежныйОрдерПоступлениеДенежныхСредств.СуммаДокумента > 0
| ТОГДА ПлатежныйОрдерПоступлениеДенежныхСредств.СуммаДокумента
| ИНАЧЕ 0
| КОНЕЦ,
| 0,
| ПлатежныйОрдерПоступлениеДенежныхСредств.Дата,
| ""4"",
| ПлатежныйОрдерПоступлениеДенежныхСредств.ДокументОснование,
| ПлатежныйОрдерПоступлениеДенежныхСредств.Контрагент.Код + ПлатежныйОрдерПоступлениеДенежныхСредств.ДокументОснование.Номер
|ИЗ
| Документ.ПлатежныйОрдерПоступлениеДенежныхСредств КАК ПлатежныйОрдерПоступлениеДенежныхСредств
|ГДЕ
| ПлатежныйОрдерПоступлениеДенежныхСредств.Дата <= &Датакон
| И ПлатежныйОрдерПоступлениеДенежныхСредств.Проведен
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.Контрагент,
| 0,
| 0,
| 0,
| 0,
| 0,
| ВЫБОР
| КОГДА ПриходныйКассовыйОрдер.СуммаДокумента > 0
| ТОГДА ПриходныйКассовыйОрдер.СуммаДокумента
| ИНАЧЕ 0
| КОНЕЦ,
| ПриходныйКассовыйОрдер.Дата,
| ""5"",
| ПриходныйКассовыйОрдер.ДокументОснование,
| ПриходныйКассовыйОрдер.Контрагент.Код + ПриходныйКассовыйОрдер.ДокументОснование.Номер
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|ГДЕ
| ПриходныйКассовыйОрдер.Дата <= &Датакон
| И ПриходныйКассовыйОрдер.Проведен
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| ВидДокумента";
Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
Остатки = Запрос.Выполнить().Выгрузить();
Остатки.Свернуть("КонтИЗаказ,Ссылка,Контрагент,ВидДокумента,Дата","СуммаСогласовано,СуммаЗаказ,СуммаПластик,СуммаПлатежка,СуммаОрдер,СуммаНалично");
Остатки.Индексы.Добавить("Контрагент");
//Остатки.Индексы.Добавить("ВидДокумента");
Для каждого Оформление Из ОформленияСтрок Цикл
СтрокаПоиска = Оформление.ДанныеСтроки.Покупатель.Код+Оформление.ДанныеСтроки.Ссылка.Номер;
Ост = Остатки.Найти(СтрокаПоиска,"КонтИЗаказ");
Если Оформление.Ячейки.ВидДокумента.Текст = "Заказ покупателя" Тогда
Попытка
Остаток = Ост.СуммаСогласовано-Ост.СуммаНалично-Ост.СуммаОрдер-Ост.СуммаПластик-Ост.СуммаПлатежка;
Исключение
Остаток = 0;
КонецПопытки;
Если Строка(Типзнч(Оформление.ДанныеСтроки.Ссылка)) = "Заказ покупателя" Тогда
Оформление.ЦветТекста = Новый Цвет(0,0,0);
Оформление.Ячейки.Остаток.ОтображатьТекст = Истина;
Оформление.Ячейки.Остаток.Текст = Строка(Остаток);
иначе
Оформление.ЦветТекста = Новый Цвет(0,0,0);
Оформление.Ячейки.Остаток.ОтображатьТекст = Истина;
Оформление.Ячейки.Остаток.Текст = Строка(Остаток);
Если Оформление.Ячейки.ОплатаНалично.Значение <> Null Тогда
Оформление.Ячейки.ОплатаНалично.ЦветФона = WEBЦвета.ЗеленоЖелтый;
КонецЕсли;
Если Оформление.Ячейки.ОплатаПеречислен.Значение <> Null Тогда
Оформление.Ячейки.ОплатаПеречислен.ЦветФона = WEBЦвета.ЗеленаяЛужайка;
КонецЕсли;
Если Оформление.Ячейки.Пластик.Значение <> Null Тогда
Оформление.Ячейки.Пластик.ЦветФона = WEBЦвета.ЗеленоватоЖелтый;
КонецЕсли;
КонецЕсли;
Иначе
ОтборПок = Новый Структура;
ОтборПок.Вставить("КонтИЗаказ",СтрокаПоиска);
//ОтборПок.Вставить("Дата",Оформление.ДанныеСтроки.Дата);
ОтборПоКонтрагенту = Остатки.НайтиСтроки(ОтборПок);
ОтборПокДат = Новый Структура;
ОтборПокДат.Вставить("КонтИЗаказ",СтрокаПоиска);
ОтборПокДат.Вставить("Дата",Оформление.ДанныеСтроки.Дата);
ОтборПоДате = Остатки.НайтиСтроки(ОтборПокДат);
Если ОтборПоКонтрагенту <> неопределено Тогда
Для Каждого СтрокаДат из ОтборПоДате Цикл
Прервать;
КонецЦикла;
Ост = Остатки.Найти(СтрокаПоиска,"КонтИЗаказ");
Остаток = Ост.СуммаСогласовано;
МаксДата = Дата('00010101');
Для Каждого Строка из ОтборПоКонтрагенту Цикл
Попытка
Если Строка.Дата<=СтрокаДат.Дата Тогда
Остаток = Остаток-Строка.СуммаНалично-Строка.СуммаОрдер-Строка.СуммаПластик-Строка.СуммаПлатежка;
КонецЕсли;
Если (Строка.Дата>МаксДата) и (Строка.ВидДокумента<>"1") Тогда
МаксДата=Строка.Дата;
КонецЕсли;
Исключение
КонецПопытки
КонецЦикла;
Оформление.ЦветТекста = Новый Цвет(0,0,0);
Оформление.Ячейки.Остаток.ОтображатьТекст = Истина;
Оформление.Ячейки.Остаток.Текст = Строка(Остаток);
Если Остаток>0 Тогда
Если Оформление.ДанныеСтроки.Дата = МаксДата Тогда
Оформление.Ячейки.Остаток.ЦветФона = WEBЦвета.СветлоКоралловый;
КонецЕсли;
//Иначе
// Оформление.Ячейки.Остаток.ЦветФона = WEBЦвета.БледноБирюзовый;
КонецЕсли;
Если Оформление.Ячейки.ОплатаНалично.Значение <> Null Тогда
Оформление.Ячейки.ОплатаНалично.ЦветФона = WEBЦвета.БледноЗеленый;
КонецЕсли;
Если Оформление.Ячейки.ОплатаПеречислен.Значение <> Null Тогда
Оформление.Ячейки.ОплатаПеречислен.ЦветФона = WEBЦвета.ЗеленаяЛужайка;
КонецЕсли;
Если Оформление.Ячейки.Пластик.Значение <> Null Тогда
Оформление.Ячейки.Пластик.ЦветФона = WEBЦвета.ЗеленоватоЖелтый;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Последний = Оформление;
Конеццикла;
ЖурнПок = ОформленияСтрок;
КонецПроцедуры
Целиком инструкция в тексте приложенного файла.