Имя: Пароль:
1C
 
Хеш табличного документа - разные для одинаковые докумета
0 RomaH
 
naïve
07.02.20
12:59
БСП
Общая форма "ПечатьДокументов"

При открытии
    ТабличныеДокументы = ТабличныеДокументыДляПечати();    

и считаю хеш для ТД

далее по кнопке "Печать"
делаю тоже самое

- хеш разный


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

т.е. табличный документ считывается с реквизита формы и записывается в Новый ТД - подозреваю что именно тут и порылась собака? у нового ТД всегда будет другой хэш?
1 Ёпрст
 
07.02.20
13:02
(0)Да, тов. Лобанов.. объект же новый
2 RomaH
 
naïve
07.02.20
13:04
(1) нихрена - проверил - два раза повторил алгоритм при открытии - хэш одинаковый

где-то что-то меняется между открытием и "печать"
3 ДенисЧ
 
07.02.20
13:15
(2) Ну так сравни.... В чём проблема-то?
4 RomaH
 
naïve
07.02.20
13:16
ха..
При открытии так:

Все на сервере

а при печати
ТабличныеДокументы = ТабличныеДокументыДляПечати();    - это на клиенте (получаю коллекцию с сервера)
потом коллекция передается на сервер

и вот тут что-то ломается

если коллекцию не передавать, а снова получить на сервере - то все ок
5 RomaH
 
naïve
07.02.20
13:17
т.е. вот так - хэш одинаковый

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

&НаКлиенте
Процедура Печать(Команда)
    
    ТабличныеДокументы = ТабличныеДокументыДляПечати();
    
    //Лобанов
    Если БылоРедактирование Тогда
        //ЗаписатьИзмененныеФормы(ТабличныеДокументы,ИмяКомпьютера(),ПользователиКлиентСервер.ТекущийПользователь());
        ЗаписатьИзмененныеФормы(ИмяКомпьютера(),ПользователиКлиентСервер.ТекущийПользователь());
    КонецЕсли;
6 fisher
 
07.02.20
13:21
Попробуй хэшировать выгрузку табдока в HTML, скажем. В крайнем случае сможешь увидеть, чего там меняется.