Имя: Пароль:
1C
1С v8
Автозаполнение колонок при изменении одной
0 example221
 
24.01.20
10:28
Доброе утро форумчане,научите бездыря,делать так чтобы при изменение одной колонки все колонки той же строки заполнялись данными.
есть у меня таблица автоработы
в ней колонка
авторабота                                 норматив    цена
я выбираю здесь и оно заполняет остальные
1 example221
 
24.01.20
10:29
я понимаю что в автоработе надо найти при изменение и кликнуть ,а сам кусок кода,найти не могу,который так бы делал
2 ДенисЧ
 
24.01.20
10:33
Возьми любой (ну, почти) типовой документ из типовой конфигурации и посмотри там.
3 JeHer
 
24.01.20
10:35
(0) дружище, ты бы хоть в одной теме указал, что у тебя за конфа? Обычные формы или управляемые? Файловая база или клиент-серверная (вдруг вопросы возникнут)? Платформу, на всякий случай.
Лучше, конечно, делать это в каждой теме. А то хбз, какую нетленку ты там ковыряешь.
4 example221
 
24.01.20
10:38
(3) Извиняюсь,обычные.Альфа-Авто: Автосалон+Автосервис+Автозапчасти. Редакция 4.1 (4.1.01.28)
5 Fish
 
24.01.20
10:41
(4) А Альфе-Авто - раньше это было сделано через зад (во всяком случае, в той редакции, которую я видел). У формы был общий обработчик на все поля, а уже в нём анализировалось, из какого поля он был вызван и прописано, что делать. Как сейчас - не знаю.
6 example221
 
24.01.20
10:43
(5) так и есть он какой то весит,где то но добраться до него не могу,почему то,я форму с нуля пишу,просто подумал мб кто то знает как это можно оформить
7 Fish
 
24.01.20
10:45
(6) Если форму пишешь свою, то, имхо лучше сразу нормально делать - на каждое поле свой обработчик.
8 Масянька
 
24.01.20
10:45
(6) Ты "добираешься" на том компе,где спец. ключ стоит?
9 example221
 
24.01.20
10:46
(8) Я в копии базы,захожу в модуль там где такое есть,нахожу название этой шняги и ищу,и не могу найти.
10 example221
 
24.01.20
10:47
(7) Подскажи если не сложно(не знающему) как шаблонно это выглядит?
11 Масянька
 
24.01.20
10:47
(9) Модуль пустой?
12 example221
 
24.01.20
10:48
(11) нет куча кода
13 Fish
 
24.01.20
10:50
(10) Что именно? Заполнение колонок?
Если шаблонно, то как-то так:
Процедура Колонка1ПриИзменении()

Колонка3 = Колонка1 + Колонка2;


КонецПроцедуры
14 Масянька
 
24.01.20
10:50
(12) Покажи код модуля и название шняги.
15 example221
 
24.01.20
10:58
(14) Перем ИдентификаторТекущейРаботы Экспорт; // Идентификатор текущей работы
Перем ТекущийИсполнитель Экспорт;         // Текущий исполнитель
Перем РедактированиеНоменклатуры;
Перем РедактированиеРабот;
Перем ФормаПодбораНоменклатуры Экспорт;   // Форма подбора номенклатуры

Перем РедактированиеЦенИСуммВНоменклатурныхТаблицах;
Перем СпособВыбораСкидки;
Перем ПоказыватьОстаткиНоменклатурыВТаблицах;

Перем КонтрольКоличестваДеталейВПроизводстве;
Перем СтруктураДанныхТекущейСтроки;

Перем ДиагностическаяКартаДанные;

Перем УпущенныйСпрос экспорт;

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
Процедура ЗаполнитьДиагностическуюКарту()
    ДиагностическаяКартаДанные = ДиагностическаяКарта.Получить();
    Если ТипЗнч(ДиагностическаяКартаДанные) = Тип("Структура") Тогда
        Для каждого эл Из ДиагностическаяКартаДанные Цикл
            попытка
                ЭлементыФормы.птдДиагностическаяКарта.Область(эл.Ключ).Значение = эл.Значение;
            исключение
            конецпопытки;
        КонецЦикла;
    ИначеЕсли ДиагностическаяКартаДанные=Неопределено тогда
        ДиагностическаяКартаДанные = Новый Структура;     
    КонецЕсли;
КонецПроцедуры

Процедура л_зфЗНУправлениеДиалогом(ЭтаФорма)
    //Борисов отключим влияние процедуры на поле маркетинговая программа
    _дост = ЭлементыФормы.МаркетинговаяПрограмма.Доступность;
    зфЗНУправлениеДиалогом(ЭтаФорма);
    Если _дост<>ЭлементыФормы.МаркетинговаяПрограмма.Доступность Тогда
        ЭлементыФормы.МаркетинговаяПрограмма.Доступность = _дост;    
    КонецЕсли;
КонецПроцедуры


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

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

// Функция проверяет корректность изменения количества номенклатуры в ЗН
//
// Возвращаемое значение:
//   Булево   – Результат проверки корректности
//
Функция КонтрольКоличестваДеталейВПроизводстве() Экспорт
    
    РезультатПроверки=Истина;
    
    Если КонтрольКоличестваДеталейВПроизводстве=Перечисления.ВидыКонтроля.НеКонтролировать Тогда
        //Если не требуется контролировать, то всегда корректно
        Возврат РезультатПроверки;
    КонецЕсли;
    
    Номенклатура               = СтруктураДанныхТекущейСтроки.Номенклатура;
    ХарактеристикаНоменклатуры = СтруктураДанныхТекущейСтроки.ХарактеристикаНоменклатуры;
    ЕдиницаИзмерения           = СтруктураДанныхТекущейСтроки.ЕдиницаИзмерения;
    Количество                 = СтруктураДанныхТекущейСтроки.Количество;
    Коэффициент                = СтруктураДанныхТекущейСтроки.Коэффициент;
    Источник                   = СтруктураДанныхТекущейСтроки.Источник;
    СтрокаТЧ                   = СтруктураДанныхТекущейСтроки.Строка;
    СтрокаИсключение           = СтруктураДанныхТекущейСтроки.СтрокаИсключение;
    
    Если Источник=Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказчика Тогда
        Возврат РезультатПроверки;
    КонецЕсли;
    
    ТоварыВПроизводстве = ПолучитьСтрокуКешаПеремещения(Номенклатура, ХарактеристикаНоменклатуры, Неопределено, Неопределено, Неопределено);
    РасчетПоЗаказам     = (Источник = Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказывается);
    ВПроизводстве       = 0;
    Заказано            = 0;
    Зарезервировано     = 0;
    Для Каждого ТекСтрока Из ТоварыВПроизводстве Цикл
        
        ВПроизводстве = ВПроизводстве + ТекСтрока.ВПроизводстве;
        
        Если ТекСтрока.ЗаказаноПодЗН>0 Тогда
            Заказано = ТекСтрока.ЗаказаноПодЗН;
        КонецЕсли;
        
        Если ТекСтрока.ЗарезервированоПодЗН>0 Тогда
            Зарезервировано = ТекСтрока.ЗарезервированоПодЗН;
        КонецЕсли;
        
    КонецЦикла;
    ИспользованоВЗаказах = Заказано + Зарезервировано;
    
    // Если деталь уже перемещена в производство, или зарезервирована или заказана
    Если ВПроизводстве>0 ИЛИ (РасчетПоЗаказам И (Заказано + Зарезервировано) > 0) Тогда
        
        // подсчет нового итогового количества деталей в документе
        КоличествоНовое = 0;
        СтрокиДетали = Товары.НайтиСтроки(Новый Структура("Номенклатура, ХарактеристикаНоменклатуры", Номенклатура, ХарактеристикаНоменклатуры));
        Для Каждого ТекСтрока Из СтрокиДетали Цикл
            
            Если ТекСтрока.Источник = Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказчика ИЛИ
                ТекСтрока = СтрокаИсключение Тогда
                Продолжить;
            КонецЕсли;
            
            КоличествоПоСтроке = (ТекСтрока.Количество * ТекСтрока.Коэффициент);
            Если РасчетПоЗаказам Тогда
                Если ТекСтрока.Источник = Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказывается Тогда
                    КоличествоНовое = КоличествоНовое + КоличествоПоСтроке;
                Иначе
                    ВПроизводстве   = ВПроизводстве - КоличествоПоСтроке;
                КонецЕсли;
            Иначе
                
                Если ТекСтрока.Источник = Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказывается Тогда
                    ИспользованоВЗаказахПоСтроке = Мин(ИспользованоВЗаказах, КоличествоПоСтроке);
                    КоличествоНовое = КоличествоНовое + (КоличествоПоСтроке - ИспользованоВЗаказахПоСтроке);
                    ИспользованоВЗаказах = ИспользованоВЗаказах - ИспользованоВЗаказахПоСтроке;
                Иначе
                    КоличествоНовое = КоличествоНовое + КоличествоПоСтроке;
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЦикла;
        
        Если РасчетПоЗаказам Тогда
            Если ВПроизводстве > 0 Тогда
                КоличествоИспользуемоеВЗН = ВПроизводстве + Заказано + Зарезервировано;
            Иначе
                КоличествоИспользуемоеВЗН = Заказано + Зарезервировано;
            КонецЕсли;
        Иначе
            КоличествоИспользуемоеВЗН = ВПроизводстве;
        КонецЕсли;
        
        ИмяРеквизитаКода = дкПолучитьПараметрыРежимаВыводаКодаВДокументах(Неопределено, ЭтотОбъект).Имя;
        КодНоменклатуры = дкПолучитьЗначениеКолонкиКода(Номенклатура,ИмяРеквизитаКода,ЭтаФорма);    
        ПредставлениеНоменклатуры = "<" + КодНоменклатуры + "> <" + СокрЛП(Номенклатура)+">";
        Недостача = КоличествоИспользуемоеВЗН - КоличествоНовое;
        Если Недостача > 0 Тогда
            МинимальноеКоличество = 0;
            Если СтрокаТЧ = Неопределено Тогда
                МинимальноеКоличество = (Недостача/Коэффициент);
            Иначе
                МинимальноеКоличество = СтрокаТЧ.Количество + (Недостача/Коэффициент);
            КонецЕсли;
            
            РазрешеноУбрать = Макс(Количество - МинимальноеКоличество, 0);
            
            Если КонтрольКоличестваДеталейВПроизводстве=Перечисления.ВидыКонтроля.Запрещать Тогда
                ТекстСообщения = "Деталь " + ПредставлениеНоменклатуры+"
                | Допускается убрать " + Формат(РазрешеноУбрать, "ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+":";
                Если РасчетПоЗаказам И Заказано>0 Тогда
                    ТекстСообщения = ТекстСообщения + Символы.ПС + "    Заказано "+Формат(Заказано/Коэффициент, "ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+".";
                КонецЕсли;
                Если РасчетПоЗаказам И Зарезервировано>0 Тогда
                    ТекстСообщения = ТекстСообщения + Символы.ПС + "    Зарезервировано "+Формат(Зарезервировано/Коэффициент, "ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+".";
                КонецЕсли;
                Если ВПроизводстве>0 Тогда
                    ТекстСообщения = ТекстСообщения + Символы.ПС + "    Перемещено в производство "+Формат(ВПроизводстве/Коэффициент, "ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+".";
                КонецЕсли;
                Сообщить(ТекстСообщения, СтатусСообщения.Внимание);
                Если СтрокаТЧ<>Неопределено Тогда
                    ОбработкаРеквизитаНоменклатура=Ложь;
                    Если СтрокаТЧ.Номенклатура<>Номенклатура Тогда
                        СтрокаТЧ.Номенклатура=Номенклатура;
                        ОбработкаРеквизитаНоменклатура=Истина;
                    КонецЕсли;
                    ОбработкаРеквизитаХарактеристикаНоменклатуры=Ложь;
                    Если СтрокаТЧ.ХарактеристикаНоменклатуры<>ХарактеристикаНоменклатуры Тогда
                        СтрокаТЧ.ХарактеристикаНоменклатуры=ХарактеристикаНоменклатуры;
                        ОбработкаРеквизитаХарактеристикаНоменклатуры=Истина;
                    КонецЕсли;
                    ОбработкаРеквизитаЕдиницаИзмерения=Ложь;
                    Если СтрокаТЧ.ЕдиницаИзмерения<>ЕдиницаИзмерения Тогда
                        СтрокаТЧ.ЕдиницаИзмерения=ЕдиницаИзмерения;
                        СтрокаТЧ.Коэффициент=ЕдиницаИзмерения.Коэффициент;
                        ОбработкаРеквизитаЕдиницаИзмерения=Истина;
                    КонецЕсли;
                    ОбработкаРеквизитаКоличество=Ложь;
                    Если СтрокаТЧ.Количество<>Количество Тогда
                        СтрокаТЧ.Количество=Количество;
                        ОбработкаРеквизитаКоличество=Истина;
                    КонецЕсли;
                    ОбработкаРеквизитаИсточник=Ложь;
                    Если СтрокаТЧ.Источник<>Источник Тогда
                        СтрокаТЧ.Источник=Источник;
                        ОбработкаРеквизитаИсточник=Истина;
                    КонецЕсли;
                    Если ОбработкаРеквизитаНоменклатура Тогда
                        ОбработкаРеквизита("Товары.Номенклатура",СтрокаТЧ,ЭтаФорма);
                    КонецЕсли;
                    Если ОбработкаРеквизитаХарактеристикаНоменклатуры Тогда
                        ОбработкаРеквизита("Товары.ХарактеристикаНоменклатуры",СтрокаТЧ,ЭтаФорма);
                    КонецЕсли;
                    Если ОбработкаРеквизитаЕдиницаИзмерения Тогда
                        ОбработкаРеквизита("Товары.ЕдиницаИзмерения",СтрокаТЧ,ЭтаФорма);
                    КонецЕсли;
                    Если ОбработкаРеквизитаКоличество Тогда
                        ОбработкаРеквизита("Товары.Количество",СтрокаТЧ,ЭтаФорма);
                    КонецЕсли;
                    Если ОбработкаРеквизитаИсточник Тогда
                        ОбработкаРеквизита("Товары.Источник",СтрокаТЧ,ЭтаФорма);
                    КонецЕсли;
                КонецЕсли;
                РезультатПроверки=Ложь;
            ИначеЕсли КонтрольКоличестваДеталейВПроизводстве=Перечисления.ВидыКонтроля.Предупреждать Тогда
                ТекстСообщения = "Деталь "+ПредставлениеНоменклатуры+"
                | Допускается убрать " + Формат(РазрешеноУбрать, "ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+":";
                Если РасчетПоЗаказам И Заказано>0 Тогда
                    ТекстСообщения = ТекстСообщения + Символы.ПС + "    Заказано "+Формат(Заказано/Коэффициент,"ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+".";
                КонецЕсли;
                Если РасчетПоЗаказам И Зарезервировано>0 Тогда
                    ТекстСообщения = ТекстСообщения + Символы.ПС + "    Зарезервировано "+Формат(Зарезервировано/Коэффициент,"ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+".";
                КонецЕсли;
                Если ВПроизводстве>0 Тогда
                    ТекстСообщения = ТекстСообщения + Символы.ПС + "    Перемещено в производство "+Формат(ВПроизводстве/Коэффициент, "ЧДЦ=3; ЧН=0.00")+" "+СокрЛП(ЕдиницаИзмерения)+".";
                КонецЕсли;
                
                ТекстСообщения = ТекстСообщения + Символы.ПС + "Принять изменения?";
                
                Если Вопрос(ТекстСообщения, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
                Иначе
                    Если СтрокаТЧ<>Неопределено Тогда
                        ОбработкаРеквизитаНоменклатура=Ложь;
                        Если СтрокаТЧ.Номенклатура<>Номенклатура Тогда
                            СтрокаТЧ.Номенклатура=Номенклатура;
                            ОбработкаРеквизитаНоменклатура=Истина;
                        КонецЕсли;
                        ОбработкаРеквизитаХарактеристикаНоменклатуры=Ложь;
                        Если СтрокаТЧ.ХарактеристикаНоменклатуры<>ХарактеристикаНоменклатуры Тогда
                            СтрокаТЧ.ХарактеристикаНоменклатуры=ХарактеристикаНоменклатуры;
                            ОбработкаРеквизитаХарактеристикаНоменклатуры=Истина;
                        КонецЕсли;
                        ОбработкаРеквизитаЕдиницаИзмерения=Ложь;
                        Если СтрокаТЧ.ЕдиницаИзмерения<>ЕдиницаИзмерения Тогда
                            СтрокаТЧ.ЕдиницаИзмерения=ЕдиницаИзмерения;
                            СтрокаТЧ.Коэффициент=ЕдиницаИзмерения.Коэффициент;
                            ОбработкаРеквизитаЕдиницаИзмерения=Истина;
                        КонецЕсли;
                        ОбработкаРеквизитаКоличество=Ложь;
                        Если СтрокаТЧ.Количество<>Количество Тогда
                            СтрокаТЧ.Количество=Количество;
                            ОбработкаРеквизитаКоличество=Истина;
                        КонецЕсли;
                        ОбработкаРеквизитаИсточник=Ложь;
                        Если СтрокаТЧ.Источник<>Источник Тогда
                            СтрокаТЧ.Источник=Источник;
                            ОбработкаРеквизитаИсточник=Истина;
                        КонецЕсли;
                        Если ОбработкаРеквизитаНоменклатура Тогда
                            ОбработкаРеквизита("Товары.Номенклатура",СтрокаТЧ,ЭтаФорма);
                        КонецЕсли;
                        Если ОбработкаРеквизитаХарактеристикаНоменклатуры Тогда
                            ОбработкаРеквизита("Товары.ХарактеристикаНоменклатуры",СтрокаТЧ,ЭтаФорма);
                        КонецЕсли;
                        Если ОбработкаРеквизитаЕдиницаИзмерения Тогда
                            ОбработкаРеквизита("Товары.ЕдиницаИзмерения",СтрокаТЧ,ЭтаФорма);
                        КонецЕсли;
                        Если ОбработкаРеквизитаКоличество Тогда
                            ОбработкаРеквизита("Товары.Количество",СтрокаТЧ,ЭтаФорма);
                        КонецЕсли;
                        Если ОбработкаРеквизитаИсточник Тогда
                            ОбработкаРеквизита("Товары.Источник",СтрокаТЧ,ЭтаФорма);
                        КонецЕсли;
                    КонецЕсли;
                    РезультатПроверки=Ложь;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Возврат РезультатПроверки;
    
КонецФункции // КонтрольКоличестваДеталейВПроизводстве()

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

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

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ

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


// Обработчик дополнительных действий (Подключается динамически при программном создании кнопок командной панели)
Процедура ДополнительныеДействияФормы(Элемент)
    ОбработкаРеквизита(Элемент.Имя,,ЭтаФорма,Элемент);
КонецПроцедуры

//Ввод дат создания, начала и окончания заказ-наряда
Процедура ДействияФормыДатаЗаказНаряда(Кнопка)
    Если Кнопка<>Неопределено Тогда
        ФормаВводаДат=ПолучитьФорму("ФормаВводаДат",ЭтаФорма);
        Если Кнопка.Имя="ДатаСоздания" Тогда
            ФормаВводаДат.ТекущийЭлемент=ФормаВводаДат.ЭлементыФормы.ДатаСозданияДата;
        ИначеЕсли Кнопка.Имя="ДатаНачала" Тогда
            ФормаВводаДат.ТекущийЭлемент=ФормаВводаДат.ЭлементыФормы.ДатаНачалаДата;
        ИначеЕсли Кнопка.Имя="ДатаОкончания" Тогда
            ФормаВводаДат.ТекущийЭлемент=ФормаВводаДат.ЭлементыФормы.ДатаОкончанияДата;
        ИначеЕсли Кнопка.Имя="ПлановаяДатаВыдачи" Тогда
            ФормаВводаДат.ТекущийЭлемент=ФормаВводаДат.ЭлементыФормы.ДатаПлановаяДата;
        КонецЕсли;
        ФормаВводаДат.ОткрытьМодально();
        ПересчитатьПлановыеПоказателиПоТО(Ложь, ЗначениеЗаполнено(ДатаОкончания));
    КонецЕсли;
    //Отображение дат создания, начала и окончания заказ-наряда в меню
    //Отображение даты создания заказ-наряда в меню
    Если обЗначениеНеЗаполнено(ДатаСоздания) Тогда
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ДатаСоздания.Текст="Дата создания не задана";
    Иначе
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ДатаСоздания.Текст="Дата создания "+Формат(ДатаСоздания,"ДФ=dd.MM.yyyy чч:мм:сс");
    КонецЕсли;
    //Отображение даты начала заказ-наряда в меню
    Если обЗначениеНеЗаполнено(ДатаНачала) Тогда
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ДатаНачала.Текст="Дата начала не задана";
    Иначе
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ДатаНачала.Текст="Дата начала "+Формат(ДатаНачала,"ДФ=dd.MM.yyyy чч:мм:сс");
        Если НЕ обЗначениеНеЗаполнено(Автомобиль) И ТипЗнч(Автомобиль) = Тип("СправочникСсылка.Автомобили") Тогда
            Пробег = Автомобиль.ПолучитьОбъект().ЧтениеЗначенияРегистраСведения(Перечисления.ДополнительнаяИнформацияАвтомобилей.Пробег,ДатаНачала);
        КонецЕсли;
    КонецЕсли;
    //Отображение даты окончания заказ-наряда в меню
    Если обЗначениеНеЗаполнено(ДатаОкончания) Тогда
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ДатаОкончания.Текст="Дата окончания не задана";
    Иначе
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ДатаОкончания.Текст="Дата окончания "+Формат(ДатаОкончания,"ДФ=dd.MM.yyyy чч:мм:сс");
    КонецЕсли;
    //Отображение даты окончания заказ-наряда в меню
    Если обЗначениеНеЗаполнено(ПлановаяДатаВыдачи) Тогда
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ПлановаяДатаВыдачи.Текст="Плановая дата выдачи не задана";
    Иначе
        ЭлементыФормы.ДействияФормы.Кнопки.Время.Кнопки.ПлановаяДатаВыдачи.Текст="Плановая дата выдачи "+Формат(ПлановаяДатаВыдачи,"ДФ=dd.MM.yyyy чч:мм:сс");
    КонецЕсли;
КонецПроцедуры

// выбор пункта подменю "Ввести время"
Процедура ДействияФормыВвестиВремя(Кнопка)
    дкДействияФормыВвестиВремя(ЭтаФорма,Кнопка);
                                            
    ОбработкаРеквизита("Дата",,ЭтаФорма);
КонецПроцедуры

// нажатие на кнопку "Цены и валюта" в верхней панели
Процедура ДействияФормыЦеныИВалюта(Кнопка)
    
    ТекущаяВалютаДокумента=ВалютаДокумента;
    ТекущийКурсДокумента=КурсДокумента;
    Если РедактированиеНоменклатуры И РедактированиеРабот И (НЕ ВидРемонта.ТипРемонта=Перечисления.ТипыРемонта.Бесплатный) Тогда
        дкДействияФормыЦеныИВалюта(ЭтаФорма,Кнопка);
    Иначе
        ФормаЦеныИВалюта = ПолучитьОбщуюФорму("ЦеныИВалюта", ЭтаФорма);
        Если ВидРемонта.ТипРемонта=Перечисления.ТипыРемонта.Бесплатный Тогда
            ФормаЦеныИВалюта.ЭлементыФормы.ВидОплаты.Доступность              = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тВидОплаты.Доступность             = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.Карточка.Доступность               = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тКарточка.Доступность              = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.СкидкаНаценка.Доступность          = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тСкидкаНаценка.Доступность         = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.СкидкаНаценкаНаРаботы.Доступность  = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тСкидкаНаценкаНаРаботы.Доступность = Ложь;
        ИначеЕсли РедактированиеНоменклатуры Тогда
            ФормаЦеныИВалюта.ЭлементыФормы.СкидкаНаценкаНаРаботы.Доступность  = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тСкидкаНаценкаНаРаботы.Доступность = Ложь;
        ИначеЕсли РедактированиеРабот Тогда
            ФормаЦеныИВалюта.ЭлементыФормы.СкидкаНаценка.Доступность          = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тСкидкаНаценка.Доступность         = Ложь;
        Иначе
            ФормаЦеныИВалюта.ЭлементыФормы.СкидкаНаценка.Доступность          = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тСкидкаНаценка.Доступность         = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.СкидкаНаценкаНаРаботы.Доступность  = Ложь;
            ФормаЦеныИВалюта.ЭлементыФормы.тСкидкаНаценкаНаРаботы.Доступность = Ложь;
        КонецЕсли;
        ФормаЦеныИВалюта.ОткрытьМодально();
    КонецЕсли;
    
КонецПроцедуры

// выбор пункта из подменю "Хоз. операции" в верхней панели
// динамически подключаемый обработчик
Процедура ДействияФормыОперация(Кнопка)
    // отработаем стандартно
    дкДействияФормыОперация(ЭтаФорма,Кнопка);
КонецПроцедуры

//Формирование отчета истории по заказ-наряду
Процедура ДействияФормыИсторияПоЗаказНарядам(Кнопка)
    ЭтотОбъект.ОтчетИсторияПоЗаказНарядам();
КонецПроцедуры

//Формирование отчета по планированию
Процедура ДействияФормыОтчетПоПланированию(Кнопка)
    орСформироватьОтчетПоПланированию(ДокументОбъект);
КонецПроцедуры

//Формирование отчета анализа состояний по заказ-наряду
Процедура ДействияФормыАнализСостояний(Кнопка)
    ЭтотОбъект.ОтчетАнализСостоянийЗаказНаряда();
КонецПроцедуры

Процедура ДействияФормыОтчетПоНезавершенномуПроизводству(Кнопка)
    ОтчетПоНезавершенномуПроизводству();
КонецПроцедуры

Процедура ДействияФормыСостояниеЗаказовПокупателей(Кнопка)
    ОтчетСостояниеЗаказовПокупателейПоЗаказНаряду();
КонецПроцедуры

Процедура ДействияФормыИзвлечениеИзПроизводства(Кнопка)
    Если Ссылка.Пустая() Тогда Возврат; КонецЕсли;
    
    ИзвлечениеИзПроизводства(ЭтаФорма);
КонецПроцедуры

// Обработчик подключается динамически
Процедура ДействияФормыОтчетПоСостояниюРабот(Кнопка)
    Попытка
        урвСформироватьОтчетПоСостояниюРабот(ЭтаФорма);
    Исключение
    КонецПопытки;
КонецПроцедуры

Процедура ДействияФормыНаличиеНаСкладах(Кнопка)
    орОтчетОстаткиТоваровНаСкладах(Ссылка);
КонецПроцедуры

Процедура ДействияФормыНаличиеВПрайсЛистахКонтрагентов(Кнопка)
    орОтчетНаличиеВПрайсЛистахКонтрагентов(Ссылка);
КонецПроцедуры

Процедура ДействияФормыНаличиеВоВнешнихПрайсЛистахКонтрагентов(Кнопка)
    
    орОтчетНаличиеВоВнешнихПрайсЛистахКонтрагентов(Ссылка);
    
КонецПроцедуры

Процедура ДействияФормыВыгрузитьВColorNetPro(Кнопка)
    Если ЭтоНовый() Тогда
        Предупреждение("Документ должен быть записан!", 10);
        Возврат;
    КонецЕсли;
    Если Состояние = Перечисления.СостояниеЗаказНаряда.Выполнен ИЛИ Состояние = Перечисления.СостояниеЗаказНаряда.Закрыт Тогда
        Предупреждение("Документы выполненные и закрытые заказ-наряды выгрузке не подлежат!",10);
        Возврат;
    КонецЕсли;
    ОбработкаОбмена = Обработки.ОбменСColorNetPro.Создать();
    ОбработкаОбмена.ЗапонитьНастройки();
    Рез = ОбработкаОбмена.ПроверитьФайлОбмена();
    Если Рез Тогда
        ОбработкаОбмена.ДобавитьСтрокуВФайлОбмена(ЭтотОбъект.Ссылка);
    Иначе
        ФормаДиалога = ОбработкаОбмена.ПолучитьФорму("ФормаДиалога",ЭтаФорма,ЭтаФорма);
        ФормаДиалога.ОткрытьМодально();
    КонецЕсли;
КонецПроцедуры

// Обработчик нажатия на кнопку открытия обработки импорта данных из ax.net
//
Процедура ДействияФормыИмпортДанныхИзAudatex(Кнопка)
    Если Ссылка.Пустая() Тогда
        Возврат;
    КонецЕсли;
    
    ОбработкаОбмена    = Обработки.ИмпортДанныхИзAudatex.Создать();
    
    Если Ссылка.Состояние=Перечисления.СостояниеЗаказНаряда.Выполнен ИЛИ
        Ссылка.Состояние=Перечисления.СостояниеЗаказНаряда.Закрыт Тогда
        
        Сообщить("Загрузка данных в выполненный/закрытый заказ-наряд недоступна");
        Возврат;
    КонецЕсли;    
    
    ФормаДиалога    = ОбработкаОбмена.ПолучитьФорму("ERP",ЭтаФорма);
    
    ФормаДиалога.ДокументПриёмник    = Ссылка;
    ФормаДиалога.ТипЦен                = ТипЦен;
    ФормаДиалога.ДокументОбъект        = ЭтотОбъект;
    ФормаДиалога.ФормаДока            = ЭтаФорма;
    
    ФормаДиалога.Открыть();    
        
КонецПроцедуры

Функция ЕстьПовторноеОбращение() экспорт
    Если Не ЭтоНовый() Тогда
        Запрос = новый Запрос("ВЫБРАТЬ
        |    ПовторноеОбращениеСервис.Ссылка
        |ИЗ
        |    Документ.ПовторноеОбращениеСервис КАК ПовторноеОбращениеСервис
        |ГДЕ
        |    ПовторноеОбращениеСервис.ДокументОснование = &ЗаказНаряд");
        
        Запрос.УстановитьПараметр("ЗаказНаряд",ЭтотОбъект.Ссылка);
        тз = запрос.Выполнить().Выгрузить();
        Если тз.Количество()>0 Тогда
            док = тз[0].Ссылка;
        Иначе
            док = Неопределено;
        конецесли;
    Иначе    
        док = неопределено;    
        
    КонецЕсли;
    возврат док;        
КонецФункции // ЕстьПовторноеОбращение()

// нажатие кнопки "Печать"
Процедура ОсновныеДействияФормыПечать(Кнопка)
    Печать();    // Процедура печати находится в модуле документа
КонецПроцедуры

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

// нажатие кнопки "Подбор" на панели таблицы
Процедура КоманднаяПанельТоварыПодбор(Кнопка)
    
    Если Кнопка.Имя="Подбор" Тогда
        СтруктураПараметровПодбора=Новый Структура();
        СтруктураПараметровПодбора.Вставить("ОтображениеУслуг",Ложь);
        СписокВидовНоменклатуры=Новый СписокЗначений;
        Для Каждого ВидНоменклатуры Из Перечисления.ВидыНоменклатуры Цикл
            Если ВидНоменклатуры<>Перечисления.ВидыНоменклатуры.ПрочиеАктивы И
                ВидНоменклатуры<>Перечисления.ВидыНоменклатуры.Услуга Тогда
                СписокВидовНоменклатуры.Добавить(ВидНоменклатуры);
            КонецЕсли;
        КонецЦикла;
        СтруктураПараметровПодбора.Вставить("ВидыНоменклатуры",СписокВидовНоменклатуры);
        СтруктураПараметровПодбора.Вставить("ОбработкаВДокументе",Истина);
        СтруктураПараметровПодбора.Вставить("ИмяТабличнойЧасти","Товары");
        СтруктураПараметровПодбора.Вставить("ДатаРасчетов", ТекущаяДата());
        СтруктураПараметровПодбора.Вставить("ЭтаФорма",ЭтаФорма);
        ИспользованиеФормыПодбора=обПраво("ИспользованиеФормыПодбора",ЭтаФорма.Права,,ЭтотОбъект);
        Если ИспользованиеФормыПодбора Тогда
            ФормаПодбораНоменклатуры=Обработки.ПодборНоменклатуры.ПолучитьФорму("Форма",ЭтаФорма);
        Иначе
            ФормаПодбораНоменклатуры=Справочники.Номенклатура.ПолучитьФормуВыбора("ФормаСписка",ЭтаФорма);
        КонецЕсли;
        ФормаПодбораНоменклатуры.СтруктураПараметровФормы=СтруктураПараметровПодбора;
        ФормаПодбораНоменклатуры.РежимВыбора=Истина;
        ФормаПодбораНоменклатуры.ЗакрыватьПриВыборе=Ложь;
        ФормаПодбораНоменклатуры.Открыть();
        Если обПраво("ОтборНоменклатурыПоПрименяемости",Права,,ЭтотОбъект) Тогда
            Если НЕ обЗначениеНеЗаполнено(Автомобиль) Тогда
                ОтборПоПрименяемости=ФормаПодбораНоменклатуры.Фильтр.Отбор.Найти("НоменклатураПрименяемостьМодель");
                Если ОтборПоПрименяемости<>Неопределено Тогда
                    ОтборПоПрименяемости.ВидСравнения=ВидСравнения.Равно;
                    ОтборПоПрименяемости.Значение=Автомобиль.Модель;
                    ОтборПоПрименяемости.Использование=Истина;
                    Если ИспользованиеФормыПодбора Тогда
                        ФормаПодбораНоменклатуры.УстановитьФильтрНажатие(ФормаПодбораНоменклатуры.ЭлементыФормы.КоманднаяПанельНоменклатураСправочник.Кнопки.УстановитьОтбор);
                    Иначе
                        ФормаПодбораНоменклатуры.ФильтрУстановлен=Ложь;
                        ФормаПодбораНоменклатуры.УстановитьФильтрНажатие(ФормаПодбораНоменклатуры.ЭлементыФормы.УстановитьФильтр);
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    ИначеЕсли Кнопка.Имя = "ПодборПоЗаказам" Тогда
        ФормаПодбора = Обработки.ПодборПоЗаказам.ПолучитьФорму("ПодборПоЗаказам", ЭтаФорма);
        ФормаПодбора.ВариантВызова = "ЗаказНаряд";
        ФормаПодбо
16 example221
 
24.01.20
10:58
(14) ОбработкаРеквезита Вроде
17 Fish
 
24.01.20
11:05
(16) Поставь курсор на строчку ОбработкаРеквизита() и нажми F12.
18 Масянька
 
24.01.20
11:07
(16) Меня терзают смутные сомнения, что лежит эта шняга в закрытом модуле.
19 JeHer
 
24.01.20
11:11
(18) да пофиг, где она лежит, ТС свою форму ведь рисует. Так в (7) советуют же "Если форму пишешь свою, то, имхо лучше сразу нормально делать - на каждое поле свой обработчик"
20 example221
 
24.01.20
11:12
(17) нашел,но это что то очень страшное
Функция ОбработкаРеквизита(Имя,ТекСтрока=Неопределено,ЭтаФорма=Неопределено,ДопПараметры=Неопределено) Экспорт
    // ОБРАБОТКА РЕКВИЗИТОВ ДОКУМЕНТА
    Если Имя="Дата" Тогда        
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        Рез=ЭтотОбъект.ОбработкаРеквизита("РассчитатьСкидкиРабот", ТекСтрока, ЭтаФорма, ДопПараметры) И Рез;
        Возврат Рез;
    
    ИначеЕсли Имя="ВалютаДокумента" Тогда
        Попытка
            ТребуетсяПересчет=ДопПараметры.ТребуетсяПересчет;
        Исключение
            ТребуетсяПересчет=Ложь;
        КонецПопытки;
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        Если ТребуетсяПересчет И (НЕ обЗначениеНеЗаполнено(ТекущаяВалютаДокумента)) Тогда
            Для каждого СтрокаРабот Из Работы Цикл
                НоваяЦена=обПересчет(СтрокаРабот.Цена,ТекущаяВалютаДокумента,ТекущийКурсДокумента,ВалютаДокумента,КурсДокумента);
                Если НоваяЦена<>СтрокаРабот.Цена Тогда
                    СтрокаРабот.Цена=НоваяЦена;
                    Рез=ОбработкаРеквизита("Работы.Цена",СтрокаРабот,ЭтаФорма,ДопПараметры) И Рез;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        ТекущаяВалютаДокумента=ВалютаДокумента;
        ТекущийКурсДокумента=КурсДокумента;
        Рез=ЭтотОбъект.ОбработкаРеквизита("РассчитатьСкидкиРабот",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        Возврат Рез;
        
    ИначеЕсли Имя="Организация" Тогда
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        // Организация может является плательщиком НДС, а может и нет.. надо обработать таблицу работ
        ТаблицаРабот=ЭтотОбъект.Работы;
        ОсвобожденОтНДС=ЭтотОбъект.ПодразделениеКомпании.ОсвобожденОтНДС ИЛИ ЭтотОбъект.Организация.ОсвобожденОтНДС;
        Для Каждого СтрокаРабот Из ТаблицаРабот Цикл
            Если ОсвобожденОтНДС Тогда
                СтрокаРабот.СтавкаНДС=Справочники.СтавкиНДС.БезНДС;
            Иначе
                СтрокаРабот.СтавкаНДС=СтрокаРабот.Работа.Номенклатура.СтавкаНДС;
            КонецЕсли;
            Рез=ЭтотОбъект.ОбработкаРеквизита("Работы.СтавкаНДС",СтрокаРабот,ЭтаФорма,ДопПараметры) И Рез;
        КонецЦикла;
        Возврат Рез;
        
    ИначеЕсли Имя="ПодразделениеКомпании" Тогда
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        // Подразделение может является плательщиком НДС, а может и нет.. надо обработать таблицу работ
        ТаблицаРабот=ЭтотОбъект.Работы;
        ОсвобожденОтНДС=ЭтотОбъект.ПодразделениеКомпании.ОсвобожденОтНДС ИЛИ ЭтотОбъект.Организация.ОсвобожденОтНДС;
        Для Каждого СтрокаРабот Из ТаблицаРабот Цикл
            Если ОсвобожденОтНДС Тогда
                СтрокаРабот.СтавкаНДС=Справочники.СтавкиНДС.БезНДС;
            Иначе
                СтрокаРабот.СтавкаНДС=СтрокаРабот.Работа.Номенклатура.СтавкаНДС;
            КонецЕсли;
            Рез=ЭтотОбъект.ОбработкаРеквизита("Работы.СтавкаНДС",СтрокаРабот,ЭтаФорма,ДопПараметры) И Рез;
        КонецЦикла;
        // Изменение подразделения приводит к необходимости пересчета скидок документа (как "шапочных", так и товарных).
        Рез=ЭтотОбъект.ОбработкаРеквизита("РассчитатьСкидкиРабот", ТекСтрока, ЭтаФорма, ДопПараметры) И Рез;
        Возврат Рез;
        
    ИначеЕсли Имя="Заказчик" Тогда
        Рез=ОбработкаРеквизита("УстановитьГарантийногоПлательщика",ТекСтрока,ЭтаФорма,ДопПараметры);
        ПредупредитьОКомментарии(Заказчик);
        Возврат Рез;
        
    ИначеЕсли Имя="Автомобиль" Тогда
        Рез=Истина;
        Если НЕ обЗначениеНеЗаполнено(Автомобиль) Тогда
            Хозяин=Автомобиль.ПолучитьОбъект().ЧтениеЗначенияРегистраСведения(Перечисления.ДополнительнаяИнформацияАвтомобилей.Хозяин,Дата);
            Если (НЕ обЗначениеНеЗаполнено(Хозяин)) И (Заказчик<>Хозяин) Тогда
                Заказчик=Хозяин;
                Рез=ОбработкаРеквизита("Заказчик",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            КонецЕсли;
        КонецЕсли;
        
        #Если Клиент Тогда
        // KRAA ++ будем спрашивать только при наличии формы
        ПерерасчетЦенАвторабот(ЭтаФорма <> Неопределено,ДопПараметры);
        // KRAA --
        #КонецЕсли
        Возврат Рез;
        
    ИначеЕсли Имя="Цех" Тогда
        Рез=Истина;
        Если (НЕ обЗначениеНеЗаполнено(Цех)) И (обЗначениеНеЗаполнено(Мастер)) Тогда
            Мастер=Цех.Мастер;
            Рез=ОбработкаРеквизита("Мастер",СтрокаРабот,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;
        #Если Клиент Тогда
        // KRAA ++ будем спрашивать только при наличии формы
        ПерерасчетЦенАвторабот(ЭтаФорма <> Неопределено,ДопПараметры);
        // KRAA --
        #КонецЕсли
        Рез=ЭтотОбъект.ОбработкаРеквизита("РассчитатьСкидкиРабот", ТекСтрока, ЭтаФорма, ДопПараметры) И Рез;
        ОбработкаРасчетСкидок.СкладКомпании = Цех.СкладКомпании;
        Рез=ОбработкаРеквизита("РассчитатьСкидки",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        Возврат Рез;
        
    ИначеЕсли Имя="ВидРемонта" Тогда
        Если обЗначениеНеЗаполнено(ВидРемонта) Тогда
            Возврат Истина;
        КонецЕсли;
        Рез=Истина;
        Попытка
            КомплектацияАвтомобиля=Справочники.ВидыРемонта.КомплектацияАвтомобиля;
            Если (КомплектацияАвтомобиля.Пустая()) ИЛИ (НЕ КомплектацияАвтомобиля.Предопределенный) Тогда
                КомплектацияАвтомобиля=Неопределено;
            КонецЕсли;
        Исключение
            КомплектацияАвтомобиля=Неопределено;
        КонецПопытки;
        
        Если ВидРемонта=КомплектацияАвтомобиля ИЛИ
                ВидРемонта.ТипРемонта=Перечисления.ТипыРемонта.Бесплатный Тогда
            Если ЗначениеЗаполнено(Контрагент) Тогда
                Контрагент=Справочники.Контрагенты.ПустаяСсылка();
                Рез=ОбработкаРеквизита("Контрагент",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            КонецЕсли;
            Если ЗначениеЗаполнено(ДоговорВзаиморасчетов) Тогда
                ДоговорВзаиморасчетов=Справочники.ДоговорыВзаиморасчетов.ПустаяСсылка();
                Рез=ОбработкаРеквизита("ДоговорВзаиморасчетов",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            КонецЕсли;
        КонецЕсли;
        
        Если ДопПараметры=Неопределено Тогда
            ДопПараметры=Новый Структура;
        КонецЕсли;
        Если НЕ обЗначениеНеЗаполнено(Контрагент) Тогда
            ДопПараметры.Вставить("ПодставлятьКонтрагентаИзЗаказчика",Ложь);
        КонецЕсли;
        Рез=ОбработкаРеквизита("УстановитьГарантийногоПлательщика",ТекСтрока,ЭтаФорма,ДопПараметры);
        
        #Если Клиент Тогда
            
            // KRAA ++  Заполнение работами по виду ремонта                                          
            Если обПраво("РедактированиеРаботЗаказНаряда",Права)
                И ЗначениеЗаполнено(ВидРемонта)
                И ВидРемонта.Работы.Количество() > 0 Тогда
                
                Очищать = ИСТИНА;
                Заполнять = ИСТИНА;
                Если ЭтаФорма <> Неопределено Тогда
                    Если ЭтотОбъект.Работы.Количество() > 0 Тогда
                        ОтветПользователя = Вопрос("Табличная часть ""Работы"" не пуста! Заполнить работами по виду ремонта?
                        |    ДА - Удалить строки из таблицы и заполнить по виду ремонта;
                        |    НЕТ - Добавить новые данные в конец списка;
                        |    Отмена - Отменить заполнение.",РежимДиалогаВопрос.ДаНетОтмена,,КодВозвратаДиалога.Отмена);
                    Иначе
                        ОтветПользователя = Вопрос("Заполнить работами по виду ремонта?",РежимДиалогаВопрос.ОКОтмена,,КодВозвратаДиалога.Отмена);
                    КонецЕсли;                                    
                    Очищать = (ОтветПользователя = КодВозвратаДиалога.Да ИЛИ ОтветПользователя = КодВозвратаДиалога.ОК);
                    Заполнять = НЕ (ОтветПользователя = КодВозвратаДиалога.Отмена);
                КонецЕсли;
                Если Заполнять Тогда
                    //Если обЗначениеНеЗаполнено(СервиснаяКампания) ИЛИ СервиснаяКампания.Работы.Количество()=0 Тогда
                        РежимОбработки = ?(Очищать,2,1);
                    //Иначе
                    //    РежимОбработки = 0;
                    //КонецЕсли;
                    ЗаполнитьРаботамиПоВидуРемонта(РежимОбработки,ЭтаФорма);
                КонецЕсли;
            КонецЕсли;
            // KRAA --
        
            Если ДопПараметры=Неопределено Тогда
                ДопПараметры=Новый Структура("НеРассчитыватьСкидки",Истина);
            Иначе
                ДопПараметры.Вставить("НеРассчитыватьСкидки",Истина);
            КонецЕсли;
            // KRAA ++ будем спрашивать только при наличии формы
            ПерерасчетЦенАвторабот(ЭтаФорма <> Неопределено,ДопПараметры);
            // KRAA --
            ДопПараметры.Удалить("НеРассчитыватьСкидки");
        #КонецЕсли
        
        Если ВидРемонта=КомплектацияАвтомобиля ИЛИ
            ВидРемонта.ТипРемонта=Перечисления.ТипыРемонта.Бесплатный Тогда
            Если АвтоЗакрытиеСделок Тогда
                АвтоЗакрытиеСделок=Ложь;
                ОбработкаРеквизита("АвтоЗакрытиеСделок",ТекСтрока,ЭтаФорма,ДопПараметры);
            КонецЕсли;
            
            ОбработкаРасчетСкидок.НеРассчитыватьАвтоматическиеСкидки          = Истина;
            ОбработкаРасчетСкидокАвторабот.НеРассчитыватьАвтоматическиеСкидки = Истина;
            
            Если ЗначениеЗаполнено(Карточка) Тогда
                Карточка=Справочники.Карточки.ПустаяСсылка();
                ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",Истина);
                ОбработкаРеквизита("Карточка",ТекСтрока,ЭтаФорма,ДопПараметры);
                ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");    
            КонецЕсли;
            Если ЗначениеЗаполнено(МаркетинговаяПрограмма) Тогда
                МаркетинговаяПрограмма=Справочники.МаркетинговыеПрограммы.ПустаяСсылка();
                ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",Истина);
                ОбработкаРеквизита("МаркетинговаяПрограмма",ТекСтрока,ЭтаФорма,ДопПараметры);
                ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
            КонецЕсли;
            
            Если ЗначениеЗаполнено(СкидкаНаценка) Тогда
                ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",Истина);
                СкидкаНаценка=Справочники.ТипыСкидок.ПустаяСсылка();
                Рез=ОбработкаРеквизита("СкидкаНаценка",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
                ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
            КонецЕсли;
            Если ЗначениеЗаполнено(СкидкаНаценкаРаботы) Тогда
                ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",Истина);
                СкидкаНаценкаРаботы=Справочники.ТипыСкидок.ПустаяСсылка();
                Рез=ОбработкаРеквизита("СкидкаНаценкаРаботы",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
                ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");    
            КонецЕсли;
            ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",Истина);
            Для каждого СтрокаТЧ Из Товары Цикл
                Если ЗначениеЗаполнено(СтрокаТЧ.СкидкаНаТовар) Тогда
                    СтрокаТЧ.СкидкаНаТовар=Справочники.ТипыСкидок.ПустаяСсылка();
                    Рез=ОбработкаРеквизита("Товары.СкидкаНаТовар",СтрокаТЧ,ЭтаФорма,ДопПараметры) И Рез;
                КонецЕсли;
            КонецЦикла;
            Для каждого СтрокаТЧ Из Работы Цикл
                Если ЗначениеЗаполнено(СтрокаТЧ.СкидкаНаТовар) Тогда
                    СтрокаТЧ.СкидкаНаТовар=Справочники.ТипыСкидок.ПустаяСсылка();
                    Рез=ОбработкаРеквизита("Работы.СкидкаНаТовар",СтрокаТЧ,ЭтаФорма,ДопПараметры) И Рез;
                КонецЕсли;
            КонецЦикла;
            ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
        Иначе
            
            ОбработкаРасчетСкидок.НеРассчитыватьАвтоматическиеСкидки          = Ложь;
            ОбработкаРасчетСкидокАвторабот.НеРассчитыватьАвтоматическиеСкидки = Ложь;
            
            Если ДопПараметры<>Неопределено Тогда
                Если ДопПараметры.Свойство("НеРассчитыватьСкидки") Тогда
                    ДопПараметры.Удалить("НеРассчитыватьСкидки");
                КонецЕсли;
            КонецЕсли;
            Если ДополнительныеСвойства.Свойство("НеЗаменятьПустуюСкидку") Тогда
                ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
            КонецЕсли;
            Рез=ОбработкаРеквизита("СкидкаНаценка",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            Рез=ОбработкаРеквизита("СкидкаНаценкаРаботы",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;
        
        //Для автосалона попробуем установить флаг "На себестоимость"
        Попытка
            Если НЕ обЗначениеНеЗаполнено(ВидРемонта) Тогда
                НаСебестоимость=ВидРемонта.НаСебестоимость;
            КонецЕсли;
        Исключение
        КонецПопытки;
        
        Возврат Рез;
        
    //ИначеЕсли Имя="ДоговорВзаиморасчетов" Тогда
    //    Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
    //    Если обЗначениеНеЗаполнено(Заказчик) Тогда
    //        Заказчик=Контрагент;
    //        Рез=дкОбработкаРеквизита(ЭтотОбъект,"Заказчик",ТекСтрока,ЭтаФорма,ДопПараметры);
    //    КонецЕсли;
    //    Возврат Рез;
    //    
    ИначеЕсли Имя="ДоговорВзаиморасчетов" Тогда
        Рез=Истина;
        // проверим вид договора
        Если (ДоговорВзаиморасчетов.ВидДоговора=Перечисления.ВидыДоговоров.Покупка) ИЛИ
             (ДоговорВзаиморасчетов.ВидДоговора=Перечисления.ВидыДоговоров.Комиссия) Тогда
             #Если Клиент Тогда
             Предупреждение("Не правильный вид договора !");
             #КонецЕсли
             ДоговорВзаиморасчетов=Неопределено;
             Рез=ОбработкаРеквизита("ДоговорВзаиморасчетов",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
             Возврат Ложь;
        КонецЕсли;
        #Если Клиент Тогда
        // KRAA ++ будем спрашивать только при наличии формы
        ПерерасчетЦенАвторабот(ЭтаФорма <> Неопределено,ДопПараметры);
        // KRAA --
        #КонецЕсли
        ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",Ложь);
        // Если у документа есть реквизит СкидкаНаценка, заполним его из Договора
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        Если ЭтотОбъект.СкидкаНаценкаРаботы<>ЭтотОбъект.ДоговорВзаиморасчетов.ТипСкидкиНаценкиРабот Тогда
            Если НЕ обЗначениеНеЗаполнено(ЭтотОбъект.ДоговорВзаиморасчетов.ТипСкидкиНаценкиРабот) Тогда
                СкидкаНаценкаРаботы=ЭтотОбъект.ДоговорВзаиморасчетов.ТипСкидкиНаценкиРабот;
            КонецЕсли;
            Рез=ОбработкаРеквизита("СкидкаНаценкаРаботы",,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;        
        ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
        Если обЗначениеНеЗаполнено(Заказчик) Тогда
            Заказчик=Контрагент;
            Рез=дкОбработкаРеквизита(ЭтотОбъект,"Заказчик",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;
        #Если Клиент Тогда
        Если ЭтаФорма<>Неопределено Тогда
            дкВывестиЗаголовокСуммаДокумента(ЭтаФорма);
            ВывестиПодвалСкидокРабот(ЭтаФорма);
        КонецЕсли;
        #КонецЕсли
        Возврат Рез;
        
    ИначеЕсли Имя="Карточка" Тогда
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        #Если Клиент Тогда
        Если НЕ обЗначениеНеЗаполнено(Карточка) Тогда
            //карточка выбрана
            Если Карточка.ВидКарточки = Перечисления.ВидыКарточек.ДисконтнаяКарта Тогда
                //Выбрана дисконтная карточка
                Если ТипЗнч(Карточка.Объект) = Тип("СправочникСсылка.Контрагенты") И
                    (НЕ обЗначениеНеЗаполнено(Карточка.Объект)) Тогда
                    //в карточке заполнен контрагент
                    Если ЭтотОбъект.Контрагент <> ЭтотОбъект.Заказчик Тогда
                        Ответ = Вопрос("Плательщик не совпадает с заказчиком. Изменить заказчика?", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да);
                        Если Ответ = КодВозвратаДиалога.Да Тогда
                            Заказчик = Контрагент;
                            ОбработкаРеквизита("Заказчик",,ЭтаФорма);
                        КонецЕсли;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        #КонецЕсли
        Рез=ЭтотОбъект.ОбработкаРеквизита("РассчитатьСкидкиРабот", ТекСтрока, ЭтаФорма, ДопПараметры) И Рез;
        Возврат Рез;
        
    ИначеЕсли Имя="МаркетинговаяПрограмма" Тогда
        Рез=Истина;
        Если НЕ обЗначениеНеЗаполнено(МаркетинговаяПрограмма.СкидкаНаценка) Тогда
            СкидкаНаценка=МаркетинговаяПрограмма.СкидкаНаценка;
            Рез=ОбработкаРеквизита("СкидкаНаценка",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;
        Если НЕ обЗначениеНеЗаполнено(МаркетинговаяПрограмма.СкидкаНаценкаРаботы) Тогда
            СкидкаНаценкаРаботы=МаркетинговаяПрограмма.СкидкаНаценкаРаботы;
            Рез=ОбработкаРеквизита("СкидкаНаценкаРаботы",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;
        Возврат Рез;
        
    ИначеЕсли Имя="СкидкаНаценка" Тогда
        Если НЕ ДополнительныеСвойства.Свойство("НеЗаменятьПустуюСкидку") Тогда
            ИзменилиСкидку=ОбработкаРасчетСкидок.ТекущаяСкидкаНаценка<>СкидкаНаценка;
            ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",ИзменилиСкидку И обЗначениеНеЗаполнено(СкидкаНаценка));
        КонецЕсли;
        Результат = дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
        Возврат Результат
        
    ИначеЕсли Имя="СкидкаНаценкаРаботы" Тогда
        // Смена скидки\наценки влияет на видимость некоторых колонок в табличной части.
        #Если Клиент Тогда
        Если ЭтаФорма<>Неопределено Тогда
            дкУправлениеДоступностьюКолонокСкидок(ЭтаФорма,СкидкаНаценкаРаботы,"Работы");    
        КонецЕсли;
        #КонецЕсли
        Если НЕ ДополнительныеСвойства.Свойство("НеЗаменятьПустуюСкидку") Тогда
            ИзменилиСкидку=ОбработкаРасчетСкидокАвторабот.ТекущаяСкидкаНаценка<>СкидкаНаценкаРаботы;
            ДополнительныеСвойства.Вставить("НеЗаменятьПустуюСкидку",ИзменилиСкидку И обЗначениеНеЗаполнено(СкидкаНаценкаРаботы));
        КонецЕсли;
        Результат = ЭтотОбъект.ОбработкаРеквизита("РассчитатьСкидкиРабот", ТекСтрока, ЭтаФорма, ДопПараметры);
        ДополнительныеСвойства.Удалить("НеЗаменятьПустуюСкидку");
        Возврат Результат;
        
    ИначеЕсли Имя="УстановитьГарантийногоПлательщика" Тогда
        Рез=Истина;
        НовыйКонтрагент=Неопределено;
        НовыйДоговорВзаиморасчетов=Неопределено;
        Если обЗначениеНеЗаполнено(ВидРемонта) ИЛИ ВидРемонта.ТипРемонта=Перечисления.ТипыРемонта.Платный Тогда
            ВидРемонтаГарантия=ВидРемонта.Гарантия.Найти(Автомобиль.Модель,"Модель");
            Если ВидРемонтаГарантия<>Неопределено Тогда
                НовыйКонтрагент=ВидРемонтаГарантия.Контрагент;
                НовыйДоговорВзаиморасчетов=ВидРемонтаГарантия.ДоговорВзаиморасчетов;
            Иначе
                ПодставлятьКонтрагентаИзЗаказчика=Истина;
                Если ДопПараметры<>Неопределено Тогда
                    Если НЕ ДопПараметры.Свойство("ПодставлятьКонтрагентаИзЗаказчика",ПодставлятьКонтрагентаИзЗаказчика) Тогда
                        ПодставлятьКонтрагентаИзЗаказчика=Истина;
                    КонецЕсли;
                КонецЕсли;
                Если ПодставлятьКонтрагентаИзЗаказчика Тогда
                    Если Контрагент<>Заказчик Тогда
                        НовыйКонтрагент=Заказчик;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        Если (НЕ обЗначениеНеЗаполнено(НовыйКонтрагент)) И (Контрагент<>НовыйКонтрагент) ИЛИ
             (НЕ обЗначениеНеЗаполнено(НовыйДоговорВзаиморасчетов)) И (ДоговорВзаиморасчетов<>НовыйДоговорВзаиморасчетов) Тогда
            Если (НЕ обЗначениеНеЗаполнено(НовыйКонтрагент)) И (Контрагент<>НовыйКонтрагент) Тогда
                Контрагент=НовыйКонтрагент;
                Рез=ОбработкаРеквизита("Контрагент",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            КонецЕсли;
            Если (НЕ обЗначениеНеЗаполнено(НовыйДоговорВзаиморасчетов)) И (ДоговорВзаиморасчетов<>НовыйДоговорВзаиморасчетов) Тогда
                ДоговорВзаиморасчетов=НовыйДоговорВзаиморасчетов;
                Рез=ОбработкаРеквизита("ДоговорВзаиморасчетов",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            КонецЕсли;
            #Если Клиент Тогда
            Если ЭтаФорма<>Неопределено Тогда
                Сообщить("Установлен новый плательщик по заказ-наряду: """+СокрЛП(Контрагент)+""" по договору """+СокрЛП(ДоговорВзаиморасчетов)+"""");
            КонецЕсли;
            #КонецЕсли
        КонецЕсли;
        Возврат Рез;
        
    // ОБРАБОТКА РЕКВИЗИТОВ ТАБЛИЧНОЙ ЧАСТИ "ТОВАРЫ"
    ИначеЕсли Имя="Товары.Номенклатура" Тогда
        Рез=дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры);
        Если НЕ обДопустимаяСтрока(ТекСтрока) Тогда Возврат Рез; КонецЕсли; //Это если это был набор и мы удалили эту строку
        //А вот цену мы получим актуальную
        ТекСтрока.Цена=обПолучитьЦену(ТипЦен,ТекСтрока.Номенклатура,ТекущаяДата(),,ВалютаДокумента,КурсДокумента,ТекСтрока.ХарактеристикаНоменклатуры,ТекСтрока.ЕдиницаИзмерения,ПодразделениеКомпании);
        Рез=ОбработкаРеквизита("Товары.Цена",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        Если обЗначениеНеЗаполнено(ТекСтрока.Источник) Тогда
            ТекСтрока.Источник=Перечисления.ЗаказНарядНоменклатураИсточник.ДетальСоСклада;
        КонецЕсли;
        
        Если обЗначениеНеЗаполнено(ТекСтрока.СкладКомпании) Тогда
            ТекСтрока.СкладКомпании = обПраво("ОсновнойСкладКомпании",Права);
        КонецЕсли;
        
        Если ДопПараметры<>Неопределено Тогда
            ЗапрашиватьИсточникТовара=Истина;
            Если ДопПараметры.Свойство("ЗапрашиватьИсточникТовара",ЗапрашиватьИсточникТовара) Тогда
                Если НЕ ЗапрашиватьИсточникТовара Тогда
                    Рез=ОбработкаРеквизита("Товары.Источник",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
                    Возврат Рез;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        #Если Клиент Тогда
        //Выбор источника номенклатуры
        Если ЭтаФорма<>Неопределено Тогда
            ФормаРедактированияСтроки=ПолучитьФорму("ФормаТоварыСтрока",ЭтаФорма);
            ФормаРедактированияСтроки.СтрокаДокумента=ТекСтрока;
            РезОткрытия = ФормаРедактированияСтроки.ОткрытьМодально();
            Если РезОткрытия = Неопределено Тогда
                Рез=ОбработкаРеквизита("Товары.Источник",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
            КонецЕсли;
        Иначе
            Рез=ОбработкаРеквизита("Товары.Источник",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        КонецЕсли;
        #Иначе
        Рез=ОбработкаРеквизита("Товары.Источник",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        #КонецЕсли
        Возврат Рез;
        
    ИначеЕсли Имя="Товары.Источник" Тогда
        // востановим значение цены и ставки НДС если они не указаны
        Если ТекСтрока.Источник<>Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказчика Тогда
            Если ТекСтрока.Цена=0 Тогда
                ТекСтрока.Цена=обПолучитьЦену(ТипЦен,ТекСтрока.Номенклатура,ТекущаяДата(),,ВалютаДокумента,КурсДокумента,ТекСтрока.ХарактеристикаНоменклатуры,ТекСтрока.ЕдиницаИзмерения,ПодразделениеКомпании);
            КонецЕсли;
            
            Если обЗначениеНеЗаполнено(ТекСтрока.СтавкаНДС) Тогда
                // Заполним ставку НДС
                Попытка // а вдруг в документе отсутствует организация
                    СтавкаНДС = ТекСтрока.Номенклатура.СтавкаНДС;
                    Если ЭтотОбъект.ПодразделениеКомпании.ОсвобожденОтНДС ИЛИ ЭтотОбъект.Организация.ОсвобожденОтНДС Тогда
                        СтавкаНДС = Справочники.СтавкиНДС.БезНДС;
                    КонецЕсли;
                Исключение
                КонецПопытки;
                ТекСтрока.СтавкаНДС = СтавкаНДС;
            КонецЕсли;
            // востановим значение скидки
            Если ТекСтрока.ПроцентСкидки = 0 Тогда
                Если ЭтотОбъект.СкидкаНаценка.СпособВычисления = Перечисления.СкидкиСпособВычисления.Абсолютная Тогда
                    ТекСтрока.СуммаСкидки = ОбработкаРасчетСкидок.ТекущееЗначениеСкидки;
                    ЭтотОбъект.ОбработкаРеквизита("Товары.СуммаСкидки", ТекСтрока, ЭтаФорма, ДопПараметры);                
                Иначе
                    ТекСтрока.ПроцентСкидки = ОбработкаРасчетСкидок.ТекущееЗначениеСкидки;
                    ЭтотОбъект.ОбработкаРеквизита("Товары.ПроцентСкидки", ТекСтрока, ЭтаФорма, ДопПараметры);                
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        Если ТекСтрока.Источник=Перечисления.ЗаказНарядНоменклатураИсточник.ДетальСоСклада Тогда
            Рез=ОбработкаРеквизита("Товары.Цена",ТекСтрока,ЭтаФорма,ДопПараметры);
        ИначеЕсли ТекСтрока.Источник=Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказывается Тогда
            Рез=ОбработкаРеквизита("Товары.Цена",ТекСтрока,ЭтаФорма,ДопПараметры);
        ИначеЕсли ТекСтрока.Источник=Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказчика Тогда
            ТекСтрока.Цена=0;
            ТекСтрока.Сумма=0;
            ТекСтрока.ПроцентСкидки=0;
            ТекСтрока.СуммаСкидки=0;
            ТекСтрока.СуммаВсего=0;
            ТекСтрока.СтавкаНДС=Справочники.СтавкиНДС.ПустаяСсылка();
            ТекСтрока.СуммаНДС=0;
            Рез=ОбработкаРеквизита("Товары.Цена",ТекСтрока,ЭтаФорма,ДопПараметры);
            #Если Клиент Тогда
            Если ЭтаФорма<>Неопределено Тогда дкВывестиЗаголовокСуммаДокумента(ЭтаФорма); КонецЕсли;
            #КонецЕсли
        КонецЕсли;
        Возврат Рез;
        
    ИначеЕсли Имя="Товары.ПроцентСкидки" Тогда
        
        Если ТекСтрока.ПроцентСкидки > 0 И ВидРемонта.ТипРемонта = Перечисления.ТипыРемонта.Бесплатный Тогда
            ТекСтрока.ПроцентСкидки = 0;
        КонецЕсли;
        
        Рез=дкОбработкаРеквизита(ЭтотОбъект,"Товары.ПроцентСкидки",ТекСтрока,ЭтаФорма,ДопПараметры);
        Если ТекСтрока.Источник=Перечисления.ЗаказНарядНоменклатураИсточник.ДетальЗаказчика И
             ТекСтрока.ПроцентСкидки<>0 Тогда
             ТекСтрока.ПроцентСкидки=0;
        КонецЕсли;
        Возврат Рез;
        
    ИначеЕсли Имя = "Товары.СкидкаНаТовар" Тогда
        
        Если ВидРемонта.ТипРемонта = Перечисления.ТипыРемонта.Бесплатный Тогда
            ТекСтрока.СкидкаНаТовар       = Справочники.ТипыСкидок.ПустаяСсылка();
        КонецЕсли;
        
        Возврат дкОбработкаРеквизита(ЭтотОбъект, Имя, ТекСтрока, ЭтаФорма, ДопПараметры);
        
    ИначеЕсли Имя = "Товары.ПроцентСкидкиСтроки" Тогда
        
        Если ТекСтрока.ПроцентСкидкиСтроки > 0 И ВидРемонта.ТипРемонта = Перечисления.ТипыРемонта.Бесплатный Тогда
            ТекСтрока.ПроцентСкидкиСтроки = 0;
        КонецЕсли;
        
        Возврат дкОбработкаРеквизита(ЭтотОбъект, Имя, ТекСтрока, ЭтаФорма, ДопПараметры);
        
    // ОБРАБОТКА РЕКВИЗИТОВ ТАБЛИЧНОЙ ЧАСТИ "РАБОТЫ"
    ИначеЕсли Имя="Работы.Работа" Тогда
        Если (Не СкидкаНаценкаРаботы.Пустая()) И (СкидкаНаценкаРаботы.СпособВычисления=Перечисления.СкидкиСпособВычисления.Относительная) Тогда
            ТекСтрока.ПроцентСкидки=ЗначениеСкидкиНаценкиРабот;     
        Иначе    
            ТекСтрока.ПроцентСкидки=0;
        КонецЕсли;
        // Сбросим значения скидки строки, если таковые имеются.
        ТекСтрока.СкидкаНаТовар=Справочники.ТипыСкидок.ПустаяСсылка();
        ТекСтрока.ПроцентСкидкиСтроки=0;
        ТекСтрока.СуммаСкидкиСтроки=0;
    
        //Проверим на повторение строки в таблице
        //Получим из формы последнюю текущую работу
        Если ТекСтрока.Количество=0 Тогда ТекСтрока.Количество=1; КонецЕсли;
        //Перерассчитаем цену текущей работы
        ОбработкаРеквизита("РасчетЦеныРаботы",ТекСтрока,ЭтаФорма,ДопПараметры);
        //Заполнение ставок налогов
        Если ЭтотОбъект.ПодразделениеКомпании.ОсвобожденОтНДС ИЛИ ЭтотОбъект.Организация.ОсвобожденОтНДС Тогда
            ТекСтрока.СтавкаНДС=Справочники.СтавкиНДС.БезНДС;
        Иначе
            ТекСтрока.СтавкаНДС=ТекСтрока.Работа.Номенклатура.СтавкаНДС;
        КонецЕсли;
        //Расчет сумм по строке
        Возврат ОбработкаРеквизита("Работы.Цена",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.Количество" Тогда
        Возврат ОбработкаРеквизита("Работы.Коэффициент",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.Нормочас" Тогда
        ТекСтрока.Цена=обПересчет(ТекСтрока.Нормочас.Цена,ТекСтрока.Нормочас.Валюта,ТекущаяДата(),ВалютаДокумента,КурсДокумента);
        Возврат ОбработкаРеквизита("Работы.Цена",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.Коэффициент" Тогда
        Возврат ОбработкаРеквизита("Работы.Цена",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.Цена" Тогда
        ТекСтрока.Сумма=ТекСтрока.Цена*ТекСтрока.Количество*ТекСтрока.Коэффициент;
        Возврат ОбработкаРеквизита("РассчитатьСкидкиРабот",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.Сумма" Тогда
        ТекСтрока.Цена=?(ТекСтрока.Количество*ТекСтрока.Коэффициент=0,0,ТекСтрока.Сумма/(ТекСтрока.Количество*ТекСтрока.Коэффициент));
        Возврат ОбработкаРеквизита("РассчитатьСкидкиРабот",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.ПроцентСкидки" Тогда
        Рез=Истина;
        // Скидка не может быть выше 100%
        Если ТекСтрока.ПроцентСкидки>100 Тогда
            ТекСтрока.ПроцентСкидки = 100;    
        КонецЕсли;
        Если НЕ обЗначениеНеЗаполнено(ТекСтрока.СкидкаНаТовар) И ТекСтрока.СкидкаНаТовар.ФлагВытеснения Тогда
            ТекСтрока.ПроцентСкидки = 0;
        КонецЕсли;
            
        Если ТекСтрока.ПроцентСкидки > 0 И ВидРемонта.ТипРемонта = Перечисления.ТипыРемонта.Бесплатный Тогда
            ТекСтрока.ПроцентСкидки = 0;
        КонецЕсли;
            
        ТекСтрока_СуммаБезСкидки=дкПолучитьСуммуСтрокиБезСкидки(ЭтотОбъект,ТекСтрока);
        СуммаСкидки=Окр(ТекСтрока.ПроцентСкидки*ТекСтрока_СуммаБезСкидки/100,2);
        Если СуммаСкидки<>ТекСтрока.СуммаСкидки Тогда // Сумма скидки изменилась
            ТекСтрока.СуммаСкидки=СуммаСкидки;
        КонецЕсли;
        Если ТипЗнч(ДопПараметры)<>Тип("Структура") Тогда
            ДопПараметры = Новый Структура;
        КонецЕсли;
        ДопПараметры.Вставить("ПересчитыватьПроцентСкидки",Ложь);
        Рез=ОбработкаРеквизита("Работы.СуммаСкидки",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
        Возврат Рез;
        
    ИначеЕсли Имя="Работы.СуммаСкидки" Тогда
        Попытка    // Определим необходимость обратного расчета процента скидки.
            ПересчитыватьПроцентСкидки=ДопПараметры.ПересчитыватьПроцентСкидки;
        Исключение
            ПересчитыватьПроцентСкидки=Истина;    
        КонецПопытки;
        Если НЕ обЗначениеНеЗаполнено(ТекСтрока.СкидкаНаТовар) И ТекСтрока.СкидкаНаТовар.ФлагВытеснения Тогда
            ТекСтрока.СуммаСкидки = 0;
        КонецЕсли;
        Если ПересчитыватьПроцентСкидки Тогда
            ТекСтрока_СуммаБезСкидки=дкПолучитьСуммуСтрокиБезСкидки(ЭтотОбъект,ТекСтрока);
            ТекСтрока.ПроцентСкидки=?(ТекСтрока_СуммаБезСкидки=0,0,Окр(ТекСтрока.СуммаСкидки*100/ТекСтрока_СуммаБезСкидки,2));
        КонецЕсли;
        // Выполним расчет итоговой суммы скидки на документ.
        СуммаСкидкиНаценкиРабот=Работы.Итог("СуммаСкидки");
        СуммаСкидкиНаценкиРабот=СуммаСкидкиНаценкиРабот+Работы.Итог("СуммаСкидкиСтроки");
        // Ничего делать не будем - весь расчет от НДС зависит (включено или нет)
        Возврат ОбработкаРеквизита("Работы.СтавкаНДС",ТекСтрока,ЭтаФорма,ДопПараметры);
        
    ИначеЕсли Имя="Работы.СкидкаНаТовар" Тогда
        ОбработкаРасчетСкидокАвторабот.ПодобратьСтрочнуюСкидку(ЭтотОбъект,ТекСтрока);
        ТекСтрока.СкидкаНаТовар       = ОбработкаРасчетСкидокАвторабот.ТекущаяСкидкаСтроки;
        ТекСтрока.ПроцентСкидкиСтроки = ОбработкаРасчетСкидокАвторабот.ТекущийПроцентСкидкиСтроки;
        ТекСтрока.СуммаСкидкиСтроки   = ОбработкаРасчетСкидокАвторабот.ТекущаяСуммаСкидкиСтроки;
        
        Если ЗначениеЗаполнено(ТекСтрока.СкидкаНаТовар) И ВидРемонта.ТипРемонта = Перечисления.ТипыРемонта.Бесплатный Тогда
            ТекСтрока.СкидкаНаТовар       = Справочники.ТипыСкидок.ПустаяСсылка();
            ТекСтрока.ПроцентСкидкиСтроки = 0;
            ТекСтрока.СуммаСкидкиСтроки   = 0;
            СуммаСкидкиНаценкиРабот       = 0;
        Иначе
            // Пересчитываем общую сумму скидок документа.
            СуммаИтого              = Работы.Итог("СуммаСкидки");
            СуммаИтого              = СуммаИтого+Работы.Итог("СуммаСкидкиСтроки");
            СуммаСкидкиНаценкиРабот = СуммаИтого;
        КонецЕсли;
        
        Возврат ЭтотОбъект.ОбработкаРеквизита("Работы.СтавкаНДС",ТекСтрока,ЭтаФорма,ДопПараметры);            
        
    ИначеЕсли Имя="Работы.ПроцентСкидкиСтроки" Тогда
        // Если скидка на работу (строки) не выбрана, а пользователь пытается установить значение процента,
        // то не дадим ему это сделать.
        Если ТекСтрока.СкидкаНаТовар.Пустая() Тогда
            ТекСтрока.ПроцентСкидкиСтроки = 0;
        КонецЕсли;
        // Скидка не может быть выше 100%
        Если ТекСтрока.ПроцентСкидкиСтроки>100 Тогда
            ТекСтрока.ПроцентСкидкиСтроки = 100;
        КонецЕсли;
        
        Если ТекСтрока.ПроцентСкидкиСтроки > 0 И ВидРемонта.ТипРемонта = Перечисления.ТипыРемонта.Бесплатный Тогда
            ТекСтрока.ПроцентСкидкиСтроки = 0;
        КонецЕсли;
        
        ТекСтрока_СуммаБезСкидки=дкПолучитьСуммуСтрокиБезСкидки(ЭтотОбъект,ТекСтрока);
        ТекСтрока.СуммаСкидкиСтроки=Окр(ТекСтрока_СуммаБезСкидки*ТекСтрока.ПроцентСкидкиСтроки/100,2);
        // Запрещаем обратный пересчет процента.
        Если ТипЗнч(ДопПараметры)<>Тип("Структура") Тогда
            ДопПараметры = Новый Структура;
        КонецЕсли;
        ДопПараметры.Вставить("ПересчитыватьПроцентСкидкиСтроки",Ложь);
        Возврат ЭтотОбъект.ОбработкаРеквизита("Работы.СуммаСкидкиСтроки",ТекСтрока,ЭтаФорма,ДопПа
21 example221
 
24.01.20
11:13
(19) в своей форме уже вот так начал но чет не заполняет есть подозрение на разные типы щас проверю
Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    НормативыПроизводителя.Норматив
            |ИЗ
            |    РегистрСведений.НормативыПроизводителя КАК НормативыПроизводителя
            |ГДЕ
            |    НормативыПроизводителя.Авторабота = &Авторабота";
        
        Запрос.УстановитьПараметр("Авторабота", Элемент.Значение);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ЭлементыФормы.АвтоРабота.ТекущаяСтрока.Норматив = ВыборкаДетальныеЗаписи.Норматив;
        КонецЦикла;
22 Масянька
 
24.01.20
11:14
(20) Найди свой док и реквизит и поправь.
Там уже кто-то лазил :)
23 Fish
 
24.01.20
11:15
(20) "это что то очень страшное" - Я же говорил, что в Альфе-Авто через зад сделано :))
24 Масянька
 
24.01.20
11:19
+(22) Посмотри на ПерерасчетЦенАвторабот( (там ремки есть).
25 example221
 
24.01.20
11:27
(22) (23) (19) Пасибо всем,за навождения понял)вроде бы)
26 example221
 
24.01.20
11:29
(23) Тут все мне кажется так сделано,либо я уж очень анскилл еще)
Программист всегда исправляет последнюю ошибку.