Имя: Пароль:
1C
1С v8
Как очистить движение при перепроведении
,
0 Klesk
 
08.12.12
08:10
УТ 11. ПКО. Автоматическое удаление движений не стоит.

Хочу сделать запись в регистр, если сначала по реализации (расчетный документ) был сделан приход по регистру и есть остаток:

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

проблема в следующем, если отменить проведение реализации, то при перепроведении ПКО, он находит запись свою, и оставляет её.

Подозреваю, что надо сюда что то добавить, но не знаю что:

Процедура ПодготовитьНаборыЗаписейКРегистрацииДвижений(Объект) Экспорт

   Для Каждого НаборЗаписей Из Объект.Движения Цикл
       
       Если НаборЗаписей.Количество() > 0 Тогда
           НаборЗаписей.Очистить();
       КонецЕсли;
       
   КонецЦикла;
1 Ns33
 
08.12.12
10:21
+ НаборЗаписей.Записать();
2 Klesk
 
08.12.12
10:38
для всех записей НаборЗаписей.Количество() = 0
т.е. она не поадает в НаборЗаписей.Очистить();
3 Ns33
 
08.12.12
11:16
(2) Ну те же их не прочитал (НаборЗаписей.Прочитать()), поэтому все наборы при создании пустые, а Записать() - записывает пустой набор, т.е. перезаписывает существующие в базе.
4 Klesk
 
08.12.12
11:20
(3) я все боюсь переписывать, не зря наверно в типовой они не переписываются, хочу только свой
5 Armando
 
08.12.12
11:34
я не понял в чем проблема
ты добавил свой регистр и двигаешь его? а он не двигается? или что?

и вот еще глаза режет:
"И ПриходныйКассовыйОрдер.Ссылка.СписыватьДолгЗаВодителем = ИСТИНА"
6 Рэйв
 
08.12.12
11:37
Движения.ИмяРегистра.Очистить()
7 Рэйв
 
08.12.12
11:37
В обработке проведения
8 Рэйв
 
08.12.12
11:38
Вы как первый раз замужем чесслово!:-)
9 Klesk
 
08.12.12
18:30
а что означает
НаборЗаписей.Количество()
и почему оно равно нулю, хотя движения есть.
10 Тьма
 
08.12.12
18:35
(9)см (3)
11 Klesk
 
08.12.12
18:39
(10) это не я, это в типовой
12 Klesk
 
08.12.12
18:43
В УТ 11 при неоперативном проведении, видимо совсем не чистятся движения, не могу найти пример как это сделать, видимо изначально, что то криво у меня в запросе
13 Рэйв
 
08.12.12
18:44
Это  наверное так посовременному...
14 Рэйв
 
08.12.12
18:44
Рука-лицо
15 Рэйв
 
08.12.12
18:45
%:-)))
16 Klesk
 
08.12.12
18:55
ВЫБРАТЬ
   &Период КАК Период,
   &Период КАК ДатаРегистратора,
   &Период КАК ДатаПлатежа,
   ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
   ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.Организация,
   ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.ПодотчетноеЛицо,
   ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.Валюта,
   ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.РасчетныйДокумент,
   ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.СуммаКонечныйОстаток,
   ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.Регистратор
ИЗ
   РегистрНакопления.ДенежныеСредстваУПодотчетныхЛиц.ОстаткиИОбороты(, , Регистратор, , ) КАК ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
       ПО ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.ПодотчетноеЛицо = ПриходныйКассовыйОрдер.ДокументОснование.Водитель
           И ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.РасчетныйДокумент = ПриходныйКассовыйОрдер.ДокументОснование
           И ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.Валюта = ПриходныйКассовыйОрдер.Валюта
           И ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.Организация = ПриходныйКассовыйОрдер.Организация
ГДЕ
   ПриходныйКассовыйОрдер.Ссылка = &Ссылка
   И ПриходныйКассовыйОрдер.Ссылка.СписыватьДолгЗаВодителем = ИСТИНА
   И ДенежныеСредстваУПодотчетныхЛицОстаткиИОбороты.Регистратор <> &Ссылка
17 Klesk
 
08.12.12
18:57
так наверно дольше, зато не надо перелапачивать общий модуль ПроведениеСервер
если кто то подскажет как по типовому в типовой УТ11 чистятся движения без автомачиского удаления движений, буду признателен.
18 Klesk
 
08.12.12
19:42
кажется догнал

       ДвиженияПоПодотчетникам=ДокументСсылка.ПолучитьОбъект().Движения.Найти("ДенежныеСредстваУПодотчетныхЛиц");
       Если ДвиженияПоПодотчетникам<>Неопределено Тогда
            ДвиженияПоПодотчетникам.Очистить();
       КонецЕсли;


Так правильно?
19 Klesk
 
08.12.12
21:25
Так правильней?
20 hhhh
 
08.12.12
23:02
(18) объект получать необязательно. можно быстрее, без получения объекта.

Набор = РегистрыНакопления.ДенежныеСредстваУПодотчетныхЛиц.СоздатьНаборЗаписей();
Набор.Отбор.регистратор.Установить(ДокументСсылка);
Набор.очистить();
Набор.Записать();
21 Klesk
 
08.12.12
23:22
(20) спасибо
22 zak555
 
09.12.12
13:29
(20) зачем очистить, если у записать есть "параметр" перезаписи
23 Klesk
 
10.12.12
06:00
А если такой вариант:

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




Запрос.УстановитьПараметр("МоментВремениИсключая",  Новый Граница( Реквизиты.Период, ВидГраницы.Исключая));

Т.е. брать остаток на момент времени документа, исключая документ

Чето у меня логика не работает, так по идее быстрее всего, но правильно это?
24 Alex_MA
 
10.12.12
08:11
(0)
Перем мУдалятьДвижения Экспорт;

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