Имя: Пароль:
1C
1С v8
БП 3.0 Расширение документа Путевой лист. Не могу убрать проверку заполнения расстояния
0 tgu82
 
17.05.21
11:39
https://курсы-по-1с.рф/бесплатное/2020-04-10-izmenit-svoystvo-proverka-zapolneniya/
Вот даже ссылка и делал вроде как здесь.
&После("ОбработкаПроверкиЗаполнения")
Процедура ПЛ_спецОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    ИндексПоляПоставщик = ПроверяемыеРеквизиты.Найти("Маршрут.Расстояние");
    Если ИндексПоляПоставщик <> Неопределено Тогда
        ПроверяемыеРеквизиты.Удалить(ИндексПоляПоставщик);
    КонецЕсли;
КонецПроцедуры
Но ошибка при открытии в 1С документа "путевой лист":
{ПЛ_ФЗспец
"Ожидается определение Процедуры/Функции"
Документ.ПутевойЛист.Форма.ФормаДокумента.Форма(57,12)}
1 tgu82
 
17.05.21
12:50
Я так понимаю что мне надо же еще многострочную часть подвязывать.
Но пусть даже просто реквизит шапки будет.

Что я не так делаю ???
2 tgu82
 
17.05.21
12:54
Где требуется определение Процедуры
Вот же оно
Процедура ПЛ_спецОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
3 bedrikd
 
17.05.21
13:26
Режим совместимости расширения какой стоит?
4 tgu82
 
17.05.21
13:27
(3) Ошшибку я убрал.
А вот с проверкой реквизитов - вот тут ерунда.
5 bedrikd
 
17.05.21
13:34
А что не так?
6 tgu82
 
17.05.21
13:36
(5) Да ничего не происходит. По-прежнему требуется заполнить "Расстояние" в тч
7 tgu82
 
17.05.21
13:38
(6)+ А надо чтоб не требовало
8 zuza
 
17.05.21
13:48
Покажите код расширяемой процедуры
9 tgu82
 
17.05.21
13:52
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    МассивНепроверяемыхРеквизитов = Новый Массив;
    
    ВидДокументаТопливнаяКарта = Перечисления.ВидыДокументовПриобретенияГСМ.ТопливнаяКарта;
    ПлательщикНДС = УчетнаяПолитика.ПлательщикНДС(Организация, Дата);
    
    СтавкиБезНДС = Новый Массив;
    СтавкиБезНДС.Добавить(Перечисления.СтавкиНДС.БезНДС);
    СтавкиБезНДС.Добавить(Перечисления.СтавкиНДС.НДС0);
    
    Для Каждого ТекущаяСтрока Из Топливо Цикл
        
        Если ТекущаяСтрока.ВидВходящегоДокумента = ВидДокументаТопливнаяКарта Тогда
            Продолжить;
        КонецЕсли;
        
        Если ТекущаяСтрока.Сумма = 0 Тогда
            СообщитьОЗаполненииОбязательногоРеквизита("Сумма", ТекущаяСтрока.НомерСтроки, "Топливо", Отказ);
        КонецЕсли;
        
        Если ПлательщикНДС И СуммаВключаетНДС И Не ЗначениеЗаполнено(ТекущаяСтрока.СтавкаНДС) Тогда
            СообщитьОЗаполненииОбязательногоРеквизита("СтавкаНДС", ТекущаяСтрока.НомерСтроки, "Топливо", Отказ);
        КонецЕсли;
        
        Если ПлательщикНДС И СуммаВключаетНДС
            И ТекущаяСтрока.СуммаНДС = 0
            И СтавкиБезНДС.Найти(ТекущаяСтрока.СтавкаНДС) = Неопределено Тогда
            
            СообщитьОЗаполненииОбязательногоРеквизита("СуммаНДС", ТекущаяСтрока.НомерСтроки, "Топливо", Отказ);
        КонецЕсли;
        
    КонецЦикла;
    
    Номенклатура = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТранспортноеСредство, "Топливо");
    Если Не ЗначениеЗаполнено(Номенклатура) Тогда
        ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не заполнено поле ""Топливо"" в транспортном средстве.'"),,
            "ТранспортноеСредство", "Объект", Отказ);
    КонецЕсли;
    
    Если Документы.ПутевойЛист.ВодительскоеУдостоверениеФизлица(ФизЛицо, Дата) = Неопределено Тогда
        ТекстОшибки = НСтр("ru = 'Не заполнено водительское удостоверение сотрудника. См. Справочники - Физическое лицо - Все Документы'");
        ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ФизЛицо, "ФизЛицо", "Объект", Отказ);
    КонецЕсли;
    
    КоличествоСтрок = Маршрут.Количество();
    Для Каждого ТекущаяСтрока Из Маршрут Цикл
        
        НомерСтроки = Маршрут.Индекс(ТекущаяСтрока);
        
        ПроверятьПересечениеПериодов = Истина;
        // Проверка корректности дат в текущей строке
        Если ТекущаяСтрока.ДатаОтправления > ТекущаяСтрока.ДатаВозвращения Тогда
            
            ШаблонПоляОшибки = ?(День(ТекущаяСтрока.ДатаОтправления) = День(ТекущаяСтрока.ДатаВозвращения),
                "Маршрут[%1].ВозвращениеВремя", "Маршрут[%1].ВозвращениеДата");
            ТекстОшибки = НСтр("ru = 'Дата возвращения из рейса не может быть меньше даты отправления.'");
            
            ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, СтрШаблон(ШаблонПоляОшибки, НомерСтроки), "Объект", Отказ);
            ПроверятьПересечениеПериодов = Ложь;
            
        КонецЕсли;
        
        ПроверятьПересечениеПоказаний = Истина;
        // Проверка корректности показаний одометра в текущей строке
        Если ТекущаяСтрока.ПоказаниеОдометраДо > ТекущаяСтрока.ПоказаниеОдометраПосле Тогда
            
            ШаблонПоляОшибки = "Маршрут[%1].ПоказаниеОдометраПосле";
            ТекстОшибки = НСтр("ru = 'Показание одометра при возращении из рейса не может быть меньше показаний одометра при выезде.'");
            
            ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, СтрШаблон(ШаблонПоляОшибки, НомерСтроки), "Объект", Отказ);
            ПроверятьПересечениеПоказаний = Ложь;
            
        КонецЕсли;
        
        Если Не ПроверятьПересечениеПоказаний И Не ПроверятьПересечениеПериодов Тогда
            Продолжить;
        КонецЕсли;
        
        Для ИндексСледующейСтроки = НомерСтроки + 1 По КоличествоСтрок - 1 Цикл
            
            СтрокаСравнения = Маршрут[ИндексСледующейСтроки];
            
            // Проверка пересечения показаний одометра
            
            Если ПроверятьПересечениеПериодов И ТекущаяСтрока.ПоказаниеОдометраПосле > СтрокаСравнения.ПоказаниеОдометраДо Тогда
                
                ШаблонПоляОшибки = "Маршрут[%1].ПоказаниеОдометраДо";
                
                Если ТекущаяСтрока.ПоказаниеОдометраДо >= СтрокаСравнения.ПоказаниеОдометраПосле Тогда
                    ТекстОшибки = НСтр("ru = 'Показания одометра в строке %1 должны быть больше показаний в строке %2.'");
                Иначе
                    ТекстОшибки = НСтр("ru = 'Показания одометра в строке %1 пересекаются с данными строки %2.'");
                КонецЕсли;
                
                ОбщегоНазначения.СообщитьПользователю(СтрШаблон(ТекстОшибки, ИндексСледующейСтроки + 1, НомерСтроки + 1),,
                    СтрШаблон(ШаблонПоляОшибки, ИндексСледующейСтроки), "Объект", Отказ);
                
            КонецЕсли;
            
            // Проверка даты отправления и возвращения
            
            Если ПроверятьПересечениеПоказаний И ТекущаяСтрока.ДатаВозвращения > СтрокаСравнения.ДатаОтправления Тогда
                
                ШаблонПоляОшибки = ?(НачалоДня(ТекущаяСтрока.ДатаОтправления) = НачалоДня(СтрокаСравнения.ДатаОтправления),
                    "Маршрут[%1].ОтправлениеВремя", "Маршрут[%1].ОтправлениеДата");
                
                Если ТекущаяСтрока.ДатаОтправления >= СтрокаСравнения.ДатаВозвращения Тогда
                    ТекстОшибки = НСтр("ru = 'Отсортируйте строки по периоду. Сейчас период в строке %1 меньше, чем в строке %2.'");
                Иначе
                    ТекстОшибки = НСтр("ru = 'Период рейса в строке %1 пересекается с данными строки %2.'");
                КонецЕсли;
                
                ОбщегоНазначения.СообщитьПользователю(СтрШаблон(ТекстОшибки, ИндексСледующейСтроки + 1, НомерСтроки + 1),,
                    СтрШаблон(ШаблонПоляОшибки, ИндексСледующейСтроки), "Объект", Отказ);
                
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;
    
    РеквизитыЗаСсылками = Документы.ПутевойЛист.РеквизитыЗаСсылками();
    СчетаУчетаВДокументах.ПроверитьЗаполнение(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, РеквизитыЗаСсылками);
    ПроверкаЗаполненияДокументов.ПроверитьРеквизитыЗаСсылками(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, РеквизитыЗаСсылками);
    
КонецПроцедуры
10 bedrikd
 
17.05.21
14:01
А в отладчике в расширении попадаешь в процедуру ПЛ_спецОбработкаПроверкиЗаполнения ?
11 tgu82
 
17.05.21
14:07
(10) Попадаю. В самом конце.
12 tgu82
 
17.05.21
14:08
(11) ТАм видимо надо "вместо" писать или как-то еще, получается что уже поздно что-то отменять в смысле проверок когда дошел до конца процедуры. Там уже все проверено получается
13 bedrikd
 
17.05.21
14:13
а в строчку  ПроверяемыеРеквизиты.Удалить(ИндексПоляПоставщик); заходит?
14 tgu82
 
17.05.21
14:23
(13) Заходит
ПроверяемыеРеквизиты это массив все норм
но удалиться Расстояние оттуда не удалилось
15 bedrikd
 
17.05.21
14:25
надо его оттуда удалить и тогда система не будет Расстояние проверять
16 Масянька
 
17.05.21
14:28
(14) А здесь Документы.ПутевойЛист.РеквизитыЗаСсылками(); что?
17 tgu82
 
17.05.21
14:47
(15,16) Мозги затупились. Хотел удалить Расстояние а по факту удалял физ. лицо (водителя) из проверки.
Все получилось хотя мне надо чтобы он не проверял Расстояние только если в строке есть моточасы. Но с другой стороны сскорее всего у того у кого моточасы вариант что еще надо расстояние вряд ли возможен. Так что более менее все получилось в упрощенном режиме
18 tgu82
 
17.05.21
14:53
Всем большое спасибо!!!