Есть документ ВводОстатковВзаиморасчетов. При проведении надо чтоб долг контрагента обнулялся на дату проведения, а новое значение записывалось как долг. Подскажите, как обнулить... вот процедура
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ВзаиморасчетыСКонтрагентами Приход
Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.СуммаВзаиморасчетов = Долг;
Движение.СуммаУпр = Долг;
Движение.Период = Дата;
Движение.ДоговорКонтрагента = ДоговорКонтрагента;
// регистр РасчетыСКонтрагентами Приход
Движение = Движения.РасчетыСКонтрагентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.ДоговорКонтрагента = ДоговорКонтрагента;
Движение.СуммаВзаиморасчетов = Долг;
Движение.СуммаУпр = Долг;
// записываем движения регистров
Движения.ВзаиморасчетыСКонтрагентами.Записать();
Движения.РасчетыСКонтрагентами.Записать();
КонецПроцедуры
Получить данные долга - записать их в регистр с обратным знаком. Далее записать данные указанные в документе корректировка долга ...
Наболело. Использовать тег Код при публикации текста модуля религия не позволяет? Сколько можно исправлять Ваши сообщения.
1. Получить сумму долга либо запросом либо напрямую вытянуть из регистра.
2.Сделать движение в минус аналогично Вашей процедуре
Вообще вроде есть документ КорректировкаВзаморасчетов, точно не помню думаю что лучше чтобы он делал списание задолженности.
Корректировка долга хороший документ, но надо вручную выщитывать разницу между фактическим долгом и долгом по базе и добавлять в поле уменьшение или увеличение долга... у нас очень много контрагентов и реально очень много времени на это потратится((
по поводу получения данных и записания их с обратным знаком :
Движение.СуммаВзаиморасчетов = -РегистрыНакопления.ВзаиморасчетыСКонтрагентами.суммавзаиморасчетов ;
как-то так?
Извините, если задаю тупые вопросы, просто недавно только начал 8ку изучать, учусь...
Примерно так:
НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
ТаблицаДвижений = НаборДвижений.Выгрузить();
ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
| ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
| ВзаиморасчетыСКонтрагентамиОстатки.Организация,
| ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);
НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
ТаблицаДвижений = НаборДвижений.Выгрузить();
ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
| ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
| ВзаиморасчетыСКонтрагентамиОстатки.Организация,
| ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
| ВзаиморасчетыСКонтрагентамиОстатки.ВидДеятельности,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);
Да на здоровье ... только не используется полностью запрос, проанализируйте измерения в регистре Взаиморасчеты вашей конфигурации.. я вот только заметила , что ВидДеятельности - это добавленное мною измерение, в типовой его нет... в вашей конфе могут быть другие различия
И для "спасибо" у нас есть кнопка "+СПС". Где она находится - НЕ СПРАШИВАТЬ, уже миллион раз говорили!
НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
ТаблицаДвижений = НаборДвижений.Выгрузить();
ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
| ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
| ВзаиморасчетыСКонтрагентамиОстатки.Организация,
| ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);
//сюда нужно добавить строку в таблицу движений с новыми значениями регистра
НаборДвижений.мПериод = Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
Движения.ВзаиморасчетыСКонтрагентами.ВыполнитьПриход();
Движения.ВзаиморасчетыСКонтрагентами.Записать();
НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
ТаблицаДвижений = НаборДвижений.Выгрузить();
ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
| ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
| ВзаиморасчетыСКонтрагентамиОстатки.Организация,
| ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
| -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);
//сюда нужно добавить строку в таблицу движений с новыми значениями регистра
НаборДвижений.мПериод = Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
Движения.ВзаиморасчетыСКонтрагентами.ВыполнитьПриход();
Движения.ВзаиморасчетыСКонтрагентами.Записать();
НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
ТаблицаДвижений = НаборДвижений.Выгрузить();
ТаблицаДвижений.Очистить();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
| ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Дата,
| ДоговорКонтрагента = &ДоговорКонтрагента) КАК ВзаиморасчетыСКонтрагентамиОстатки";
Запрос.УстановитьПараметр("Дата", Новый Граница(Дата, ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.ДоговорКонтрагента = ДоговорКонтрагента;
Движение.СуммаВзаиморасчетов = Выборка.СуммаВзаиморасчетов;
Движение.СуммаУпр = Выборка.СуммаУпр;
КонецЕсли;
// Приход
Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.ДоговорКонтрагента = ДоговорКонтрагента;
Движение.СуммаВзаиморасчетов = Долг;
Движение.СуммаУпр = Долг;
Думаю, что Вы всё равно придете к варианту с выгрузкой в таблицу. У Контрагента может быть несколько догооров и также ещё разрезы Сделка, Организация, которые вы не учитываете. Обнуляется сумма в целом, но не закрываются измерения, что приведет в дальнейшем к неверным взаиморасчетам по этим разрезам..
Ученик_Покачто, во что верим? какую религию проповедуем?
Прочтите сообщение №3, посмотрите сообщение №8 и №17. Сделайте выводы и примените их к сообщению №18.
И прочтите http://pro1c.org.ua/index.php?showtopic=2314 тему
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua