Имя: Пароль:
1C
1С v8
Определить форму печатного документа с приложением или без
,
0 serg-lom89
 
11.01.17
11:38
Добрый день!
Возникла у нас проблема печати ТТН.
Постараюсь как то расписать проблему , надеюсь меня услышат!

В АРМ печати когда пользователь нажимает на кнопку печать по выбранному документу,происходит проверка следующего типа

По данному документу выбираются объединённые документы(если таковые есть конечно),берутся все документы, считается количество строк+ добавляется число строк шапки(задано программно)  и проверяется влезет ли на лист(количество строк на листе также задано программно )

Проблема возникает следующая,она как бы определило что должно печататься без приложения,но в итого в печатной форме стоит Автовысота строк и если наименование номенклатуры в выборке короткое то все ок,а если нет то получается переползает на след лист.и бух негодует типа что за фигня.
Я ей проблему обрисовал.Но как всегда "сделай,что бы работало".
Какие можно сделать что бы такого не было результата?
Предварительно печатать документ ,проверять какое количество строк и определять с приложением или нет?
Подскажите как уйти от проблемы.(от буха уйти не удастся=))  )
1 Cool_Profi
 
11.01.17
11:41
ПроверитьВывод() ?
2 serg-lom89
 
11.01.17
11:43
(1)
    КоличествоСтрокТаб = 0;
    Для каждого Строка из МассивРеализаций Цикл
        КоличествоСтрокТаб = КоличествоСтрокТаб + Строка.Товары.Количество();
    КонецЦикла;
    
    Если КоличествоСтрокТаб > 0 Тогда
        ВсегоСтраниц = ОпределитьКолСтраниц(СтрокШапки, СтрокПодвала, КоличествоСтрокТаб, СтрокНаСтранице);
    КонецЕсли;
    
    Если ВсегоСтраниц = 1 Тогда
        ВидФормыПечати = "Без";
    ИначеЕсли ВсегоСтраниц > 1 Тогда
        ВидФормыПечати = "приложение";
    КонецЕсли;
    
    Возврат ВидФормыПечати;
3 serg-lom89
 
11.01.17
11:43
которая определяет с приложением или нет процедура
4 serg-lom89
 
11.01.17
11:48
Функция которая определяет количество строк

Функция ОпределитьКолСтраниц(СтрокШапки, СтрокПодвала, КоличествоСтрокТаб, СтрокНаСтранице)
    
    ЦелыхСтраниц = Цел(КоличествоСтрокТаб/(СтрокНаСтранице - СтрокШапки));
    
    ОстатокСтрок = КоличествоСтрокТаб - ЦелыхСтраниц * (СтрокНаСтранице - СтрокШапки);
    
    Если (ОстатокСтрок + СтрокШапки + СтрокПодвала) > СтрокНаСтранице Тогда
        ЦелыхСтраниц = ЦелыхСтраниц + 2;
    Иначе     
        ЦелыхСтраниц = ЦелыхСтраниц + 1;
    КонецЕсли;
    
    Возврат ЦелыхСтраниц;
    
КонецФункции
5 serg-lom89
 
11.01.17
11:52
у кого какие идеи есть?
6 FIXXXL
 
11.01.17
11:56
что есть "приложение"?
по ходу надо менять тупую логику определения варианта печати, смотреть в сторону "По данному документу выбираются объединённые документы", если "объединенных" больше 0 тогда "приложение"
7 serg-lom89
 
11.01.17
11:58
(6) не факт,могут быть 3 документа и в каждом по 2 товара(клиент в течении дня заказы делает),и что бы по каждой накладной не печатать и не тратить бумагу дешевле в них поставить номер БСО
8 serg-lom89
 
11.01.17
12:03
(6) А если накладных много ,то клиенту печатается ТТН с прилжением
На Бланке оригинальном (количество ,сумма по всем товарам ) и на обычных листах затем перечь всего товара что он берет
9 FIXXXL
 
11.01.17
12:06
(7) (8) я к сожалению (или к счастью :)) не в курсе ваших заморочек с бумагой и печатью
но вышеуказанный код тупо смотрит "влезет-не влезет", если это норм.работает, тогда добавляй доп.условие проверки ПроверитьВывод() и там решай чего надо бушкам
10 serg-lom89
 
11.01.17
12:11
(9) так оно то понимает что только   количеству строк из ДОКУМЕНТОВ,оно не предусматривает что промониторить печ форму надо ,и влезет или нет
11 serg-lom89
 
11.01.17
16:43
up тему
12 mistеr
 
11.01.17
17:02
Что непонятно? (2) это ленивый сопсоб определения "влезет-не-влезет", а правильный способ - (1).

Еще вариант (тоже ленивый) - поставить везде заполнение "Обрезать", чтобы не разъезжалось. Но бухов это вряд ли устроит.
13 serg-lom89
 
11.01.17
17:32
(12) и как тогда интересно использовать проверитьВывод() если в него передается массив из проверяемых таблиц или табличный документ. ?а у меня определяет числовым значениям
14 serg-lom89
 
11.01.17
17:33
это по старой схеме
15 serg-lom89
 
11.01.17
17:36
(14) как в (2)
16 FIXXXL
 
11.01.17
17:41
(13) неправильно это, числом определять
ибо завтра в макете пару строк добавят и алга
17 mistеr
 
11.01.17
17:58
(13) Да, это придется много переписывать. Примеров в Сети полно.

http://programna1c.narod.ru/docs/Articles/CheckPut/PrintCheckPut.html
18 serg-lom89
 
12.01.17
08:47
(17) наверное не очень поняли меня
В  (2)  определяю Сприложением или Без приложения и затем выполняю
вот такой вот код

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

И вопрос как мне более лучше сделать в (2)
19 mistеr
 
12.01.17
09:37
(18) Это ты не понял.

Еще раз. (2) и (4) работает ненадежно, писал скорее всего семерошник, там не было ПроверитьВывод(). Если ты хочешь, чтобы вот это:

>проверяется влезет ли на лист(количество строк на листе также задано программно )

работало правильно даже в случае переноса строк, нужно использовать ПроверитьВывод(), другого пути нет. Другой путь - сделать так, чтобы переносов не случалось.