Formex

Тема в разделе "1C и всё что с ней связано", создана пользователем kaa, 24 ноя 2008.

  1. kaa

    kaa Гость

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

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


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

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

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

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

    SeverBap Well-Known Member

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

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

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

    kaa Гость

    я обновляю дерево
    мне нужно сделать сложную шапку в две строки, но ПоложениеКолонкиТаблицы после ПерехватитьТаблицуЗначений не отрабатывает
     
  4. SeverBap

    SeverBap Well-Known Member

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

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

    kaa Гость

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


    //Структура таблицы
    ВыгрузитьТабличнуюЧасть(Табло);
    Табло.УдалитьКолонку(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);
    КонецПроцедуры
    Надо подменить табличную часть, а поскольку колонок до х.... то надо сделать форму более удобо читаемо
     
  6. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Вот б.... Выложи свою обработку я посмотрю что к чему а то так долго с тобой ковырятся будем!!!!
    или давай MD я посмотрю (чесно я долго ковырялся с этой компанентой и так просто ты с ней не разбирешся один!!!)
     
  7. kaa

    kaa Гость

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Давай!
     
  9. kaa

    kaa Гость

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

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


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

    Процедура ПриИзмененииСкидки() Далее
    Процедура Платеж(ТекРеж) Далее
    Процедура Уведомление(Реж) Далее  
    Процедура УправлениеВидимостью() Далее
    //***************************************Вставка**********************************
    *******//
    //********************************************************************************
    *******//
    //******************************************************************************
    // ОбновитьДерево()()
    //
    // Параметры:
    //
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // ТекстОписания
    //
    Процедура ОбновитьДерево()
    ФРМ.ОбновитьДерево();
    Для Инд=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);
    ТаблицаПечФорм.НоваяКолонка("ФайлОписания","Строка");

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

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

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

    SeverBap Well-Known Member

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

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

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

    Вложения:

  11. kaa

    kaa Гость

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

    jcnby Гость

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

    kaa Гость

    в 1с++ включено и formex
     
  14. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    jcnby - я так назвал переменную!
    kaa - что брать за основу? (может вечером тебе сегодня напишу)
     
  15. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Работает или ты ее забросил?
     
  16. kaa

    kaa Гость

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Делись как?
     
  18. kaa

    kaa Гость

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Ясно все с тобой! буду пытатся прободящить с деревом!
     
  20. kaa

    kaa Гость

Загрузка...
Похожие Темы - Formex
  1. olga13
    Ответов:
    3
    Просмотров:
    2.305
  2. vbs
    Ответов:
    7
    Просмотров:
    5.287
  3. olga13
    Ответов:
    10
    Просмотров:
    6.123

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