|
Автозаполнение колонок при изменении одной | ☑ | ||
---|---|---|---|---|
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) Тут все мне кажется так сделано,либо я уж очень анскилл еще)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |