Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Альфа-Авто отчет Движения взаиморасчетов

Альфа-Авто отчет Движения взаиморасчетов
Я
   Mikhail Volkov
 
02.12.21 - 12:21
Пользователи просят в Альфа-Авто в отчет Движения взаиморасчетов добавить галочку Оплата, при установки которой в документе движения еще дописывалась информация об его оплате. Если это заказ-наряд или реализация, то есть ли у него подчиненный документ(ы) оплаты: полной или частичной. А если это документ оплаты, то есть ли у него основание (ПКО или Чек на оплату) или указан ли в нем документ сделки (в Строка банковской выписки). Сформировать такую строку информации не проблема. Проблема: где, в каком месте перехватить документ движения, чтобы описать к нему строку об оплате?
   piter3
 
1 - 02.12.21 - 12:22
зачем документы?????
   vicof
 
2 - 02.12.21 - 12:38
(0) Теперь отчеты будут делать движения в регистрах?
   Fish
 
3 - 02.12.21 - 12:40
(0) Я не понял. Ты хочешь, чтобы в ОТЧЕТЕ была галочка, которая меняла бы данные документа? Не нужно так делать.
   Mikhail Volkov
 
4 - 02.12.21 - 12:57
(1) Иногда клиенты безналично платят частично (округленно до 10 руб.) или сразу за 2-3 сделки, причем не по порядку задолженности, и по назначению платежа не понять за что платит клиент. Возникают трудности какую сделку указывать в строке банковской выписки. А в отчете Движения взаиморасчетов нет информации что оплачено, что нет. Добавить надо бы...
(2) С чего взял? Нет конечно.
(3) Нет не данные документа, а выводила в отчет доп. информацию об оплате документа: указана или нет.
   vicof
 
5 - 02.12.21 - 14:09
(4) "в отчет Движения взаиморасчетов добавить галочку Оплата, при установки которой в документе движения еще дописывалась информация об его оплате."
   Mikhail Volkov
 
6 - 02.12.21 - 14:37
(5) Не сам же документ, а в то что выводится в отчет - его наименование: тип, номер, дата и время. Как в товарных отчетах к наименованию номенклатуры добавляется артикул или код.
   Михаил Козлов
 
7 - 02.12.21 - 20:40
(5) Если в Альфа-Авто отчет на СКД, то обычно это можно делать в пользовательском режиме.
   Seducer
 
8 - 02.12.21 - 21:08
(4) >А в отчете Движения взаиморасчетов нет информации что оплачено, что нет.
В АА взаиморасчеты содержат информацию о сделке. Добавить группировку "Сделка" в отчет не вариант?   Если сделка закрыта - то по ней конечный остаток будет 0
   Mikhail Volkov
 
9 - 03.12.21 - 10:01
(7) Дополнительные отчеты делаю на СКД, но у 1С-Рарус своя система отчетов, пытаюсь в ней разобраться...
(8) Добавлял группировку "Сделка" в отчет, то что отчет становится громоздким, это ничего. Но самое главное (по моему): он сам группирует документы в строгом порядке возникновения задолженности, и не смотрит на сделки, указанные в строках банковских выписок. По такому отчету получается все ранние документы оплачены, не оплачены только последние. Хотя клиент иногда оплачивает не по порядку. Например, оплатил конкретный документ точно на сумму документа, в назначении платежа указал именно этот документ. Хотя у него не оплачен более ранний документ на меньшую сумму. Бухгалтер, заполняя банковскую выписку, указала сделку правильно. А в отчете с группировкой Сделка попадает эта строка выписки попадает в группировку более раннего неоплаченного документа. Далее идет группировка с нашей строкой выписки на оставшуюся сумму от "оплаты" более раннего неоплаченного документа. И так далее...
Верить такому отчету нельзя, только итоговым цифрам. Или что-то не настроено?
   Михаил Козлов
 
10 - 03.12.21 - 10:20
(9) Т.е. Вы считаете, что соответствие оплат "отгрузкам" должно определяться строковым реквизитом назначение платежа?
Смотрели как в регистре взаиморасчетов соотносятся отгрузки и оплаты?
Какие варианты ведения взаиморасчетов возможны в Альфа-Авто (по договору, по сделке, по расчетным документам)?
   Mikhail Volkov
 
11 - 03.12.21 - 12:33
(10) Способ закрытия сделок: По расчетным документам.
Заглянул ф РН Взаиморасчеты компании, смотрел операции Банковская выписка, вроде везде Сделка заполнена документом сделки. Но у некоторых Сделка заполнена той же Банковской выпиской, что и в регистраторе. Думал что в них не указана Сделка, открываю документ Банковская выписка - все указано!?
   Mikhail Volkov
 
12 - 03.12.21 - 16:30
(10) > Т.е. Вы считаете, что соответствие оплат "отгрузкам" должно определяться строковым реквизитом назначение платежа?
Нет, к взаиморасчетам в Альфа-Авто у меня вообще нет претензий. Поясню зачем понадобилось информацию об оплате документа:
Альфа-Авто упр. программа. Чтобы получить полную отчетность все документы перегружаются в УПП. Если клиент оплачивает ПКО или банковской картой, то проблем нет: сделка передается в УПП как документ-основание. А если по безналу, то сделка передается, которая указана в строке банковской выписки, т.е. что бухгалтер в ней указал. Если сумма платежа не равна сумме сделки, и назначении платежа неясно написано, то бухгалтер оставляет ее пустой.
Вот он и просит добавить в отчет Движения взаиморасчетов добавить к выводимому документу информацию об его оплате, чтобы видеть что оплачено, а что нет.
   Seducer
 
13 - 03.12.21 - 17:27
(9) А в договоре стоит автозакрытие сделки или нет? Если автозакрытие - то система сама будет распределять закрытие. Если в выписке указываете сделку, то в этой строке справа есть флаг автозакрытия, его нужно снять. Если его оставить, то заполнение поля сделки не будет иметь силу.
   Mikhail Volkov
 
14 - 04.12.21 - 05:01
(13) Флаг АвтоЗакрытиеСделок (Если флажок установлен, то при проведении документа сначала будут оплачены все незакрытые сделки) установлен во всех договорах, и всех строках выписки при Оплата от покупателя. Если клиент платит правильно: указывает за что (сделку), даже если не по порядку платит, то мне не важно как закрываются его сделки (флаги АвтоЗакрытиеСделок можно снять). А вот когда неясно за что платеж, и сделка остается не заполненной, то очень сомневаюсь, что снятие флагов АвтоЗакрытиеСделок правильно распределит платеж по сделкам.
Повторяю: к взаиморасчетам в Альфа-Авто нет претензий (12).
   Mikhail Volkov
 
15 - 04.12.21 - 08:06
Смотрю отчет ОстаткиИОборотыТоваров, в его настройка к измерениям можно добавлять Доп. поля. Обычно по умолчанию к измерению Номенклатура добавляется Артикул (№ по каталогу). Можно Доп. поля выводить в отдельной колонке. Хочу понять как к строкам отчета добавляется доп. информация...
В модуле этого отчета есть Функция СформироватьТабличныйДокумент(), которая вызывает общую (для всех отчетов в общем модуле отОтчеты) функцию ПодготовкаПостроителяОтчета(ОтчетОбъект, ПостроительОтчета). В ней заполняется СтруктураПолейОтчета, она состоит из таблиц значений, среди них ТаблицаПолей. Когда в Доп. поля что-то указано, то она заполняется: например, ТаблицаПолей.Имя = "НоменклатураАртикул", ТаблицаПолей.ПолноеПредставление = "№ по каталогу (Номенклатура)"...
Далее в функции ПодготовкаПостроителяОтчета() есть: ТекстЗапроса = отПолучитьИерархическийЗапросПостроителяОтчетов(ОтчетОбъект, СтруктураПолейОтчета); Но сравнивал тексты запроса с установлеными Доп. полями, и без них - вроде одинаковые.
Не знаю с ПостроительОтчета по разбираться, или сразу с ТабличныйДокумент? Где и как к строкам отчета может добавляться доп. информация?
   МимохожийОднако
 
16 - 04.12.21 - 09:34
Все манипуляции есть смысл делать только в банковской выписке, чтобы правильно формировались движения.
Доп.поля, флажки и прочие ходули, на мой взгляд, избыточны и усложняют базу.
В банковской выписке нет возможности получить табличную таблицу расчетных документов списком? Только строка?
   МимохожийОднако
 
17 - 04.12.21 - 09:37
В бухгалтерии 3.0 есть в документе Списание с расчетного счета табличная часть Расшифровка платежа. Если уж делать, то по аналогии с типовой конфигурацией.
   Mikhail Volkov
 
18 - 04.12.21 - 10:58
(16) Банковская выписка в Альфа-Авто имеет табличную часть Состав, в каждую строку заносится платеж от клиента (или поставщику), указывается Сумма и НДС платежа, документ Сделка (за что платеж), текст Назначение платежа... не понял вопрос?
   Mikhail Volkov
 
19 - 06.12.21 - 14:08
(17) С БП3.0 и другими конфигурациями на УФ мало работаю, чаще на УПП. В ней тоже можно добавлять Доп. поля к выводимым полям измерений. Например, в отчете "Товары на складах" по умолчанию к измерению Номенклатура по умолчанию добавляется Базовая единица измерения. Можно добавить Номенклатура.Код, Номенклатура.Артикул... Кстати, если Доп. поле выводится пустым, но запятая с пробелом все равно выводится - не порядок!
Вернемся к (15): трудность в том, что в Альфа-Авто текст функции СформироватьТабличныйДокумент() недоступен ОбработкаЗащиты.Компонента.отСформироватьТабличныйДокумент(), спрятан в V8AutoSalon.dll. Но она обращается к доступным процедурам и функциям. Про функции ПодготовкаПостроителяОтчета() и ПодготовкаПостроителяОтчета() уже писал в (15) - не помогли мне в моей задаче. А вот Процедура отСформироватьМакетИзмеренияСтроки() - формирует строку измерений макета построителя отчета, в ней есть фрагмент:
    ДополнительныеПоляОтчета = ОтчетОбъект.ДополнительныеПоляОтчета.НайтиСтроки(Новый Структура("НеСвязанные", Ложь));
    
    Если ДополнительныеПоляОтчета.Количество() > 0 И Не ДополнительныеПоляВОтдельнойКолонке Тогда
        
        ТекстШаблона = "";
        Для ИндПоля=0 По ДополнительныеПоляОтчета.Количество()-1 Цикл
            ТекПоле = ДополнительныеПоляОтчета[ИндПоля];
            ОбластьДопПоле = МакетОтчета.Область(НомерСтроки, НачальныйНомерВыводаКолонок, НомерСтроки, НачальныйНомерВыводаКолонок);
            Если (СтруктураСвязиСвойств.Свойство(ТекПоле.Имя)) И (НЕ ЭтоИерархия) Тогда
                ЗаполнятьПараметр = ТекИзмерение.Имя = СтруктураСвязиСвойств[ТекПоле.Имя].ИмяИзмерения;
            Иначе ЗаполнятьПараметр = (ТекПоле.ПутьКДанным <> ТекИзмерение.ПутьКДанным И Найти(ТекПоле.ПутьКДанным, ТекИзмерение.ПутьКДанным) > 0);
            КонецЕсли;
            Если ЗаполнятьПараметр Тогда ТекстШаблона = ТекстШаблона + ", [" + ТекПоле.Имя + "]"; КонецЕсли;
        КонецЦикла;
        
        Если Не обЗначениеНеЗаполнено(ТекстШаблона) Тогда
            ТипЗаполненияОбластиИзмерения =    ТипЗаполненияОбластиТабличногоДокумента.Шаблон;
            ИмяТекИзмерения = "[" + ИмяТекИзмерения + "]"+ТекстШаблона;
        КонецЕсли;
    КонецЕсли;

Внес в нее свои изменения:
    ДополнительныеПоляОтчета = ОтчетОбъект.ДополнительныеПоляОтчета.НайтиСтроки(Новый Структура("НеСвязанные", Ложь));
    
    Если (ДополнительныеПоляОтчета.Количество() > 0 И Не ДополнительныеПоляВОтдельнойКолонке)
      Или ВыводитьИнформациюОбОплате Тогда    //+МВ 05.12.2021

        
        ТекстШаблона = "";
        Если ДополнительныеПоляОтчета.Количество() > 0 И Не ДополнительныеПоляВОтдельнойКолонке Тогда
            Для ИндПоля=0 По ДополнительныеПоляОтчета.Количество()-1 Цикл
                ТекПоле = ДополнительныеПоляОтчета[ИндПоля];
                ОбластьДопПоле = МакетОтчета.Область(НомерСтроки, НачальныйНомерВыводаКолонок, НомерСтроки, НачальныйНомерВыводаКолонок);
                Если (СтруктураСвязиСвойств.Свойство(ТекПоле.Имя)) И (НЕ ЭтоИерархия) Тогда
                    ЗаполнятьПараметр = ТекИзмерение.Имя = СтруктураСвязиСвойств[ТекПоле.Имя].ИмяИзмерения;
                Иначе ЗаполнятьПараметр = (ТекПоле.ПутьКДанным <> ТекИзмерение.ПутьКДанным И Найти(ТекПоле.ПутьКДанным, ТекИзмерение.ПутьКДанным) > 0);
                КонецЕсли;
                Если ЗаполнятьПараметр Тогда ТекстШаблона = ТекстШаблона + ", [" + ТекПоле.Имя + "]"; КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        Если ВыводитьИнформациюОбОплате Тогда ТекстШаблона = ТекстШаблона + ", [" + ИнформацияОбОплате() + "]"; КонецЕсли;    //+МВ 05.12.2021

        
        Если Не обЗначениеНеЗаполнено(ТекстШаблона) Тогда
            ТипЗаполненияОбластиИзмерения =    ТипЗаполненияОбластиТабличногоДокумента.Шаблон;
            ИмяТекИзмерения = "[" + ИмяТекИзмерения + "]"+ТекстШаблона;
        КонецЕсли;
    КонецЕсли;

Добавил функцию, пока так:
Функция ИнформацияОбОплате() Экспорт    //+МВ

    Возврат "ИнформацияОбОплате";
КонецФункции    //    ИнформацияОбОплате()


Галочку ВыводитьИнформациюОбОплате внес в настойки отчета аналогично ВыводитьДополнительныеПоляВОтдельнойКолонке.
В результате смотрю пошагово в ИмяТекИзмерения принимает значение: [ПериодРегистратор], [ПериодРегистраторКомментарий], [ИнформацияОбОплате] (еще в Доп. поля добавляю Комментарий), а в сам отчет выводится только документ, комментарий документа и запятая в конце - не воспринимает СформироватьТабличныйДокумент() ИнформацияОбОплате как функцию.
Если в ТекстШаблона = ТекстШаблона + ", [" + ИнформацияОбОплате() + "]"; заменить на ТекстШаблона = ТекстШаблона + ", ИнформацияОбОплате()"; то в отчете в строкам документов добавляется текст ", ИнформацияОбОплате()".
Если кто что-то дельное по существу вопроса не подскажет, то придется анализировать результат функции СформироватьТабличныйДокумент(), искать в нем тексты "ИнформацияОбОплате()", заменять их на результаты выполнения ИнформацияОбОплате(Документ).
   Mikhail Volkov
 
20 - 06.12.21 - 18:34
Видимо придется анализировать результат функции СформироватьТабличныйДокумент() сам уже заполненный ТабличныйДокумент. Но как это делать (не разу не приходилось)? В приведенном фрагменте (19) чуть ниже:
    ОбластьКолонки.Объединить();
    ОбластьКолонки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
    ОбластьКолонки.Заполнение    = ТипЗаполненияОбластиИзмерения;
    ОбластьКолонки.Параметр      = ИмяТекИзмерения;
    ОбластьКолонки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
    ОбластьКолонки.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
    ОбластьКолонки.Шрифт         = ОформлениеУровня.Шрифт;
Неверное мне как-то искать в ТабличныйДокумент эти ОбластьКолонки с Заполнение: ТипЗаполненияОбластиТабличногоДокумента.Шаблон, и Параметр, в котором есть текст ", ИнформацияОбОплате()"? Но как?
   Mikhail Volkov
 
21 - 07.12.21 - 08:09
Нашел на https://infostart.ru/public/546665/

Процедура ЗаменитьТекстВТабличномДокументе(ТабличныйДокумент, ПодстрокаПоиска, ПодстрокаЗамены) Экспорт
    
    НайденныеОбласти = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска);
    Для каждого Строка из НайденныеОбласти Цикл
        Строка.Область.Текст = СтрЗаменить(Строка.Область.Текст, ПодстрокаПоиска, ПодстрокаЗамены);
    КонецЦикла;
    
КонецПроцедуры

Правда не понял зачем сперва ищутся все НайденныеОбласти? Можно сразу, нашел и заменил. Наверное НайтиОбластиТабличногоДокументаПоВхождениюПодстроки() общая для других процедур. Ладно, вставил ее пока в свою:

Функция СформироватьТабличныйДокумент(ДокументРезультат=Неопределено) Экспорт

    Результат = отСформироватьТабличныйДокумент(ЭтотОбъект, ДокументРезультат,, глПрава);
    
    Если ВыводитьИнформациюОбОплате Тогда    //+МВ 07.12.2021

        ПодстрокаПоиска = "ИнформацияОбОплате()";
        НайденныеОбласти = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(Результат, ПодстрокаПоиска);
        Для каждого Строка из НайденныеОбласти Цикл
            Строка.Область.Текст = СтрЗаменить(Строка.Область.Текст, ПодстрокаПоиска, "Информация об оплате");
        КонецЦикла;
    КонецЕсли;    //-МВ

    
    Возврат Результат;
    
КонецФункции// ЗаполнитьНачальныеНастройки()


Найденная Строка.Область.Текст содержит Документ в начале строки в виде текста. А как получить сам Документ? Может Строка.Область.Параметр, или еще что-нибудь? Мне надо его поставить в качестве аргумента в функцию ИнформацияОбОплате(Документ), и ее результатом заменить текст "ИнформацияОбОплате()".
   Mikhail Volkov
 
22 - 07.12.21 - 18:29
Сам Документ содержится Строка.Область.Расшифровка. Теперь функция так выглядит:

Функция СформироватьТабличныйДокумент(ДокументРезультат=Неопределено) Экспорт

    Результат = отСформироватьТабличныйДокумент(ЭтотОбъект, ДокументРезультат,, глПрава);
    
    Если ВыводитьИнформациюОбОплате Тогда    //+МВ 07.12.2021

        Контрагент = "";
        ПодстрокаПоиска     = мвДоработки.ТекстИнформацияОбОплате();
        НайденныеОбласти = мвДоработки.НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(Результат, ПодстрокаПоиска);
        Для каждого Строка из НайденныеОбласти Цикл
            ИнформацияОбОплате = мвДоработки.ИнформацияОбОплате(Строка.Область.Расшифровка, Контрагент);
            Строка.Область.Текст = СтрЗаменить(Строка.Область.Текст, ?(ПустаяСтрока(ИнформацияОбОплате), ", ", "") + ПодстрокаПоиска, ИнформацияОбОплате);
        КонецЦикла;
    КонецЕсли;    //-МВ

    
    Возврат Результат;
    
КонецФункции// СформироватьТабличныйДокумент()


Вроде все работает как надо. Единственное, в функцию ИнформацияОбОплате() кроме Документ пришлось добавить Контрагент. Обычно его можно получить из документа, но если это банковская выписка, то нет. Конечно редко в отчете 1-й документ банковская выписка, но все же... желательно в таблице значений НайденныеОбласти 1-м не был с банковская выписка.
   Mikhail Volkov
 
23 - 09.12.21 - 06:16
В НайденныеОбласти можно получить Контрагент:

Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска, Контрагент = Неопределено) Экспорт
    
    НайденныеОбласти = Новый ТаблицаЗначений;
    НайденныеОбласти.Колонки.Добавить("Область");
    НайденныеОбласти.Колонки.Добавить("Текст");
    НайденныеОбласти.Колонки.Добавить("Расшифровка");
    
    НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
    
    Пока НайденнаяОбласть <> Неопределено Цикл
        НоваяСтрока = НайденныеОбласти.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
        НоваяСтрока.Область = НайденнаяОбласть;
        
        НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
    КонецЦикла;
    
    Для каждого Строка Из НайденныеОбласти Цикл
        Если ТипЗнч(Строка.Область.Расшифровка) = Тип("ДокументСсылка.Выписка") Тогда
            Продолжить;
        КонецЕсли;
        Контрагент = Строка.Область.Расшифровка.Контрагент;
        Прервать;
    КонецЦикла;
    
    Возврат НайденныеОбласти;
    
КонецФункции// НайтиОбластиТабличногоДокументаПоВхождениюПодстроки()


Даже хорошо, что не сразу заменяется (21). Тему можно считать закрытой, но если что-то дельное подскажет, буду рад...
   Mikhail Volkov
 
24 - 10.12.21 - 18:05
Оказывается НайденныеОбласти Расшифровка может быть не только документом, но и различным справочником. Пришлось дополнить анализ Расшифровка по типу:

    Для каждого Строка Из НайденныеОбласти Цикл
        Если ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.ДоговорыВзаиморасчетов")
         Или ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.ПодразделенияКомпании")
         Или ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.Организации")
         Или ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.Контрагенты")
         Или ТипЗнч(Строка.Область.Расшифровка) = Тип("ДокументСсылка.Выписка") Тогда
            Продолжить;
        КонецЕсли;
        Контрагент = Строка.Область.Расшифровка.Контрагент;
        Прервать;
    КонецЦикла;
    
    Возврат НайденныеОбласти;

Возможно еще какие-то типы... Как заменить условие на Не документ?
   Mikhail Volkov
 
25 - 11.12.21 - 08:46
Нашел на https://forum.infostart.ru/forum9/topic6348/
    Для каждого Строка Из НайденныеОбласти Цикл
    //    Если ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.ДоговорыВзаиморасчетов")

    //     Или ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.ПодразделенияКомпании")

    //     Или ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.Организации")

    //     Или ТипЗнч(Строка.Область.Расшифровка) = Тип("СправочникСсылка.Контрагенты")

        Если Не Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Строка.Область.Расшифровка))
         Или ТипЗнч(Строка.Область.Расшифровка) = Тип("ДокументСсылка.Выписка") Тогда
            Продолжить;
        КонецЕсли;
        Контрагент = Строка.Область.Расшифровка.Контрагент;
        Прервать;
    КонецЦикла;


Список тем форума
 
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.