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

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

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

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

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

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

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

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

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

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

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

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

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

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

Возможно еще какие-то типы... Как заменить условие на Не документ?
25 Mikhail Volkov
 
11.12.21
08:46
Нашел на https://forum.infostart.ru/forum9/topic6348/

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