• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Formex

  • Автор темы kaa
  • Дата начала
K

kaa

Не получается воспользоватся ПоложениеКолонкиТаблицы, так и должно быть или что-то делаю не так

ФРМ = СоздатьОбъект("АтрибутФормы");
Сервис = СоздатьОбъект("Сервис");
ФормаРасш = СоздатьОбъект("РасширениеФормы");


//Структура таблицы
ВыгрузитьТабличнуюЧасть(Табло);
Табло.УдалитьКолонку(1);
Табло.ВставитьКолонку("Дерево",1,"ТаблицаЗначений");
Табло.ВставитьКолонку("НомерПиктограммы",2);
Табло.ВставитьКолонку("НаименованиеВетви",3,,,,"Цех/Номенклатура");

Табло.ВставитьКолонку("FormEx_ПланРаскраски",4);
Табло.УдалитьСтроки();
ОформитьТабло(); //Заполняю табло

ФормаРасш.РаскрашиватьТаблицу("Табло");
Сервис.ИспользоватьПланРаскраски(1);
ФРМ.УстановитьАтрибут(Форма,"Табло");
ФРМ.ПерехватитьТаблицуЗначений();
//расоложние колонок
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,2);
Табло.НоваяКолонка();
Табло.УдалитьКолонку(Табло.КоличествоКолонок());
ОбновитьДерево();//обновляю дерево

Если убрать ФРМ.ПерехватитьТаблицуЗначений() то в Таблице значений работает :)
 
S

SeverBap

Я делаю так:
Код:
Процедура ПослеОткрытия()
АтрибутФормы=СоздатьОбъект("АтрибутФормы");
АтрибутФормы.УстановитьАтрибут(Форма,"ТаблицаДанных");
АтрибутФормы.ПерехватитьТаблицуЗначений();
АтрибутФормы.ОпцииДерева(0);
КонецПроцедуры
объявляю переменную для модуля: АтрибутФормы;
в самом модуле (после все процедур и функции)

Код:
ТаблицаДанных.НоваяКолонка("СледующийУровень");
ТаблицаДанных.НоваяКолонка("Пиктограммы");
ТаблицаДанных.НоваяКолонка("Наименование",,,," ");
ТаблицаДанных.НоваяКолонка("Элемент");
ТаблицаДанных.НоваяКолонка("Начислено","Число",15,2,"Начислено",,"Ч15.2, ");
ТаблицаДанных.НоваяКолонка("Оплачено","Число",15,2,"Оплачено",,"Ч15.2, ");
ТаблицаДанных.ВидимостьКолонки("Элемент",0);
у меня на форме таблицаДанных! (блин это дерево+ТаблицаЗначений всегда работает с ВИЗУАЛЬНОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ)
потом заполняю как положено неообходимыми данными!!!

если у тебя не получается вывести, как ты сказал в самом конце попробуй обновить дерево может чего нибудь и получится!!!! (у меня как-то был тут тема такая смотри)
Код:
ФРМ.ОбновитьДерево();
 
S

SeverBap

Попробуй (верней по крайней мере у меня что-то получилось):
Код:
Процедура ПослеОткрытия()
ФРМ = СоздатьОбъект("АтрибутФормы"); 
Сервис = СоздатьОбъект("Сервис");
ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФРМ.УстановитьАтрибут(Форма,"Табло");
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,2);
ФРМ.ПерехватитьТаблицуЗначений();
КонецПроцедуры
Интересный подход тока незнаю нафига тебе это!

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

kaa

Не выходит посмотри:
Код:
Процедура ПослеСозданияФормы() 
ФРМ = СоздатьОбъект("АтрибутФормы");		 
Сервис = СоздатьОбъект("Сервис");
ФормаРасш = СоздатьОбъект("РасширениеФормы");


//Структура таблицы	
ВыгрузитьТабличнуюЧасть(Табло); 
Табло.УдалитьКолонку(1);
Табло.ВставитьКолонку("Дерево",1,"ТаблицаЗначений");
Табло.ВставитьКолонку("НомерПиктограммы",2);
Табло.ВставитьКолонку("НаименованиеВетви",3,,,,"Цех/Номенклатура"); 

Табло.ВставитьКолонку("FormEx_ПланРаскраски",4);
Табло.УдалитьСтроки();
ОформитьТабло(); 

ФормаРасш.РаскрашиватьТаблицу("Табло");
Сервис.ИспользоватьПланРаскраски(1); 	
ФРМ.УстановитьАтрибут(Форма,"Табло");
//ФРМ.ПерехватитьТаблицуЗначений();
//ФРМ.ОпцииДерева(,,0,2);

//расоложние колонок  
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,0);

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

ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,0);

ФормаРасш.ПоложениеКолонкиТаблицы("Табло",4,2);
Табло.НоваяКолонка();
Табло.УдалитьКолонку(Табло.КоличествоКолонок());
//ОбновитьДерево();
ФРМ.ПерехватитьТаблицуЗначений();
ФРМ.ОпцииДерева(,,0,2);
КонецПроцедуры

Надо подменить табличную часть, а поскольку колонок до х.... то надо сделать форму более удобо читаемо
 
S

SeverBap

Вот б.... Выложи свою обработку я посмотрю что к чему а то так долго с тобой ковырятся будем!!!!
или давай MD я посмотрю (чесно я долго ковырялся с этой компанентой и так просто ты с ней не разбирешся один!!!)
 
K

kaa

MD - шник здоровый , там много всего и црм и трындец вообщем, а обработку из документа :unsure:, могу привести полный код документа
 
K

kaa

Код:
Перем ТекущееСвойство, ТекущийЭлементТЗ;

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


Перем ПозДоговора,СписокВидовПродаж,СтарСотояние,СтарСклад,БудетПечататьсяУведомление,
ФРМ,СписокОткрытыхВеток,ФормаРасш,Сервис;

Процедура ПриИзмененииСкидки() Далее 
Процедура Платеж(ТекРеж) Далее 
Процедура Уведомление(Реж) Далее  
Процедура УправлениеВидимостью() Далее
//***************************************Вставка**********************************
*******//
//********************************************************************************
*******// 
//******************************************************************************
// ОбновитьДерево()()
//
// Параметры: 
// 
//
// Возвращаемое значение:
// Нет
//
// Описание:
// ТекстОписания
//
Процедура ОбновитьДерево()
ФРМ.ОбновитьДерево();
Для Инд=1 По СписокОткрытыхВеток.РазмерСписка() Цикл
ФРМ.РазвернутьУзел(СписокОткрытыхВеток.ПолучитьЗначение(Инд));
КонецЦикла;
КонецПроцедуры
//******************************************************************************
Процедура ПриВыбореСклада(Реж)
Если Реж = 1 Тогда
Если Склад.Выбран()=1 Тогда			
Если Склад.ПроцентПредоплаты = 0 Тогда
Предупреждение("У склада не заполнен реквизит процент предоплаты!",60);
Возврат;
КонецЕсли; 
ПроцентАванса = Склад.ПроцентПредоплаты;
Платеж(1);			
КонецЕсли; 
Иначе
Если СтарСклад<>Склад Тогда	 
СтарСклад = Склад;
Если Склад.Выбран()=1 Тогда
Если Вопрос("Изменился склад пересчитать размер авансового платежа?","Да+Нет",60)="Да" Тогда
Если Склад.ПроцентПредоплаты = 0 Тогда
Предупреждение("У склада не заполнен реквизит процент предоплаты!",60);
Возврат;
КонецЕсли; 
ПроцентАванса = Склад.ПроцентПредоплаты;
Платеж(1);
КонецЕсли;		
КонецЕсли; 
КонецЕсли;		
КонецЕсли; 
КонецПроцедуры			 
//******************************************************************************
Процедура ПроставитьДатуОплаты()
Если ВидПродажи = Перечисление.ВидПродаж.БыстаяПродажа Тогда
ДатаОплаты=?(ПустоеЗначение(ДатаСчета)=0,ДатаСчета,ПолучитьПустоеЗначение("Дата"));
Если ПустоеЗначение(ДатаОплаты)=0 Тогда
Если ПустоеЗначение(ДатаАванса)=1 Тогда
ДатаАванса = ДатаОплаты;
КонецЕсли;
КонецЕсли;
Иначе	
ДатаОплаты=?(ПустоеЗначение(ДатаСчета)=0,ДатаСчета+5,ПолучитьПустоеЗначение("Дата"));
Если ПустоеЗначение(ДатаОплаты)=0 Тогда
Если ПустоеЗначение(ДатаАванса)=1 Тогда
ДатаАванса = ДатаОплаты;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Вопрос("Пересчитать сумму авансового платежа согласно проценту, в карточке склада?","Да+Нет",60)="Да" Тогда
ПриВыбореСклада(1);
КонецЕсли;
КонецПроцедуры 

Функция ВернутьСуммуНДС() 
СС = 0;		  
Если СуммаВклНДС=0 Тогда
ВыбратьСтроки();
Пока ПОлучитьСтроку()=1 Цикл

БазаНалога=Сумма;
СтавкаНДС1	=?(УчитыватьНДС=1,СтавкаНДС,Перечисление.СтавкиНДС.БезНДС);
Если СуммаВклНДС=1 Тогда
СуммаНДС1=БазаНалога*глВыделяемыйНДС(СтавкаНДС1);//0.1667, 0.16666(6),...
Иначе
СуммаНДС1=БазаНалога*глНачисляемыйНДС(СтавкаНДС1);//0.20, 0.20004...
КонецЕсли;  
СС = СС+СуммаНДС1;
КонецЦикла;
КонецЕсли;
Возврат СС;
КонецФункции



Функция ВернутьПроцент()														 
ЕдВПр = (Итог("Сумма")+ВернутьСуммуНДС())/100;
СкидкаПП = (Итог("Сумма")+ВернутьСуммуНДС())-(Итог("СуммаСоСкидкой")+?(СуммаВклНДС=1,0,Итог("СуммаНДС")));
Про = СкидкаПП/?(ЕдВПр=0,1,ЕдВПр);
Возврат глФРМ(Про);	
КонецФункции
//******************************************************************************
// ИзменитьДатуОплаты()()
//
// Параметры: 
// 
//
// Возвращаемое значение:
// Нет
//
// Описание:
// ТекстОписания
//
Процедура ИзменитьДатуОплаты()
Если ПустоеЗначение(ДатаОплаты)=0 Тогда
Если ПустоеЗначение(ДатаАванса)=1 Тогда
ДатаАванса = ДатаОплаты;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ИзменитьДатуОплаты()()

//******************************************************************************
Функция ТекстЗаголовка()
Если ВидПродажи = Перечисление.ВидПродаж.БыстаяПродажа Тогда
Возврат "Коммерческое предложение по быстрой продаже №";
ИначеЕсли ВидПродажи = Перечисление.ВидПродаж.ПродажаСоСклада Тогда
Возврат "Коммерческое предложение по продаже со склада №";
ИначеЕсли ВидПродажи = Перечисление.ВидПродаж.ПодЗаказ Тогда
Возврат "Коммерческое предложение по продаже под заказ №";
Иначе
Возврат "Коммерческое предложение №";

КонецЕсли;
КонецФункции

Процедура ПриВыбореТовара()
Код=Номенклатура.Код;
Длина=Номенклатура.Длина;
Ширина=Номенклатура.Ширина;
Высота=Номенклатура.Высота;
Вес=Номенклатура.Вес;
Мощность=Номенклатура.Мощность; 
Описание1=Номенклатура.Описание;
Напряжение =Номенклатура.Напряжение;
Если ПустоеЗначение(ТипЦен)=0 Тогда	  	
Если глВернутьЦену(Номенклатура, ТипЦен, ДатаДок, Цена, Единица,ТипЦен.Валюта) = 1 Тогда	  		

Если Единица.Коэффициент <> Коэффициент Тогда
Если Единица.Коэффициент <> 0 Тогда
Цена = (Цена * Коэффициент) / Единица.Коэффициент;
КонецЕсли;
КонецЕсли;

глПересчитатьЦенуВДокументе(Контекст, 0, УчитыватьНДС, Цена, ТипЦен.Валюта, ТипЦен.ЦенаВклНП, ТипЦен.ЦенаВклНДС);

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

КонецЕсли;	
Иначе
Цена = 0;
КонецЕсли; 
Количество = ?(Количество=0,1,Количество);	
глПересчетТаблЧасти(Контекст,"Цена"); 
Если ПустоеЗначение(ОбщаяСкидка)=0 Тогда
Скидка = ОбщаяСкидка;
КонецЕсли;
ПриИзмененииСкидки();
КонецПроцедуры 

Процедура ПередатьКонтакт()
Спр=СоздатьОбъект("Справочник.Пользователи");
Спр.НайтиЭлемент(глПользователь);
Если Спр.Выбрать("Кому передать в работу ?",)=1 Тогда
Записать();
// Дальше есть 2 варианта - либо юзер в онлайне, либо нет
// Сначала попробуем задействовать синхронизатор для открытия у него формы
Если глКомандаПользователю(Спр.ТекущийЭлемент(),ТекущийДокумент())=0 Тогда
Если Вопрос("Пользователь не отвечает !
|Оставить ему напоминание ?","Да+Нет")<>"Да" Тогда
Возврат;
КонецЕсли;
КонецЕсли;

// Если он в офлайне, то пошлем ему напоминание
Док=СоздатьОбъект("Документ.я_Напоминание");
Док.Новый();
Док.Автор = глПользователь;
Док.Кому=Спр.ТекущийЭлемент();
Док.Тема="Передан в работу: """+ТекущийДокумент()+ " " +Контрагент+"""";
Док.ДокОснование=ТекущийДокумент();
Док.Приоритет=Перечисление.я_Приоритет.Нормальный;
Док.СостояниеДокумента=Перечисление.я_Состояние.Запланировано;
Док.ДатаОповещения=РабочаяДата();
Док.ВремяОповещения=ТекущееВремя();
Док.РеальнаяДатаОповещения = глДатаВремя(, РабочаяДата(), ТекущееВремя());
Док.Описание=""+РабочаяДата()+" в "+ТекущееВремя()+"
|сотрудником "+глПользователь+"
|Коммерческое предложение №"+НомерДок+" от "+ДатаДок+"
|было передано сотруднику "+Спр.ТекущийЭлемент();
Док.Записать();
Док.Провести();

КонецЕсли;
Форма.Закрыть();
КонецПроцедуры // ПередатьКонтакт 

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

// инициализация таблицы
Заголовок = глПредставлениеВидаДокумента(Контекст, 0, 1);
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");

Скидка = "";
СекцСкидка = ?(ПустоеЗначение(Скидка) = 0, "Скидка", "");

// Секция Шапка таблицы
Таб.ВывестиСекцию("ШапкаТаблицы" + СекцСкидка);
Таб.ПовторятьПриПечатиСтроки(7, 9);

// выводим табличную часть
НомСтроки = 0;
ВыбратьСтроки();

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

СуммаИтог = Итог("Сумма");

// секция Итого
Таб.ВывестиСекцию("Итого");

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

// секция СуммаПрописью
Таб.ВывестиСекцию("СуммаПрописью");

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

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

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

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

ОткрытьФорму("Отчет", Параметры, КаталогИБ()+"ExtForms\PrnForms\"+ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы,"Файл"));
КонецЕсли;
ПроставитьДатуОплаты();
КонецПроцедуры // ПоКнопкеПечать()


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

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

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

//******************************************************************************
Процедура ОформитьТабло() 
Перем ДеревоТабло[20];

//Нужные таблицы
ВремТабло	= СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ВремТабло);
ВремТабло.УдалитьКолонку(1);

ВремТабло.Сортировать("Цех");
ЦехСр = ""; 
НСтр = 0; 
НомерДерева = 0;
ВремТабло.ВыбратьСтроки();
Пока ВремТабло.ПолучитьСтроку() = 1 Цикл 
НСтр = НСтр + 1;
Если ЦехСр <> ВремТабло.Цех Тогда 
Если ЦехСр <> "" Тогда 			
Табло.УстановитьЗначение(Табло.КоличествоСтрок(),"Дерево",ДеревоТабло[НомерДерева]);
КонецЕсли;

Табло.НоваяСтрока(); 

НомерДерева = НомерДерева + 1;
ДеревоТабло[НомерДерева]= СоздатьОбъект("ТаблицаЗначений");
ДеревоТабло[НомерДерева].Загрузить(Табло);
ДеревоТабло[НомерДерева].УдалитьСтроки();	





Табло.НомерПиктограммы	 	= 2;
Табло.НаименованиеВетви	 	= ВремТабло.Цех;
Табло.FormEx_ПланРаскраски	= "BRUSH[65535]INDENT[-1]";
ЦехСр					 	= ВремТабло.Цех;
//Инд 					 	= 4;
//Для Инд=4 По ВремТабло.КоличествоКолонок() Цикл
//	Табло.УстановитьЗначение(Табло.КоличествоСтрок(),Инд,"");
//КонецЦикла;
КонецЕсли;
ДеревоТабло[НомерДерева].НоваяСтрока();
ДеревоТабло[НомерДерева].НомерПиктограммы = 3;
ДеревоТабло[НомерДерева].НаименованиеВетви = ВремТабло.Номенклатура;

Инд = 1;
Для Инд=1 По ВремТабло.КоличествоКолонок() Цикл
ДеревоТабло[НомерДерева].УстановитьЗначение(ДеревоТабло[НомерДерева].КоличествоСтрок(),Инд+4,ВремТабло.ПолучитьЗначение(НСтр,Инд));
КонецЦикла;
КонецЦикла;
Табло.УстановитьЗначение(Табло.КоличествоСтрок(),"Дерево",ДеревоТабло[НомерДерева]);
УправлениеВидимостью(); 
Табло.ВидимостьКолонки(4,0);
Табло.ВидимостьКолонки("Номенклатура",0); 
Табло.ВидимостьКолонки("Цех",0);
КонецПроцедуры 
//******************************************************************************
Процедура ПослеСозданияФормы() 
ФРМ = СоздатьОбъект("АтрибутФормы");		 
Сервис = СоздатьОбъект("Сервис");
ФормаРасш = СоздатьОбъект("РасширениеФормы");


//Структура таблицы	
ВыгрузитьТабличнуюЧасть(Табло); 
Табло.УдалитьКолонку(1);
Табло.ВставитьКолонку("Дерево",1,"ТаблицаЗначений");
Табло.ВставитьКолонку("НомерПиктограммы",2);
Табло.ВставитьКолонку("НаименованиеВетви",3,,,,"Цех/Номенклатура"); 

Табло.ВставитьКолонку("FormEx_ПланРаскраски",4);
Табло.УдалитьСтроки();
ОформитьТабло(); 

ФормаРасш.РаскрашиватьТаблицу("Табло");
Сервис.ИспользоватьПланРаскраски(1); 	
ФРМ.УстановитьАтрибут(Форма,"Табло");
//ФРМ.ПерехватитьТаблицуЗначений();
//ФРМ.ОпцииДерева(,,0,2);

//расоложние колонок  
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
//ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,0);

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

ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,0);

ФормаРасш.ПоложениеКолонкиТаблицы("Табло",4,2);
Табло.НоваяКолонка();
Табло.УдалитьКолонку(Табло.КоличествоКолонок());
//ОбновитьДерево();
ФРМ.ПерехватитьТаблицуЗначений();
ФРМ.ОпцииДерева(,,0,2);
КонецПроцедуры
//_____________________________________________________________________________

Процедура ВводНаОсновании(ДокументОснование)
глВводНаОснованииМоя(Контекст,ДокументОснование);
Табличка = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(Табличка);
ОткрытьФормуМодально("Обработка.РаспределениеПоЦехам",Табличка);
УдалитьСтроки();

Н = 0;
Табличка.ВыбратьСтроки();
Пока Табличка.ПолучитьСтроку() = 1 Цикл
Н = Н + 1;
Табличка.УстановитьЗначение(Н,1,Н);
КонецЦикла;
ЗагрузитьТабличнуюЧасть(Табличка);
//ОформитьТабло();
КонецПроцедуры

//_____________________________________________________________________________

Процедура ЗаполнитьСвойства()
Перем СтрокаТЗ;

Если (ПустоеЗначение(ТекущийЭлементТЗ) = 1) и (ТЗСвойства.ТекущаяСтрока() > 0) Тогда
ТекущийЭлементТЗ = ТЗСвойства.Элемент;
КонецЕсли;

ТЗСвойства.УдалитьСтроки();

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

ТЗСвойства.Сортировать("+ВидСвойства",);

глУстановитьТекущуюСтрокуТЗ(ТЗСвойства, ТекущийЭлементТЗ);
КонецПроцедуры //ЗаполнитьСвойства

//_____________________________________________________________________________

Процедура ДоступностьЭлементов(Режим = 0)
Если Форма.Закладки.ТекущаяСтрока() = 1 Тогда
Если СостояниеДокумента = Перечисление.я_Состояние.Отменено Тогда
Форма.тПричинаОтказа.Видимость(1);
Форма.ПричинаОтказаСтр.Видимость(1);
Форма.кнXПричинаОтказаСтр.Видимость(1);
Иначе
Форма.тПричинаОтказа.Видимость(0);
Форма.ПричинаОтказаСтр.Видимость(0);
Форма.кнXПричинаОтказаСтр.Видимость(0);
КонецЕсли;
КонецЕсли;


//	Форма.СуммаНДС.Заголовок(?(СуммаВклНДС=1,"в т.ч. НДС","Сумма НДС"));
//	Форма.СуммаНДС	.Видимость(УчитыватьНДС);
//	Форма.СтавкаНДС	.Видимость(УчитыватьНДС);

Если СостояниеДокумента = Перечисление.я_Состояние.Завершено Тогда
Если НазваниеНабораПрав()<>"Администратор" Тогда
Форма.ТолькоПросмотр(1);
Форма.кнНовый.Доступность(0);
Форма.кнКопировать.Доступность(0);
Форма.кнОчистить.Доступность(0);
Форма.кнВверх.Доступность(0);
Форма.кнВниз.Доступность(0);
Форма.кнЗаполнить.Доступность(0);
Форма.кнПодбор.Доступность(0);
Форма.кнЦены.Доступность(0);
Форма.Прцены.Доступность(0);
Форма.ПечатьДоговора.Доступность(0);
КонецЕсли; 
ИначеЕсли СостояниеДокумента = Перечисление.я_Состояние.КОплате Тогда
Если НазваниеНабораПрав()<>"Администратор" Тогда 			
Форма.кнНовый.Доступность(0);
Форма.кнКопировать.Доступность(0);
Форма.кнОчистить.Доступность(0);
Форма.кнВверх.Доступность(0);
Форма.кнВниз.Доступность(0);
Форма.кнЗаполнить.Доступность(0);
Форма.кнПодбор.Доступность(0);
Форма.кнЦены.Доступность(0);
Форма.Прцены.Доступность(0);

//таб часть
//Форма.Номенклатура.Доступность(0); 
//Форма.Количество.Доступность(0);
//Форма.Единица.Доступность(0);
//Форма.Коэффициент.Доступность(0);
//Форма.Цена.Доступность(0);
//Форма.Сумма.Доступность(0);
//Форма.СтавкаНДС.Доступность(0);
//Форма.СуммаНДС.Доступность(0);
//Форма.Код.Доступность(0);
//Форма.СрокПоставки.Доступность(0);
//Форма.Длина.Доступность(0);
//Форма.Ширина.Доступность(0);
//Форма.Высота.Доступность(0);
//Форма.Вес.Доступность(0);
//Форма.Мощность.Доступность(0);
//Форма.Скидка.Доступность(0);
//Форма.ЦенаСоСкидкой.Доступность(0);
//Форма.СуммаСоСкидкой.Доступность(0);
//Форма.Описание1.Доступность(0);
//Форма.НомерПоРасстановке.Доступность(0);
//Форма.Каркас.Доступность(0);
//Форма.ЦветКаркаса.Доступность(0);
//Форма.Материал.Доступность(0);
//Форма.ЦветМатериала.Доступность(0);
//Форма.ЦветПодстолья.Доступность(0);
//Форма.ВариантЦоколя.Доступность(0);
//Форма.ЦветЦоколя.Доступность(0);
//Форма.ЦветПодлокотника.Доступность(0);
//Форма.Напряжение.Доступность(0);
//Форма.Подстолье.Доступность(0);
//Форма.СтавкаНП.Доступность(0);			
КонецЕсли;
КонецЕсли;

КонецПроцедуры //ДоступностьЭлементов
//_____________________________________________________________________________

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

//_____________________________________________________________________________
Процедура ВводНового(Копирование) //предопределенная
глДокументПриСоздании(Контекст, Копирование);

Если Копирование = 1 Тогда
Возврат;
КонецЕсли;

//+ТиС
глЗаполнитьШапку(Контекст, Копирование);
//-ТиС
глЗаполнитьРеквизитыПоУмолчанию(Контекст); 
ПредложениеПо=Перечисление.ВидыКоммерческихПредложений.Оборудование;
ДатаОплаты = ""; 
Время = ТекущееВремя();
КонецПроцедуры //ВводНового

//_____________________________________________________________________________
// Предопределенная процедура.
//
Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
Перем СтрокаСЗ;

Форма.ИспользоватьСлой(ЗначениеЗакладки, 2);
ДоступностьЭлементов();

Форма.Закладки.ПолучитьЗначение(Форма.Закладки.ТекущаяСтрока(), СтрокаСЗ);
Если СтрокаСЗ = "Свойства" Тогда
глПерехватКлавиш(Контекст, 1);
Иначе
глПерехватКлавиш(Контекст, 0);
КонецЕсли;
КонецПроцедуры // ПриВыбореЗакладки()
//_____________________________________________________________________________

Процедура ПриЗакрытии()
глПерехватКлавиш(Контекст, 0);
глПриЗакрытииДокумента(Контекст,"ТЗДокументы");
КонецПроцедуры

//_____________________________________________________________________________

Процедура ПриУдаленииСтроки()
Ответ=Вопрос("Удалить строку??!",1,30);
Если Ответ=2 Тогда
СтатусВозврата(0);
ИначеЕсли Ответ=-1 Тогда		 
СтатусВозврата(0);		
КонецЕсли;
глДокументПриУдаленииСтроки(Контекст);
КонецПроцедуры
//_____________________________________________________________________________

Процедура ПриЗаписи()
глДокументПриЗаписи(Контекст); 

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

Если Ошибка<>"" Тогда
Предупреждение(Ошибка,60);
СтатусВозврата(0);
КонецЕсли;

Если ПустоеЗначение(ПричинаОтказаСтр) = 0 Тогда
СпрПричиныОтказа = СоздатьОбъект("Справочник.я_ПричиныОтказа");
Если СпрПричиныОтказа.НайтиПоНаименованию(СокрЛП(ПричинаОтказаСтр),0,0) = 0 Тогда
СпрПричиныОтказа.Новый();
СпрПричиныОтказа.Наименование = СокрЛП(ПричинаОтказаСтр);
СпрПричиныОтказа.Записать();
КонецЕсли;
ПричинаОтказа = СпрПричиныОтказа.ТекущийЭлемент();
Иначе
ПричинаОтказа = "";
КонецЕсли;
КонецПроцедуры
//******************************************************************************
// ЗаполнитьИзТерминала()
//
// Параметры: 
// 
//
// Возвращаемое значение:
// Нет
//
// Описание:
// заполняет спецификацию документа из терминала сбора данных
//
Функция ЗаполнитьИзТерминала()
Перем ТермДанные;
Перем УдаляемыеСтроки;
Перем ВремНоменклатура, ВремЕдиница, ВремКолво;
Перем ЦенаТов, ЕдиницаЦены;

// 1. загружаем данные из терминала
Если глТерминалЗагрузитьДанные(ТермДанные) = 0 Тогда
Возврат "";
КонецЕсли;

// 2. преобразуем таблицу, полученную из обработки терминала в формат для
// передачи в процедуру обработки подбора

ТермДанные.НоваяКолонка("Номенклатура");
ТермДанные.НоваяКолонка("Единица");
ТермДанные.НоваяКолонка("Цена", "Число",);

УдаляемыеСтроки = СоздатьОбъект("СписокЗначений");
ТермДанные.ВыбратьСтроки();

Пока ТермДанные.ПолучитьСтроку() = 1 Цикл
Если глПолучитьТоварПоШтрихкоду(ТермДанные.Штрихкод, ВремНоменклатура, ВремЕдиница, ВремКолво) = 0 Тогда
// штрихкод не найден. сохраним номер строки для дальнейшего ее удаления
УдаляемыеСтроки.ДобавитьЗначение(ТермДанные.НомерСтроки);
Иначе
ТермДанные.Номенклатура	= ВремНоменклатура;
ТермДанные.Единица		= ВремЕдиница;
ТермДанные.Количество	= ТермДанные.Количество * ВремКолво;
ТермДанные.Цена			= глПолучитьЦену(ВремНоменклатура, ТипЦен, ДатаДок, ВремЕдиница, Валюта, Курс);
КонецЕсли;
КонецЦикла;


// 3. удалим строки, по которым не удалось идентифицировать товар
Для СчетчикЦикла = 1 По УдаляемыеСтроки.РазмерСписка() Цикл
УдСтр = УдаляемыеСтроки.ПолучитьЗначение(СчетчикЦикла);
ТермДанные.УдалитьСтроку(УдСтр - СчетчикЦикла + 1);
КонецЦикла;

ТермДанные.Свернуть("Номенклатура, Единица, Цена", "Количество");

ПараметрыПодбора = СоздатьОбъект("СписокЗначений");
ПараметрыПодбора.ДобавитьЗначение(0			 , "ЕстьВидТМЦ");
ПараметрыПодбора.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе");
ПараметрыПодбора.ДобавитьЗначение(ТипЦен		 , "ТипЦен");	 
ПараметрыПодбора.ДобавитьЗначение(ТермДанные	 , "ТаблицаПодбора");

глОбработкаПодбора(Контекст, ПараметрыПодбора, 1, 1, 1);

// 4. Спросим про очистку памяти терминала
Если Вопрос("Очистить память терминала сбора данных?", "Да+Нет", 60) = "Да" Тогда
глТерминалОчиститьПамять();
КонецЕсли;

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
ПриВыбореТовара();
КонецЦикла;

Возврат "";

КонецФункции // ЗаполнитьИзТерминала()
//_____________________________________________________________________________

Функция ПриВыбореЗначения(Об="", ДопПарам="")  
Перем ВариантЗап;

Если Об="" Тогда
Об=Форма.АктивныйЭлемент();
КонецЕсли;

Если	(Об = "кнДобавитьСвойство") или
(Об = "кнИзменитьСвойство") или
(Об = "кнУдалитьСвойство") или
(Об = "кнКопироватьСвойство") Тогда


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

Если Об="кнДобавитьСвойство" Тогда
глДобавитьИзменитьСвойство(Контекст,,,"Документ_я_КоммерческоеПредложение");

ИначеЕсли Об="кнИзменитьСвойство" Тогда
Если ТЗСвойства.ТекущаяСтрока() > 0 Тогда
ТекущееСвойство = ТЗСвойства.Элемент;
глДобавитьИзменитьСвойство(Контекст,ТЗСвойства.ВидСвойства,ТЗСвойства.ЗначениеСвойства,"Документ_я_КоммерческоеПредложение");
КонецЕсли;

ИначеЕсли Об="кнКопироватьСвойство" Тогда
Если ТЗСвойства.ТекущаяСтрока() > 0 Тогда
ТекущийЭлементТЗ = глКопироватьСвойство(ТЗСвойства.ПолучитьЗначение(ТЗСвойства.ТекущаяСтрока(),"Элемент"), ТекущийДокумент());
ЗаполнитьСвойства();
КонецЕсли;

ИначеЕсли Об="кнУдалитьСвойство" Тогда
Если ТЗСвойства.ТекущаяСтрока() > 0 Тогда
ТекущийЭлементТЗ = глУдалитьСвойство(ТЗСвойства.ПолучитьЗначение(ТЗСвойства.ТекущаяСтрока(),"Элемент"));
ЗаполнитьСвойства();
КонецЕсли;

ИначеЕсли Об="кнОбновитьСвойство" Тогда	
Если ТЗСвойства.ТекущаяСтрока() > 0 Тогда
ТекущийЭлементТЗ = ТЗСвойства.Элемент;
КонецЕсли;
ЗаполнитьСвойства();

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

ИначеЕсли Об="ТЗСвойства" Тогда
Если Форма.ТолькоПросмотр() = 1 Тогда
Возврат 0;
КонецЕсли;
Если ТЗСвойства.ТекущаяСтрока() > 0 Тогда
ПриВыбореЗначения("кнИзменитьСвойство");
КонецЕсли;

ИначеЕсли Об="кнОчистить" Тогда
Если КоличествоСтрок() > 0 Тогда
Если Вопрос("Очистить таблицу?", "Да+Нет") = "Да" Тогда
УдалитьСтроки();
КонецЕсли;
КонецЕсли;

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

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

Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Предупреждение("Ошибка при выполнении запроса.", 5);
Возврат 0;
КонецЕсли;

Пока Запрос.Группировка() = 1 Цикл
НоваяСтрока();
Номенклатура = Запрос.Объект;
Количество = 1;
глПересчетТаблЧасти(Контекст, "Номенклатура");
КонецЦикла;

глСохранитьЗначениеТекущегоФильтраВТЗ(ТипОбъекта, ТаблицаЗначений, ИмяОтбора, "", "");
КонецЕсли; 
Иначе
Результат = ЗаполнитьИзТерминала();
Если ПустоеЗначение(Результат) = 0 Тогда
Предупреждение(Результат, 60);
КонецЕсли;
КонецЕсли;
Иначе Возврат глДокументОбработкаФормы(Контекст, Об, ДопПарам);

КонецЕсли;
КонецФункции
//_____________________________________________________________________________

//Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) 
//	Если Источник="Hook" Тогда
//		Стат=СокрЛП(Рарус_Компонента.GetHookKeysState());	// Состояния Shift+Ctrl+Alt в момент Hook'a
//		СкКод=Число(Данные);
//		Если Событие<>"KeyPress" Тогда Возврат;
//		ИначеЕсли (СкКод=45) и (Стат="000") Тогда ПриВыбореЗначения("кнДобавитьСвойство");			// <Insert>
//			Возврат;
//		ИначеЕсли (СкКод=120) и (Стат="000") Тогда ПриВыбореЗначения("кнКопироватьСвойство");		// <F9>
//			Возврат;
//		ИначеЕсли (СкКод=82) и (Стат="010") Тогда ПриВыбореЗначения("кнОбновитьСвойство");			// <Ctrl+R>
//			Возврат;
//		КонецЕсли;
//	Иначе
//		глОбработкаВнешнегоСобытия(Источник, Событие, Данные);	
//	КонецЕсли;
//КонецПроцедуры

//_____________________________________________________________________________

Процедура ОбработкаПодбора(Элемент, КонтФормы)
ТекущийЭлементТЗ = глОбработкаПодбораСвойств(Элемент, "я_Служебный", ТекущийДокумент(), ТекущееСвойство);
Если ПустоеЗначение(ТекущийЭлементТЗ) = 0 Тогда
ЗаполнитьСвойства();
КонецЕсли;

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

// есть ставки налогов, есть скидка
глОбработкаПодбора(Контекст, Элемент, 1, 0, 0); 
//***************************************Вставка**********************************
*******//
//********************************************************************************
*******//
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
ПриВыбореТовара();
КонецЦикла;
//********************************************************************************
*******//
//*************************************Конец вставки*************************************//
КонецПроцедуры

//_____________________________________________________________________________

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

Параметр = глПоКнопкеОткрытьСправочник("я_ПричиныОтказа", 1, ПрОтказа);
Если ТипЗначенияСтр(Параметр) = "Справочник" Тогда // модальный режим
ПричинаОтказа = Параметр;
ПричинаОтказаСтр = Параметр.Наименование;
КонецЕсли;

ИначеЕсли ИдентЭлемДиалога = "КонтактноеЛицо" Тогда
ОснКонтрагент = глНайтиКонтрагента(Контрагент);

Если ПустоеЗначение(ОснКонтрагент) = 0 Тогда
КонтактноеЛицо.ИспользоватьВладельца(ОснКонтрагент);
Иначе
ФлагСтандОбр = 0;
КонецЕсли;
ИначеЕсли ИдентЭлемДиалога = "СостояниеДокумента" Тогда
СтарСотояние = СостояниеДокумента;
КонецЕсли;
КонецПроцедуры

//_____________________________________________________________________________
// Предопределенная процедура.
//
Процедура ОбработкаВыбораЗначения(НовоеЗначение, ЭлементДиалога)
Если ЭлементДиалога = "ПричинаОтказаСтр" Тогда
ПричинаОтказа = НовоеЗначение;
ПричинаОтказаСтр = НовоеЗначение.Наименование;

ИначеЕсли ЭлементДиалога = "Контрагент" Тогда
Если НовоеЗначение <> Контрагент Тогда
КонтактноеЛицо = "";
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ОбработкаВыбораЗначения()

//_____________________________________________________________________________

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

Список = СоздатьОбъект("СписокЗначений");
Список.УдалитьВсе();
Если ВидПродажи = Перечисление.ВидПродаж.БыстаяПродажа Тогда
Список.ДобавитьЗначение("ПоручениеНаОтгрузку","Поручение на отгрузку");
Список.ДобавитьЗначение("ПКО","ПКО"); 
Список.ДобавитьЗначение("СтрокаВыпискиПриход","Строка выписки банка");
Список.ДобавитьЗначение("я_КоммерческоеПредложение","Коммерческое предложение"); 
Список.ДобавитьЗначение("я_Контакт","Контакт");
Список.ДобавитьЗначение("я_Напоминание","Напоменание");
Список.ДобавитьЗначение("Запрос","Запрос");
ИначеЕсли ВидПродажи = Перечисление.ВидПродаж.ПродажаСоСклада Тогда
Список.ДобавитьЗначение("я_КоммерческоеПредложение","Коммерческое предложение");
Список.ДобавитьЗначение("СтрокаВыпискиПриход","Строка выписки банка");
Список.ДобавитьЗначение("ПКО","ПКО");
Список.ДобавитьЗначение("ПоручениеНаОтгрузку","Поручение на отгрузку");
Список.ДобавитьЗначение("ЗаявкаПокупателя","Заявка на склад");
Список.ДобавитьЗначение("я_Контакт","Контакт");
Список.ДобавитьЗначение("я_Напоминание","Напоменание");
Список.ДобавитьЗначение("Запрос","Запрос");
ИначеЕсли ВидПродажи = Перечисление.ВидПродаж.ПодЗаказ Тогда 
Список.ДобавитьЗначение("я_КоммерческоеПредложение","Коммерческое предложение");
Список.ДобавитьЗначение("РасчетЦен","Расчет цен");
Список.ДобавитьЗначение("СтрокаВыпискиПриход","Строка выписки банка");
Список.ДобавитьЗначение("ПКО","ПКО");
Список.ДобавитьЗначение("ЗаявкаПокупателя","Заявка на поставку");
Список.ДобавитьЗначение("я_Контакт","Контакт");
Список.ДобавитьЗначение("я_Напоминание","Напоменание");
Список.ДобавитьЗначение("Запрос","Запрос");
Иначе
Предупреждение("Невыбран вид продаж!",30);
Возврат;
КонецЕсли;	
Позиция = 0;
ВидПодч = "";
Если Список.ВыбратьЗначение(ВидПодч, "Выбор вида документа", Позиция,,1) = 1 Тогда
// Выбрали вид документа
ОткрытьФорму("Документ."+ВидПодч,,ТекущийДокумент());
КонецЕсли;
//глВводНаОсновании(Контекст)
КонецПроцедуры //ВвестиДокументНаОсновании
//_____________________________________________________________________________
//***************************************Вставка**********************************
*******//
//********************************************************************************
*******//
Процедура УправлениеВидимостью()
Если (ПредложениеПо=Перечисление.ВидыКоммерческихПредложений.Посуда) или (ПредложениеПо=Перечисление.ВидыКоммерческихПредложений.Бар) или (ПредложениеПо=Перечисление.ВидыКоммерческихПредложений.Литература) Тогда
Табло.ВидимостьКолонки("Длина",0); 
Табло.ВидимостьКолонки("Ширина",0);
Табло.ВидимостьКолонки("Высота",0);
Табло.ВидимостьКолонки("Мощность",0);
Табло.ВидимостьКолонки("Напряжение",0);
Табло.ВидимостьКолонки("Вес",0);
//Форма.НомерПоРасстановке.Видимость(0); 
Табло.ВидимостьКолонки("Каркас",0); 
Табло.ВидимостьКолонки("ЦветКаркаса",0); 
Табло.ВидимостьКолонки("Материал",0); 
Табло.ВидимостьКолонки("ЦветМатериала",0); 
Табло.ВидимостьКолонки("ЦветПодстолья",0);
Табло.ВидимостьКолонки("Подстолье",0);
Табло.ВидимостьКолонки("ВариантЦоколя",0); 
Табло.ВидимостьКолонки("ЦветЦоколя",0); 
Табло.ВидимостьКолонки("ЦветПодлокотника",0); 
Табло.ВидимостьКолонки("Описание1",0); 
ИначеЕсли ПредложениеПо=Перечисление.ВидыКоммерческихПредложений.Текстиль Тогда
Табло.ВидимостьКолонки("Длина",0); 
Табло.ВидимостьКолонки("Ширина",0);
Табло.ВидимостьКолонки("Высота",0);
Табло.ВидимостьКолонки("Мощность",0);
Табло.ВидимостьКолонки("Напряжение",0);
Табло.ВидимостьКолонки("Вес",0);
//Табло.ВидимостьКолонки("НомерПоРасстановке",0); 
Табло.ВидимостьКолонки("Каркас",0); 
Табло.ВидимостьКолонки("ЦветКаркаса",0); 
Табло.ВидимостьКолонки("Материал",0); 
Табло.ВидимостьКолонки("ЦветМатериала",0); 
Табло.ВидимостьКолонки("ЦветПодстолья",0);
Табло.ВидимостьКолонки("Подстолье",0);
Табло.ВидимостьКолонки("ВариантЦоколя",0); 
Табло.ВидимостьКолонки("ЦветЦоколя",0); 
Табло.ВидимостьКолонки("ЦветПодлокотника",0); 
Табло.ВидимостьКолонки("Описание1",1);
ИначеЕсли ПредложениеПо=Перечисление.ВидыКоммерческихПредложений.Мебель Тогда
Табло.ВидимостьКолонки("Длина",0); 
Табло.ВидимостьКолонки("Ширина",0);
Табло.ВидимостьКолонки("Высота",0);
Табло.ВидимостьКолонки("Мощность",0);
Табло.ВидимостьКолонки("Напряжение",0);
Табло.ВидимостьКолонки("Вес",0);
//Табло.ВидимостьКолонки("НомерПоРасстановке",0); 
Табло.ВидимостьКолонки("Каркас",1); 
Табло.ВидимостьКолонки("ЦветКаркаса",1); 
Табло.ВидимостьКолонки("Материал",1); 
Табло.ВидимостьКолонки("ЦветМатериала",1); 
Табло.ВидимостьКолонки("ЦветПодстолья",1); 
Табло.ВидимостьКолонки("Подстолье",1);
Табло.ВидимостьКолонки("ВариантЦоколя",1); 
Табло.ВидимостьКолонки("ЦветЦоколя",1); 
Табло.ВидимостьКолонки("ЦветПодлокотника",1); 
Табло.ВидимостьКолонки("Описание1",0);
Иначе
Табло.ВидимостьКолонки("Длина",1); 
Табло.ВидимостьКолонки("Ширина",1);
Табло.ВидимостьКолонки("Высота",1);
Табло.ВидимостьКолонки("Мощность",1);
Табло.ВидимостьКолонки("Напряжение",1);
Табло.ВидимостьКолонки("Вес",1);				 
Табло.ВидимостьКолонки("НомерПоРасстановке",1);
Табло.ВидимостьКолонки("Описание1",0);
Табло.ВидимостьКолонки("Каркас",0); 
Табло.ВидимостьКолонки("ЦветКаркаса",0); 
Табло.ВидимостьКолонки("Материал",0); 
Табло.ВидимостьКолонки("ЦветМатериала",0); 
Табло.ВидимостьКолонки("ЦветПодстолья",0); 
Табло.ВидимостьКолонки("Подстолье",0);
Табло.ВидимостьКолонки("ВариантЦоколя",0); 
Табло.ВидимостьКолонки("ЦветЦоколя",0); 
Табло.ВидимостьКолонки("ЦветПодлокотника",0);
КонецЕсли;	
КонецПроцедуры
//********************************************************************************
*******//
//*************************************Конец вставки*************************************//
Процедура ПриОткрытии() //предопределенная
глДокументПриОткрытии(Контекст);

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

ПриЗаписиПерепроводить(1);

Если ПометкаУдаления() = 1 Тогда
Форма.ТолькоПросмотр(1);
КонецЕсли;

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

Форма.кнДобавитьСвойство.Доступность(0);
Форма.кнИзменитьСвойство.Доступность(0);
Форма.кнКопироватьСвойство.Доступность(0);
Форма.кнУдалитьСвойство.Доступность(0);

Форма.кнВводНаОсновании.Доступность(0);
Форма.кнЗаписать.Доступность(0);
Форма.кнОК.Доступность(0);

Форма.КнопкаПоУмолчанию("кнЗакрыть");
Иначе
Форма.КнопкаПоУмолчанию("кнОК");
КонецЕсли;

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

ТЗСвойства.НоваяКолонка("Пикт", "Число", 2,,"",4);
ТЗСвойства.НоваяКолонка("Элемент");
ТЗСвойства.НоваяКолонка("ВидСвойства", "Спровочник.ВидыСвойств",,,"Вид свойства");
ТЗСвойства.НоваяКолонка("ЗначениеСвойства", "Спровочник.ЗначенияСвойств",,,"Значение свойства");
ТЗСвойства.ВыводитьПиктограммы("Пикт");
ТЗСвойства.Фиксировать(,1);
ТЗСвойства.ВидимостьКолонки("Элемент",0);

Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Основной, Главный",		 "Основные");
Форма.Закладки.ДобавитьЗначение("Основной, Свойства",		"Свойства"); 
Форма.Закладки.ДобавитьЗначение("Основной, ПериодыПлатежей", "Платежи");

Форма.ИспользоватьСлой("Основной, Главный", 2);

ДоступностьЭлементов(1);
ЗаполнитьСвойства();

ПричинаОтказаСтр = ПричинаОтказа.Наименование; 
УправлениеВидимостью(); 
//***************************************Вставка**********************************
*******//
//********************************************************************************
*******//
СписокВидовПродаж = СоздатьОбъект("СписокЗначений");
СписокВидовПродаж.ДобавитьЗначение(Перечисление.ВидПродаж.БыстаяПродажа,"Быстрая продажа");
СписокВидовПродаж.ДобавитьЗначение(Перечисление.ВидПродаж.ПродажаСоСклада,"Продажа со склада");
СписокВидовПродаж.ДобавитьЗначение(Перечисление.ВидПродаж.ПодЗаказ,"Под заказ"); 
СтарСклад = Склад; 
БудетПечататьсяУведомление = 0; 
//********************************************************************************
*******//
//*************************************Конец вставки*************************************//
КонецПроцедуры //ПриОткрытии
//_____________________________________________________________________________

Процедура ПоКнопкеЦены()
ОткрытьФормуМодально("Обработка.ИнформацияОценах", Контекст);
ДоступностьЭлементов();
Форма.Обновить(0);

КонецПроцедуры	//ВыборЦен()	 
//_____________________________________________________________________________

Процедура ПоКнопкеПодбор()

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

Если Выбран() = 0 Тогда
Параметры.ДобавитьЗначение("Дата", "ТипГраницы");
Параметры.ДобавитьЗначение(ДатаДок, "ЗначениеГраницы");
Иначе
Параметры.ДобавитьЗначение("Позиция",		 "ТипГраницы");
Параметры.ДобавитьЗначение(ПолучитьПозицию(), "ЗначениеГраницы");
КонецЕсли;

Параметры.ДобавитьЗначение("Подбор номенклатуры в документ " + ПредставлениеВида() + " № " + НомерДок, "Заголовок");
глПодбор(Контекст, Параметры);

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

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

Если ЕстьЦены=0 Тогда
Предупреждение("У данного комм. предложения цены не сформированы!",20);
СтатусВозврата(0);
Возврат;
КонецЕсли;
Табло=СоздатьОбъект("ТаблицаЗначений");
ДокЦ.ВыгрузитьТабличнуюЧасть(Табло);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Стр="";
Если Табло.НайтиЗначение(Код,Стр,"Код")=1 Тогда
Табло.ПолучитьСтрокуПоНомеру(Стр);
Цена=Табло.ЦенаПродажи; 
СрокПоставки = Табло.СрокПоставки;
глПересчетТаблЧасти(Контекст,"Количество");
ПриИзмененииСкидки();
Иначе
Цена = 0;			
глПересчетТаблЧасти(Контекст,"Количество");
ПриИзмененииСкидки();
Сообщить("Номенклатура "+Номенклатура+" отсутствует в расчете цен!","!!!");
КонецЕсли;

КонецЦикла;

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

Если ЕстьЦены=0 Тогда
Текст="";
Иначе
Табло=СоздатьОбъект("ТаблицаЗначений");
ДокЦ.ВыгрузитьТабличнуюЧасть(Табло);

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

КонецФункции
//******************************************************************************//
//******************************************************************************//
Процедура ПечатьДоговора()
Список=СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение("Продажа со склада");
Список.ДобавитьЗначение("Продажа под заказ"); 
Список.ДобавитьЗначение("Продажа униформы");
ВидДоговора=0;											 
ПозДоговора=0;
Список.ВыбратьЗначение(ВидДоговора,"Выберете тип договора",ПозДоговора,60,);
//Если ПустоеЗначение(ТаблоСохраненияДоговора)=1 Тогда
ВыгрузитьТабличнуюЧасть(Спец);
Спец.УдалитьКолонку(1);
Спец.ВставитьКолонку("Х",1,"Число",1,0,"V",3);
Спец.ВыводитьПиктограммы("Х",1);
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Спец.Х=2;
КонецЦикла;
Форма.ИспользоватьСлой("Специфика",2);
Спец.ТекущаяСтрока(1);
Спец.ТекущаяКолонка(1);
//Иначе
//	Табло = СоздатьОбъект("ТаблицаЗначений");
//	Табло=ЗначениеИзСтроки(ТаблоСохраненияДоговора);
//	Табло.Выгрузить(Спец); 
//	Форма.ИспользоватьСлой("Специфика",2);
//	Спец.ВыводитьПиктограммы("Х",1);
//	Спец.ТекущаяСтрока(1);
//	Спец.ТекущаяКолонка(1);
//КонецЕсли;			 	
КонецПроцедуры 

Процедура Отмен()
Форма.ИспользоватьСлой("Основной, Главный", 2);
КонецПроцедуры 
//******************************************************************************
// Уведомление();()
//
// Параметры: 
// 
//
// Возвращаемое значение:
// Нет
//
// Описание:
// ТекстОписания
//
Процедура Уведомление(Реж)

Если Реж = 0 Тогда
ВыгрузитьТабличнуюЧасть(Спец);
Спец.УдалитьКолонку(1);
Спец.ВставитьКолонку("Х",1,"Число",1,0,"V",3);
Спец.ВыводитьПиктограммы("Х",1);
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Спец.Х=2;
КонецЦикла;
Форма.ИспользоватьСлой("Специфика",2);
Спец.ТекущаяСтрока(1);
Спец.ТекущаяКолонка(1);
Иначе 
Если ФС.СуществуетФайл(КаталогИб()+"dogovora")=0 Тогда
Сообщить("Отстуствует каталог с шаблонами документов!","!!!");
Возврат;
Иначе 
ИмяШаблона= "ShablonUvedomleniya.doc"; 
Если Фс.СуществуетФайл(КаталогИб()+"\dogovora\"+ИмяШаблона)=0 Тогда
Предупреждение("Не найден файл шаблона!",60);		
Возврат;
КонецЕсли; 
Word=СоздатьОбъект("Word.Application");
ИмяФайла = КаталогИб()+"\dogovora\"+ИмяШаблона;
Попытка //если вдруг открыт надо закрыть
Word.Windows(ИмяФайла).Close(0);	
Исключение			
КонецПопытки;
Word.Documents.Add(ИмяФайла);
Shablon = Word.ActiveDocument;
//Selection = Shablon.Range();//.Select(); //.WholeStory();
//Bufer = Selection.Copy();
//Word.Documents.Add();
//Doc = Word.ActiveDocument;
//Selection = Doc.Range();
//Selection.Paste(Bufer); 
//закрыть шаблон
//Word.Windows(ИмяШаблона).Close(0);

//заполняем документ
Список = СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение(СокрЛП(ДатаДок),"ДатаДокумента"); 
Стрк = СокрЛП(Контрагент.ЮрФизЛицо.ПолнНаименование);
Список.ДобавитьЗначение(Стрк,"Контрагент");
Список.ДобавитьЗначение(СокрЛП(Договор.Наименование),"Договор");
Список.ДобавитьЗначение(СокрЛП(Договор.Наименование),"Договор1");  
СуммаКДоплате = 0;
Если ВвестиЧисло(СуммаКДоплате,"Введите остаток к доплате!",15,2,60)=1 Тогда
СуммаКДоплатеСтрокой = Строка(СуммаКДоплате)+Валюта.Наименование+" ("+Формат(СуммаКДоплате,"ЧПДС")+")";
Иначе
СуммаКДоплатеСтрокой = "___________"+Валюта.Наименование+" (____________________________________________)";
КонецЕсли;		
Список.ДобавитьЗначение(СуммаКДоплатеСтрокой,"Сумма");
Список.ДобавитьЗначение(СокрЛП(Проект.Наименование),"Проект");
//меняем закладки на нужные значения
Инд=1;
Для Инд=1 по Список.РазмерСписка() Цикл
Метка = "";
Замена = Список.ПолучитьЗначение(Инд,Метка);
Если Shablon.Bookmarks.Exists(Метка)=-1 Тогда
BookMark = Shablon.Bookmarks(Метка);	
BookMark.Select();
BookMark.Range().Text = Замена;
КонецЕсли;
КонецЦикла;

//Таблица
ТТ="";
ТТ = Shablon.Tables(1);
ИтогоК=0;
ИтогоС=0;
Н=1;
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Если Спец.Х=2 Тогда
Н=Н+1;//надо начать со второй строки
ТТ.Rows().Add();//добавить строку

ЦенаС=(Спец.СуммаСоСкидкой+?(СуммаВклНДС=1,0,Спец.СуммаНДС))/?(Спец.Количество=0,1,Спец.Количество);

ТТ.Rows(Н).Cells(1).Range.Text = СокрЛП(Спец.Номенклатура.Код);
ТТ.Rows(Н).Cells(2).Range.Text = СокрЛП(Спец.Номенклатура.Наименование);
ТТ.Rows(Н).Cells(3).Range.Text = СокрЛП(Строка(Спец.Количество));
ТТ.Rows(Н).Cells(4).Range.Text = СокрЛП(Строка(Формат(ЦенаС,"Ч15.2. ")));
ТТ.Rows(Н).Cells(5).Range.Text = СокрЛП(Строка(Формат(Спец.СуммаСоСкидкой+?(СуммаВклНДС=1,0,Спец.СуммаНДС),"Ч15.2. ")));
Если ИмяШаблона= "ShablonPodZakaz.doc" Тогда
ТТ.Rows(Н).Cells(6).Range.Text = СокрЛП(Строка(Спец.СрокПоставки));
КонецЕсли;
ИтогоК=ИтогоК+Спец.Количество;
ИтогоС=ИтогоС+(Спец.СуммаСоСкидкой+?(СуммаВклНДС=1,0,Спец.СуммаНДС));
КонецЕсли;
КонецЦикла;					 
//итоговая строчка
Н=Н+1;
ТТ.Rows().Add();//добавить строку
ТТ.Rows(Н).Cells(2).Range.Text = "ИТОГО:"; 
ТТ.Rows(Н).Cells(3).Range.Text = СокрЛП(Строка(ИтогоК)); 
ТТ.Rows(Н).Cells(5).Range.Text = СокрЛП(Строка(Формат(ИтогоС,"Ч15.2. ")));
//границы невидимыми
ТТ.Rows(Н).Cells(1).Borders(2).LineStyle = 0;
ТТ.Rows(Н).Cells(1).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(1).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(2).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(2).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(3).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(3).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(4).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(4).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(5).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(5).Borders(4).LineStyle = 0; 

Word.Visible = 1;
БудетПечататьсяУведомление = 0; 
Форма.ИспользоватьСлой("Основной, Главный", 2);
КонецЕсли; 
КонецЕсли;
КонецПроцедуры
//******************************************************************************
Процедура Печ()
Если БудетПечататьсяУведомление = 1 Тогда
Уведомление(1);
Иначе
ТаблоСохраненияДоговора=ЗначениеВСтроку(Спец);
Записать();


Если ФС.СуществуетФайл(КаталогИб()+"dogovora")=0 Тогда
Таб=СоздатьОбъект("Таблица");
Если ПозДоговора=1 Тогда
Таб.ИсходнаяТаблица("Договор1");
ИначеЕсли ПозДоговора=2 Тогда
Таб.ИсходнаяТаблица("Договор2");
Иначе
Возврат;
КонецЕсли; 

Если ПустоеЗначение(Договор)=0 Тогда 
Спр= СоздатьОбъект("Справочник.Договоры");
Спр.НайтиЭлемент(Договор);	 

Если ПустоеЗначение(Спр.ВЛицеПокупателя)=0 Тогда
Покупатель=СокрЛП(Спр.ВЛицеПокупателя);
Иначе
Стр=""; 
Если ВвестиСтроку(Стр,"ПОКУПАТЕЛЬ, в лице",100,0,30)=1 Тогда
Покупатель=СокрЛП(Стр);				
Спр.ВЛицеПокупателя = Покупатель;
Спр.Записать();
Иначе
Покупатель="_______________________________________";
КонецЕсли;			
КонецЕсли;
Иначе
Стр=""; 
Если ВвестиСтроку(Стр,"ПОКУПАТЕЛЬ, в лице",100,0,30)=1 Тогда
Покупатель=СокрЛП(Стр);
Иначе
Покупатель="_______________________________________";
КонецЕсли;	
КонецЕсли;

Таб.ВывестиСекцию("Шапка");

Таб.ВывестиСекцию("Страница1");
Таб.НоваяСтраница();

//Формат(Сумма+?(СуммаВклНДС=1,0,СуммаНДС)+?(СуммаВклНП=1,0,СуммаНП),"Ч15.2.,")

Итого=0;
ИтогоНДС=0;
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Если Спец.Х=2 Тогда
Итого=Итого+Спец.СуммаСоСкидкой;
ИтогоНДС=ИтогоНДС+Спец.СуммаНДС;
КонецЕсли;	
КонецЦикла;
//***************************************Вставка**********************************
*******//
//********************************************************************************
*******//
ПечИтого	= Итого+?(СуммаВклНДС=1,0,ИтогоНДС);
ПечНДС		= ?(ИтогоНДС=0,"без НДС","в том числе НДС в размере"+" "+Формат(ИтогоНДС,"Ч15.2. ")+" "+"руб."+"("+Формат(ИтогоНДС,"ЧПДС")+")");
//********************************************************************************
*******//
//*************************************Конец вставки*************************************//
Если ПозДоговора=2 Тогда


Если ПустоеЗначение(Договор)=0 Тогда
Спр= СоздатьОбъект("Справочник.Договоры");
Спр.НайтиЭлемент(Договор);

Если ПустоеЗначение(Спр.Предоплата)=0 Тогда
Предоплата=СокрЛП(Спр.Предоплата);
Иначе 
Стр="";
Если ВвестиСтроку(Стр,"Процент предоплаты",3,0,30)=1 Тогда
Предоплата=Стр;					
Спр.Предоплата = Предоплата;
Спр.Записать();
Иначе
Предоплата="___";
КонецЕсли;				
КонецЕсли;
Иначе
Стр="";
Если ВвестиСтроку(Стр,"Процент предоплаты",3,0,30)=1 Тогда
Предоплата=Стр;				
Иначе
Предоплата="___";
КонецЕсли;
КонецЕсли;			 	

Если Предоплата="___" Тогда
ПечПредоплата="____________";
ПечНДСПредоплата="в том числе НДС в размере __________руб. (_________________________________)";
ОстПредоплата="____";
ПечОстПредоплата="____________";
ПечОстНДСПредоплата="в том числе НДС в размере __________руб. (_________________________________)";
Иначе
ПечПредоплата		= ПечИтого/100*Число(Предоплата);
ИтогоНДСПред		= ИтогоНДС/100*Число(Предоплата);
ПечНДСПредоплата	= ?(ИтогоНДСПред=0,"без НДС","в том числе НДС в размере"+" "+Формат(ИтогоНДСПред,"Ч15.2. ")+" "+"руб."+"("+Формат(ИтогоНДСПред,"ЧПДС")+")");
ОстПредоплата		= 100-Число(Предоплата);
ПечОстПредоплата	= ПечИтого/100*ОстПредоплата;
ИтогоНДСОст			= ИтогоНДС/100*ОстПредоплата;
ПечОстНДСПредоплата	= ?(ИтогоНДСОст=0,"без НДС","в том числе НДС в размере"+" "+Формат(ИтогоНДСОст,"Ч15.2. ")+" "+"руб."+"("+Формат(ИтогоНДСОст,"ЧПДС")+")");
КонецЕсли;
КонецЕсли;
Таб.ВывестиСекцию("Страница2");
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Фирма.ОсновнойСчет, "БанковскийСчет");
Параметры.ДобавитьЗначение(1, "Режим");
глРеквизитыПлательщикаПолучателя(Параметры);
Банк		= Параметры.Получить("СтрокаБанка");
Счет		= Параметры.Получить("РасчетныйСчет");
БИК			= Параметры.Получить("БИК");
СчетБанка	= Параметры.Получить("КоррСчет");
//Контрагент
Параметры.УдалитьВсе();
Параметры.ДобавитьЗначение(Контрагент.ОсновнойСчет,"БанковскийСчет");
Параметры.ДобавитьЗначение(1, "Режим");
глРеквизитыПлательщикаПолучателя(Параметры);
БанкК		= Параметры.Получить("СтрокаБанка");
СчетК		= Параметры.Получить("РасчетныйСчет");
БИКК			= Параметры.Получить("БИК");
СчетБанкаК	= Параметры.Получить("КоррСчет");
Таб.ВывестиСекцию("Реквизиты");
Таб.НоваяСтраница();
Таб.ВывестиСекцию("СШапка");


ИтогоК=0;
ИтогоС=0;
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Если Спец.Х=2 Тогда
ЦенаС=(Спец.Сумма+?(СуммаВклНДС=1,0,Спец.СуммаНДС))/Спец.Количество;
Таб.ВывестиСекцию("ССтрока");
ИтогоК=ИтогоК+Спец.Количество;
ИтогоС=ИтогоС+(Спец.Сумма+?(СуммаВклНДС=1,0,Спец.СуммаНДС));
КонецЕсли;
КонецЦикла;
Таб.ВывестиСекцию("СИтого");
Таб.ВывестиСекцию("Реквизиты");
Таб.ТолькоПросмотр(0);
Таб.Опции(0,0,0,0);
Таб.Показать("Договор");					  
Иначе	 
ИмяФайла = "";
Если ПозДоговора=1 Тогда //со склада
ИмяФайла = "Договор продажи со склада с "+Контрагент.Наименование+" №"+СокрЛП(НомерДок)+" от "+ДатаДок+".doc";	
ИмяШаблона= "ShablonSoSklada.doc";
ИначеЕсли ПозДоговора=2 Тогда //под заказ
ИмяФайла = "Договор продажи под заказ с "+Контрагент.Наименование+" №"+СокрЛП(НомерДок)+" от "+ДатаДок+".doc";	
ИмяШаблона= "ShablonPodZakaz.doc";	
Иначе
ИмяФайла = "Договор продажи униформы с "+Контрагент.Наименование+" №"+СокрЛП(НомерДок)+" от "+ДатаДок+".doc";	
ИмяШаблона= "ShablonPoUniforme.doc";
КонецЕсли;

ИмяФайла = СтрЗаменить(ИмяФайла,"\","_");
ИмяФайла = СтрЗаменить(ИмяФайла,"/","_");
ИмяФайла = СтрЗаменить(ИмяФайла,"""","");
Word=СоздатьОбъект("Word.Application");

Если Фс.СуществуетФайл(КаталогИб()+"\dogovora\"+ИмяФайла)=1 Тогда
Если Вопрос("Существует сформированный договор! Открыть?","Да+Нет",60)="Да" Тогда
Попытка //если вдруг открыт надо закрыть
Word.Windows(ИмяФайла).Close(0);	
Исключение			
КонецПопытки;

Word.Documents.Open(КаталогИб()+"\dogovora\"+ИмяФайла);
Форма.ИспользоватьСлой("Основной, Главный", 2);
Word.Visible=1;
Word.Activate();
Возврат;
КонецЕсли;
КонецЕсли; 

Если Фс.СуществуетФайл(КаталогИб()+"\dogovora\"+ИмяШаблона)=0 Тогда
Предупреждение("Не найден файл шаблона!",60);
Форма.ИспользоватьСлой("Основной, Главный", 2);
Возврат;
КонецЕсли;


Word.Options.CheckSpellingAsYouType = 0;
Word.Options.CheckGrammarAsYouType = 0;
Word.Options.CheckGrammarWithSpelling = 0;

Попытка //если вдруг открыт надо закрыть
Word.Windows(ИмяФайла).Close(0);	
Исключение			
КонецПопытки;


Word.Documents.Add(КаталогИб()+"\dogovora\"+ИмяШаблона); 
Document=Word.ActiveDocument;
///Список замен в документе есть закладки с именами как строковое представление в списке значений
Список = СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение(СокрЛП(НомерДок),"ПечНомерДок"); 
Список.ДобавитьЗначение(СокрЛП(НомерДок),"ПечНомерДокП");
Список.ДобавитьЗначение(ДатаСчета,"ДатаДоговора");
Стрк = СокрЛП(Фирма.ЮрЛицо.ПолнНаименование)+" (Россия, г. Владивосток, свидетельство о государственной регистрации № "+Фирма.НомерСв+" oт "+Фирма.СвОт;
Список.ДобавитьЗначение(Стрк,"ПечПоставщик");
Стрк = СокрЛП(Контрагент.ЮрФизЛицо.ПолнНаименование);
Список.ДобавитьЗначение(Стрк,"ПечПокупатель");

Спр= СоздатьОбъект("Справочник.Договоры");
Спр.НайтиЭлемент(Договор);
Если ПустоеЗначение(Спр.ВЛицеПокупателя)=0 Тогда
Покупатель=СокрЛП(Спр.ВЛицеПокупателя);
Иначе
Стр=""; 
Если ВвестиСтроку(Стр,"ПОКУПАТЕЛЬ, в лице",100,0,30)=1 Тогда
Покупатель=СокрЛП(Стр);				
Спр.ВЛицеПокупателя = Покупатель;
Спр.Записать();
Иначе
Покупатель="_______________________________________";
КонецЕсли;			
КонецЕсли;
Список.ДобавитьЗначение(Покупатель,"ПечРуководительПокупателя");


Итого=0;
ИтогоНДС=0;
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Если Спец.Х=2 Тогда
Итого=Итого+Спец.СуммаСоСкидкой;
ИтогоНДС=ИтогоНДС+Спец.СуммаНДС;
КонецЕсли;	
КонецЦикла;
//***************************************Вставка**********************************
*******//
//********************************************************************************
*******//
ПечИтого	= Итого+?(СуммаВклНДС=1,0,ИтогоНДС);
ПечНДС		= ?(ИтогоНДС=0,"без НДС","в том числе НДС в размере"+" "+Формат(ИтогоНДС,"Ч15.2. ")+" "+"руб."+"("+Формат(ИтогоНДС,"ЧПДС")+")");
//********************************************************************************
*******//
//*************************************Конец вставки*************************************//
Стрк = Формат(ПечИтого,"Ч15.2. ")+" руб. ("+Формат(ПечИтого,"ЧПДС")+") руб., "+ПечНДС;
Список.ДобавитьЗначение(Стрк,"ПечСтоимостьДоговора");

ПечПредоплата="____________";
ПечНДСПредоплата="в том числе НДС в размере __________руб. (_________________________________)";
ОстПредоплата="____";
ПечОстПредоплата="____________";
ПечОстНДСПредоплата="в том числе НДС в размере __________руб. (_________________________________)";
Если ПозДоговора=2 Тогда			
Если ПустоеЗначение(Договор)=0 Тогда
Спр= СоздатьОбъект("Справочник.Договоры");
Спр.НайтиЭлемент(Договор);
Если ПустоеЗначение(Спр.Предоплата)=0 Тогда
Предоплата=СокрЛП(Спр.Предоплата);
Иначе 
Стр="";
Если ВвестиСтроку(Стр,"Процент предоплаты",3,0,30)=1 Тогда
Предоплата=Стр;					
Спр.Предоплата = Предоплата;
Спр.Записать();
Иначе
Предоплата="___";
КонецЕсли;				
КонецЕсли;
Иначе
Стр="";
Если ВвестиСтроку(Стр,"Процент предоплаты",3,0,30)=1 Тогда
Предоплата=Стр;				
Иначе
Предоплата="___";
КонецЕсли;
КонецЕсли;			 	

Если Предоплата="___" Тогда
ПечПредоплата="____________";
ПечНДСПредоплата="в том числе НДС в размере __________руб. (_________________________________)";
ОстПредоплата="____";
ПечОстПредоплата="____________";
ПечОстНДСПредоплата="в том числе НДС в размере __________руб. (_________________________________)";
Иначе
ПечПредоплата		= ПечИтого/100*Число(Предоплата);
ИтогоНДСПред		= ИтогоНДС/100*Число(Предоплата);
ПечНДСПредоплата	= ?(ИтогоНДСПред=0,"без НДС","в том числе НДС в размере"+" "+Формат(ИтогоНДСПред,"Ч15.2. ")+" "+"руб."+"("+Формат(ИтогоНДСПред,"ЧПДС")+")");
ОстПредоплата		= 100-Число(Предоплата);
ПечОстПредоплата	= ПечИтого/100*ОстПредоплата;
ИтогоНДСОст			= ИтогоНДС/100*ОстПредоплата;
ПечОстНДСПредоплата	= ?(ИтогоНДСОст=0,"без НДС","в том числе НДС в размере"+" "+Формат(ИтогоНДСОст,"Ч15.2. ")+" "+"руб."+"("+Формат(ИтогоНДСОст,"ЧПДС")+")");
КонецЕсли;
Стрк = Предоплата+" % от полной стоимости, что составляет "+Формат(ПечПредоплата,"Ч15.2. ")+" руб. ("+Формат(ПечПредоплата,"ЧПДС")+") руб., "+ПечНДСПредоплата;
Иначе
Стрк = "100 % от полной стоимости "+Формат(ПечИтого,"Ч15.2. ")+" руб. ("+Формат(ПечИтого,"ЧПДС")+") руб., "+ПечНДС;
КонецЕсли;
Список.ДобавитьЗначение(Стрк,"ПечПредоплатаПоДоговору");
Стрк = Строка(ОстПредоплата)+" % от общей стоимости , что составляет "+Формат(ПечОстПредоплата,"Ч15.2. ")+" руб. ("+Формат(ПечОстПредоплата,"ЧПДС")+") руб., "+ПечОстНДСПредоплата;
Список.ДобавитьЗначение(Стрк,"ПечОстатокОплаты");

//меняем закладки на нужные значения
Инд=1;
Для Инд=1 по Список.РазмерСписка() Цикл
Метка = "";
Замена = Список.ПолучитьЗначение(Инд,Метка);
Если Document.Bookmarks.Exists(Метка)=-1 Тогда
BookMark = Document.Bookmarks(Метка);	
BookMark.Select();
BookMark.Range().Text = Замена;
КонецЕсли;
КонецЦикла;

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

Если ПозДоговора<3 Тогда
TT = Document.Tables(1); //первая таблица
Иначе 
TT = Document.Tables(2); //вторая таблица
КонецЕсли;
TT.Columns(1).Cells(1).Range.Text = РеквизПост; //первая колонка, первая ячейка 

РеквизПост ="Директор "+СокрЛП(Фирма.ЮрЛицо.ПолнНаименование)+РазделительСтрок+"____________________________________"+РазделительСтрок+Строка(Фирма.ЮрЛицо.Руководитель.Получить(ДатаДок));
TT.Rows(2).Cells(1).Range.Text = РеквизПост; //вторая строка, первая ячейка 


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


TT.Columns(2).Cells(1).Range.Text = РеквПокуп; //вторая колонка, первая ячейка
РеквПокуп = "Руководитель "+СокрЛП(Контрагент.ЮрФизЛицо.ПолнНаименование)+РазделительСтрок+"____________________________________"+РазделительСтрок+Строка(Покупатель);
TT.Rows(2).Cells(2).Range.Text = РеквПокуп; //вторая строка, вторая ячейка

//надо таблицу сделать невидимой 
TT.Borders(1).LineStyle = 0;//верхняя граница
TT.Borders(2).LineStyle = 0;//левая граница
TT.Borders(3).LineStyle = 0;//нижняя граница
TT.Borders(4).LineStyle = 0;//правая граница
TT.Borders(5).LineStyle = 0;//горизонтальная граница
TT.Borders(6).LineStyle = 0;//вертикальная граница

Если ПозДоговора<3 Тогда
ТТ="";
ТТ = Document.Tables(2);//вторая таблица 
Иначе 
ТТ="";
ТТ = Document.Tables(3);//третья таблица 
КонецЕсли;
ИтогоК=0;
ИтогоС=0;
Н=1;
Спец.ВыбратьСтроки();
Пока Спец.ПолучитьСтроку()=1 Цикл
Если Спец.Х=2 Тогда
Н=Н+1;//надо начать со второй строки
ТТ.Rows().Add();//добавить строку

ЦенаС=(Спец.СуммаСоСкидкой+?(СуммаВклНДС=1,0,Спец.СуммаНДС))/?(Спец.Количество=0,1,Спец.Количество);

ТТ.Rows(Н).Cells(1).Range.Text = СокрЛП(Спец.Номенклатура.Код);
ТТ.Rows(Н).Cells(2).Range.Text = СокрЛП(Спец.Номенклатура.Наименование);
ТТ.Rows(Н).Cells(3).Range.Text = СокрЛП(Строка(Спец.Количество));
ТТ.Rows(Н).Cells(4).Range.Text = СокрЛП(Строка(Формат(ЦенаС,"Ч15.2. ")));
ТТ.Rows(Н).Cells(5).Range.Text = СокрЛП(Строка(Формат(Спец.СуммаСоСкидкой+?(СуммаВклНДС=1,0,Спец.СуммаНДС),"Ч15.2. ")));
Если ИмяШаблона= "ShablonPodZakaz.doc" Тогда
ТТ.Rows(Н).Cells(6).Range.Text = СокрЛП(Строка(Спец.СрокПоставки));
КонецЕсли;
ИтогоК=ИтогоК+Спец.Количество;
ИтогоС=ИтогоС+(Спец.СуммаСоСкидкой+?(СуммаВклНДС=1,0,Спец.СуммаНДС));
КонецЕсли;
КонецЦикла;					 
//итоговая строчка
Н=Н+1;
ТТ.Rows().Add();//добавить строку
ТТ.Rows(Н).Cells(2).Range.Text = "ИТОГО:"; 
ТТ.Rows(Н).Cells(3).Range.Text = СокрЛП(Строка(ИтогоК)); 
ТТ.Rows(Н).Cells(5).Range.Text = СокрЛП(Строка(Формат(ИтогоС,"Ч15.2. ")));
//границы невидимыми
ТТ.Rows(Н).Cells(1).Borders(2).LineStyle = 0;
ТТ.Rows(Н).Cells(1).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(1).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(2).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(2).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(3).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(3).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(4).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(4).Borders(4).LineStyle = 0;
ТТ.Rows(Н).Cells(5).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(5).Borders(4).LineStyle = 0;

Если ИмяШаблона= "ShablonPodZakaz.doc" Тогда
ТТ.Rows(Н).Cells(6).Borders(3).LineStyle = 0;
ТТ.Rows(Н).Cells(6).Borders(4).LineStyle = 0;
КонецЕсли;

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

Если ПозДоговора = 3 Тогда
TT = Document.Tables(4); 
Иначе
TT = Document.Tables(3); //третья таблица 
КонецЕсли;	

TT.Columns(1).Cells(1).Range.Text = РеквизПост; //первая колонка, первая ячейка 

РеквизПост ="Директор "+СокрЛП(Фирма.ЮрЛицо.ПолнНаименование)+РазделительСтрок+"____________________________________"+РазделительСтрок+Строка(Фирма.ЮрЛицо.Руководитель.Получить(ДатаДок));
TT.Rows(2).Cells(1).Range.Text = РеквизПост; //вторая строка, первая ячейка 


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


TT.Columns(2).Cells(1).Range.Text = РеквПокуп; //вторая колонка, первая ячейка
РеквПокуп = "Руководитель "+СокрЛП(Контрагент.ЮрФизЛицо.ПолнНаименование)+РазделительСтрок+"____________________________________"+РазделительСтрок+Строка(Покупатель);
TT.Rows(2).Cells(2).Range.Text = РеквПокуп; //вторая строка, вторая ячейка

//надо таблицу сделать невидимой 
TT.Borders(1).LineStyle = 0;//верхняя граница
TT.Borders(2).LineStyle = 0;//левая граница
TT.Borders(3).LineStyle = 0;//нижняя граница
TT.Borders(4).LineStyle = 0;//правая граница
TT.Borders(5).LineStyle = 0;//горизонтальная граница
TT.Borders(6).LineStyle = 0;//вертикальная граница		

//Document.Tables().Item(2).Cell(1,3).Range.Text так можно обращатся к таблице и ячейке
Document.SaveAs(КаталогИб()+"\dogovora\"+ИмяФайла);
Word.Visible=1;
Word.Activate(); 				
КонецЕсли; 
КонецЕсли;
Форма.ИспользоватьСлой("Основной, Главный", 2);	
КонецПроцедуры
//******************************************************************************
Процедура ОбработкаСпец()	
ТекСтр=Спец.ТекущаяСтрока();
Если Спец.ТекущаяКолонка()="Х" Тогда
Если Спец.ПолучитьЗначение(ТекСтр,"Х")=1 Тогда
Спец.УстановитьЗначение(ТекСтр,"Х",2);
Иначе
Спец.УстановитьЗначение(ТекСтр,"Х",1);
КонецЕсли;	
КонецЕсли;
КонецПроцедуры

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

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

Перем ОстатокНаСкладе, ОстатокПоФирме; // для показа остатков

ИнфоТекст="";

Если Номенклатура.Выбран()=0 Тогда
Возврат(ИнфоТекст);
КонецЕсли;

ИнфоТекст=ИнфоТекст+СокрЛП(Номенклатура.Наименование);

Если ПустоеЗначение(Номенклатура.Артикул)=0 Тогда
ИнфоТекст=?(ИнфоТекст="","",ИнфоТекст+",");
ИнфоТекст=ИнфоТекст+" арт. "+СокрЛП(Номенклатура.Артикул);
КонецЕсли;


Возврат(ИнфоТекст);

КонецФункции //ИнформацияОНоменклатуре()
//******************************************************************************
Процедура Платеж(ТекРеж)
Если ТекРеж = 1 Тогда
СуммаАванса = Итог("СуммаСоСкидкой")/100*ПроцентАванса;
Платеж(7);
ИначеЕсли ТекРеж = 2 Тогда
ПроцентАванса = СуммаАванса/(Итог("СуммаСоСкидкой")/100);
ИначеЕсли ТекРеж = 3 Тогда
СуммаВторогоПлатежа= Итог("СуммаСоСкидкой")/100*ПроцентВторогоПлатежа;
//ПроцентТретьегоПлатежа = 100-ПроцентАванса-ПроцентВторогоПлатежа;
Платеж(7);
ИначеЕсли ТекРеж = 4 Тогда
ПроцентВторогоПлатежа = СуммаВторогоПлатежа/(Итог("СуммаСоСкидкой")/100);
//ПроцентТретьегоПлатежа = 100-ПроцентАванса-ПроцентВторогоПлатежа;
Платеж(7);
ИначеЕсли ТекРеж = 5 Тогда
СуммаТретьегоПлатежа= (Итог("СуммаСоСкидкой")/100*ПроцентТретьегоПлатежа);	
Платеж(7);
//СуммаТретьегоПлатежа= СуммаТретьегоПлатежа+(Итог("СуммаСоСкидкой")-(СуммаАванса+СуммаВторогоПлатежа+СуммаТретьегоПлатежа));	
ИначеЕсли ТекРеж = 6 Тогда
ПроцентТретьегоПлатежа = СуммаТретьегоПлатежа/(Итог("СуммаСоСкидкой")/100);
Платеж(7);
ИначеЕсли ТекРеж = 7 Тогда
СуммаПоследнегоПлатежа = Итог("СуммаСоСкидкой")-(СуммаАванса+СуммаВторогоПлатежа+СуммаТретьегоПлатежа);
ПроцентПоследнегоПлатежа = 100-ПроцентАванса-ПроцентВторогоПлатежа-ПроцентТретьегоПлатежа;
КонецЕсли;
КонецПроцедуры // Платеж() 
/////////////
Функция ПриВыбореВремени(Время, ВремяСтрока)
Час = Число(Лев(Время, 2));
Минута = Число(Прав(Время, 2));
Если (Час > 23) или (Минута > 59) Тогда
Предупреждение("Неправильно введено время контакта!",5);
Попытка
Активизировать(ВремяСтрока);
Исключение
КонецПопытки;
Возврат 0;
КонецЕсли;

Возврат 1;
КонецФункции //ПриВыбореВремен  
//******************************************************************************
Процедура ПриВыбореКонтрагента()
Если ПустоеЗначение(Контрагент)=0 Тогда
Если ПустоеЗначение(Контрагент.ВидОплатыПоУмолчанию)=0 Тогда
ВидОплаты = Контрагент.ВидОплатыПоУмолчанию;
Иначе
ВидОплаты = "";
КонецЕсли;
КонецЕсли;
КонецПроцедуры 
//******************************************************************************
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
// Процедура разбирает штрих-код, считанный сканером
// и заполняет строки накладной
Перем Упаковка,ТекКоличество, Спецификация;
Перем ВремТовар, ВремЕдиница, ВремКоличество;
Перем ВремЦена, ЕдЦены;

Если Событие = "BarCodeValue" Тогда
Если Форма.ТолькоПросмотр() = 0 Тогда
Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) <> 0 Тогда
ТаблицаПодбора = СоздатьОбъект("ТаблицаЗначений");
ТаблицаПодбора.НоваяКолонка("Номенклатура");
ТаблицаПодбора.НоваяКолонка("Единица");
ТаблицаПодбора.НоваяКолонка("Количество", "Число");
ТаблицаПодбора.НоваяКолонка("Цена", "Число");

ТаблицаПодбора.НоваяСтрока();
ТаблицаПодбора.Номенклатура = ВремТовар;
ТаблицаПодбора.Единица	 = ВремЕдиница;
ТаблицаПодбора.Количество  = ВремКоличество;
ТаблицаПодбора.Цена			= глПолучитьЦену(ВремТовар, ТипЦен, РабочаяДата(), ВремЕдиница, Валюта, Курс);

ПараметрыПодбора = СоздатьОбъект("СписокЗначений");
ПараметрыПодбора.ДобавитьЗначение(0			 , "ЕстьВидТМЦ");
ПараметрыПодбора.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе");
ПараметрыПодбора.ДобавитьЗначение(ТипЦен		 , "ТипЦен");	 
ПараметрыПодбора.ДобавитьЗначение(ТаблицаПодбора , "ТаблицаПодбора");

глОбработкаПодбора(Контекст, ПараметрыПодбора, 1, 1, 1); 
ПриВыбореТовара();
КонецЕсли;
КонецЕсли;

// Обработка закончена. Готовы к получению нового штрихкода.
глСканерПосылкаДанных(1);

Иначе
глОбработкаВнешнегоСобытия(Источник, Событие, Данные);	
КонецЕсли;

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

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

Табло.ПолучитьСтрокуПоНомеру(СтрокаТабло);
ВремТабло	= Табло.Дерево;
ВремТабло.ПолучитьСтрокуПоНомеру(Ветка);

Если Колонка = "Количество" Тогда
ТекЗн = ВремТабло.Количество;
Если ВвестиЧисло(ТекЗн,"Введите количество",15,2,60) = 1 Тогда
ВремТабло.Количество = ТекЗн;
Табло.Дерево = ВремТабло;
КонецЕсли;
КонецЕсли;
а = 0;	
ОбновитьДерево();
ФРМ.УстановитьТекущийУзел(СтрокаВетки);
КонецПроцедуры 
//******************************************************************************
// ПослеРазворачиванияУзла(<НомерСтроки>)()
//
// Параметры: 
// 
//
// Возвращаемое значение:
// Нет
//
// Описание:
// ТекстОписания
//
Процедура ПослеРазворачиванияУзла(НомСтр)
СписокОткрытыхВеток.ДобавитьЗначение(НомСтр);
КонецПроцедуры  
//******************************************************************************
// ПослеСворачиванияУзла(<НомерСтроки>)()
//
// Параметры: 
// 
//
// Возвращаемое значение:
// Нет
//
// Описание:
// ТекстОписания
//
Процедура ПослеСворачиванияУзла(НомСтр)	 
Поз = СписокОткрытыхВеток.НайтиЗначение(НомСтр);
СписокОткрытыхВеток.УдалитьЗначение(Поз);
КонецПроцедуры
//_____________________________________________________________________________

////////////////////////////////////////////////////////////////////////////////
// ТЕЛО МОДУЛЯ ФОРМЫ	
//

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

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

ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название	= "Печатная форма";
ТаблицаПечФорм.Кнопка	= "Печать"; 

ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название	= "Уведомление";
ТаблицаПечФорм.Кнопка	= "Уведом."; 

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

SeverBap

Вообщем, что можно сказать интересная затея и прикольная!!! Пересматривать много чего!
Код:
//******************************************************************************
Процедура ПослеОткрытия()
АтрибутФормы=СоздатьОбъект("АтрибутФормы");		 
//Сервис = СоздатьОбъект("Сервис");
//ФормаРасш = СоздатьОбъект("РасширениеФормы");
//ФормаРасш.РаскрашиватьТаблицу("Табло");
//Сервис.ИспользоватьПланРаскраски(1); 	
АтрибутФормы.УстановитьАтрибут(Форма,"Табло");

//	ФормаРасш.ПоложениеКолонкиТаблицы("Табло",0,0);
//	ФормаРасш.ПоложениеКолонкиТаблицы("Табло",1,0);
//	ФормаРасш.ПоложениеКолонкиТаблицы("Табло",2,0);
//	ФормаРасш.ПоложениеКолонкиТаблицы("Табло",3,0);
//
//	ФормаРасш.ПоложениеКолонкиТаблицы("Табло",4,2);
//Табло.НоваяКолонка();
//Табло.УдалитьКолонку(Табло.КоличествоКолонок());
//ОбновитьДерево();
АтрибутФормы.ПерехватитьТаблицуЗначений();
АтрибутФормы.ОпцииДерева(,,0,2);
КонецПроцедуры
Долго утюжил, запустил, работает но блин подстава добавление новой строки не получается вылитает!
Так что надо писать за ново (по крайней мере я не могу сразу загрузится в твое), - могу написать за тебя, конечно но на это надо время!!!
Кстати: Затея прикольная мне понравилась!!
Файлик с листингом посмотри!!!

Если что я тебе помогу, мне это тоже пригодится! ;)
 

Вложения

  • _______________________.txt
    79 КБ · Просмотры: 595
K

kaa

дома посмотрю, а про новую строку я ещё просто не добрался там код с другого документа
 
J

jcnby

Хм....АтрибутФормы работает без добавления 1с++.dll ? Извините за вопрос конечно )) но прост интерестно)) ибо через атрибутформы можно и размер программно указывать реквизитов на форме....
 
S

SeverBap

jcnby - я так назвал переменную!
kaa - что брать за основу? (может вечером тебе сегодня напишу)
 
K

kaa

от дерева пришлось отказатся, сделал по другому
 
K

kaa

Сделал две тз, мелкую на верху из одной строки но с плавающим количеством колонок, в строке цеха. При выборе калонки заполняется нижняя тз. Больше времени ушло на оработку ячеек, что можно было менять данные
 
S

SeverBap

Ясно все с тобой! буду пытатся прободящить с деревом!
 
K

kaa

Неработает расстановка колонок с деревом посмотри сайт
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!