Проблема с ТОРГ-12

1. dillers2007 10.07.07 13:41 Сейчас в теме
Подскажте мне как в ТОРГ-12 напротивь Отпуск разрешил поставить Директор. Модуль ТОРГ-12, который в теле конфигурации (1С комплексная).
в накладной ТОРГ 12 сейчас:
Отпуск разрешил должность(пусто) Подпись расшифровка(пусто)
Чтобы было:
Отпуск разрешил директор Подпись Фамилия И.О.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dillers2007 10.07.07 13:43 Сейчас в теме
Вот Модуль из 1С:
////////////////////////////////////////////////////////////­////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//

Перем СписокДействий; // для механизма кнопки "Действия"

Перем ТаблицаПечФорм; // список печатных форм документа
Перем НомерТекущейФормы;

Перем ВидСчетаФактуры; // вид документа, являющегося счетом-фактурой
Перем НачальнаяДатаДокумента; // для механизма контроля уникальности номеров

// Для контроля необходимости пересчетов
Перем СтараяДата, СтараяФирма, СтарыйДоговор, СтарыйКонтрагент;
Перем СуммаДокументаСтараяРуб,ВалютаДоговораСтарая; // для пересчета суммы в валюте взаиморасчетов

// для контроля изменений при записи
Перем НачВалюта, НачКурс, НачКонтрагент, НачДоговор, НачФирма;

Перем ТекущийДолг;

////////////////////////////////////////////////////////////­////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//
//*****************************************************************************
// ТекстВалюты(Вал)
//
// Параметры:
// Вал - элемент справочника "Валюты"
//
// Возвращаемое значение:
// Строка валюты
//
// Описание:
// Возвращает название валюты или строку "<нет валюты>"
//
Функция ТекстВалюты(Вал)

Возврат ?(ПустоеЗначение(Вал) = 0, Вал.Наименование, "<нет валюты>");

КонецФункции

//******************************************************************************
// УправлениеВидимостью()
//
// Описание:
// Делает видимыми или невидимыми колонки НП и НДС в зависимости от флагов
// "УчитыватьНП" и "УчитыватьНДС"
// Делает невидимой колонку всего, если все налоги в сумме
Процедура УправлениеВидимостью()

Если Форма.Закладки.ТекущаяСтрока() = 2 Тогда
Форма.СуммаНП .Видимость(УчитыватьНП);
Форма.СтавкаНП .Видимость(УчитыватьНП);

Форма.СуммаНДС .Видимость(УчитыватьНДС);
Форма.СтавкаНДС .Видимость(УчитыватьНДС);

Если ((СуммаВклНП = 1) или (УчитыватьНП=0)) и ((СуммаВклНДС = 1) или (УчитыватьНДС=0)) Тогда
Форма.Всего.Видимость(0);
Иначе
Форма.Всего.Видимость(1);
КонецЕсли;

Форма.СуммаНДС.Заголовок(?(СуммаВклНДС=1,"в т.ч. НДС","Сумма НДС"));
Форма.СуммаНП.Заголовок(?(СуммаВклНП=1,"в т.ч. НП","Сумма НП"));

КонецЕсли;

КонецПроцедуры //УправлениеВидимостью()

//******************************************************************************
// ОбновитьНадписи()
//
// Описание:
// Обновляет текст информационных надписей в форме документа
Процедура ОбновитьНадписи()

Форма.ТекстФирмы .Заголовок(глСтрокаФирмы (Контекст));
Форма.ТекстСклада .Заголовок(глСтрокаСклада (Склад));
Форма.ТекстДоговора .Заголовок(глСтрокаДоговора (Контекст));
Форма.ТекстКлиента .Заголовок(глСтрокаКонтрагента (Контекст));
Форма.ТекстОплаты .Заголовок(глСтрокаОплаты (Контекст));

Форма.РамкаВсего .Заголовок("Всего ("+ТекстВалюты(Валюта)+")");
Форма.РамкаНДС .Заголовок("НДС ("+ТекстВалюты(Валюта)+")");
Форма.РамкаНП .Заголовок("НП ("+ТекстВалюты(Валюта)+")");
Форма.РамкаВзаимПодвал.Заголовок("Всего ("+ТекстВалюты(Договор.ВалютаВзаиморасчетов)+")");

УправлениеВидимостью();

КонецПроцедуры //ОбновитьНадписи()

//******************************************************************************
// РасчетТекущегоДолга()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Производит вызов глобальной функции расчета суммы текущего долга контрагента.
// В зависимости от характера задолженности устанавливает
// цвет элемента диалога "Сумма долга". (Если долг >= 0 - синий, иначе - красный)
//
Процедура РасчетТекущегоДолга()

ТекущийДолг = глТекущийДолг(Фирма, Договор, "покупатель");
Если ТекущийДолг < 0 Тогда
Форма.ТекстТекущийДолг.Цвет(255);
Иначе
Форма.ТекстТекущийДолг.Цвет(0,0,128);
КонецЕсли;

КонецПроцедуры //РасчетТекущегоДолга()

//*****************************************************************************
// ЗаголовокФормы()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Название операции
//
// Описание:
// Формирует название операции и заголовок формы диалога
//
Функция ЗаголовокФормы()
Перем Заголовок, Название;

Заголовок = глНазваниеДокументаВЖурнале(Контекст);
Название = Заголовок + " №";

Если Выбран() = 1 Тогда
Если Проведен() = 1 Тогда
Заголовок = Заголовок + ". Проведен";
Иначе
Заголовок = Заголовок + ". Не проведен";
КонецЕсли;
Иначе
Заголовок = Заголовок + ". Новый";
КонецЕсли;
Форма.Заголовок(Заголовок);
Возврат Название;

КонецФункции // ЗаголовокФормы

//******************************************************************************
// УстановкаВидимостиСуммВПодвале()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
// Устанавливает невидимость суммы в валюте взаиморасчетов в табличной части
// и недоступность кнопки изменения суммы взаиморасчетов, если валюта
// документа совпадает с валютой договора.
//
Процедура УстановкаВидимостиСуммВПодвале()

Если (ПустоеЗначение(Договор.ВалютаВзаиморасчетов) = 0)
И (Договор.ВалютаВзаиморасчетов <> Валюта)
Тогда
Флаг = 1;
Иначе
Флаг = 0;
КонецЕсли;

Форма.РамкаВзаимПодвал.Видимость(Флаг);
Форма.ТекстВзаимПодвал.Видимость(Флаг);
Форма.кнСуммаВзаиморасчетов.Доступность(?(Форма.ТолькоПросмотр()=1,0,Флаг));

КонецПроцедуры // УстановкаВидимостиСуммВПодвале()

//******************************************************************************
// ПересчетСуммыВзаиморасчетов()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет (не используется)
//
// Описание:
// Вызывается из формулы невидимого текстового поля
// Производит проверку, изменилась ли сумма документа и валюта договора и,
// при необходимости, пересчитывает сумму в валюте взаиморасчетов.
//
Функция ПересчетСуммыВзаиморасчетов()

Если ПустоеЗначение(Договор.ВалютаВзаиморасчетов)=1 Тогда
Если СуммаВзаиморасчетов<>0 Тогда
СуммаВзаиморасчетов=0;
КонецЕсли;
ВалютаДоговораСтарая = Договор.ВалютаВзаиморасчетов;
Возврат "";
КонецЕсли;

СуммаВзаиморасчетовДок = Итог("Сумма")
+?(СуммаВклНП =1,0,Итог("СуммаНП" ))
+?(СуммаВклНДС=1,0,Итог("СуммаНДС"));

СуммаВзаиморасчетовДокРуб = глПересчет (СуммаВзаиморасчетовДок,Валюта,Курс,глРубли,ДатаДок);

Если (СуммаВзаиморасчетовДокРуб<>СуммаДокументаСтараяРуб) или
(ВалютаДоговораСтарая <>Договор.ВалютаВзаиморасчетов)Тогда

// изменили сумму документа или валюту взаиморасчетов, надо пересчитать
СуммаДокументаСтараяРуб = СуммаВзаиморасчетовДокРуб;
ВалютаДоговораСтарая = Договор.ВалютаВзаиморасчетов;

СуммаВзаиморасчетов = глПересчет(СуммаВзаиморасчетовДок,
Валюта,Курс,
Договор.ВалютаВзаиморасчетов,ДатаДок);
Форма.Обновить();
КонецЕсли;

КонецФункции // ПересчетСуммыВзаиморасчетов()

//******************************************************************************
// ПриИзмененииДаты()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Вызывается из формулы реквизита диалога "от" (Дата документа)
//
Процедура ПриИзмененииДаты()

// Проверяем, действительно ли что-то надо делать
Если СтараяДата <> ДатаДок Тогда

глПриИзмененииДаты(Контекст);
СтараяДата = ДатаДок;
ОбновитьНадписи();
КонецЕсли;

КонецПроцедуры // ПриИзмененииДаты()

//******************************************************************************
// ПриИзмененииФирмы()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Вызывается из формулы реквизита диалога "Фирма"
//
Процедура ПриИзмененииФирмы()

Если СтараяФирма <> Фирма Тогда
Если Вопрос("При изменении фирмы табличная часть документа будет очищена! Продолжить?", "Да+Нет", 60) <> "Да" Тогда
Возврат;
КонецЕсли;

УдалитьСтроки();

// только если изменили
глПриИзмененииФирмы(Контекст);
СтараяФирма = Фирма;
КонецЕсли;

КонецПроцедуры // ПриИзмененииФирмы()

//******************************************************************************
// ПриИзмененииДоговора()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Процедура вызывается при смене договора.
//
Процедура ПриИзмененииДоговора()

Если СтарыйДоговор <> Договор Тогда
глПриИзмененииДоговора(Контекст);
СтарыйДоговор = Договор;
ОбновитьНадписи();

РасчетТекущегоДолга();
УстановкаВидимостиСуммВПодвале();
КонецЕсли;

КонецПроцедуры // ПриИзмененииДоговора()

//*****************************************************************************
// ПриИзмененииКонтрагента()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Процедура вызывается при выборе контрагента
//
Процедура ПриИзмененииКонтрагента()

Если СтарыйКонтрагент <> Контрагент Тогда
глПриИзмененииКонтрагента(Контекст);
СтарыйКонтрагент = Контрагент;
// если изменился контрагент, то договор тоже изменится
// все пересчеты в связи со сменой договора выполнятся
// в процедуре глПриИзмененииКонтрагента()
СтарыйДоговор = Договор;
ОбновитьНадписи();

РасчетТекущегоДолга();
УстановкаВидимостиСуммВПодвале();
КонецЕсли;

КонецПроцедуры //ПриИзмененииКонтрагента()

//*****************************************************************************
// ПоКнопкеЦены()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Вызывается по кнопке редактирования параметров оплаты в документе
//
Процедура ПоКнопкеЦены()

Перем КонтекстДокумента;

КонтекстДокумента = глВзятьКонтекст(Контекст);
ОткрытьФормуМодально("Обработка.ИнформацияОценах", КонтекстДокумента);
ОбновитьНадписи();
УстановкаВидимостиСуммВПодвале();

КонецПроцедуры //ПоКнопкеЦены()

//******************************************************************************
// ФормПарПечШапки(Парметры)
//
// Параметры:
// Параметры - сисок, содержащий значения для формирования шапки печатной формы
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Формирует список, содержащий значения полей для печати шапки документа
//
Процедура ФормПарПечШапки(Параметры)

Параметры = СоздатьОбъект("СписокЗначений");
// собственная фирма

Банк = "";НомерСчета = "";БИКБанка = "";СчетБанка = "";
глПлатежныеРеквизиты(Фирма.ОсновнойСчет, , Банк, НомерСчета, БИКБанка, СчетБанка);

Если (ПустоеЗначение(НомерСчета) = 1) ИЛИ (ПустоеЗначение(Банк) = 1) Тогда
ФирмаРеквизиты = "";
Иначе
ФирмаРеквизиты = "р/с " + СокрЛП(НомерСчета) + " в " + СокрЛП(Банк) +
?(ПустоеЗначение(БИКБанка) = 0, " ,БИК " + СокрЛП(БИКБанка), "") +
?(ПустоеЗначение(СчетБанка) = 0, " ,корр/с " + СокрЛП(СчетБанка), "");
КонецЕсли;

Параметры.ДобавитьЗначение(СокрЛП(Фирма.ЮрЛицо.ПолнНаименование) + ?(ПустоеЗначение(Фирма.ЮрЛицо.ИНН)=0, ", ИНН " + СокрЛП(Фирма.ЮрЛицо.ИНН), ""), "Фирма");
Параметры.ДобавитьЗначение(глПредставлениеАдреса(Фирма.ЮрЛицо.ЮрАдрес), "ФирмаАдрес");
Параметры.ДобавитьЗначение(СокрЛП(Фирма.ЮрЛицо.Телефоны), "ФирмаТелефоны");
Параметры.ДобавитьЗначение(ФирмаРеквизиты, "ФирмаРеквизиты");
Параметры.ДобавитьЗначение(СокрЛП(Фирма.ЮрЛицо.ОКПО), "ФирмаОКПО");

// контрагент

Клиент = "";
КлиентЮрАдрес = "";
КлиентФактАдрес = "";
КлиентОКПО = "";
КлиентРевизиты = "";
Если ПустоеЗначение(Контрагент) = 0 Тогда
Если Контрагент.ЮрФизЛицо.Выбран() = 1 Тогда
Клиент = СокрЛП(Контрагент.ЮрФизЛицо.ПолнНаименование) +
?(ПустоеЗначение(Контрагент.ЮрФизЛицо.ИНН) = 0, ", ИНН" + СокрЛП(Контрагент.ЮрФизЛицо.ИНН), "");
КлиентЮрАдрес = глПредставлениеАдреса(Контрагент.ЮрФизЛицо.ЮрАдрес);
КлиентФактАдрес = глПредставлениеАдреса(Контрагент.ЮрФизЛицо.ФактАдрес);

// у физ. лиц нет ОКПО
Если Контрагент.ЮрФизЛицо.Вид() <> "ФизЛица" Тогда
КлиентОКПО = СокрЛП(Контрагент.ЮрФизЛицо.ОКПО);
КонецЕсли;

КонецЕсли;

Банк = "";НомерСчета = "";БИКБанка = "";СчетБанка = "";
глПлатежныеРеквизиты(Контрагент.ОсновнойСчет, , Банк, НомерСчета, БИКБанка, СчетБанка);

Если (ПустоеЗначение(НомерСчета) = 1) ИЛИ (ПустоеЗначение(Банк) = 1) Тогда
КлиентРевизиты = "";
Иначе
КлиентРевизиты = "р/с " + СокрЛП(НомерСчета) + " в " + СокрЛП(Банк) +
?(ПустоеЗначение(БИКБанка) = 0, " ,БИК " + СокрЛП(БИКБанка), "") +
?(ПустоеЗначение(СчетБанка) = 0, " ,корр/с " + СокрЛП(СчетБанка), "");
КонецЕсли;
КонецЕсли;

Параметры.ДобавитьЗначение(Клиент, "Клиент");
Параметры.ДобавитьЗначение(КлиентЮрАдрес, "КлиентЮрАдрес");
Параметры.ДобавитьЗначение(КлиентФактАдрес, "КлиентФактАдрес");
Параметры.ДобавитьЗначение(КлиентОКПО, "КлиентОКПО");
Параметры.ДобавитьЗначение(КлиентРевизиты, "КлиентРеквизиты");

КонецПроцедуры // ФормПарПечШапки()

//******************************************************************************
// Печать(СразуНаПринтер, КолЭкз)
//
// Параметры:
// СразуНаПринтер - (1) если печать на принтер, (0) - с предварительным просмотром
// КолЭкз - количество экземпляров печати
//
// Возвращаемое значение:
// нет.
//
// Описание:
//
Процедура Печать(СразуНаПринтер = 0,КолЭкз = 1)
Перем ПарамШапки;

ПечТабл = СоздатьОбъект("Таблица");
ПечТабл.ИсходнаяТаблица("ТОРГ12");

// инициализация переменных для печати шапки
ФормПарПечШапки(ПарамШапки);

// собственная фирма
ВремФирма = ПарамШапки.Получить("Фирма");
ФирмаАдрес = ПарамШапки.Получить("ФирмаАдрес");
ФирмаТелефоны = ПарамШапки.Получить("ФирмаТелефоны");
ФирмаРеквизиты = ПарамШапки.Получить("ФирмаРеквизиты");
ФирмаОКПО = ПарамШапки.Получить("ФирмаОКПО");

ПечОрг = ВремФирма +
?(ПустоеЗначение(ФирмаАдрес) = 0, ", " + ФирмаАдрес, "")+
?(ПустоеЗначение(ФирмаТелефоны) = 0, ", тел. " + ФирмаТелефоны, "") +
?(ПустоеЗначение(ФирмаРеквизиты) = 0, " ," + ФирмаРеквизиты, "");

ПечФирма = ВремФирма +
?(ПустоеЗначение(ФирмаАдрес) = 0, ", " + ФирмаАдрес, "")+
?(ПустоеЗначение(ФирмаРеквизиты) = 0, " ," + ФирмаРеквизиты, "");

// контрагент

Клиент = ПарамШапки.Получить("Клиент");
КлиентЮрАдрес = ПарамШапки.Получить("КлиентЮрАдрес");
КлиентФактАдрес = ПарамШапки.Получить("КлиентФактАдрес");
КлиентРеквизиты = ПарамШапки.Получить("КлиентРеквизиты");
КлиентОКПО = ПарамШапки.Получить("КлиентОКПО");

ПечКлиент = Клиент +
?(ПустоеЗначение(КлиентЮрАдрес) = 0, ", " + КлиентЮрАдрес, "")+
?(ПустоеЗначение(КлиентРеквизиты) = 0, ", " + КлиентРеквизиты, "");

ПечГрузополучатель = Клиент +
?(ПустоеЗначение(КлиентФактАдрес) = 0, ", " + КлиентФактАдрес, "")+
?(ПустоеЗначение(КлиентРеквизиты) = 0, ", " + КлиентРеквизиты, "");

ПечДокОснование = "";

// выясним, какую вертикальную секцию будем использовать
Если УчитыватьНП = 0 Тогда
ВертСекция = "";
Иначе
ВертСекция = "_НП";
КонецЕсли;

// Выводим шапку таблицы. Шапка печатается на каждом листе.
ПечТабл.ВывестиСекцию("Шапка");

// Выводим спецификацию

//Для простоты настройки печатной формы примем следующие соглашения:
// - высота строк в таблице печатной формы задана жестко,
// тогда известно, сколько строк помещается на странице;
СтрокНаСтранице = 22;

// - высота шапки и подвала задана жестко и кратна высоте строк таблицы,
// тогда можно указать, сколько строк занимают шапка и подвал
// в пересчете на строки таблицы;
СтрокШапки = 10;
СтрокПодвала = 9;

// - для нормальной работы алгоритма необходимо, чтобы шапка и подвал
// могли поместиться на одной странице + хотя бы одна строка таблицы:
// СтрокНаСтранице >= СтрокШапки + СтрокПодвала + 1
// - если подвал не помещается на странице, он переносится на другую
// страницу с последней строкой; исключение составляет случай,
// когда в таблице всего одна строка.
НомерСтраницы = 1;

Если КоличествоСтрок() = 1 Тогда
ПереноситьПоследнююСтроку = 0;
Иначе
ЦелыхСтраницСПодвалом = Цел((СтрокШапки +КоличествоСтрок() + СтрокПодвала) / СтрокНаСтранице);
ЦелыхСтраницБезПодвала = Цел((СтрокШапки +КоличествоСтрок() - 1) / СтрокНаСтранице);
ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
КонецЕсли;

// инициализация итогов по странице
ИтогоКоличествоНаСтранице = 0;
ИтогоСуммаНаСтранице = 0;
ИтогоНДСНаСтранице = 0;
ИтогоСуммаСНДСНаСтранице = 0;
ИтогоНГСМНаСтранице = 0;
ИтогоНПНаСтранице = 0;

// инициализация итогов по документу
ИтогоКоличество = 0;
ИтогоСумма = 0;
ИтогоНДС = 0;
ИтогоСуммаСНДС = 0;
ИтогоНГСМ = 0;
ИтогоНП = 0;

Ном = 0;

КурсРублей = глКурсДляВалюты(глРубли, ДатаДок);

ПечТабл.ВывестиСекцию("ЗаголовокТаб" + ВертСекция);

ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Ном = Ном + 1;

//Начинаем новую страницу, если предыдущая строка была последней на странице
//или пора переносить последнюю строку на последнюю страницу с подвалом.
ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;

Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок())) Тогда
ПечТабл.ВывестиСекцию("ИтогоПоСтранице"+ВертСекция);

// очистим итоги по странице
ИтогоКоличествоНаСтранице = 0;
ИтогоСуммаНаСтранице = 0;
ИтогоНДСНаСтранице = 0;
ИтогоСуммаСНДСНаСтранице = 0;
ИтогоНГСМНаСтранице = 0;
ИтогоНПНаСтранице = 0;

ПечТабл.НоваяСтраница();
НомерСтраницы = НомерСтраницы + 1;
ПечТабл.ВывестиСекцию("ЗаголовокТаб" + ВертСекция);
КонецЕсли;

ПечТовар = СокрЛП(Содержание);
ПечЕдиница = "";
ПечОКЕИ = "";

ПечКоличество = Количество;
КолВо = ?(Количество = 0, 1, Количество);

ПечКолвоВОдномМесте = "";
ПечКоличествоМест = "";

СуммаПеч = глПересчет(Сумма , Валюта, Курс, глРубли, ДатаДок);
СуммаНДСПеч = глПересчет(СуммаНДС, Валюта, Курс, глРубли, ДатаДок);
СуммаНППеч = глПересчет(СуммаНП , Валюта, Курс, глРубли, ДатаДок);

Если СуммаВклНП = 1 Тогда
СуммаБезНП = СуммаПеч - СуммаНППеч;
Иначе
СуммаБезНП = СуммаПеч;
КонецЕсли;

Если СуммаВклНДС = 1 Тогда
СуммаБезНДС = СуммаБезНП - СуммаНДСПеч;
СуммаСНДС = СуммаБезНП;
Иначе
СуммаБезНДС = СуммаБезНП;
СуммаСНДС = СуммаБезНП + СуммаНДСПеч;
КонецЕсли;

ПечНДС = СуммаНДСПеч;

Если УчитыватьНП = 1 Тогда
ПечНП = СуммаНППеч;
Иначе
ПечНП = "";
КонецЕсли;

ПечЦена = ?(Количество <> 0, СуммаБезНДС / Количество, СуммаБезНДС);
ПечТабл.ВывестиСекцию("Строка" + ВертСекция);

// увеличим итоги по странице
ИтогоКоличествоНаСтранице = ИтогоКоличествоНаСтранице + Количество;
ИтогоСуммаНаСтранице = ИтогоСуммаНаСтранице + СуммаБезНДС;
ИтогоНДСНаСтранице = ИтогоНДСНаСтранице + ПечНДС;
ИтогоСуммаСНДСНаСтранице = ИтогоСуммаСНДСНаСтранице + СуммаСНДС;

Если УчитыватьНП = 1 Тогда
ИтогоНПНаСтранице = ИтогоНПНаСтранице + ПечНП;
КонецЕсли;

// увеличим итоги по дукументу
ИтогоКоличество = ИтогоКоличество + Количество;
ИтогоСумма = ИтогоСумма + СуммаБезНДС;
ИтогоНДС = ИтогоНДС + ПечНДС;
ИтогоСуммаСНДС = ИтогоСуммаСНДС + СуммаСНДС;

Если УчитыватьНП = 1 Тогда
ИтогоНП = ИтогоНП + ПечНП;
КонецЕсли;
КонецЦикла;

ПечТабл.ВывестиСекцию("ИтогоПоСтранице" + ВертСекция);
ПечТабл.ВывестиСекцию("Всего" + ВертСекция);

// выводим подвал
НаСумму = "на сумму " + глСуммаПрописью(ИтогоСуммаСНДС + ИтогоНП, глРубли);

// формируем строку для вывода количества листов накладной
// Слово лист склоняется
Если (НомерСтраницы > 10) И (НомерСтраницы < 20) Тогда
Слово = " листах";
Иначе
ПоследняяЦифра = НомерСтраницы % 10;
Если ПоследняяЦифра = 1 Тогда
Слово = " листе";
Иначе
Слово = " листах";
КонецЕсли;
КонецЕсли;

СтрокаКоличествоЛистов = Строка(НомерСтраницы) + Слово;

ПечГлавБух = Фирма.ЮрЛицо.ГлБухгалтер.Получить(ДатаДок);

ПечТабл.ВывестиСекцию("Подвал");

// показать сформированную таблицу

Если СразуНаПринтер = 0 Тогда
ПечТабл.Опции(0, 0, 0, 0, ПарСтрДок, ПарСтрДок);

Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
ПечТабл.Защита(1);
Иначе
ПечТабл.Защита(0);
КонецЕсли;
ПечТабл.ТолькоПросмотр(1);

ПечТабл.Показать(глНазваниеДокументаВжурнале(Контекст),"");
Иначе
ПечТабл.ПараметрыСтраницы(,,,,,,,,,1,,);
ПечТабл.КоличествоЭкземпляров(КолЭкз);
ПечТабл.Напечатать(0);
КонецЕсли;

КонецПроцедуры // Печать()

//******************************************************************************
// ПечатьОС(СразуНаПринтер, КолЭкз)
//
// Параметры:
// СразуНаПринтер - (1) если печать на принтер, (0) - с предварительным просмотром
// КолЭкз - количество экземпляров печати
//
// Возвращаемое значение:
// Нет.
//
// Вызывается из формул элементов диалога:
// КнПечать.
//
// Описание:
// Формирует акт приемки-передачи ОС по форме ОС-1.
//
Процедура ПечатьОС(СразуНаПринтер = 0,КолЭкз = 1)

ИнвентарныеНомера = "";
ОбъектОС = ПолучитьПустоеЗначение("Справочник.ОсновныеСредства");
КолОС = 0;
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Если Содержание.Вид() = "ОсновныеСредства" Тогда
Если КолОС = 0 Тогда
ОбъектОС = Содержание;
Иначе
ИнвентарныеНомера = ?(ИнвентарныеНомера = "", "", ИнвентарныеНомера + "; " + РазделительСтрок);
ИнвентарныеНомера = ИнвентарныеНомера + СокрЛ(Содержание.Код);
КонецЕсли;
КолОС = КолОС + 1;
КонецЕсли;
КонецЦикла;

Если КолОС = 0 Тогда
Предупреждение("В табличной части документа не указано ни одного основного средства!", 60);
Возврат;
ИначеЕсли (Проведен() = 1)
и (ДокОснование.Выбран() = 0) Тогда
Предупреждение("Для получения балансовой стоимости и начисленной
|амортизации сделайте документ непроведенным.", 60);
Возврат;
ИначеЕсли КолОС < КоличествоСтрок() Тогда
Предупреждение("В табличной части документа выбраны не только основные средства!
|Акт будет напечатан только для основных средств!", 60);
КонецЕсли;

Если ДатаДок < Дата("23.03.2003") Тогда

ПечТабл = СоздатьОбъект("Таблица");
ПечТабл.ИсходнаяТаблица("ОС-1_97");
Сдатчик = ОбъектОС.Подразделение.Получить(ДатаДок-1);
Получатель = Контрагент.ЮрФизЛицо.ПолнНаименование;
Если (ОбъектОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.УменьшаемогоОстатка)
или (ОбъектОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.Линейный)
или (ОбъектОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.ПоСуммеЧиселЛет) Тогда
СрокИспользования = ""+ОбъектОС.СрокПолезногоИспользования.Получить(ДатаДок)+" мес";
Иначе
СрокИспользования = "";
КонецЕсли;

НормаАмортизации = "";
КодНормы = "";
Если (ОбъектОС.ПодлежитАмортизации = 0)
или (ОбъектОС.СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.ПоЕдинымНормам) Тогда
НормаАмортизации = ОбъектОС.КоэффициентАмортизации.Получить(ДатаДок);
Если ОбъектОС.ШифрПоЕНАОФ.Выбран() = 1 Тогда
КодНормы = ОбъектОС.ШифрПоЕНАОФ.Код;
КонецЕсли;
КонецЕсли;

Если ОбъектОС.ДатаВводаВЭксплуатацию <> Дата(0) Тогда
ДатаВводаВЭксплуатацию = ОбъектОС.ДатаВводаВЭксплуатацию;
Иначе
ДатаВводаВЭксплуатацию = "";
КонецЕсли;

Если ДокОснование.Выбран() = 0 Тогда
СведенияОбОС = глРасчетАмортизацииОС(ОбъектОС, ДатаДок);
БалансоваяСтоимость = СведенияОбОС.Получить("БалансоваяСтоимостьКон");
НачисленнаяАмортизация = СведенияОбОС.Получить("НачисленнаяАмортизацияНач") + СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
Иначе
БалансоваяСтоимость = ДокОснование.БалансоваяСтоимость;
НачисленнаяАмортизация = ДокОснование.НачисленнаяАмортизация;
КонецЕсли;

ПредставлениеГода = Лев(ДатаГод(ДатаДок),2);

ПечТабл.Вывести();

Если СразуНаПринтер = 0 Тогда
ПечТабл.Опции(0,0,0,0,"ОпцииПечатиОС1","ОкноОС1");

Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
ПечТабл.Защита(1);
Иначе
ПечТабл.Защита(0);
КонецЕсли;
ПечТабл.ТолькоПросмотр(1);

ПечТабл.Показать(глНазваниеДокументаВжурнале(Контекст),"");
Иначе
ПечТабл.ПараметрыСтраницы(2,,, 10, 0, 0, 0,,,,,);
ПечТабл.КоличествоЭкземпляров(КолЭкз);
ПечТабл.Напечатать(0);
КонецЕсли;

Иначе

//Реквизиты заполняемые только при вводе в эксплуатацию ОС
РукПолучателя = "";
ДолжРукПолуч = "";
ПодрПолучателя = "";
НачСтоимость = "";
СрокПолезнИспПриПост ="";
СпособАморт = "";
НормаАморт = "";
ГлавБухПолучателя = "";
ИтогНачСтоимость = "";
ДатаАктаВВода = "";
КодОКПО = "";


//Реквизиты заполняемые при передаче ОС
РукСдатчика = "("+глФамилияИмяОтчество(Фирма.ЮрЛицо.Руководитель.Получить(ДатаДок))+")";
ДолжРукСдатчика = Фирма.ЮрЛицо.ДолжностьРуководителя;
ГлавБухСдатчика = "("+глФамилияИмяОтчество(Фирма.ЮрЛицо.ГлБухгалтер.Получить(ДатаДок))+")";
НаимСдатчика = Фирма.ЮрЛицо.ОфициальноеНаименование;
Если ПустаяСтрока(НаимСдатчика) = 1 Тогда
НаимСдатчика = Фирма.ЮрЛицо.ПолнНаименование;
КонецЕсли;
АдресСдатчика = глПредставлениеАдреса(Фирма.ЮрЛицо.ЮрАдрес);
глДобавитьРеквизит(АдресСдатчика, ", тел. : ", Фирма.ЮрЛицо.Телефоны);

РеквСдатчика = "";
Если Фирма.ОсновнойСчет.Выбран() = 1 Тогда
Банк = "";НомерСчета = "";БИКБанка = "";СчетБанка = "";
глПлатежныеРеквизиты(Фирма.ОсновнойСчет, , Банк, НомерСчета, БИКБанка, СчетБанка);
глДобавитьРеквизит(РеквСдатчика, "р/с ", НомерСчета + " в " + Банк);
глДобавитьРеквизит(РеквСдатчика, ", БИК ", БИКБанка);
глДобавитьРеквизит(РеквСдатчика, ", корр/с ", СчетБанка);
КонецЕсли;

ПодрСдатчика = "";
ДоговорПередачи = Договор;
ДатаПередачи = ДатаДок;
КодОКПО = Фирма.ЮрЛицо.ОКПО;

Если КоличествоСтрок() <> 0 Тогда
Если СуммаВклНДС = 1 Тогда
ЦенаПродажи = Формат(Окр(Итог("Сумма")/КоличествоСтрок(),2),"Ч015.2");
ИтогЦенаПрдажи = Формат(Итог("Сумма"),"Ч015.2");
Иначе
ЦенаПродажи = Формат(Окр((Итог("Сумма")+Итог("СуммаНДС"))/КоличествоСтрок(),2),"Ч015.2");
ИтогЦенаПрдажи = Формат(Итог("Сумма")+Итог("СуммаНДС"),"Ч015.2");
КонецЕсли;
Иначе
ЦенаПродажи = 0;
ИтогЦенаПрдажи = 0;
КонецЕсли;

Если Контрагент.Выбран() = 1 Тогда
НаимПолучателя = СокрЛП(Контрагент.ЮрФизЛицо.ПолнНаименование);
АдресПолучателя = глПредставлениеАдреса(Контрагент.ЮрФизЛицо.ЮрАдрес) + ", тел: "+СокрЛП(Контрагент.ЮрФизЛицо.Телефоны);

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

ВыбратьСтроки();
ПолучитьСтроку();

Если Содержание.Вид() <> "ОсновныеСредства" Тогда
Предупреждение("В строке №" + НомерСтроки + " указано не основное средство!", 60);
Возврат;

КонецЕсли;

ПодрСдатчика = Содержание.Подразделение.Получить(ДатаДок);
ДатаВвода = Содержание.ДатаВводаВЭксплуатацию;
ДатаАктаВВода = Содержание.ДатаВводаВЭксплуатацию;

Если (Содержание.Группа = Перечисление.ГруппыОС.Здания) или (Содержание.Группа = Перечисление.ГруппыОС.Сооружения) Тогда
Здания = 1;
КонецЕсли;

ВыбратьСтроки();
Если Здания = 1 Тогда
Если КоличествоСтрок()>1 Тогда
Пока ПолучитьСтроку()=1 Цикл
Если Содержание.Вид() <> "ОсновныеСредства" Тогда
Продолжить;
КонецЕсли;

Если ДокОснование.Выбран() = 0 Тогда
СведенияОбОС = глРасчетАмортизацииОС(ОбъектОС, ДатаДок);
БалансоваяСтоимость = СведенияОбОС.Получить("БалансоваяСтоимостьКон");
НачАмортизация = СведенияОбОС.Получить("НачисленнаяАмортизацияНач") + СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
Иначе
БалансоваяСтоимость = ДокОснование.БалансоваяСтоимость;
НачАмортизация = ДокОснование.НачисленнаяАмортизация;
КонецЕсли;

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ОС-1а");
НомерАкта = НомерДок+"/"+НомерСтроки;
ИнвНомер = Содержание.Код;
НаимОС = Содержание.Наименование;
НомерГруппы = Формат(Содержание.АмортизационнаяГруппа.ПорядковыйНомер(),"Ч05");
СрокПолезнИспПриПеред = Формат(Содержание.СрокПолезногоИспользования.Получить(ДатаДок),"Ч05");
ДатаВвода = Содержание.ДатаВводаВЭксплуатацию;

ОстСтоимость = БалансоваяСтоимость - НачАмортизация;
НачАмортизация = Формат(НачАмортизация,"Ч015.2");
ОстСтоимость = Формат(ОстСтоимость,"Ч015.2");

ОбъектОС.СчетЗатрат.Получить(ДатаДок);

Экспл = СоздатьОбъект("Периодический");
Экспл.ИспользоватьОбъект("Состояние", Содержание);
СрокЭкспл=0;
НачалоЭкспл =0;
Экспл.ВыбратьЗначения(ДатаВвода, ДатаДок-1);
Пока Экспл.ПолучитьЗначение() = 1 Цикл
Если Экспл.Значение = Перечисление.СостоянияОС.В_Эксплуатации Тогда
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = Экспл.ДатаЗнач;
Иначе
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = 0;
КонецЕсли;
КонецЦикла;
СрокЭкспл = СрокЭкспл + ?(НачалоЭкспл=0,0,ДатаДок - НачалоЭкспл);
СрокЭкспл = ?(Окр(СрокЭкспл/30.5,0,1)>0,Строка(Окр(СрокЭкспл/30.5,0,1))+" мес.","");

Таб.Вывести();
Таб.Опции(0,0,0,0,"ОпцииПечатиОС_1а","ОкноОС_1а");
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(2);

Таб.Показать("Акт ОС-1а");
КонецЦикла;
Иначе
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ОС-1а");
НомерАкта = НомерДок;
ПолучитьСтроку();
ИнвНомер = Содержание.Код;
НаимОС = Содержание.Наименование;
НомерГруппы = Формат(Содержание.АмортизационнаяГруппа.ПорядковыйНомер(),"Ч05");
СрокПолезнИспПриПеред = Формат(Содержание.СрокПолезногоИспользования.Получить(ДатаДок),"Ч05");

Если ДокОснование.Выбран() = 0 Тогда
СведенияОбОС = глРасчетАмортизацииОС(ОбъектОС, ДатаДок);
БалансоваяСтоимость = СведенияОбОС.Получить("БалансоваяСтоимостьКон");
НачАмортизация = СведенияОбОС.Получить("НачисленнаяАмортизацияНач") + СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
Иначе
БалансоваяСтоимость = ДокОснование.БалансоваяСтоимость;
НачАмортизация = ДокОснование.НачисленнаяАмортизация;
КонецЕсли;

ОстСтоимость = БалансоваяСтоимость - НачАмортизация;
НачАмортизация = Формат(НачАмортизация,"Ч015.2");
ОстСтоимость = Формат(ОстСтоимость,"Ч015.2");

Экспл = СоздатьОбъект("Периодический");
Экспл.ИспользоватьОбъект("Состояние", Содержание);
СрокЭкспл=0;
НачалоЭкспл =0;
Экспл.ВыбратьЗначения(ДатаВвода, ДатаДок-1);
Пока Экспл.ПолучитьЗначение() = 1 Цикл
Если Экспл.Значение = Перечисление.СостоянияОС.В_Эксплуатации Тогда
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = Экспл.ДатаЗнач;
Иначе
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = 0;
КонецЕсли;
КонецЦикла;
СрокЭкспл = СрокЭкспл + ?(НачалоЭкспл=0,0,ДатаДок - НачалоЭкспл);
СрокЭкспл = ?(Окр(СрокЭкспл/30.5,0,1)>0,Строка(Окр(СрокЭкспл/30.5,0,1))+" мес.","");
Таб.Вывести();
Таб.Опции(0,0,0,0,"ОпцииПечатиОС_1а","ОкноОС_1а");
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(2);

Таб.Показать("Акт ОС-1а");
КонецЕсли;
Иначе
Таб = СоздатьОбъект("Таблица");
НомерАкта = НомерДок;
Если КоличествоСтрок()>1 Тогда
Таб.ИсходнаяТаблица("ОС-1б");
СрокПолезнИспПриПеред = "";

Таб.ВывестиСекцию("Шапка1");
Таб.ВывестиСекцию("Шапка2");
Пока ПолучитьСтроку()=1 Цикл
Нс = НомерСтроки;
ИнвНомер = Содержание.Код;
НаимОС = Содержание.Наименование;
НомерГруппы = Формат(Содержание.АмортизационнаяГруппа.ПорядковыйНомер(),"Ч05");
ДатаВвода = Содержание.ДатаВводаВЭксплуатацию;
Таб.ВывестиСекцию("Строка2");
КонецЦикла;
Если КоличествоСтрок()<25 Тогда
Для х=КоличествоСтрок()+1 по 25 Цикл
Таб.ВывестиСекцию("Строка2П");
КонецЦикла;
КонецЕсли;
Таб.ВывестиСекцию("Подвал2");
Таб.ВывестиСекцию("Шапка3");
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Если ДокОснование.Выбран() = 0 Тогда
СведенияОбОС = глРасчетАмортизацииОС(ОбъектОС, ДатаДок);
БалансоваяСтоимость = СведенияОбОС.Получить("БалансоваяСтоимостьКон");
НачАмортизация = СведенияОбОС.Получить("НачисленнаяАмортизацияНач") + СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
Иначе
БалансоваяСтоимость = ДокОснование.БалансоваяСтоимость;
НачАмортизация = ДокОснование.НачисленнаяАмортизация;
КонецЕсли;

ОстСтоимость = БалансоваяСтоимость - НачАмортизация;
НачАмортизация = Формат(НачАмортизация,"Ч015.2");
ОстСтоимость = Формат(ОстСтоимость,"Ч015.2");
ДатаВвода = Содержание.ДатаВводаВЭксплуатацию;
Экспл = СоздатьОбъект("Периодический");
Экспл.ИспользоватьОбъект("Состояние", Содержание);
СрокЭкспл=0;
НачалоЭкспл =0;
Экспл.ВыбратьЗначения(ДатаВвода, ДатаДок-1);
Пока Экспл.ПолучитьЗначение() = 1 Цикл
Если Экспл.Значение = Перечисление.СостоянияОС.В_Эксплуатации Тогда
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = Экспл.ДатаЗнач;
Иначе
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = 0;
КонецЕсли;
КонецЦикла;
СрокЭкспл = СрокЭкспл + ?(НачалоЭкспл=0,0,ДатаДок - НачалоЭкспл);
СрокЭкспл = ?(Окр(СрокЭкспл/30.5,0,1)>0,Строка(Окр(СрокЭкспл/30.5,0,1))+" мес.","");
Таб.ВывестиСекцию("Строка3");
КонецЦикла;
Если КоличествоСтрок()<25 Тогда
Для х=КоличествоСтрок()+1 по 25 Цикл
Таб.ВывестиСекцию("Строка3П");
КонецЦикла;
КонецЕсли;
Таб.ВывестиСекцию("Подвал3");
Таб.НоваяСтраница();
Таб.ВывестиСекцию("Шапка4");
Таб.Опции(0,0,0,0,"ОпцииПечатиОС_1б","ОкноОС_1б");
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(1);

Таб.Показать("Акт ОС-1б");
Иначе
ПолучитьСтроку();

ИнвНомер = Содержание.Код;
НаимОС = Содержание.Наименование;
НомерГруппы = Формат(Содержание.АмортизационнаяГруппа.ПорядковыйНомер(),"Ч05");
СрокПолезнИспПриПеред = Формат(Содержание.СрокПолезногоИспользования.Получить(ДатаДок),"Ч05");

Если ДокОснование.Выбран() = 0 Тогда
СведенияОбОС = глРасчетАмортизацииОС(ОбъектОС, ДатаДок);
БалансоваяСтоимость = СведенияОбОС.Получить("БалансоваяСтоимостьКон");
НачАмортизация = СведенияОбОС.Получить("НачисленнаяАмортизацияНач") + СведенияОбОС.Получить("РассчитаннаяАмортизацияБух");
Иначе
БалансоваяСтоимость = ДокОснование.БалансоваяСтоимость;
НачАмортизация = ДокОснование.НачисленнаяАмортизация;
КонецЕсли;

ОстСтоимость = БалансоваяСтоимость - НачАмортизация;
НачАмортизация = Формат(НачАмортизация,"Ч015.2");
ОстСтоимость = Формат(ОстСтоимость,"Ч015.2");
Экспл = СоздатьОбъект("Периодический");
Экспл.ИспользоватьОбъект("Состояние", Содержание);
СрокЭкспл=0;
НачалоЭкспл =0;
Экспл.ВыбратьЗначения(ДатаВвода, ДатаДок-1);
Пока Экспл.ПолучитьЗначение() = 1 Цикл
Если Экспл.Значение = Перечисление.СостоянияОС.В_Эксплуатации Тогда
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = Экспл.ДатаЗнач;
Иначе
СрокЭкспл= СрокЭкспл + ?(НачалоЭкспл=0,0,Экспл.ДатаЗнач - НачалоЭкспл);
НачалоЭкспл = 0;
КонецЕсли;
КонецЦикла;
СрокЭкспл = СрокЭкспл + ?(НачалоЭкспл=0,0,ДатаДок - НачалоЭкспл);
СрокЭкспл = ?(Окр(СрокЭкспл/30.5,0,1)>0,Строка(Окр(СрокЭкспл/30.5,0,1))+" мес.","");

Таб.ИсходнаяТаблица("ОС-1");
Таб.Вывести();
Таб.Опции(0,0,0,0,"ОпцииПечатиОС_1","ОкноОС_1");
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(2);

Таб.Показать("Акт ОС-1");
КонецЕсли;
КонецЕсли;

КонецЕсли;

КонецПроцедуры // ПечатьОС()

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
// Нет
//
// Описание:
// Вызывается по кнопке "Печать"
//
Процедура ПоКнопкеПечать(СразуНаПринтер = 0,КолЭкз = 1)

// проверим полномочия печати непроведенных документов
Если (Проведен()=0)
Или ((Проведен()=1) И (Модифицированность()=1)) Тогда
Если глПолучитьПолномочие("РазрешитьПечатьНепроведенныхДокументов") = 0 Тогда
Предупреждение("Недостаточно полномочий для печати непроведенного документа!", 60);
Возврат;
КонецЕсли;
КонецЕсли;

Если ПустоеЗначение(НомерТекущейФормы) = 1 Тогда
НомерТекущейФормы = 1;
Форма.кнПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
КонецЕсли;

Если НомерТекущейФормы = 1 Тогда
Печать(СразуНаПринтер, КолЭкз);
ИначеЕсли НомерТекущейФормы = 2 Тогда
ПечатьОС(СразуНаПринтер, КолЭкз);
Иначе
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");
Параметры.ДобавитьЗначение(СразуНаПринтер, "Устройство");
Параметры.ДобавитьЗначение(КолЭкз, "КоличествоКопий");

ОткрытьФорму("Отчет", Параметры, глКаталогПечФорм+ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы,"Файл"));
КонецЕсли;

КонецПроцедуры // ПоКнопкеПечать()

//******************************************************************************
// ПоКнопкеВыборПечатнойФормы()
//
// Параметры:
// нет.
//
// Возвращаемое значение:
// нет.
//
// Описание:
// - открывает список для выбора способа печати.
// - формирует таблицу по выбранному способу.
//
Процедура ПоКнопкеВыборПечатнойФормы()

НомерТекущейФормы = глВыборПечатнойФормы("Документ." + Вид(), ТаблицаПечФорм);

Если НомерТекущейФормы > 0 Тогда
Форма.кнПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
ПоКнопкеПечать();
КонецЕсли;

КонецПроцедуры // ПоКнопкеВыборПечатнойФормы()

//******************************************************************************
// ЗаполнениеПоДокументуОснованию()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Производит заполнение документа по документу - основанию.
//
Функция ЗаполнениеПоДокументуОснованию(ДокументОснование)

Сообщение = "";

Если ДокументОснование.Выбран() = 0 Тогда
Сообщение = "Не выбран документ - основание";
Возврат Сообщение;

КонецЕсли;

СинонимДокумента = ПредставлениеВида();
СинонимОснования = ДокументОснование.ПредставлениеВида();

Список = глПолучитьСписокВводимыхНаОсновании(ДокументОснование);
Поз = Список.НайтиЗначение(Вид());

// выполним проверку, можно ли вводить документ на основании ДокументОснование
Если Поз = 0 Тогда
// ДокументОснование не найден в списке разрешенных
Сообщение = "Документ """ + СинонимДокумента +
""" нельзя вводить на основании """ + СинонимОснования + """";
Возврат Сообщение;

КонецЕсли;

// документ основание должен быть проведен
Если ДокументОснование.Проведен() = 0 Тогда
Сообщение = "Документ """ + СинонимДокумента + """ нельзя вводить на основании не проведенного документа!";
Возврат Сообщение;

КонецЕсли;

// Проверим, чтобы не было дублирования СФ
Сообщение = "";
Подчиненные = СоздатьОбъект("Документ");
Подчиненные.ВыбратьПодчиненныеДокументы(, , ДокументОснование.ТекущийДокумент());
Пока Подчиненные.ПолучитьДокумент() = 1 Цикл
// должен быть счет_фактурой
Если Подчиненные.Вид() = "РеализацияПрочее" Тогда
// не помеченным на удаление
Если Подчиненные.ПометкаУдаления() = 0 Тогда

Сообщение = "На основании документа " +
СинонимОснования + " " + СокрП(ДокументОснование.НомерДок) + " от " + ДокументОснование.ДатаДок + " " +
"уже выписан документ " + СинонимДокумента + " " + СокрП(Подчиненные.НомерДок) + " от " + Подчиненные.ДатаДок + ". " +
"Нельзя выписывать другой!";
Возврат Сообщение;

КонецЕсли;

КонецЕсли;

КонецЦикла;

ДатаДок = ДокументОснование.ДатаДок;
// все нормально, заполняем на основании документа - основания
глЗаполнитьШапкуНаОсн(Контекст,ДокументОснование);
ДокументОснование.ВыбратьСтроки();
Пока ДокументОснование.ПолучитьСтроку() =1 Цикл
НоваяСтрока();
Содержание = ДокументОснование.ОсновноеСредство;
КонецЦикла;

КонецФункции // ЗаполнениеПоДокументуОснованию()

//*****************************************************************************
// ПоКнопкеОснование()
//
// Параметры:
// Нет
//
// Вызывается из формул элементов диалога:
// При нажатии на кнопку "Основание".
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Если у документа есть документ-основание - открывает его форму, в противном случае -
//осуществляется выбор документа-основания.
//
Процедура ПоКнопкеОснование()

// если документ основание уже есть, откроем его
Если ПустоеЗначение(ДокОснование) = 0 Тогда
ОткрытьФорму(ДокОснование);
Возврат;
КонецЕсли;

// если документа - основания нет, позволяем выбрать его
ДокОсн = глВыбратьОснование(Контекст);
Если ПустоеЗначение(ДокОсн) = 0 Тогда
// Выбрали основание
глЗаполнитьШапкуНаОсн(Контекст, ДокОсн);

Основание = глПредставлениеДокумента(ДокОсн);

ТекстВопроса = "Заполнить по документу основанию?";

Если Вопрос(ТекстВопроса, "Да+Нет", 60) <> "Да" Тогда
Возврат;
КонецЕсли;

Сумма = 0;
Результат = ЗаполнениеПоДокументуОснованию(ДокОснование);
Если ПустоеЗначение(Результат) = 0 Тогда
Предупреждение(Результат, 60);
КонецЕсли;

КонецЕсли;

КонецПроцедуры //ПоКнопкеОснование()

////////////////////////////////////////////////////////////­//////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//
//******************************************************************************
// Предопределенная процедура
//
Процедура ВводНаОсновании(ДокументОснование)

Результат = ЗаполнениеПоДокументуОснованию(ДокументОснование);
Если ПустоеЗначение(Результат) = 0 Тогда
Предупреждение(Результат, 60);
СтатусВозврата(0);
КонецЕсли;

КонецПроцедуры

//******************************************************************************
// Предопределенная процедура
//
Процедура ВводНового(Скопирован)

глЗаполнитьШапку(Контекст, Скопирован,"Продажа");

Если Скопирован = 1 Тогда
ПересчетСуммыВзаиморасчетов();
КонецЕсли;

КонецПроцедуры

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()

// Заполним таблицу для выбора печатной формы
НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Документ." + Вид(),ТаблицаПечФорм);

Парам = Форма.Параметр;
Если ТипЗначенияСтр(Парам)="СписокЗначений" Тогда
Если ПустоеЗначение(Парам.Получить("Команда"))=1 Тогда
Сообщить("В форму документа "+Вид()+" передан неверный параметр!","I");
СтатусВозврата(0);Возврат;
КонецЕсли;
Если Парам.Получить("Команда") = "ПечатьНаПринтер" Тогда
КолЭкз = Макс(Число(Парам.Получить("КолЭкз")),1);
ПоКнопкеПечать(1,КолЭкз);
СтатусВозврата(0);Возврат;
ИначеЕсли Парам.Получить("Команда") = "ПечатьНаЭкран" Тогда
ПоКнопкеПечать(0);
СтатусВозврата(0);Возврат;
Иначе
Сообщить("В форму документа "+Вид()+" передана неверная команда "+Парам.Получить("Команда")+"!","I");
СтатусВозврата(0);Возврат;
КонецЕсли;
КонецЕсли;


// инициализация модульных переменных, контролирующих выполнение
// пересчетов и обновление надписей в форме
СтараяДата = ДатаДок;
СтараяФирма = Фирма;
СтарыйДоговор = Договор;
СтарыйКонтрагент = Контрагент;
СуммаДокументаСтараяРуб = Итог("Сумма")+?(СуммаВклНП=1,0,Итог("СуммаНП"))+?(СуммаВклНДС=1,0,Итог("СуммаНДС"));
СуммаДокументаСтараяРуб = глПересчет (СуммаДокументаСтараяРуб,Валюта,Курс,глРубли,ДатаДок);
ВалютаДоговораСтарая = Договор.ВалютаВзаиморасчетов;

НачальнаяДатаДокумента = ДатаДок;

НачВалюта = Валюта;
НачКурс = Курс;
НачДоговор = Договор;
НачКонтрагент = Контрагент;
НачФирма = Фирма;

Форма.Количество .ВыполнятьФормулуТолькоПриИзменении(1);
Форма.Цена .ВыполнятьФормулуТолькоПриИзменении(1);
Форма.Сумма .ВыполнятьФормулуТолькоПриИзменении(1);
Форма.СуммаНДС .ВыполнятьФормулуТолькоПриИзменении(1);
Форма.СтавкаНДС .ВыполнятьФормулуТолькоПриИзменении(1);
Форма.СуммаНП .ВыполнятьФормулуТолькоПриИзменении(1);
Форма.СтавкаНП .ВыполнятьФормулуТолькоПриИзменении(1);

глПроверкаРазрешенияРедактирования(Контекст);

// поиск выписанных подчиненных документов.
СФ = глНайтиСчетФактуру(Контекст, ВидСчетаФактуры);
Форма.ТекстСчФ.Заголовок(глПредставлениеСФ(СФ));

// если дата проведенного документа больше ТА, то открываем только на просмотр,
// так как его все равно не удастся сохранить после редактирования.
Если (Проведен() = 1) И (ДатаДок > ПолучитьДатуТА()) Тогда
Форма.ТолькоПросмотр(1);
КонецЕсли;

//Инициализирум список действий по кнопке "Действия"
СписокДействий = СоздатьОбъект("СписокЗначений");
СписокДействий.ДобавитьЗначение("Отчет о движениях документа");
СписокДействий.ДобавитьЗначение("Отчет о бухгалтерских проводках");
СписокДействий.ДобавитьЗначение("Структура подчиненности");
СписокДействий.ДобавитьЗначение("Перейти в журнал");

// Если открыли только на просмотр, то надо кнопки сделать недоступными
Если Форма.ТолькоПросмотр()=1 Тогда
// СДЕЛАТЬ НЕДОСТУПНЫМИ КНОПКИ МОДИФИКАЦИИ ДОКУМЕНТА
Форма.кнОК.Доступность(0);
Форма.кнХПроект.Доступность(0);
Форма.кнЗаписать.Доступность(0);
Форма.кнПровести.Доступность(0);
Форма.кнЦены.Доступность(0);
Форма.кнСуммаВзаиморасчетов.Доступность(0);

Если ПустоеЗначение(СФ) = 1 Тогда
// только если СФ отсутствует
Форма.кнСчФ.Доступность(0);
КонецЕсли;
КонецЕсли;

СписокДействий.ДобавитьЗначение("Ввести на основании");
СписокДействий.ДобавитьЗначение("Перейти в журнал");

// кнопка по умолчанию
Если (Форма.ТолькоПросмотр() = 1) ИЛИ ((ДатаДок < Макс(РабочаяДата(), ПолучитьДатуТА()) ) И (Выбран() = 1)) Тогда
Форма.КнопкаПоУмолчанию("кнЗакрыть");
Иначе
Форма.КнопкаПоУмолчанию("кнОК");
КонецЕсли;

Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Шапка");
Форма.Закладки.ДобавитьЗначение("Табличная часть");

Если Выбран() = 0 Тогда
глАктивизироватьРеквизит(Контекст);

Форма.Закладки.ТекущаяСтрока(1);
Форма.ИспользоватьСлой("Шапка,Основной,Подвал");
Иначе
// введенный документ открываем на второй закладке
Форма.Закладки.ТекущаяСтрока(2);
Форма.ИспользоватьСлой("Шапка,ТабличнаяЧасть,Подвал");
КонецЕсли;

УстановкаВидимостиСуммВПодвале();

//Если документ еще не проведен, тогда
//проведение делаем только в потоке
Если ( Проведен() = 0 ) Тогда
ПроводитьПослеТА(1,1);
КонецЕсли;

РасчетТекущегоДолга();

ОбновитьНадписи();

КонецПроцедуры // ПриОткрытии()

//******************************************************************************
// предопределенная процедура

Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)

Если НомерЗакладки=1 Тогда
Форма.ИспользоватьСлой("Шапка,Основной,Подвал");
Иначе
ОбновитьНадписи();
Форма.ИспользоватьСлой("Шапка,ТабличнаяЧасть,Подвал");
КонецЕсли;
УстановкаВидимостиСуммВПодвале();

КонецПроцедуры

//******************************************************************************
// Предопределенная процедура.
//
Процедура ПриНачалеВыбораЗначения(Идентификатор)

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

Вид = Содержание.Вид();

Если Меню.ВыбратьЗначение(Вид, "", 0, 60, 2) <> 1 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;

Параметр = Фирма.ЮрЛицо;

Если Вид = "ОсновныеСредства" Тогда
ОткрытьФорму("Справочник.ОсновныеСредства", Параметр);
СтатусВозврата(0);

ИначеЕсли Вид = "НематериальныеАктивы" Тогда
ОткрытьФорму("Справочник.НематериальныеАктивы", Параметр);
СтатусВозврата(0);

Иначе
НазначитьВид(Содержание, Вид);
Форма.Содержание.НеИзменятьВид(1);
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ПриНачалеВыбораЗначения()

//******************************************************************************
//Предопределенная процедура

Процедура ПриЗаписи()
Перем ОписаниеОш;

Если глМожноЗаписатьДокумент(Контекст)=0 Тогда
СтатусВозврата(0);
ИначеЕсли глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента)=1 Тогда
СтатусВозврата(0);
Иначе
Если глПриЗаписиДокОснСФКонтр(Контекст, ВидСчетаФактуры, "ЗаписьКнигиПродаж", НачКонтрагент, НачДоговор, НачФирма, ОписаниеОш) = 0 Тогда
Предупреждение(ОписаниеОш, 60);
СтатусВозврата(0);
Иначе
Если глПриЗаписиДокОснСФВал(Контекст, ВидСчетаФактуры, "ЗаписьКнигиПродаж", НачВалюта, НачКурс, ОписаниеОш) = 0 Тогда
Предупреждение(ОписаниеОш, 60);
СтатусВозврата(0);
Иначе
НачВалюта = Валюта;
НачКурс = Курс;
НачКонтрагент = Контрагент;
НачДоговор = Договор;
НачФирма = Фирма;
КонецЕсли;
КонецЕсли;
КонецЕсли;

КонецПроцедуры

////////////////////////////////////////////////////////////­////////////////////
// ТЕЛО МОДУЛЯ ФОРМЫ
ВидСчетаФактуры = "СчетФактураВыданный";

// формируем таблицу печатных форм
НомерТекущейФормы = 0;

ТаблицаПечФорм = СоздатьОбъект("ТаблицаЗначений");
ТаблицаПечФорм.НоваяКолонка("Название","Строка",,,,30);
ТаблицаПечФорм.НоваяКолонка("Файл","Строка",,,"Файл",10);
ТаблицаПечФорм.НоваяКолонка("Кнопка","Строка",,,,10);
ТаблицаПечФорм.НоваяКолонка("ФайлОписания","Строка");

// добавим информацию о встроенных формах
ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название = "Печатная форма ТОРГ-12";
ТаблицаПечФорм.Кнопка = "ТОРГ-12";
ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название = "Печатная форма ОС-1";
ТаблицаПечФорм.Кнопка = "ОС-1";
3. poppy 10.07.07 20:35 Сейчас в теме
Хм... Пора прекращать плохую традицию выкладывания полных листингов модулей.

2dillers2007

В коде нужно добавить строку:

ПечДиректор = Фирма.ЮрЛицо.Руководитель.Получить(ДатаДок);

В макете отчета в соответствующей ячейке написать выражение ПечДиректор.
4. CheBurator 3123 12.07.07 00:28 Сейчас в теме
Поппа - как всегда права - еще бы глоб.модуль выложили.
У меня сделано - разданы "признаки" всем менеджерам, которые определяют право полписи отделно на СЧФ и ТОРГ12 (в соответсвии с приказом по предприятию). При интерактивной печати есть возможность выбора "подписывающих" лиц (там немного хитрее - в зависимости от нескольких условий - например, если печатает менеджер с правом подписи - то ничего не спрашиваем - считаем что он будет подписывать и пихаем в подписи его, если печатает оператор без права подписи - то отрабатываем по-другому и т.д...)

пример1 http://infostart.ru/file.php?0,file=360
пример2 http://infostart.ru/file.php?0,file=361

А что делать, если оператор не знает, кого выбирать? Дать в репу оператору! Потому что ответсвенный - есть всегда! Если не знаешь кого - выбираешь гендира и главбуха.
5. O-Planet 6435 12.07.07 07:03 Сейчас в теме
Руки тянутся к автомату при виде листинга модуля. На язык лезут нехорошие слова. Знаю как помочь аффтору. Из принципа НЕ СКАЖУ!!!
6. dillers2007 12.07.07 15:41 Сейчас в теме
Все такие принципиальны. Аж деваться некуда. Нехоришие слова заталкайте обратно в то место, откуда они лезут. но программисты туповатые последнее время пошли. пусть люди модулями пользуются если им надо.
Инфостарт прверен на вшивость, и отупение программистов!!!!!!!!!!!!!!!!!!
7. dillers2007 12.07.07 15:42 Сейчас в теме
8. O-Planet 6435 12.07.07 21:46 Сейчас в теме
Странно, что ты не выложил в zip-архиве всю конфигурацию :) Вот с такими и работаем, блин! Тебе, кстати, уже ответили достаточно полно, что надо сделать.
9. poppy 12.07.07 23:18 Сейчас в теме
Сhe Burashka Написал:
-------------------------------------------------------
> Поппа - как всегда права - еще бы глоб.модуль выложили.

Спасибо за комплимент!

dillers2007 Написал:
-------------------------------------------------------
> Все такие принципиальны. Аж деваться некуда.
> Нехоришие слова заталкайте обратно в то место,
> откуда они лезут. но программисты туповатые
> последнее время пошли. пусть люди модулями
> пользуются если им надо.
> Инфостарт прверен на вшивость, и отупение
> программистов!!!!!!!!!!!!!!!!!!

Очень осуждаю поведение dillers2007. Думаю, что ему неведом документ "Как правильно задавать вопросы" http://www.rsdn.ru/Info/Howtoask.xml

Модуль формы документа здесь явно неуместен. Ведь никто его читать не будет. Специалист и без него ответит или посмотрит в типовой конфигурации, а неспециалист... хм, если и ответит, то неправильно.

Мне непонятно, зачем огрызаться? Ответ дан вполне полный. Малого того, Сhe Burashka описал элемент постановки учета. (Кто-то недавно спрашивал, что это такое).
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот