Здравствуйте! у меня такая проблема...изменил документ Реализация товаров и услуг в УПП 1.3.89.2 так, что сумма документа идет с учетом тары...теперь на основании создаю ПКО и сумма по Таре не попадает в итоговую сумму в приходнике...путем отладки выяснил что это происходит потому что сумма с тары не проводится по регистру "Взаиморасчеты с контрагентами по документам расчетов". Открыл код и слегка был обескуражен...помогите или подскажите как это сделать? Модуль проведения прикладываю.

```1c
    Процедура ОтражениеЗадолженностиВРегистреОперативныхРасчетовПоДокументам(СтруктураШапкиДокумента, ТаблицаВзаиморасчетов, ВидРасчетовСКонтрагентом, ВидДвижения, Движения, Отказ, Заголовок) Экспорт

    ВестиПоДокументамРасчетовСКонтрагентом = СтруктураШапкиДокумента.ВестиПоДокументамРасчетовСКонтрагентом;
    Если (НЕ ВестиПоДокументамРасчетовСКонтрагентом)
    ИЛИ (ТаблицаВзаиморасчетов.Количество() = 0)
    Тогда
    Возврат;
    КонецЕсли;

    Ссылка = ПолучитьДокументРасчетовСКонтрагентом(СтруктураШапкиДокумента);
    ДатаДвижений = СтруктураШапкиДокумента.Дата;
    Организация = СтруктураШапкиДокумента.Организация;
    Контрагент = СтруктураШапкиДокумента.Контрагент;
    ДоговорКонтрагента = СтруктураШапкиДокумента.ДоговорКонтрагента;
    //Признак отражения в УУ берем из ссылки, т.к. в СтруктураШапкиДокумента при отложенном проведении этот признак равен ЛОЖЬ
    УпрУчет = СтруктураШапкиДокумента.Ссылка.ОтражатьВУправленческомУчете;
    ЗнакОстатка = ?(ВидДвижения = ВидДвиженияНакопления.Приход, -1, 1);

    ЭтоВозврат = СтруктураШапкиДокумента.Свойство("ЭтоВозврат") И СтруктураШапкиДокумента.ЭтоВозврат;
    Множитель = ?(ЭтоВозврат, -1, 1);
    ЗнакОстатка = ЗнакОстатка * Множитель;

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

    Для каждого СтрокаВзаиморасчетов Из ТаблицаВзаиморасчетов Цикл

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

    КонецЦикла;

    // Определение состояния расчетов по документам

    Запрос = Новый Запрос;
    МенеджерВремТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МенеджерВремТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | Таб.Сделка,
    | Таб.ДокументРасчетовСКонтрагентом
    |ПОМЕСТИТЬ ТаблицаВзаиморасчетов
    |ИЗ
    | &ТаблицаВзаиморасчетов КАК Таб
    |ГДЕ
    | НЕ (Таб.ДокументРасчетовСКонтрагентом = &Ссылка)";

    Запрос.УстановитьПараметр("ТаблицаВзаиморасчетов", ТаблицаВзаиморасчетов);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.Выполнить();

    Если глЗначениеПеременной("ИспользоватьБлокировкуДанных") Тогда

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

    КонецЕсли;

    ТекстЗапроса =
    "ВЫБРАТЬ
    | ВзаиморасчетыПоДокументамОстатки.Организация,
    | ВзаиморасчетыПоДокументамОстатки.Контрагент,
    | ВзаиморасчетыПоДокументамОстатки.ДоговорКонтрагента,
    | ВзаиморасчетыПоДокументамОстатки.Сделка,
    | ВзаиморасчетыПоДокументамОстатки.ДокументРасчетовСКонтрагентом,
    | ВзаиморасчетыПоДокументамОстатки.ВидРасчетовСКонтрагентом,
    | ВзаиморасчетыПоДокументамОстатки.УпрУчет,
    | ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток * &ЗнакОстатка КАК СуммаВзаиморасчетов,
    | ВзаиморасчетыПоДокументамОстатки.СуммаРеглОстаток * &ЗнакОстатка КАК СуммаРегл
    |ИЗ
    | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
    | ,
    | Организация = &Организация
    | И Контрагент = &Контрагент
    | И ДоговорКонтрагента = &ДоговорКонтрагента
    | И ВидРасчетовСКонтрагентом = &ВидРасчетовСКонтрагентом
    | И УпрУчет = &УпрУчет
    | И (Сделка, ДокументРасчетовСКонтрагентом) В (ВЫБРАТЬ Сделка, ДокументРасчетовСКонтрагентом ИЗ ТаблицаВзаиморасчетов)) КАК ВзаиморасчетыПоДокументамОстатки
    |ГДЕ
    | ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток * &ЗнакОстатка > 0
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки";

    Запрос.Текст = ТекстЗапроса;

    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
    Запрос.УстановитьПараметр("ВидРасчетовСКонтрагентом", ВидРасчетовСКонтрагентом);
    Запрос.УстановитьПараметр("УпрУчет", УпрУчет);
    Запрос.УстановитьПараметр("ЗнакОстатка",ЗнакОстатка);

    ОстаткиПоРасчетам = Запрос.Выполнить().Выгрузить();

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

    Если СтруктураШапкиДокумента.Свойство("РежимПроведения") Тогда
    РежимПроведения = СтруктураШапкиДокумента.РежимПроведения;
    Иначе
    РежимПроведения = РежимПроведенияДокумента.Неоперативный;
    КонецЕсли;

    ЗапрещатьПревышениеОстатков = РежимПроведения = РежимПроведенияДокумента.Оперативный;
    ВзаиморасчетыВВалютеРеглУчета = СтруктураШапкиДокумента.ВалютаВзаиморасчетов = СтруктураШапкиДокумента.ВалютаРегламентированногоУчета;
    ДелатьДвиженияПоСуммеРегл = СтруктураШапкиДокумента.ОтражатьВРегламентированномУчете И НЕ ВзаиморасчетыВВалютеРеглУчета;

    Для каждого СтрокаВзаиморасчетов Из ТаблицаВзаиморасчетов Цикл

    ЭтоПогашениеКредДокумента = СтрокаВзаиморасчетов.ДокументРасчетовСКонтрагентом <> Ссылка;

    Если ЭтоПогашениеКредДокумента Тогда

    ОтборПоОстаткам = Новый Структура("Организация, Контрагент, ДоговорКонтрагента, Сделка,
    | ДокументРасчетовСКонтрагентом, ВидРасчетовСКонтрагентом, УпрУчет",
    Организация, Контрагент, ДоговорКонтрагента, СтрокаВзаиморасчетов.Сделка,
    СтрокаВзаиморасчетов.ДокументРасчетовСКонтрагентом, ВидРасчетовСКонтрагентом, УпрУчет);

    СтрокиОстатка = ОстаткиПоРасчетам.НайтиСтроки(ОтборПоОстаткам);

    ОстатокСуммыВзаиморасчетов = 0;
    Для каждого ОстатокЗадолженности из СтрокиОстатка Цикл
    ОстатокСуммыВзаиморасчетов = ОстатокСуммыВзаиморасчетов + ОстатокЗадолженности.СуммаВзаиморасчетов;
    КонецЦикла;

    Если ОстатокСуммыВзаиморасчетов < СтрокаВзаиморасчетов.СуммаВзаиморасчетов * Множитель Тогда

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

    Если ЗапрещатьПревышениеОстатков Тогда
    ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ, Заголовок);
    Возврат;
    Иначе
    ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, , Заголовок);
    КонецЕсли;

    КонецЕсли;
    КонецЕсли;

    Движение = ТаблицаДвижений.Добавить();

    Движение.Организация = Организация;
    Движение.Контрагент = Контрагент;
    Движение.ДоговорКонтрагента = ДоговорКонтрагента;
    Движение.Сделка = СтрокаВзаиморасчетов.Сделка;
    Движение.ДокументРасчетовСКонтрагентом = СтрокаВзаиморасчетов.ДокументРасчетовСКонтрагентом;
    Движение.УпрУчет = УпрУчет;
    Движение.ВидРасчетовСКонтрагентом = ВидРасчетовСКонтрагентом;

    Движение.СуммаВзаиморасчетов = СтрокаВзаиморасчетов.СуммаВзаиморасчетов;
    Если ДелатьДвиженияПоСуммеРегл Тогда
    Движение.СуммаРегл = СтрокаВзаиморасчетов.СуммаРегл;
    КонецЕсли;

    КонецЦикла;

    НаборЗаписейВзаиморасчетыПоДокументам.мТаблицаДвижений = ТаблицаДвижений;
    НаборЗаписейВзаиморасчетыПоДокументам.мПериод = ДатаДвижений;

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

    КонецПроцедуры
```
---
Что-то мне подсказывает, что надо смотреть чем заполнена переменная ТаблицаВзаиморасчетов, которая заполняется ранее, туда и надо добавлять строки по таре.

А вообще, тара не должна же нигде участвовать, она же возвратная, и числится за балансом.
---
В модуле объекта ПКО найти процедуру, отвечающую за заполнение на основании. Дальше найти строки, отвечающие за заполнение реквизита СуммаДокумента и строчки платежа, добавить к ним свой код по перезаполнению сумм с учетом тары.
---
на основании создаю ПКО и сумма по Таре не попадает в итоговую сумму в приходнике... А разве по условиям договора покупатель должен вам заплатить за тару, а не вернуть ее?
---
да я сам выпал как узнал...по идее да но у меня стоит такая задача....что покупатель платит за тару...
---
покупатель платит за тару... Тогда тара - такой же товар и место ей среди товаров.
---
полностью с вами согласен но заказчики нет...их не переубедить
---
ну может тару невозможно вернуть и поэтому ее оплачивают)
---
ну там типо потом возврат идет и деньги возвращают)
---
не поняла, т.е. покупатель покупает товар вместе с тарой, а платит только за товар?
---
не совсем, он покупает товар с тарой и платит за товар и тару
---
тогда я бы постаралась все же переубедить клиента, так как, если тара не возвращается, то она указывается на вкладке товары, иначе, думаю будут еще проблемы по бух учету, к примеру НДС на вкладке тара ведь не учитывается.
---
при печати на чек НДС 0 процентов, да НДС таре указать не получится.
---
мне так сказали они не знаю правы или нет
---
Что-то мне подсказывает, что надо смотреть чем заполнена переменная ТаблицаВзаиморасчетов, которая заполняется ранее, туда и надо добавлять строки по таре.

А вообще, тара не должна же нигде участвовать, она же возвратная, и числится за балансом.
---
я тоже так думал но мне сказали она должна участвовать эта сумма....думаете это неверно с точки зрения БУ?
---
Не знаю российский учет, но с точки зрения МСБУ думаю неверно, впрочем хозяин - барин.

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