Имя: Пароль:
1C
1С v8
Указана сумма взаиморасчетов, превышающая непогашенный остаток по документу расчетов...
0 Mikhail Volkov
 
13.12.19
19:40
В УПП при проведении документов оплаты иногда возникает ошибка: "Указана сумма взаиморасчетов, превышающая непогашенный остаток по документу расчетов с контрагентом!". Обычно она возникает когда в расшифровке платежа документа оплаты (ПКО и Оплата от покупателя платежной картой) не верно указан документ расчетов с контрагентом. А тут вроде все верно указано, но ошибка все равно есть. Стал копать, вышел на процедуру УправлениеВзаиморасчетами.ОтражениеОплатыВРегистреОперативныхРасчетовПоДокументам(), привожу ее фрагмент:

    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВзаиморасчетыПоДокументамОстатки.ДоговорКонтрагента,
    |    ВзаиморасчетыПоДокументамОстатки.Сделка,
    |    ВзаиморасчетыПоДокументамОстатки.ДокументРасчетовСКонтрагентом,
    |    ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток * &ЗнакОстатка КАК СуммаВзаиморасчетов,
    |    ВзаиморасчетыПоДокументамОстатки.СуммаРеглОстаток * &ЗнакОстатка КАК СуммаРегл
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,
    |        Организация = &Организация
    |            И ВидРасчетовСКонтрагентом = &ВидРасчетовСКонтрагентом
    |            И УпрУчет = &УпрУчет
    |            И (ДоговорКонтрагента, Сделка, ДокументРасчетовСКонтрагентом) В (ВЫБРАТЬ ДоговорКонтрагента, Сделка, ДокументРасчетовСКонтрагентом ИЗ ТаблицаПлатежей)) КАК ВзаиморасчетыПоДокументамОстатки
//    |            И ДоговорКонтрагента = &ДоговорКонтрагента
//    |            И Сделка = &Сделка
//    |            И ДокументРасчетовСКонтрагентом = &ДокументРасчетовСКонтрагентом) КАК ВзаиморасчетыПоДокументамОстатки
    |ГДЕ
    |    ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток * &ЗнакОстатка > 0
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки";
    
    Запрос.УстановитьПараметр("Организация", СтруктураШапкиДокумента.Организация);
    Запрос.УстановитьПараметр("ВидРасчетовСКонтрагентом", ВидРасчетовСКонтрагентом);
    Запрос.УстановитьПараметр("УпрУчет", УпрУчет);
    Запрос.УстановитьПараметр("ЗнакОстатка",ЗнакОстатка);
//    Запрос.УстановитьПараметр("ДоговорКонтрагента", ТаблицаПлатежей[0].ДоговорКонтрагента);
//    Запрос.УстановитьПараметр("Сделка", ТаблицаПлатежей[0].Сделка);
//    Запрос.УстановитьПараметр("ДокументРасчетовСКонтрагентом", ТаблицаПлатежей[0].ДокументРасчетовСКонтрагентом);
    
    ОстаткиПоРасчетам = Запрос.Выполнить().Выгрузить();
    
    ДвиженияРегистраОперативныхРасчетов = Движения.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов;
    
    Если СтруктураШапкиДокумента.Свойство("РежимПроведения") Тогда
        РежимПроведения = СтруктураШапкиДокумента.РежимПроведения;
    Иначе
        РежимПроведения = РежимПроведенияДокумента.Неоперативный;
    КонецЕсли;
    
    ЗапрещатьПревышениеОстатков = РежимПроведения = РежимПроведенияДокумента.Оперативный;
    
    Для каждого СтрокаПлатежа Из ТаблицаПлатежей Цикл
        
        ВзаиморасчетыВВалютеРеглУчета = СтрокаПлатежа.ВалютаВзаиморасчетов = СтруктураШапкиДокумента.ВалютаРегламентированногоУчета;
        ДелатьДвиженияПоСуммеРегл = СтруктураШапкиДокумента.ОтражатьВРегламентированномУчете И НЕ ВзаиморасчетыВВалютеРеглУчета;
    
        ЭтоПогашениеКредДокумента = СтрокаПлатежа.ДокументРасчетовСКонтрагентом <> Неопределено;
        
        Если ЭтоПогашениеКредДокумента Тогда
            
            ОтборПоОстаткам = Новый Структура("ДоговорКонтрагента, Сделка, ДокументРасчетовСКонтрагентом",
            СтрокаПлатежа.ДоговорКонтрагента, СтрокаПлатежа.Сделка, СтрокаПлатежа.ДокументРасчетовСКонтрагентом);
            
            СуммаВзаиморасчетовОстаток = 0;
            СуммаРеглОстаток = 0;
            СтрокиОстатка = ОстаткиПоРасчетам.НайтиСтроки(ОтборПоОстаткам);
            ТекстСуммаВзаиморасчетов = "";
            Для каждого ОстатокАванса Из СтрокиОстатка Цикл
                ТекстСуммаВзаиморасчетов = ТекстСуммаВзаиморасчетов + ?(ПустаяСтрока(ТекстСуммаВзаиморасчетов), "", " + ") + Строка(СтрокиОстатка[0].СуммаВзаиморасчетов);
                СуммаВзаиморасчетовОстаток = СуммаВзаиморасчетовОстаток + СтрокиОстатка[0].СуммаВзаиморасчетов;
                СуммаРеглОстаток = СуммаРеглОстаток + СтрокиОстатка[0].СуммаРегл;
            КонецЦикла;
            Сообщить("ВидРасчетовСКонтрагентом: " + ВидРасчетовСКонтрагентом + ", УпрУчет: " + УпрУчет + ", ЗнакОстатка: " + ЗнакОстатка + ", Количество ТаблицаПлатежей: " + ТаблицаПлатежей.Количество() + ", Количество ОстаткиПоРасчетам: " + ОстаткиПоРасчетам.Количество() + ", Количество СтрокиОстатка: " + СтрокиОстатка.Количество() + ", СуммаВзаиморасчетов = " + ТекстСуммаВзаиморасчетов, СтатусСообщения.Информация);
                
            Если СтрокаПлатежа.СуммаВзаиморасчетов > СуммаВзаиморасчетовОстаток Тогда
                
                ТекстСообщения = "Указана сумма взаиморасчетов, превышающая непогашенный остаток по документу расчетов с контрагентом!
                | Договор: " + СтрокаПлатежа.ДоговорКонтрагентаПредставление +
                ?(НЕ ЗначениеЗаполнено(СтрокаПлатежа.СделкаПредставление),", сделка не указана",", сделка: " + СтрокаПлатежа.СделкаПредставление)+
                ", документ расчетов: " + СтрокаПлатежа.ДокументРасчетовСКонтрагентомПредставление + ";
                | Остаток " + СуммаВзаиморасчетовОстаток + " " + СтрокаПлатежа.ВалютаВзаиморасчетовПредставление + "; "
                + " указана сумма " + СтрокаПлатежа.СуммаВзаиморасчетов + " " + СтрокаПлатежа.ВалютаВзаиморасчетовПредставление + "; "
                + " превышение " + (СтрокаПлатежа.СуммаВзаиморасчетов - СуммаВзаиморасчетовОстаток) + " " + СтрокаПлатежа.ВалютаВзаиморасчетовПредставление;
                
                Если ЗапрещатьПревышениеОстатков Тогда
                    ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ, Заголовок);
                    Возврат;
                Иначе
                    ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, , Заголовок);
                КонецЕсли;
            КонецЕсли;

Пробовал запрос менять - не помогло, в ряде документов ошибка:
ВидРасчетовСКонтрагентом: По реализации, УпрУчет: Да, ЗнакОстатка: 1, Количество ТаблицаПлатежей: 1, Количество ОстаткиПоРасчетам: 1, Количество СтрокиОстатка: 1, СуммаВзаиморасчетов = 20
Проведение документа: Оплата от покупателя платежной картой ИП000000527 от 01.12.2019 11:29:50 (Оплата от покупателя)
Указана сумма взаиморасчетов, превышающая непогашенный остаток по документу расчетов с контрагентом!
Договор: Продажа ИП от 24.05.2019, сделка не указана, документ расчетов: Реализация товаров и услуг МИП00000547 от 30.11.2019 12:37:29;
Остаток 20 RUB;  указана сумма 2 810 RUB;  превышение 2 790 RUB
Смотрю РН ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов с отбором по ДокументРасчетовСКонтрагентом вижу как минимум две записи: с регистраторами ДокументРасчетовСКонтрагентом и документами оплаты. Но почему: "Остаток 20 RUB" (чаще 0)?
1 Mikhail Volkov
 
14.12.19
08:22
Мне бы просмотреть из чего состоит этот "Остаток 20 RUB", для этого надо вставить в запрос Регистратор. Как мне переделать запрос?
2 tty12
 
14.12.19
08:25
(1) А отчет "Ведомость по взаиморасчетам с контрагентами" это не показывает разве?
3 Mikhail Volkov
 
14.12.19
09:28
(2) По конкретному документу расчетов с контрагентом нет. Меня интересует РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов, нет ли какого мусора в нем? Чтобы почистить его.
4 rphosts
 
14.12.19
09:44
(3) у вас оплата в разрезе контрагентов, договоров, партий, СФ?
Начните с того что-бы сами понять как у вас ведётся учет, потом тут изложите (здесь телепатов не много), а потом формулируйте вопрос.
5 Mikhail Volkov
 
14.12.19
10:35
(4) Оплата ведется в разрезе контрагентов, договоров, и документов расчетов с контрагентом (за что оплата). Обычно ошибка возникает когда этот документ указан неверно. А тут вроде все правильно указано, и все равно ошибка!?
6 Mikhail Volkov
 
14.12.19
10:36
+ Запрос к РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки не позволяет детализировать "Остаток 20 RUB". Хочу в консоль запросов написать свой запрос для конкретного случая документа расчетов с контрагентом. Чтобы выводил колонки: регистратор, его СуммаВзаиморасчетов, и Остаток. Понять откуда этот "Остаток 20 RUB"?
7 tty12
 
14.12.19
12:04
(6) Ну попробуй в консоли накидать запросик по регистру, только не по Остаткам, а просто по ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов. И в условии укажи что-то типа Регистратор = &ДокументПродажи ИЛИ ДокументРасчетовСКонтрагентом = &ДокументПродажи", вдруг предоплата какая образовалась...
8 Mikhail Volkov
 
14.12.19
12:31
(7) Ну это я и так вижу по в РН ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов с отбором ДокументРасчетовСКонтрагентом. Мне именно Остатки нужны. Пока написал:

ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Регистратор,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.СуммаВзаиморасчетов,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ВидРасчетовСКонтрагентом,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.УпрУчет,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Организация
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
        ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом = ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом
ГДЕ
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом = &ДокументРасчетовСКонтрагентом

Но в колонке СуммаВзаиморасчетовОстаток по всем строкам один конечный остаток. Пытался в Параметры виртуальной таблицы ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки  период вставить: ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Период - говорит: "Поле не найдено ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Период"!
Как сделать, чтобы в колонке СуммаВзаиморасчетовОстаток был остаток на каждый документ Регистратора?
9 Злопчинский
 
14.12.19
16:01
(8) ну.. если регистратор не фигурирует в измерении регистра - то как-бэ проблематично...
10 Злопчинский
 
14.12.19
16:03
... при выводе строк _движений_ (по регистраторам) считать остаток на регистратор плюсую-минусуя движения к предыдущей выведенной строке.
если запросом - то тут задача видимо сводится к получению нарастающего итога...
???
11 Mikhail Volkov
 
14.12.19
18:52
(10) В консоль запросов это не сделать, или сложно? Да, в общем-то не нужно, разобрался в 2-х случаях: клиент вроде платит наличными, ему отбивают чек на всю сумму. А денег у клиента не оказалось (или не хватает). Сразу отбивают возвратный чек (и чек на неполную сумму). В ПКО в расшифровке платежа указан документ расчетов с контрагентом. А в РКО нет, ПКО. Запрос (0) видит только 1-й ПКО, а РКО не видит. Когда проводится 2-й ПКО или Оплата от покупателя платежной картой, то выдает эту ошибку, что якобы документ уже оплачен!
12 Mikhail Volkov
 
15.12.19
08:23
В РКО в расшифровке платежа даже не позволяет выбрать Реализацию товаров и услуг (ту же самую, что в ПКО) в качестве документа расчетов с контрагентом!?
13 Mikhail Volkov
 
16.12.19
08:55
У меня чеки не бьют в УПП, в Альфа-Авто. В УПП данные перекидываются для бух. учета. В правилах обмена РКО расшифровку платежа заменяю на расшифровку платежа ПКО:

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

Вроде сейчас нет этой ошибки...
14 Mikhail Volkov
 
16.12.19
17:29
(13) > Вроде сейчас нет этой ошибки...
При проведении ПКО, а при проведении РКО, в котором заменил расшифровку платежа, появилась! Те же параметры запроса, только ЗнакОстатка -1.
15 Mikhail Volkov
 
17.12.19
13:47
Тогда проще при загрузке ПКО проверять наличие подчиненного РКО. Если есть такой и проведен, то из расшифровки платежа убирать ДокументРасчетовСКонтрагентом.