Версия для печати темы (https://pro1c.org.ua/index.php?s=95b43ae86afb781ba076eac17d0b6854&showtopic=54535)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Редактирование печатной формы счета в1с7.7

Автор: jojojoba2 08.10.19, 10:56

Добрый день!

Помогите начинающему программисту и просьба не судить строго))). Я изучаю программирование в 1С 8 . Поставили задачу по 1с 7.7 Предприятие (Бухгалтерский учет по Украине) - доработать печатную форму документа счет-фактура. Начал разбиратся и увидел что 7 очень сильно отличается от 8. Есть внешний макет каторый лежит в \1cv77_db\Management\ExtForms\PrnForms SF3_ukr.mxl. В печатной форме нужно вывести р/р и банк контрагента. В документе счет-фактура нашел процедуру ПЕЧАТЬ

Код

Процедура Печать()
    //----
    Ф=_глПолучитьИмяФайлаПечатнойФормы("SF3",Метаданные.Документ(Вид()).Представление());
    
    ЕстьСкидка = 1;
    фУкр = ?(Константа.ФормыНаУкраинском = Да, 1, 0);
    Если (Константа.ИспользоватьСкидку<>Да) Или (ЧтоПродаем<>Перечисление.ЧтоПродаем.ТМЦ) Тогда
        ЕстьСкидка = 0;
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    Если ПустоеЗначение(Ф)=0 Тогда
        Таб.ИсходнаяТаблица(КаталогИБ()+"ExtForms\PrnForms\"+Ф);
    Иначе
        Таб.ИсходнаяТаблица("Таблица"+?(Константа.ФормыНаУкраинском = Да,"_Укр",""));
    КонецЕсли;
    
    Если Заказ.Выбран() = 1 Тогда
        Номер = Заказ.НомерДок;
        Если Заказ.Вид() = "Договор" Тогда
            Если ПустоеЗначение(Заказ.НомерДоговора) = 0 Тогда
                Номер = Заказ.НомерДоговора;
            КонецЕсли;
        КонецЕсли;
        тЗаказ = глУкр(Заказ.ПредставлениеВида()) + " № " +СокрЛП(Номер) + ?(фУкр = 1, " від "," от ") + Заказ.ДатаДок;;
    Иначе
        тЗаказ = ?(фУкр = 1,"Без замовлення","Без заказа");
    КонецЕсли;

    глУстПропись(Валюта);
    Таб.ВывестиСекцию("Шапка");
    Ном = 1;
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
        ЕдИзм = ?(ТМЦ.Вид()="ТМЦ",Ед,ТМЦ.БазЕдиница);
        Таб.ВывестиСекцию("Строка");
        Если ФКомп = 1 Тогда
            СпрКомп = СоздатьОбъект("Справочник.СоставКомплекта");
            СпрКомп.ИспользоватьВладельца(ТМЦ);
            СпрКомп.ВыбратьЭлементы();
            Пока СпрКомп.ПолучитьЭлемент() = 1 Цикл
                Таб.ВывестиСекцию("Составляющая");        
            КонецЦикла;
        КонецЕсли;
        Ном = Ном+1;
    КонецЦикла;
    Если ЕстьСкидка=1 Тогда
        Таб.ВывестиСекцию("Скидка");
    КонецЕсли;
    Если (ВидНДС.Код = "БезНДС") Тогда      
        Таб.ВывестиСекцию("БезНДС");        
    Иначе
        Таб.ВывестиСекцию("ДноНДС");        
    КонецЕсли;
    Таб.ВывестиСекцию("Дно");
    Таб.Защита(Константа.ФлагЗащитыТаблиц);
    Таб.ТолькоПросмотр(1);
    Таб.Опции(0,0,,);
    Таб.Показать("ПЕЧАТЬ: Счет-фактура","");
КонецПроцедуры


Я не могу понять где в коде и в каких модулях выводятся параметры и шаблоны печатной формы каторые есть на форме . Где код с запросами по выводу данных. Искал во всех модулял в конфигурации,не нашел. Может есть какой-то внешний модуль?Где он может находиться? Как правильно в 1с7.7 прописать новый параметр в коде?

Помогите разобраться.Если можно скиньте примеры или какую-то инструкцию. Смотрел видео - там редактируют печатную форму вместе с макетом и с модулем *.ert . У меня внешний только макет *.xml.

Заранее спасибо.


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 9
 

Автор: nik389 08.10.19, 11:19

так а что тут непонятного?

тут нет запроса, идет перебором

вот тут цикл, перебираются строки документа:

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
ЕдИзм = ?(ТМЦ.Вид()="ТМЦ",Ед,ТМЦ.БазЕдиница);


т.к. этот код у вас выполняется в контексте документа, сразу идет обращение к данным самого объекта документа, если можно так выразится
ТМЦ - это у вас реквизит табличной части документа, все предельно просто

"прописать параметр" - прямо тут берете и пишите

Автор: jojojoba2 08.10.19, 11:44

nik389 @ Сегодня, 12:19 * ,

Если можно напишите,пожалуйста, пример.


jojojoba2 @ Сегодня, 12:35 * ,

Дело в том, что реквизита Р/р и Найменование банка нету в документе счет-фактура. Его нужно "подвязать" из справочника контрагенты.

Автор: nik389 08.10.19, 11:53

jojojoba2 @ Сегодня, 12:35 * ,

пример?
ну вот вам пример.
Допустим, нам в счете в макете нужно сделать еще одну колонку, и если ТМЦ - услуга, писать туда "Услуга"
тогда делаем колонку, в строке Тип Выражение, пишем туда переменную пУслуга
а в цикл добавляем:

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
пУслуга = ""; //пустая строка
Если ТМЦ.Услуга = 1 Тогда//(предположим что у нас в справочнике тмц есть такой реквизит)
  пУслуга = "Услуга";
КонецЕсли;


Цитата(jojojoba2 @ 08.10.19, 12:44) *
Дело в том, что реквизита Р/р и Найменование банка нету в документе счет-фактура. Его нужно "подвязать" из справочника контрагенты.

У вас есть ссылка на контрагента в счете?
вот и доставайте оттуда рр и наименование счета
если расчетный счет это реквизит справочника контрагенты, будет что-то вроде

мойРСчет = Контрагент.РСчет

Автор: jojojoba2 08.10.19, 11:54

nik389 @ Сегодня, 12:53 * ,
Спасибо.Буду пробовать.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua