Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 1c 8.1 УТ для Украины
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Ученик_Покачто
Есть документ ВводОстатковВзаиморасчетов. При проведении надо чтоб долг контрагента обнулялся на дату проведения, а новое значение записывалось как долг. Подскажите, как обнулить... вот процедура

Процедура ОбработкаПроведения(Отказ, Режим)
    
    // регистр ВзаиморасчетыСКонтрагентами Приход

    Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    
    Движение.СуммаВзаиморасчетов = Долг;
    Движение.СуммаУпр = Долг;
    Движение.Период = Дата;
    Движение.ДоговорКонтрагента = ДоговорКонтрагента;
  
    
// регистр РасчетыСКонтрагентами Приход

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

    // записываем движения регистров

    Движения.ВзаиморасчетыСКонтрагентами.Записать();
    Движения.РасчетыСКонтрагентами.Записать();
    
КонецПроцедуры
Fynjy
Получить данные долга - записать их в регистр с обратным знаком. Далее записать данные указанные в документе корректировка долга ...
Batchir
Наболело. Использовать тег Код при публикации текста модуля религия не позволяет? Сколько можно исправлять Ваши сообщения.
awp
1. Получить сумму долга либо запросом либо напрямую вытянуть из регистра.
2.Сделать движение в минус аналогично Вашей процедуре

Вообще вроде есть документ КорректировкаВзаморасчетов, точно не помню думаю что лучше чтобы он делал списание задолженности.
Ученик_Покачто
Корректировка долга хороший документ, но надо вручную выщитывать разницу между фактическим долгом и долгом по базе и добавлять в поле уменьшение или увеличение долга... у нас очень много контрагентов и реально очень много времени на это потратится((

по поводу получения данных и записания их с обратным знаком :

Движение.СуммаВзаиморасчетов = -РегистрыНакопления.ВзаиморасчетыСКонтрагентами.суммавзаиморасчетов ;

как-то так?

Извините, если задаю тупые вопросы, просто недавно только начал 8ку изучать, учусь...
AlenaS
Цитата(Ученик_Покачто @ 11.01.11, 13:05) необходимо зарегистрироваться для просмотра ссылки
по поводу получения данных и записания их с обратным знаком :

Движение.СуммаВзаиморасчетов = -РегистрыНакопления.ВзаиморасчетыСКонтрагентами.суммавзаиморасчетов ;

как-то так?


В движениях так, но получение данных скорее всего нужно бы выполнить запросом, а потом просто выгрузить в таблицу движений, чтобы учесть правильно остатки по всем измерениям регистра
Ученик_Покачто
Цитата(AlenaS @ 11.01.11, 13:24) необходимо зарегистрироваться для просмотра ссылки
В движениях так, но получение данных скорее всего нужно бы выполнить запросом, а потом просто выгрузить в таблицу движений, чтобы учесть правильно остатки по всем измерениям регистра


хмм... а для чайника можно?
AlenaS
Примерно так:
    НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
    ТаблицаДвижений = НаборДвижений.Выгрузить();
    ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
|    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
|    ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
|    ВзаиморасчетыСКонтрагентамиОстатки.Организация,
|    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
|    -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
|    -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
|    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
    
    ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
    ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);
awp
Цитата(Ученик_Покачто @ 11.01.11, 13:05) необходимо зарегистрироваться для просмотра ссылки
Корректировка долга хороший документ, но надо вручную выщитывать разницу между фактическим долгом и долгом по базе и добавлять в поле уменьшение или увеличение долга... у нас очень много контрагентов и реально очень много времени на это потратится((


При проведении документа создать документ корректировка передать в него контрагентов и договора. В самом документе корректировка есть кнопка мол заполнить по остаткам - выполнить тот код и провести документ.
Ученик_Покачто
Цитата(AlenaS @ 11.01.11, 14:02) необходимо зарегистрироваться для просмотра ссылки
Примерно так:
    НаборДвижений = Движения.ВзаиморасчетыСКонтрагентами;
    ТаблицаДвижений = НаборДвижений.Выгрузить();
    ТаблицаДвижений.Очистить();
Запрос.Текст = "ВЫБРАТЬ
|    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
|    ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
|    ВзаиморасчетыСКонтрагентамиОстатки.Организация,
|    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
|    ВзаиморасчетыСКонтрагентамиОстатки.ВидДеятельности,
|    -ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
|    -ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпр
|ИЗ
|    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаКон, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОстатки";
    
    ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
    ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаОстатков, ТаблицаДвижений);



Спасибо! даже больше чем спасибо, спасибище))) icon_beer17.gif
AlenaS
Да на здоровье smile.gif ... только не используется полностью запрос, проанализируйте измерения в регистре Взаиморасчеты вашей конфигурации.. я вот только заметила , что ВидДеятельности - это добавленное мною измерение, в типовой его нет... в вашей конфе могут быть другие различия
Vofka
И для "спасибо" у нас есть кнопка "+СПС". Где она находится - НЕ СПРАШИВАТЬ, уже миллион раз говорили!
Ученик_Покачто
Цитата(AlenaS @ 11.01.11, 14:11) необходимо зарегистрироваться для просмотра ссылки
Да на здоровье smile.gif ... только не используется полностью запрос, проанализируйте измерения в регистре Взаиморасчеты вашей конфигурации.. я вот только заметила , что ВидДеятельности - это добавленное мною измерение, в типовой его нет... в вашей конфе могут быть другие различия



Вставил запрос - все равно не обнуляет icon_cuss.gif(( переделал под всои измерения... щас буду пробовать что-нить изменить((
Ученик_Покачто
Цитата(Vofka @ 11.01.11, 14:13) необходимо зарегистрироваться для просмотра ссылки
И для "спасибо" у нас есть кнопка "+СПС". Где она находится - НЕ СПРАШИВАТЬ, уже миллион раз говорили!



Хех) уже нажал на кнопку))
AlenaS
Цитата(Ученик_Покачто @ 11.01.11, 14:16) необходимо зарегистрироваться для просмотра ссылки
Вставил запрос - все равно не обнуляет


Словно с кассовым аппаратом работаете smile.gif ... Движение с минусом делает документ?
Просмотрите по отчету по взаиморасчетам почему вылазят остатки, может не все измерения учли, с датой(временем) что-то не так
Ученик_Покачто
Цитата(AlenaS @ 11.01.11, 20:51) необходимо зарегистрироваться для просмотра ссылки
Словно с кассовым аппаратом работаете smile.gif ... Движение с минусом делает документ?
Просмотрите по отчету по взаиморасчетам почему вылазят остатки, может не все измерения учли, с датой(временем) что-то не так


в том то и дело, что не делает(( уже и с конструктором запросов делал запрос, все равно ничего((( продолжаю експеременты))
AlenaS
Цитата(Ученик_Покачто @ 12.01.11, 11:19) необходимо зарегистрироваться для просмотра ссылки
в том то и дело, что не делает(( уже и с конструктором запросов делал запрос, все равно ничего((( продолжаю експеременты))


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

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

//сюда нужно добавить строку в таблицу движений с новыми значениями регистра

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



До этого, я выкладывала только кусок, который формирует остатки таблицей и заносит ее в таблицу движений, но не записывает сами движения. Я предполагала, что запись движений Вы уже сделаете самостоятельно, после того, как добавите в таблицу движений ещё и движения по новым значения регистра.
Если причина всё же не в этом, то приведите здесь свой кусок кода полностью. Так ведь долго можно гадать, что же там не так ...
Ученик_Покачто
Цитата(AlenaS @ 12.01.11, 15:05) необходимо зарегистрироваться для просмотра ссылки
Сам по себе запрос движений и не должен делать . Он после оператора Запрос.Выполнить().Выгрузить(); должен дать Вам таблицу по остаткам, если они есть.
Проверьте этот момент в отладчике.
А движения делает оператор Движения.ВзаиморасчетыСКонтрагентами.Записать();

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

//сюда нужно добавить строку в таблицу движений с новыми значениями регистра

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



До этого, я выкладывала только кусок, который формирует остатки таблицей и заносит ее в таблицу движений, но не записывает сами движения. Я предполагала, что запись движений Вы уже сделаете самостоятельно, после того, как добавите в таблицу движений ещё и движения по новым значения регистра.
Если причина всё же не в этом, то приведите здесь свой кусок кода полностью. Так ведь долго можно гадать, что же там не так ...



Написал следующее:

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



заработало
AlenaS
Думаю, что Вы всё равно придете к варианту с выгрузкой в таблицу. У Контрагента может быть несколько догооров и также ещё разрезы Сделка, Организация, которые вы не учитываете. Обнуляется сумма в целом, но не закрываются измерения, что приведет в дальнейшем к неверным взаиморасчетам по этим разрезам..
Batchir
Ученик_Покачто, во что верим? какую религию проповедуем?

Прочтите сообщение №3, посмотрите сообщение №8 и №17. Сделайте выводы и примените их к сообщению №18.
Vofka
И прочтите необходимо зарегистрироваться для просмотра ссылки тему
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.