Имя: Пароль:
1C
 
Критическая ошибка платформы при выводе большого количества печ. форм
0 mzelensky
 
13.01.20
11:36
Доброго времени суток!

Имеется:

1) Win Server 20008
2) 1С:Предприятие 8.2.19.130
3) База на SQL
4) Работа в RDP терминале
4) Конфа на обычных формах (толстый клиент), нетиповая (что-то между Ут10.3 и Розницей)

Запускаю обработку печати ценников. В тестовом примере 350 номенклатурных единиц, совокупно 5700 этикеток.

Варианты:

1) При выводе (через "ТабДок.Показать()") в один табличный документ система падает (зависает с выводом сообщения "Прекращена работа программы 1cv8")
2) При выводе (через "ТабДок.Показать()") в несколько табличных документов, по 100 этикеток в каждый, система падает (зависает с выводом сообщения "Прекращена работа программы 1cv8")
3) При сохранении (через "ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX)") в несколько табличных документов, по 100 этикеток в каждый, система падает (зависает с выводом сообщения "Прекращена работа программы 1cv8")

По последним наблюдениям, когда идет сохранение табличных документов (описанный выше вариант №3), то система на протяжении всего процесса "выжирает" память. Но каких-то критических значений нет. Как только выделяемый размер оперативной памяти на процесс доходит до "560  000 Kb", то в этот момент система зависает.

И все это никак не связано с составом самих товаров, их последовательностью и так далее.

Вопрос:

1) Почему в данном случае выжирается память, если я ничего не накапливаю?
2) Как победить эту проблему?
1 ДенисЧ
 
13.01.20
11:37
1. Потому что неустраняемый баг в платформе со времён 77.
2. Вывести 100, перезапустить 1с, повторить
2 mzelensky
 
13.01.20
11:40
(1) Это где-то документировано, описано?

"Вывести 100, перезапустить 1с, повторить" - меня юзеры уже достали жаловаться на эту проблему. Им периодически нужно выводить большой объем этих этикеток и вручную выделять эти "порции" безумно неудобно.
3 Ёпрст
 
13.01.20
11:43
(0) А зачем их показывать ? Отправляй сразу на выбранный принтёр и всё.
4 mzelensky
 
13.01.20
11:47
(3) Без разницы. Я тоже сперва думал, что дело в отображении. Но нет.
5 shuhard
 
13.01.20
11:48
(1) +1
фича известная, способы борьбы очевидны
6 mzelensky
 
13.01.20
12:25
(5) Ну как, поделись "очевидными" способами. Я что-то адекватных не вижу.

Мне нужно или "показатЬ" все эти печатные формы или сохранить в файлы, чтобы потом можно было переслать.
7 Adilgeriy
 
13.01.20
12:49
печать в PDF не пробовал?
8 Franchiser
 
гуру
13.01.20
13:11
Если печатаешь штрихкоды, то  м.б. отказаться от ВК ШК ?
9 ProxyInspector
 
13.01.20
13:31
У меня подобная фигня была, когда был реализован кривой механизм формирования картинки ШК. По сути получалось что каждая картинка ШК это был объект типа Paint.exe и каждый занимал кучу места. В какой то момент это все отваливалась.
  Я сейчас попробовал на своей базе порядка 2000 этикеток на 300 страниц. Проблем нет.
  Вероятнее всего у (0) кривые ручки
10 mzelensky
 
13.01.20
14:07
(9) Как сейчас вывод ШК у тебя реализован?
11 Ёпрст
 
13.01.20
14:47
(10) шрифтом поди
12 mzelensky
 
13.01.20
15:29
(9) Так как?
13 Ёпрст
 
13.01.20
15:35
(12) чего как ? Обычный шрифт для печати шк
14 Franchiser
 
гуру
13.01.20
15:35
(12) только функция спец нужна: не просто применить шрифт к 13 цифрам EAN 13
15 unenu
 
13.01.20
15:36
(2) а что не так?
платформа не падает, просто ваш кривой код поедает все ресурсы.
16 Franchiser
 
гуру
13.01.20
15:37
Функция СформироватьСтрокуEanGnivc(ШтрихкодСтрокойСимволов) Экспорт
    Попытка
        Тест = Число(ШтрихкодСтрокойСимволов);
    Исключение
        ВызватьИсключение "Штрихкод может содержать только цифры";
    КонецПопытки;

    СимволыСпособовКодирования = "#$%&'()*+,";
    ЛевыйЗащитныйШаблон = "!";
    СреднийЗащитныйШаблон = "-";
    ПравыйЗащитныйШаблон = "!";

    СимволыШрифтаПоТипамКодов = Новый Соответствие;
    СимволыШрифтаПоТипамКодов.Вставить("L", "0123456789");
    СимволыШрифтаПоТипамКодов.Вставить("G", "ABCDEFGHIJ");
    СимволыШрифтаПоТипамКодов.Вставить("R", "abcdefghij");

    СпособыКодированияЛевойЧасти = Новый Массив;
    СпособыКодированияЛевойЧасти.Добавить("LLLLLL");
    СпособыКодированияЛевойЧасти.Добавить("LLGLGG");
    СпособыКодированияЛевойЧасти.Добавить("LLGGLG");
    СпособыКодированияЛевойЧасти.Добавить("LLGGGL");
    СпособыКодированияЛевойЧасти.Добавить("LGLLGG");
    СпособыКодированияЛевойЧасти.Добавить("LGGLLG");
    СпособыКодированияЛевойЧасти.Добавить("LGGGLL");
    СпособыКодированияЛевойЧасти.Добавить("LGLGLG");
    СпособыКодированияЛевойЧасти.Добавить("LGLGGL");
    СпособыКодированияЛевойЧасти.Добавить("LGGLGL");

    СпособКодированияПравойЧасти = "RRRRRR";

    Если СтрДлина(ШтрихкодСтрокойСимволов) = 13 Тогда
        КоличествоСимволовВГруппе = 6;
    ИначеЕсли СтрДлина(ШтрихкодСтрокойСимволов) = 8 Тогда
        КоличествоСимволовВГруппе = 4;
        СимволыСпособовКодирования = "";
        ШтрихкодСтрокойСимволов = "0"+ШтрихкодСтрокойСимволов;
    Иначе
        ВызватьИсключение "Поддерживаются только штрихкоды длиной 13 и 8 символов";
    КонецЕсли;

    ИндексСпособаКодирования = Число(Лев(ШтрихкодСтрокойСимволов,1));

    ЛеваяЧастьКода = "";
    ПраваяЧастьКода = "";

    Для ИндексСимвола = 1 По КоличествоСимволовВГруппе Цикл
        ЛеваяЧастьКода = ЛеваяЧастьКода
            + Сред(СимволыШрифтаПоТипамКодов[Сред(СпособыКодированияЛевойЧасти[ИндексСпособаКодирования],ИндексСимвола,1)]
                    ,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+1),1))+1
                    ,1);
        ПраваяЧастьКода = ПраваяЧастьКода
            + Сред(СимволыШрифтаПоТипамКодов[Сред(СпособКодированияПравойЧасти,ИндексСимвола,1)]
                    ,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+КоличествоСимволовВГруппе+1),1))+1
                    ,1);
    КонецЦикла;

    Результат = ""  + Сред(СимволыСпособовКодирования,ИндексСпособаКодирования+1,1)
                    + ЛевыйЗащитныйШаблон
                    + ЛеваяЧастьКода
                    + СреднийЗащитныйШаблон
                    + ПраваяЧастьКода
                    + ПравыйЗащитныйШаблон;
    Возврат Результат;
КонецФункции
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн