Имя: Пароль:
1C
1С v8
1С 8 УПП Распределенка и перерасчеты
0 golden-pack
 
26.07.13
10:42
1C 8.2 УПП 1.3

РИБ  по типовому плану обмена "Полный" + незначительный доработки для корректировки коллекции получателей.

Ситуация: Из центра грузититя обмен в базу, в которой не зарегистрированы никакие изменения. После загрузки обмена - регистрируются изменения по двум таблицам: Перерасчет доп. начислений, ПерерасчетОснНачислений
http://s55.radikal.ru/i150/1307/c2/971cf65ecba3.jpg

Всю конфу перерыл: проверил процедуры ПередЗаписью(), ПриЗаписи() - документов по кадровому и зарплатному учету и самих регистров расчетов, все подписки на события - не нашел код, который бы избыточно перезаписывал (т.е. регистрировал) данные.

Глобаальнйы поиск по словам "ПерерасчетДополнительныхНачислений" в общем модуле "ПроведениеРасчетов" - нашел две процедуры:

Процедура ОбработатьТаблицуПерерасчетов(Ссылка) Экспорт
//...
ВыборкаОбъектПерерасчета = Запрос.Выполнить().Выбрать();
    Пока ВыборкаОбъектПерерасчета.Следующий() Цикл
        Если ЗначениеЗаполнено(ВыборкаОбъектПерерасчета.ОбъектПерерасчетаОсновные) Тогда
            НаборЗаписейПерерасчета = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.Перерасчеты.ПерерасчетОсновныхНачислений.СоздатьНаборЗаписей();
            НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = ВыборкаОбъектПерерасчета.ОбъектПерерасчетаОсновные;
            НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Использование = Истина;
            НаборЗаписейПерерасчета.Записать();    
        КонецЕсли;
        Если ЗначениеЗаполнено(ВыборкаОбъектПерерасчета.ОбъектПерерасчетаДополнительные) Тогда
            НаборЗаписейПерерасчета = РегистрыРасчета.ДополнительныеНачисленияРаботниковОрганизаций.Перерасчеты.ПерерасчетДополнительныхНачислений.СоздатьНаборЗаписей();
            НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = ВыборкаОбъектПерерасчета.ОбъектПерерасчетаДополнительные;
            НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Использование = Истина;
            НаборЗаписейПерерасчета.Записать();    
        КонецЕсли;
    КонецЦикла;

//...

+ Еще процедура Процедура "УдалитьСведенияОПерерасчетеДокумента(ДокументСсылка, ТолькоПоИсправленнымДокументам = Ложь) Экспорт"

Ставил точку останова, прогонял обмен из под клиента + подключал серверную отладку - не останавливается.

Собственно что делать ? Где еще смотреть ...
1 Галахад
 
гуру
26.07.13
10:51
А непосредственно при обмене, в менеджере записи поставить точку останова?
А потом по стеку вызовов найти негодника.
2 golden-pack
 
26.07.13
10:59
(0) точно, попробую отпишусь ...
3 golden-pack
 
26.07.13
10:59
(2) к (1)
4 golden-pack
 
26.07.13
11:36
поставил точку останова в модуле набора записей перерасчета.

остановилось 2 раза, при том что записываемые набор один:
http://s14.radikal.ru/i187/1307/9e/50a31c09a965.jpg
5 golden-pack
 
31.07.13
10:32
6 golden-pack
 
31.07.13
10:33
ответа нет, видимо записи переасчетов формируются автоматически платформой при непоследовательной загрузке данных из файла обмена
7 golden-pack
 
02.08.13
07:39
ап
8 golden-pack
 
08.08.13
05:27
ап
9 golden-pack
 
08.08.13
05:29
Срабатывает типовой механизм (т.е. без кода) - при записываниеи документам из обмена (метод "ПланыОбмена.ПрочитатьИзменения") в таблицу перерасчетов добавляется запись(добавляется не в режиме обмена данными).

Что делать ?
10 golden-pack
 
08.08.13
05:46
Еще раз, например: в центре проводится документ "Невыход в организации" при этом добавляются записи в таблицы перерасчетов основных и дополнительных начислений работников организаций.

Далее при загрузке в узле файла из центра ставится точка останова в проц. Передзаписью Перерасчета Основных начислений.

Первая остановка - режим обмена данными = Истина (все ок - изменения пришли)

Вторая остановка - режим обмена данными = Ложь( здесь ошибка - этого быть не должно)
11 golden-pack
 
08.08.13
05:47
+(10) во второй остановке в стеке вызовов перед самой остановкой процедура:     ОбщийМодуль.ПроцедурыОбменаДанными.Модуль.ЗагрузитьCообщениеСИзменениямиОтРИБУзла(СтруктураНастроекОбменаДанными = Структура, ЧтениеXML = ЧтениеXML, КонфигурацияИзмененаПриОбменеРИБ = Ложь)    1 593    

ТО ЕСТЬ никакой код не отрабатывается
12 golden-pack
 
08.08.13
05:48
Процедура ЗагрузитьCообщениеСИзменениямиОтРИБУзла(СтруктураНастроекОбменаДанными, ЧтениеXML, КонфигурацияИзмененаПриОбменеРИБ = ЛОжь)
    
    СтруктураНастроекОбменаДанными.РезультатЧтенияДанных = Истина;
    КонфигурацияИзмененаПриОбменеРИБ = Ложь;

    // Загрузка из найденного файла
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

    Попытка
        ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, СтруктураНастроекОбменаДанными.КоличествоЭлементовВТранзакцииНаЗагрузкуДанных);
        
        ЧтениеСообщения.ЗакончитьЧтение();
        ЧтениеXML.Закрыть();
        
    Исключение
        
        СообщитьИнформациюОбОшибкеОбмена("Ошибка при чтении изменений при обмене РИБ: " + ОписаниеОшибки(), СтруктураНастроекОбменаДанными, Истина, Ложь);
        
        // ошибка может быть связана с тем, что изменилась конфигурация информационной базы
        Если ПланыОбмена.ГлавныйУзел() <> Неопределено
            И КонфигурацияИзменена() Тогда
            
            КонфигурацияИзмененаПриОбменеРИБ = Истина;
            СтруктураНастроекОбновленияКонфигурации = ПолучитьСтруктуруНастроекФайлаОбновленияКонфигурации();
            
            НужноОбновлятьКонфигурацию = Ложь;
            СтруктураНастроекОбновленияКонфигурации.Свойство("АвтоматическиОбновлятьКонфигурациюПриПриемеСообщенияОтГлавногоУзлаРИБ", НужноОбновлятьКонфигурацию);
                        
            Если НужноОбновлятьКонфигурацию = Истина Тогда
                
                НастройкаОбмена = Неопределено;
                Если СтруктураНастроекОбменаДанными.ДанныеНастройкиАвтообмена <> Неопределено Тогда
                    НастройкаОбмена = СтруктураНастроекОбменаДанными.ДанныеНастройкиАвтообмена.Ссылка;
                КонецЕсли;
                
                // при необходимости нужно обновить конфигурацию ИБ
                ВыполнитьОбновлениеКонфигурацииДляИнформационнойБазы(НастройкаОбмена, СтруктураНастроекОбновленияКонфигурации);
            
            КонецЕсли;
            
        Конецесли;
        
        Возврат;
                        
    КонецПопытки;
    
КонецПроцедуры
13 golden-pack
 
08.08.13
10:24
ап
14 Maxus43
 
08.08.13
10:26
ты почитал что вобще за объекты это, Перерасчеты?
15 golden-pack
 
08.08.13
10:27
(14) да, если что то хочешь сказать - говори прямо :)
16 Maxus43
 
08.08.13
10:40
погодь, (10) точно? вторая точка не в режиме обмена данными?
17 golden-pack
 
08.08.13
10:43
(16) да
18 Maxus43
 
08.08.13
10:45
у перерасчетов кстати есть свой модуль набора записей, там гадости нет?
19 golden-pack
 
08.08.13
10:48
(18) я все проверил. там ничего нет, именно там ставил точку останова в (10)
20 Maxus43
 
08.08.13
10:53
автоматом платформой они не регистрируются, всё в коде должно быть... дебаг включен? хоть и делаешь "на клиенте", возможно некоторые процедуры таки едут на сервер принудительно, и не видать их
21 golden-pack
 
08.08.13
10:56
(20) прочитай еще раз (0) там написано что включен режим отладки. Что глобальным поиском по конфе были найдены все места где упоминаются перерасчеты, что везде в них ставились точки останова и что результата это не принесло.  Отсюда вывод что перерасчеты регятся автоматом платформой ... можешь как то аргументировать что не регятся ? Вот еще (5) прочитай - там такой же вопрос без ответа
22 Maxus43
 
08.08.13
11:04
да, покурил библию большую, всё правильно, перерасчеты в некоторых случаях пишутся автоматом платформой, причем автоматом как правило не удаляются.
Собсно у нас в РИБе тоже постоянно зарегистрированы различные перерасчеты, никому не мешает, они носят рекомендательный характер. Разрабы типовых не предусмотрели все случаи очистки перерасчетов, на днях тоже будум разбираться с ними