Имя: Пароль:
1C
1С v8
1C83 Толстый,SQL Помогите проанализировать ЖР. не хотелось бы списывать на глюк.
0 mrWatson
 
27.05.16
16:59
Добрый день, коллеги.
Есть  функционал для массовой распечатки документов для бух-ии.



Попытка
    //заменим временно принтер на выбранный пользователем
    УправлениеПользователями.УстановитьЗначениеПоУмолчанию(
                _ТекПользователь,
                "ПринтерПоУмолчанию",
                ВыбранныйПринтер
    );
    Для Каждого СтрТЗПечатныхФорм Из ТЗПечатныхФорм Цикл
        
        _СтрСообщения = "Отправляю на принтер "+_Документ+
                        " печ. форма "+_ИмяФормы+" экземляров: "+_КолВоНаПечать;
        Сообщить(_СтрСообщения);

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




У одного бухгалтера упала 1С ка во время распечтаки. И часть документов улетела на сетевой принтер, но в реестр успешных распечаток не попала. Не могу понять как могло произойти.

Вот снимок ЖР

https://drive.google.com/open?id=0B05BL9oxO0quQUkxdGVZbWQyNVE

Вначале все идет хорошо.
Каждая запись имеет свой номер транзакции.

Потом все записи в регистры сведений почему-то подбились под одним номером транзакции. И они же в итоге и не зафиксировались т.к. 1С упала. Хоят транзакций нигде не открывалось. Эта процедура вызыватеся по кнопке из формы.

Что это такое, почему не произошло исключение? почему цикл продолжает работать, хотя запись в регистр не завершена.
1 mrWatson
 
27.05.16
17:36
Можно упростить вопрос почему после завершенной транзакции 941019 остальные транзакции имеют тот же номер но незавершены. Как такое объяснить?
2 MrStomak
 
27.05.16
18:15
Нужно в выводимую информацию ЖР добавить события начала, отмены и фиксации транзакций.
Сама транзакция, как ты понимаешь, не может завершиться успешно только частично.
Разница между успешной записью и неуспешным изменением настроек пользователя - минуты 2, тут явно не одно за другим всё происходило.
3 mrWatson
 
27.05.16
19:17
узнать бы как определяется номер транзакции. в беглом поиске не нашел. его либо выдает SQL сервер либо присваивает сервер 1С.
4 Fram
 
27.05.16
19:32
(1) Кто сказал что после? Время у событий одинаковое, поэтому ЖР отобразил события рандомно
5 ILM
 
гуру
27.05.16
19:33
Скорее всего перестал быть доступен принтер.
6 Fram
 
27.05.16
19:36
+(4) вернее, скорее всего, БД выплюнула одинаковое время в рандомном порядке, а 1С как получила так и записала.
7 mrWatson
 
27.05.16
19:39
(6) это время начала транзакции, то, что под номером транзакции. а вот время выполнения записи оно слева в колонке.
возможно конечно где-то образовалась незакрытая транзакция т.к. код я не полностью привел. Но с номерами всеравно получилась борода.
8 mrWatson
 
27.05.16
19:42
(5) по-моему он должен был вывалиться в исключение.

мне интересно кто моросит.
Закон Брукера: Даже маленькая практика стоит большой теории.