8.х Печатная форма спецификации по ГОСТу

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Anastasiya, 6 июл 2007.

  1. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Кто-нибудь, подскажите, пожалуйста, где найти в 1с УПП 8.1 как заносится информация в печатную форму спецификаций по ГОСТу???
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Модуль объекта СпецификацииНоменклатуры посмотри:

    Код:
    // Функция формирует табличный документ с печатной формой спецификации
    // по ГОСТ 2.106-96.
    //
    // Возвращаемое значение:
    //  Табличный документ - печатная форма спецификации
    //
    Функция ПечатьСпецификацииГост()
    
    Там данные и берутся из текущего элемента.
    Если не поможет, посмотрим еще. :)
  3. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    О! Да. Это именно то, что я искала. Спасибо. Сейчас буду разбираться. Кстати, может быть Вы знаете, там по ГОСТу еще должны быть так называемые дополнительные главы, которые рисуются на макете сбоку и вертикально. Как это сделать? Если размер печатной фолрмы меняется динамически в зависимости от количества позиций в спецификации.
  4. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    С самим ГОСТом по производству я не знаком.
    Когда размер меняется динамически можно подсчитать количество строчек, которое выводится и необходимую информацию:
    1. Распределить по количеству выведенных строк (не очень способ)
    2. Вывести в одной ячейке и ее объединить с нужным количеством ячеек (это делается через области макета - не самая простая операция, но и не сверхсложная)

    Код:
    Область = ТабличныйДокумент.Область(X0, Y0, X1, Y1);
    Область.Объединить();
    
    
    Где X0, Y0 - адрес левой верхней ячейки, X1, Y1 - правой нижней ячейки области. НУ такой прямоугольничек и объединяется.

    В вашем случае, я думаю X0 = X1, Y1 = Y0 + КоличествоСтрок - 1 - как то так
  5. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Т.е. таким образом объединение не зависит от количества строк в шапке и динамически меняющегося списка элементов?
    Присоединяю файл как должна выглядеть спецификация, по этому ГОСТу, красным отмечены эти самые поля. Там еще проблема в том, что они должны быть абсолютно точного размера, то есть они не попадают по размерам строк.

    Вложения:

    • Spec.JPG
      Spec.JPG
      Размер файла:
      81,6 КБ
      Просмотров:
      130
  6. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    С формами с абсолютно точными размерами в 1Ске не очень хорошо конечно, можешь глянуть - часто встречаются макеты с узенькими ячейками.

    Можно попробовать использовать картинки (вставлять в макет готовые картинки - это как-то тоже можно сделать, я не занимался, но можешь посмотреть печать ценников, наверняка есть способы), то есть ты объединяешь нужное количество ячеек, делаешь выравнивание снизу например и вставляешь картинку, в которой уже рамка нарисована задним фоном, текст, если меняется, то поверх или уже в самой картинке прописан).

    Более того, в случае, если ты так распечатываешь, тебе наверное стоит выводить определенное количество пустых строчек (а то до формата А4 недотянет) хато тогда ты точно будешь знать сколько ячеек у тебя должна занимать боковая надпись.
  7. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Не сильно поняла идею на счет картинок.
    Кстати, на счет формата А4. Как он определяется в 1С? Ну то есть, размеры или линейка какая-нить?
    Еще у меня была такая идея, не знаю на сколько осуществимая... По горизонтали таблица разбивается на секции, а по вертикали такое разбиение провести возможно? Тогда бы вообще отпал вопрос.
    Да и совсем тупой вопрос: если секция состоит из одной строки, как туда добавить строки?
  8. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Формат А4 не определяется. Насколько мне известно. Делали ручным расчетом количества строк.

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

    Если секция состоит из одной строки, то, если вывести ее 5 раз - ты получишь 5 строк.
  9. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Ручной расчет: Сдвинули столбец на милиметр - уже не А4? ;)
    Не правильно сформулировала, наверное, может не секции, а область? чтоб там была не одна строка, а несколько? Потому что, несколько раз они и так выводятся, а мне нужно добавить просто пустую строку.
    То есть нельзя так: создать эти вертикальные секции, подогнать их как надо на макете, а потом вносить туда данные?
  10. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Нельзя, к сожалению. Но, есть выход, мне в голову тут пришло.

    1. Делаешь шаблон в Excel - просто как внешний общедоступный файл с уже откорректироваными размерами и ячейками
    2. Коннектишься к Excel файлу
    3. Заполняешь значения нужных ячеек

    И открываешь этот файл в Excel

    Подсоединение к файлу и получение листа
    Код:
    Попытка
    Excel = Новый COMОбъект("Excel.Application");
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Попытка
    Книга = Excel.WorkBooks.Open(ИмяФайла);
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    Лист = Книга.Sheets(СокрЛП(НазваниеЛиста));
    
    
    Запись в ячейку
    Код:
    Лист.Cells(Строка, Столбец).Value = Значение;
    
    
  11. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Клевая идея!!!
    Мне что-то подобное приходило, но не оформилось окончательно. Спасибо, попробую в понедельник.
  12. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Да... Идея клевая... Только спецификация состоит, грубо говоря, из 2-х листов: заглавный и остальные. Я так понимаю, что список элементов спецификации получается из запроса. Тогда нужно точно знать, что в первый лист мы загоняем столько-то элементов, остальные во второй и далее?
    После создания шаблона в Excel у меня вылезут глаза и будет уже все равно как и что делать дальше! :(
  13. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Тогда лучше делай через 1Ску, причем заранее получи количество строчек общее, рассчитай скольк острочек у тебя на заглавном олисте влезает, сколько на дополнительных, после чего продумай вывод на печать. Я думаю, что к высоте боковых полей (если они будут совпадать по высоте с несколькими объединенными ячейками) не придерутся.
  14. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А почему вас смущает работа с вертикальными секциями. Можно получать области как пересечение двух секций и с ними работать.
    Макет.ПолучитьОбласть("Шапка|Строка");
    А далее работать с ними?
  15. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Меня это не смущает. Просто я чайник, и мне надо все подробно объяснять. :) Поэтому вы не могли бы пояснить как получить пересечение 2-х секций. Необходимый вид, который нужно получить, есть на рисунке выше.
  16. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Эх... я вчера полдня прокалупалась, делая эти шаблоны. Думаю можно будет и данные заносить, зная верхнюю левую ячейку из объединенных, т.к. без объединения было не обойтись :( Строчки я все высчитала. Теперь только нужно определить как это все сохраняться будет. То есть, сделала шаблоны, они где-то хранятся. Пользователь нажимает кнопку, должна создаваться копия шаблона, сохраняться куда-то и ему показываться заполненная.
    А к высоте придираться будут и еще как. У нас главный по нормоконтролю - дедушка лет под сто, и ему надо, чтобы все было по стандарту. Я уже от него 2 истерики выслушала по этому поводу %)
  17. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Сочувствую тогда. Временные файлы можно сохранять в определенный каталог (например завести константу - каталог для внешних файлов) и там формировать и сохранять файлик, либо, еще вариант - виртуально делать готовый макет для печати и его показывать (выводить в табличный документ).
  18. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    У меня немного другая идея появилась. Возможно сделать так: Открывать созданный шаблон, записывать в него и при закрытии предлагать сохранять, если файл оказывается не пустой, очищать необходимые ячейки и снова записывать?
  19. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Только сам шаблон можно хранить в системе - как макет. Можно даже два шаблона хранить макетами - Основной лист и дополнительный. Параметры в строке назвать переменными вида:
    НаименованиеХ, КоличествоХ, где Х - номер строки.

    Подготавливаешь таблицу значений и дальше можно поулчать параметры по строке!!! То есть тупо перебираешь строки и по номеру формируешь параметр Область.Параметры.Установить(), где имя параметра генерить будешь.

    И это, на мой взгляд самый простой вариант из всех нами придуманных.
  20. TopicStarter Overlay
    Anastasiya
    Offline

    Anastasiya Опытный в 1С

    Регистрация:
    27 июн 2007
    Сообщения:
    134
    Симпатии:
    1
    Баллы:
    26
    Хранить в 1С??? Как? Я не умею.... :(

    Параметры в строке назвать переменными вида:
    НаименованиеХ, КоличествоХ, где Х - номер строки.

    То есть??? Как я поняла там, в формировании печатной формы, запросом выбираются данные, потом перебором по строке прописываются в макет.

Поделиться этой страницей