Автор: Constantus 24.07.17, 11:20
Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)
Нашел и скачал вот такой интересный отчет: http://pro1c.org.ua/redirect.php?https://subsystems.ru/solutions/program=135/ (бесплатно)
Просроченные долги по срокам и документам для 1С УТ10
Отчет интересный получился и вроде правильный.
Код ТекстЗапроса =
"ВЫБРАТЬ
| Календарь.ДатаКалендаря КАК ДатаКалендаря,
| КОЛИЧЕСТВО(*) КАК Ранг
|ПОМЕСТИТЬ Календарь
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК КалендарьКопия
| ПО Календарь.ДатаКалендаря >= КалендарьКопия.ДатаКалендаря
|ГДЕ
| Календарь.ДатаКалендаря >= &МинимальнаяДата
| И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
| И КалендарьКопия.ДатаКалендаря >= &МинимальнаяДата
| И (КалендарьКопия.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ИЛИ КалендарьКопия.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
|
|СГРУППИРОВАТЬ ПО
| Календарь.ДатаКалендаря
|
|ИНДЕКСИРОВАТЬ ПО
| ДатаКалендаря
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КалендарьРанг.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
| Календарь.ДатаКалендаря КАК ДатаКалендаря
|ПОМЕСТИТЬ РабочаяДатаВзаиморасчетыОстаткиИОбороты
|ИЗ
| Календарь КАК Календарь
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВзаиморасчетыОстаткиИОбороты.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
| МИНИМУМ(Календарь.Ранг) + МИНИМУМ(ВзаиморасчетыОстаткиИОбороты.ДопустимоеЧислоДнейЗадолженности) КАК РангСоединения,
| МИНИМУМ(Календарь.Ранг) КАК Ранг
| ИЗ
| (ВЫБРАТЬ
| ВзаиморасчетыОстаткиИОбороты.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
| МИНИМУМ(ВзаиморасчетыОстаткиИОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности) КАК ДопустимоеЧислоДнейЗадолженности,
| НАЧАЛОПЕРИОДА(МИНИМУМ(ВзаиморасчетыОстаткиИОбороты.ДокументРасчетовСКонтрагентом.Дата), ДЕНЬ) КАК Дата
| ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(
| &ДатаНач,
| &ДатаКон,
| Регистратор {(&Периодичность)},
| ,
| ДоговорКонтрагента.ВидДоговора В (&МассивВидовДоговоров)
| И ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности > 0
| И ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом = ИСТИНА) КАК ВзаиморасчетыОстаткиИОбороты
| ГДЕ
| ВзаиморасчетыОстаткиИОбороты.УпрУчет
|
| СГРУППИРОВАТЬ ПО
| ВзаиморасчетыОстаткиИОбороты.ДокументРасчетовСКонтрагентом) КАК ВзаиморасчетыОстаткиИОбороты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Календарь КАК Календарь
| ПО ВзаиморасчетыОстаткиИОбороты.Дата <= Календарь.ДатаКалендаря
|
| СГРУППИРОВАТЬ ПО
| ВзаиморасчетыОстаткиИОбороты.ДокументРасчетовСКонтрагентом) КАК КалендарьРанг
| ПО (КалендарьРанг.РангСоединения = Календарь.Ранг)
|
|ИНДЕКСИРОВАТЬ ПО
| ДокументРасчетовСКонтрагентом
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИтогиВзаиморасчетов.Организация КАК Организация,
| ИтогиВзаиморасчетов.Контрагент КАК Контрагент,
| ИтогиВзаиморасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента,
| ИтогиВзаиморасчетов.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| ИтогиВзаиморасчетов.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
| ИтогиВзаиморасчетов.ДокументРасчетовСКонтрагентом.Дата КАК ДатаДокумента,
| ИтогиВзаиморасчетов.КоличествоДнейОтсрочки КАК КоличествоДнейОтсрочки,
| ВЫБОР
| КОГДА РАЗНОСТЬДАТ(&ПолучитьНаДату, ИтогиВзаиморасчетов.Срок, ДЕНЬ) > 0
| ТОГДА 0
| ИНАЧЕ РАЗНОСТЬДАТ(&ПолучитьНаДату, ИтогиВзаиморасчетов.Срок, ДЕНЬ)
| КОНЕЦ КАК ПросроченоДней,
| ИтогиВзаиморасчетов.СуммаОбщегоДолга КАК СуммаОбщегоДолга,
| ИтогиВзаиморасчетов.Срок КАК Срок,
| ВЫБОР
| КОГДА ИтогиВзаиморасчетов.СуммаОбщегоДолга < 0
| ТОГДА ИтогиВзаиморасчетов.СуммаОбщегоДолга
| ИНАЧЕ 0
| КОНЕЦ КАК СуммаАвансов,
| ВЫБОР
| КОГДА ИтогиВзаиморасчетов.СуммаОбщегоДолга > 0
| И ИтогиВзаиморасчетов.Срок <= &ПолучитьНаДату
| ТОГДА ИтогиВзаиморасчетов.СуммаОбщегоДолга
| ИНАЧЕ 0
| КОНЕЦ КАК СуммаПросроченныйДолг,
| ВЫБОР
| КОГДА ИтогиВзаиморасчетов.СуммаОбщегоДолга > 0
| И НЕ ИтогиВзаиморасчетов.Срок <= &ПолучитьНаДату
| ТОГДА ИтогиВзаиморасчетов.СуммаОбщегоДолга
| ИНАЧЕ 0
| КОНЕЦ КАК СуммаНепросроченныйДолг,
| ИтогиВзаиморасчетов.ДокументРасчетовСКонтрагентом.СуммаДокумента КАК СуммаДокумента
|{ВЫБРАТЬ
| ВалютаВзаиморасчетов.*,
| Контрагент.*,
| Организация.*,
| ДоговорКонтрагента.*,
| ДокументРасчетовСКонтрагентом.*,
| ДатаДокумента,
| СуммаДокумента,
| КоличествоДнейОтсрочки,
| Срок,
| ПросроченоДней,
| СуммаОбщегоДолга,
| СуммаАвансов,
| СуммаПросроченныйДолг,
| СуммаНепросроченныйДолг}
|ИЗ
| (ВЫБРАТЬ
| ОстаткиПоПериодам.Организация КАК Организация,
| ОстаткиПоПериодам.Контрагент КАК Контрагент,
| ОстаткиПоПериодам.ДоговорКонтрагента КАК ДоговорКонтрагента,
| ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
| ОстаткиПоПериодам.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КАК КоличествоДнейОтсрочки,
| ОстаткиПоПериодам.СуммаВзаиморасчетовОстаток КАК СуммаОбщегоДолга,
| ВЫБОР
| КОГДА &СпособКонтроляДнейЗадолженности = ЗНАЧЕНИЕ(Перечисление.СпособыКонтроляДнейЗадолженности.ПоРабочимДням)
| ТОГДА ЕСТЬNULL(РабочаяДатаВзаиморасчетыОстаткиИОбороты.ДатаКалендаря, ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом.Дата)
| ИНАЧЕ ДОБАВИТЬКДАТЕ(ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ, ОстаткиПоПериодам.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности)
| КОНЕЦ КАК Срок
| ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&ПолучитьНаДату, ДоговорКонтрагента.ВидДоговора В (&МассивВидовДоговоров) {(Организация).*, (Контрагент).*, (ДоговорКонтрагента).*}) КАК ОстаткиПоПериодам
| ЛЕВОЕ СОЕДИНЕНИЕ РабочаяДатаВзаиморасчетыОстаткиИОбороты КАК РабочаяДатаВзаиморасчетыОстаткиИОбороты
| ПО (РабочаяДатаВзаиморасчетыОстаткиИОбороты.ДокументРасчетовСКонтрагентом = ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом)) КАК ИтогиВзаиморасчетов
|{ГДЕ
| ИтогиВзаиморасчетов.Контрагент.*,
| ИтогиВзаиморасчетов.Организация.*,
| (РАЗНОСТЬДАТ(&ПолучитьНаДату, ИтогиВзаиморасчетов.Срок, ДЕНЬ)) КАК ПросроченоДней,
| ИтогиВзаиморасчетов.ДокументРасчетовСКонтрагентом.Агент.* КАК Агент}
|{УПОРЯДОЧИТЬ ПО
| Контрагент.*,
| ДокументРасчетовСКонтрагентом.*,
| ПросроченоДней}
|ИТОГИ
| МАКСИМУМ(ДатаДокумента),
| МАКСИМУМ(КоличествоДнейОтсрочки),
| МИНИМУМ(ПросроченоДней),
| СУММА(СуммаОбщегоДолга),
| МИНИМУМ(Срок),
| СУММА(СуммаАвансов),
| СУММА(СуммаПросроченныйДолг),
| СУММА(СуммаНепросроченныйДолг),
| СУММА(СуммаДокумента)
|ПО
| ОБЩИЕ
|{ИТОГИ ПО
| ВалютаВзаиморасчетов.*,
| Контрагент.*,
| Организация.*,
| ДоговорКонтрагента.*,
| ДокументРасчетовСКонтрагентом.*}";
Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);
УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
КонецЕсли;
УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
ПараметрыПостроителя = УниверсальныйОтчет.ПостроительОтчета.Параметры;
Воот... Теперь встал вопрос. Как можно провести отбор по Договорам контрагентов. Дело в том, что мы для удобства стандартизировали названия договоров. У всех Контрагентов имеются договора "Основной", "Перечисление", "Кредит", "Аванс"...
Как можно в этом отчете (обработку могу выслать, или скачайте с указанного сайта) провести отбор по "Наименованию" договоров?
Я вставил туда отбор по Договору, но он при начале отбора требует выбрать конкретного Контрагента, а уж потом Договор, в результате получается отбор по Договору конкретного Контрагента, а нужно отобрать только по Наименованию (возможно что-то типа содержит, но с возможностью выбора текста Наименования), чтобы , например, при выборе "Кредит" вышли все Контрагенты с этим договором.
Автор: Bernet 24.07.17, 11:43
Constantus @ Сегодня, 12:20
,
Сделайте Перечисление "ТипыДоговоров" со значениями:
- Основной;
- Перечисление;
- Кредит;
- Аванс.
Добавьте реквизит "Тип договора" в справочник "ДоговораКонтрагентов"
В отчете делайте отбор по этому реквизиту "ТипДоговора"
Автор: Constantus 24.07.17, 12:29
Возможно поставить вопрос иначе.
В отчете проставлен отбор:
УниверсальныйОтчет.ДобавитьОтбор("Организация");
УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
УниверсальныйОтчет.ДобавитьОтбор("Агент");
УниверсальныйОтчет.ДобавитьОтбор("ВидДоговора");
"ВидДоговора" и есть текстовое название Договоров.
Имеется Справочник со всеми наименованиями Договоров ("Основной", "Кредит"...)
Как теперь в этом отчете на отбор
УниверсальныйОтчет.ДобавитьОтбор("ВидДоговора");
поставить
"ВидСравнения" = Содержит
Значение взять из справочника наименования Договоров.
//Сейчас в ручную это работает, т.е. я выбираю "Содержит" и прописываю руками "Основной"
Почти получилось
УниверсальныйОтчет.ДобавитьОтбор("ВидДоговора",Истина,ВидСравнения.Содержит);
А вот со значение туго...
Попытался сделать заведомую дурость:
УниверсальныйОтчет.ДобавитьОтбор("ВидДоговора",Истина,ВидСравнения.Содержит,Справочники.ВидыОтбораДоговоров);
Понимаю, что это текстовое значение, но как попытаться в поле "Значение" получить некий список текстовых значений, взятых из справочника?
Автор: pablo 25.07.17, 15:47
Цитата(Constantus @ 24.07.17, 12:29)
как попытаться в поле "Значение" получить некий список текстовых значений, взятых из справочника?
Одновременно - никак. Или у вас могут быть договора с наименованием Основной Аванс?
Советую добавить поле
| ИтогиВзаиморасчетов.ДоговорКонтрагента.Наименование КАК ВидДоговораКонтрагента,
и его включить в отбор.
Тогда пользователь сможет устанавливать отбору по новому полю. Если же вы хотите стандартизовать варианты значений в поле отбора - то делайте так, как
Bernet посоветовал
.