Имя: Пароль:
1C
 
дублирование записей
0 wwwqwert2014
 
20.08.14
21:35
Не могу понять, почему происходит дублирование записей. То есть один раз провел документ начисление зарплаты, сформировались записи. Второй раз провел, сформировались ЕЩЕ записи, а старые не очистились. И так далее.
Например, если 10 раз провести документ, то сформируется 10 записей Взносы в РР Удержания
1 wwwqwert2014
 
20.08.14
21:41
вот скрин. Как думаете, в чем может быть дело? http://i67.fastpic.ru/big/2014/0820/f8/5d8806a894211669b6c6a802b97724f8.png
2 Мимохожий Однако
 
20.08.14
21:41
Добавь удаление записей перед проведением
3 wwwqwert2014
 
20.08.14
21:41
обработка проведения

Процедура ОбработкаПроведения(Отказ, РежимПроведения) Экспорт
    // Вставить содержимое обработчика.
    
    Движения.ОсновныеНачисления.Записывать = Истина;
    Движения.ДополнительныеНачисления.Записывать = Истина;
    Движения.Удержания.Записывать = Истина;
    
    Движения.ОсновныеНачисления.Записать();
    Движения.ДополнительныеНачисления.Записать();
    Движения.Удержания.Записать();
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НачислениеЗарплатыОсновныеНачисления.Сотрудник,
        |    НачислениеЗарплатыОсновныеНачисления.Подразделение,
        |    НачислениеЗарплатыОсновныеНачисления.Должность,
        |    НачислениеЗарплатыОсновныеНачисления.ВидРасчета,
        |    НачислениеЗарплатыОсновныеНачисления.ПериодДействияНачало,
        |    КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ПериодДействияКонец, ДЕНЬ) КАК ПериодДействияКонец,
        |    НачислениеЗарплатыОсновныеНачисления.Результат,
        |    НачислениеЗарплатыОсновныеНачисления.Ссылка КАК Регистратор,
        |    НачислениеЗарплатыОсновныеНачисления.Ссылка.ПериодРегистрации,
        |    ЕСТЬNULL(ФиксированнаяСумма.Сумма, 0) КАК ФиксированнаяСумма,
        |    ЕСТЬNULL(ГрафикиПодразделений.График, ЗНАЧЕНИЕ(Справочник.Графики.ПустаяСсылка)) КАК График,
        |    НачислениеЗарплатыОсновныеНачисления.Переработка
        |ИЗ
        |    Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФиксированнаяСумма КАК ФиксированнаяСумма
        |        ПО (ИСТИНА)
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиПодразделений КАК ГрафикиПодразделений
        |        ПО НачислениеЗарплатыОсновныеНачисления.Подразделение = ГрафикиПодразделений.Подразделение
        |ГДЕ
        |    НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    НачислениеЗарплатыДополнительныеНачисления.Сотрудник,
        |    НачислениеЗарплатыДополнительныеНачисления.Подразделение,
        |    НачислениеЗарплатыДополнительныеНачисления.Должность,
        |    НачислениеЗарплатыДополнительныеНачисления.ВидРасчета,
        |    НачислениеЗарплатыДополнительныеНачисления.Результат,
        |    НачислениеЗарплатыДополнительныеНачисления.Процент,
        |    НачислениеЗарплатыДополнительныеНачисления.Ссылка КАК Регистратор,
        |    НачислениеЗарплатыДополнительныеНачисления.Ссылка.ПериодРегистрации
        |ИЗ
        |    Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления
        |ГДЕ
        |    НачислениеЗарплатыДополнительныеНачисления.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.ВыполнитьПакет();
    
    ВыборкаОсновные = РезультатЗапроса[0].Выбрать();
    ВыборкаДополнительные = РезультатЗапроса[1].Выбрать();

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

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

        
        
    КонецЦикла;
    
    Движения.ДополнительныеНачисления.Записать();

    
    
    Рассчет.РассчитатьОсновныеНачисления(Движения.ОсновныеНачисления, Ссылка);
    Рассчет.РассчитатьДополнительныеНачисления(Движения.ДополнительныеНачисления, Ссылка);
    Рассчет.РассчитатьУдержания(Движения.Удержания, Ссылка);
    
КонецПроцедуры
4 wwwqwert2014
 
20.08.14
21:42
я добавил удаление записей перед проведением. Видите? пустые движения записываю.
Да и какое удаление! Движения.ИмяРегистра.Записать() используется для того, чтобы при записи не учитывались старые движения документа
5 wwwqwert2014
 
20.08.14
21:42
тут что-то другое, а что не могу понять
6 ДенисЧ
 
20.08.14
21:43
Движения.ОсновныеНачисления.Очистить();
Движения.ОсновныеНачисления.Записать(Истина);
7 Мимохожий Однако
 
20.08.14
21:44
У регистратора включи свойство "Удалять движения перед.."
8 wwwqwert2014
 
20.08.14
21:48
Движения.ОсновныеНачисления.Очистить(); помогло
9 wwwqwert2014
 
20.08.14
21:49
Только такой вопрос. Почему такая фигня происходит с РР? с РН и РБ такого не было? Почему сохраниются движения после завершения работы процедуры ОбработкаПроведения?
10 wwwqwert2014
 
20.08.14
21:50
Сейчас специально открыл код примера 1С. У них все работает без всяких там Очистить(). Почему у меня тогда без Очистить() не работает?
11 wwwqwert2014
 
20.08.14
21:57
Почему в примере 1С все работает как надо без Очистить, в моем требуется очистка движений и они автоматом не очищаются?
Вот в архиве пример 1с (пример решения экзаменационного задания спеца по платформе) и мой код
http://rghost.ru/57577598
12 Мимохожий Однако
 
20.08.14
22:09
В твоей конфигурации в свойстве Удалять движения наверняка установлено "Не удалять автоматически". Поэтому и помогло то, что подсказали. Либо свойством регулируешь, либо программным кодом. ИМХО, зря удивляешься. Просто не добрался до истины.
13 wwwqwert2014
 
20.08.14
22:12
А вот и нифига. Стоит у меня "Удалять автоматически при отмене проведения". Я всегда такое стояло. И работало
14 wwwqwert2014
 
20.08.14
22:12
И всегда такое ставил
15 wwwqwert2014
 
20.08.14
22:13
Посмотрел в код примера 1С. У них тоже стоит Удалять автоматически при отмене проведения
16 Мимохожий Однако
 
20.08.14
22:16
А ты поставь просто "Удалять автоматически".
Или в Запись движений при проведении значение "Удаление движений". Всегда есть вариации.
17 wwwqwert2014
 
20.08.14
23:03
С этим моментом все понятно. Непонятно одно: почему в примере 1С все без танцев с бубном работает?
18 1sanekmaloi1
 
21.08.14
01:02
У тебя при открытии формы читаются движения на форму, поэтому в обработке проведения наборы не пустые, убери с формы обращение к Объект.Движения и будет работать без принудительной очистки движений.