Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Ошибка в расширении

Ошибка в расширении
Я
   Lucifer09
 
08.04.20 - 21:57
Добрый день, дорогие форумчане. Нужна Ваша помощь.
разрабатываю расширение для УНФ 1.6 автоматического создания и проведения СФ вместе с расходной накладной (РТУ).
Не могу дать ума в чем ошибка.
Привязал процедуру к кнопке провести и закрыть выполняется после:
&НаСервере
Процедура СА_АФСФ_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
    Если Не ЗначениеЗаполнено(Объект.Ссылка)
        Или Не Объект.Проведен Тогда
       Возврат;
    
    КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РасходнаяНакладная.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура
        |        ПО РасходнаяНакладная.Ссылка = СчетФактура.ДокументыОснования.Ссылка
        |ГДЕ
        |    РасходнаяНакладная.Проведен = &Проведен
        |    И СчетФактура.Ссылка ЕСТЬ NULL
        |    И РасходнаяНакладная.Ссылка = &Ссылка";
            
    
    Запрос.УстановитьПараметр("Ссылка", объект.Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.пустой() Тогда
    
        Возврат;
    
    КонецЕсли;
    
    СФ = Документы.СчетФактура.СоздатьДокумент();
    ДанныеСчетаФактуры = Новый Структура;
    ДанныеСчетаФактуры.Вставить("ДокументОснование", Объект.Ссылка);
    ДанныеСчетаФактуры.Вставить("Организация",       Объект.Организация);
    СФ.Заполнить(ДанныеСчетаФактуры);
    СФ.Записать(РежимЗаписиДокумента.Проведение);
    
        
КонецПроцедуры
   RomanYS
 
1 - 08.04.20 - 22:12
В чем проблема то? Какая ошибка? Код выполняется?
   Lucifer09
 
2 - 08.04.20 - 22:17
Результата нет - СФ не создается и не проводится на основании РТУ
   RomanYS
 
3 - 08.04.20 - 22:19
(2) Значит ошибки тоже нет. Не умеешь включать отладку - добавь отладочное сообщение или запись в ЖР, чтобы убедиться что код выполняется
   hhhh
 
4 - 08.04.20 - 23:12
(0) вообще-то правильно писать не Объект, а ТекущийОбъект
   AlvlSpb
 
5 - 08.04.20 - 23:21
(4) Это форма документа - правильно Объект
   AlvlSpb
 
6 - 08.04.20 - 23:24
(0) 1. У тебя ВСЕГДА результат не будет пустым из-за левого соединения, надо внутреннее. А правильней - Запрос к критерию отбора Связанные документы
2. В структуру включи Дата = ТекущаяДата()
   RomanYS
 
7 - 08.04.20 - 23:25
(4)(5) Правильно и так и так.
Объект - основной реквизит формы,
ТекущийОбъект - ДокументОбъект параметр функции.

В данном случае разницы наверное нет.
   RomanYS
 
8 - 08.04.20 - 23:34
(0) Код вероятно не выполняется. Запрос должен падать с ошибкой: параметр "Проведен" не  задан.
   Lucifer09
 
9 - 08.04.20 - 23:46
Попробовал иначе все равно без результатно.
&НаСервере
Процедура СА_АФСФ_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
    
    Если Не Объект.Проведен Тогда
      Возврат;
   КонецЕсли;

   Запрос = Новый Запрос;
   Запрос.Текст = 
     "ВЫБРАТЬ
     |    РасходнаяНакладная.Ссылка КАК Ссылка,
     |    РасходнаяНакладная.Дата КАК Дата,
     |    СчетФактура.ДокументыОснования.(
     |        ДокументОснование КАК ДокументОснование
     |    ) КАК ДокументыОснования
     |ИЗ
     |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
     |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура
     |        ПО (СчетФактура.ДокументыОснования.ДокументОснование = РасходнаяНакладная.Ссылка)
     |ГДЕ
     |    РасходнаяНакладная.Проведен = &Проведен
     |    И СчетФактура.Ссылка ЕСТЬ NULL
     |    И РасходнаяНакладная.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   Если РезультатЗапроса.пустой() Тогда
       
        ДанныеСчетаФактуры = Новый Структура;
        ДанныеСчетаФактуры.Вставить("ДокументОснование", Объект.Ссылка);
        ДанныеСчетаФактуры.Вставить("Организация", Объект.Организация);
        ДанныеСчетаФактуры.Вставить("Дата", Объект.Дата);
        СФ = Документы.СчетФактура.СоздатьДокумент();
        СФ.Заполнить(ДанныеСчетаФактуры);
        СФ.Записать(РежимЗаписиДокумента.Проведение);
   КонецЕсли;
   
КонецПроцедуры
   AlvlSpb
 
10 - 08.04.20 - 23:47
(9) Решение в (8)
   AlvlSpb
 
11 - 08.04.20 - 23:48
Сделай окончание запроса
     | ГДЕ
     |    РасходнаяНакладная.Проведен 
     |    И СчетФактура.Ссылка ЕСТЬ NULL
     |    И РасходнаяНакладная.Ссылка = &Ссылка";
   Lucifer09
 
12 - 08.04.20 - 23:54
(11) Спасибо, это поправил.
   Lucifer09
 
13 - 08.04.20 - 23:55
(8) В том то и проблема что отладка ничего не выдает
   Ненавижу 1С
 
14 - 09.04.20 - 08:53
ОФФТОП: мне кажется неправильно выбран уровень абстракции, не надо привязываться к UI, надо это делать в событии объекта
   Lucifer09
 
15 - 09.04.20 - 09:21
(14) Нашел только такую реализацию задачи. Вроде как вопрос давний но на просторах интернета нет решений рабочих.
   RomanYS
 
16 - 09.04.20 - 09:34
(13) Так с этого и надо начинать. Какая разница какой код, если он не выполняется.
Расширение активно?
База перезапускалась?
Основное (расширяемое) событие вызывается?
   Ray Zexter
 
17 - 09.04.20 - 09:57
Отладчик доходит до момента СФ = Документы.СчетФактура.СоздатьДокумент(); или спотыкается где то ранее?
   Sneer
 
18 - 09.04.20 - 10:09
(2) Может безопасный режим не отключен?
   mzelensky
 
19 - 09.04.20 - 10:55
(0)
 Вот тут "Процедура СА_АФСФ_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)" входящий параметр "ТекущийОбъект"

А вот тут

"Если Не ЗначениеЗаполнено(Объект.Ссылка)
        Или Не Объект.Проведен Тогда
       Возврат;
    
    КонецЕсли;"

Ты проверяешь "Объект.Ссылка"

Это точно так и надо?
   Lucifer09
 
20 - 09.04.20 - 11:17
(16) Расширение активно, база перезапускалась.
Отладка не выдает ничего.
Скорее всего событие вообще не запускается, а причина не понятна.

По убирал все лишнее. Пришел к выводу что мне условия проверки статуса проведения документа не нужны так как я после проведения выполняю процедуру.
Но все равно что-то не могу понять что я не учел.

&НаСервере
Процедура ПСФ_ПровестиИЗакрытьПослеНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    
   Запрос = Новый Запрос;
   Запрос.Текст = 
     "ВЫБРАТЬ
     |    РасходнаяНакладная.Ссылка КАК Ссылка,
     |    РасходнаяНакладная.Дата КАК Дата
     |ИЗ
     |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
     |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура
     |        ПО (СчетФактура.ДокументыОснования.Ссылка = РасходнаяНакладная.Ссылка)
     |ГДЕ
     |    РасходнаяНакладная.Проведен
     |    И СчетФактура.Ссылка ЕСТЬ NULL
     |    И РасходнаяНакладная.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
  
        ДанныеСчетаФактуры = Новый Структура;
    ДанныеСчетаФактуры.Вставить("ДокументОснование", ТекущийОбъект.Ссылка);
        ДанныеСчетаФактуры.Вставить("Организация", ТекущийОбъект.Организация);
    ДанныеСчетаФактуры.Вставить("Дата", ТекущийОбъект.Дата);
        СФ = Документы.СчетФактура.СоздатьДокумент();
        СФ.Заполнить(ДанныеСчетаФактуры);
        СФ.Записать(РежимЗаписиДокумента.Проведение);
      
КонецПроцедуры
   Ray Zexter
 
21 - 09.04.20 - 11:39
Отладчик в расширение в принципе заходит?
   RomanYS
 
22 - 09.04.20 - 11:44
(20) Выкинь весь код пока. Сделай одну строку
Сообщить("Расширение запускается");
Пока не увидишь сообщение про свой код вообще забудь.

Основное событие формы (которое ты расширяешь) запускается?
Может у тебя, например, кнокпа "Записать" обрабатывается кодом, а не вызывает стандартную команду формы со стандартными обработчиками
   Lucifer09
 
23 - 09.04.20 - 12:25
(22) Спасибо за дельный совет.
Выяснил таким образом выяснил что код исполняется только на клиенте.
   Sneer
 
24 - 09.04.20 - 17:42
(23) Ты галку "Безопасный режим" снял?
   runoff_runoff
 
25 - 09.04.20 - 17:44
отладка на сервере не включена
   Lucifer09
 
26 - 10.04.20 - 09:39
(25) База файловая


Список тем форума
Рекламное место пустует  Рекламное место пустует
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.