Имя: Пароль:
1C
 
точка останова не срабатывает на функции
0 Айрат_116
 
12.05.20
14:39
Здравствуйте, объясните пожалуйста как работает эта процедура на кнопку записать у документа "Списания материалов"

Мне не понятно почему точка останова не срабатывает на функции "ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации();" Когда я нажимаю "Продолжить"

Данные получаются от туда (ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации)

&НаКлиенте
Процедура СпецоснасткаЗаполнитьПоОстаткам(Команда)

    Если НЕ ЗначениеЗаполнено(Объект.ПодразделениеОрганизации) Тогда
        ПоказатьПредупреждение( , НСтр("ru='Не указано подразделение организации!
            |Заполнение невозможно!'"));
        Возврат;
    КонецЕсли;

    Если НЕ ПроверитьВозможностьЗаполненияТабличнойЧасти() Тогда
        Возврат;
    КонецЕсли;

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

КонецПроцедуры
1 Fedor-1971
 
12.05.20
15:00
(0) точно на Записать или таки Заполнить?
несколькими словами:
Если не заполнена ТЧ Спецоснастка, то вызываем ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации();
Иначе будет задан вопрос "... Продолжить?" (Да/Нет),

как я понимаю, после ответа Да опять попадёшь в ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации();

Если отладчик остановился Ф11 зайдёт в функцию, Ф10 нет
Если серверный вариант работы с 1С и не включена отладка на сервере то входа в функцию НаСервере не будет
2 Айрат_116
 
12.05.20
15:13
Как я проверяю: Зашел в документ (Пустая табл часть)
1) Нажимаю заполнить по остаткам (попадаю сюда " ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации();")
2) Удаляю пару строк и опять нажимаю заполнить (попадаю уже на вопрос: нажимаю продолжить)
3) Он сразу же заполняет заного таблицу, не попадая в ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации()
3 Fedor-1971
 
12.05.20
15:25
(2) поставь точку останова внутри ЗаполнитьСпецоснасткуПоОстаткамВЭксплуатации();

После выдачи вопроса, код выполняется дальше, т.е. просто выходит из процедуры, ответ обработается в другой процедуре (из оповещения) - это функционал асинхронного варианта работы системы

Просто нужно один раз пройтись по граблям, дальше станет легче
4 Айрат_116
 
12.05.20
15:27
Всё увидел что попадает туда.

Но теперь не понятно почему в мою процедуру не попадает)

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

2) Действия команды

&НаКлиенте
Процедура ОбработчикПоОстаткам(Команда)
    
    Если НЕ ПроверитьВозможностьЗаполненияТабличнойЧасти() Тогда
        Возврат;
    КонецЕсли;

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

КонецПроцедуры

3)

&НаСервере
Процедура тн_ЗаполнитьСпецодеждуПоОстаткамВЭксплуатации(СИстекшимСрокомПолезногоИспользования = Ложь)

    Объект.Спецодежда.Очистить();

    тн_СтандартныеПодсистемыВызовСервера.тн__ЗаполнитьСпецодеждуПоОстаткамВЭксплуатации(
        Объект,
        Объект.Спецодежда,
        ,
        СИстекшимСрокомПолезногоИспользования);

КонецПроцедуры

Первый раз когда нажимаю всё правильно работает
Но если чуть поменять табличную часть и опять нажать на эту кнопку, то она начинает заполнять как с типовой
Вроде все процедуры вызываются свои
5 dezss
 
12.05.20
15:31
Смотри что вызывается в процедуре "ВопросПриЗаполненииСпецодеждыПоОстаткамЗавершение".
Там, скорей всего, нужно заменить типовой вызов на твой.
6 Айрат_116
 
12.05.20
15:37
(5) Да) Нашел, Спасибо большое=)
7 Fedor-1971
 
12.05.20
15:42
(4) в названия добавь префикс нов_.... тогда точно ничего не попутаешь

ВопросПриЗаполненииСпецодеждыПоОстаткамЗавершение(... - вот тут посмотри что творится, скорее всего, вызывается стандартная процедура
8 Айрат_116
 
12.05.20
15:46
(7) Я префикс ставил (тн)
Да в этом дело было
9 Айрат_116
 
12.05.20
15:53
(7) Спасибо)
2 + 2 = 3.9999999999999999999999999999999...