|   |   | 
| 
 | Ошибка в расширении | ☑ | ||
|---|---|---|---|---|
| 0
    
        Lucifer09 08.04.20✎ 21:57 | 
        Добрый день, дорогие форумчане. Нужна Ваша помощь.
 разрабатываю расширение для УНФ 1.6 автоматического создания и проведения СФ вместе с расходной накладной (РТУ). Не могу дать ума в чем ошибка. Привязал процедуру к кнопке провести и закрыть выполняется после: &НаСервере Процедура СА_АФСФ_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи) Если Не ЗначениеЗаполнено(Объект.Ссылка) Или Не Объект.Проведен Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладная.Ссылка КАК Ссылка |ИЗ | Документ.РасходнаяНакладная КАК РасходнаяНакладная | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура | ПО РасходнаяНакладная.Ссылка = СчетФактура.ДокументыОснования.Ссылка |ГДЕ | РасходнаяНакладная.Проведен = &Проведен | И СчетФактура.Ссылка ЕСТЬ NULL | И РасходнаяНакладная.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.пустой() Тогда Возврат; КонецЕсли; СФ = Документы.СчетФактура.СоздатьДокумент(); ДанныеСчетаФактуры = Новый Структура; ДанныеСчетаФактуры.Вставить("ДокументОснование", Объект.Ссылка); ДанныеСчетаФактуры.Вставить("Организация", Объект.Организация); СФ.Заполнить(ДанныеСчетаФактуры); СФ.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры | |||
| 1
    
        RomanYS 08.04.20✎ 22:12 | 
        В чем проблема то? Какая ошибка? Код выполняется?     | |||
| 2
    
        Lucifer09 08.04.20✎ 22:17 | 
        Результата нет - СФ не создается и не проводится на основании РТУ     | |||
| 3
    
        RomanYS 08.04.20✎ 22:19 | 
        (2) Значит ошибки тоже нет. Не умеешь включать отладку - добавь отладочное сообщение или запись в ЖР, чтобы убедиться что код выполняется     | |||
| 4
    
        hhhh 08.04.20✎ 23:12 | 
        (0) вообще-то правильно писать не Объект, а ТекущийОбъект     | |||
| 5
    
        AlvlSpb naïve 08.04.20✎ 23:21 | 
        (4) Это форма документа - правильно Объект     | |||
| 6
    
        AlvlSpb naïve 08.04.20✎ 23:24 | 
        (0) 1. У тебя ВСЕГДА результат не будет пустым из-за левого соединения, надо внутреннее. А правильней - Запрос к критерию отбора Связанные документы
 2. В структуру включи Дата = ТекущаяДата() | |||
| 7
    
        RomanYS 08.04.20✎ 23:25 | 
        (4)(5) Правильно и так и так. 
 Объект - основной реквизит формы, ТекущийОбъект - ДокументОбъект параметр функции. В данном случае разницы наверное нет. | |||
| 8
    
        RomanYS 08.04.20✎ 23:34 | 
        (0) Код вероятно не выполняется. Запрос должен падать с ошибкой: параметр "Проведен" не  задан.     | |||
| 9
    
        Lucifer09 08.04.20✎ 23:46 | 
        Попробовал иначе все равно без результатно.
 &НаСервере Процедура СА_АФСФ_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи) Если Не Объект.Проведен Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладная.Ссылка КАК Ссылка, | РасходнаяНакладная.Дата КАК Дата, | СчетФактура.ДокументыОснования.( | ДокументОснование КАК ДокументОснование | ) КАК ДокументыОснования |ИЗ | Документ.РасходнаяНакладная КАК РасходнаяНакладная | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура | ПО (СчетФактура.ДокументыОснования.ДокументОснование = РасходнаяНакладная.Ссылка) |ГДЕ | РасходнаяНакладная.Проведен = &Проведен | И СчетФактура.Ссылка ЕСТЬ NULL | И РасходнаяНакладная.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.пустой() Тогда ДанныеСчетаФактуры = Новый Структура; ДанныеСчетаФактуры.Вставить("ДокументОснование", Объект.Ссылка); ДанныеСчетаФактуры.Вставить("Организация", Объект.Организация); ДанныеСчетаФактуры.Вставить("Дата", Объект.Дата); СФ = Документы.СчетФактура.СоздатьДокумент(); СФ.Заполнить(ДанныеСчетаФактуры); СФ.Записать(РежимЗаписиДокумента.Проведение); КонецЕсли; КонецПроцедуры | |||
| 10
    
        AlvlSpb naïve 08.04.20✎ 23:47 | 
        (9) Решение в (8)     | |||
| 11
    
        AlvlSpb naïve 08.04.20✎ 23:48 | 
        Сделай окончание запроса
 | ГДЕ | РасходнаяНакладная.Проведен | И СчетФактура.Ссылка ЕСТЬ NULL | И РасходнаяНакладная.Ссылка = &Ссылка"; | |||
| 12
    
        Lucifer09 08.04.20✎ 23:54 | 
        (11) Спасибо, это поправил.     | |||
| 13
    
        Lucifer09 08.04.20✎ 23:55 | 
        (8) В том то и проблема что отладка ничего не выдает     | |||
| 14
    
        Ненавижу 1С гуру 09.04.20✎ 08:53 | 
        ОФФТОП: мне кажется неправильно выбран уровень абстракции, не надо привязываться к UI, надо это делать в событии объекта     | |||
| 15
    
        Lucifer09 09.04.20✎ 09:21 | 
        (14) Нашел только такую реализацию задачи. Вроде как вопрос давний но на просторах интернета нет решений рабочих.     | |||
| 16
    
        RomanYS 09.04.20✎ 09:34 | 
        (13) Так с этого и надо начинать. Какая разница какой код, если он не выполняется.
 Расширение активно? База перезапускалась? Основное (расширяемое) событие вызывается? | |||
| 17
    
        Ray Zexter 09.04.20✎ 09:57 | 
        Отладчик доходит до момента СФ = Документы.СчетФактура.СоздатьДокумент(); или спотыкается где то ранее?     | |||
| 18
    
        Sneer 09.04.20✎ 10:09 | 
        (2) Может безопасный режим не отключен?     | |||
| 19
    
        mzelensky 09.04.20✎ 10:55 | 
        (0)
 Вот тут "Процедура СА_АФСФ_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)" входящий параметр "ТекущийОбъект" А вот тут "Если Не ЗначениеЗаполнено(Объект.Ссылка) Или Не Объект.Проведен Тогда Возврат; КонецЕсли;" Ты проверяешь "Объект.Ссылка" Это точно так и надо? | |||
| 20
    
        Lucifer09 09.04.20✎ 11:17 | 
        (16) Расширение активно, база перезапускалась.
 Отладка не выдает ничего. Скорее всего событие вообще не запускается, а причина не понятна. По убирал все лишнее. Пришел к выводу что мне условия проверки статуса проведения документа не нужны так как я после проведения выполняю процедуру. Но все равно что-то не могу понять что я не учел. &НаСервере Процедура ПСФ_ПровестиИЗакрытьПослеНаСервере(ТекущийОбъект, ПараметрыЗаписи) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладная.Ссылка КАК Ссылка, | РасходнаяНакладная.Дата КАК Дата |ИЗ | Документ.РасходнаяНакладная КАК РасходнаяНакладная | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура | ПО (СчетФактура.ДокументыОснования.Ссылка = РасходнаяНакладная.Ссылка) |ГДЕ | РасходнаяНакладная.Проведен | И СчетФактура.Ссылка ЕСТЬ NULL | И РасходнаяНакладная.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); ДанныеСчетаФактуры = Новый Структура; ДанныеСчетаФактуры.Вставить("ДокументОснование", ТекущийОбъект.Ссылка); ДанныеСчетаФактуры.Вставить("Организация", ТекущийОбъект.Организация); ДанныеСчетаФактуры.Вставить("Дата", ТекущийОбъект.Дата); СФ = Документы.СчетФактура.СоздатьДокумент(); СФ.Заполнить(ДанныеСчетаФактуры); СФ.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры | |||
| 21
    
        Ray Zexter 09.04.20✎ 11:39 | 
        Отладчик в расширение в принципе заходит?     | |||
| 22
    
        RomanYS 09.04.20✎ 11:44 | 
        (20) Выкинь весь код пока. Сделай одну строку
 Сообщить("Расширение запускается"); Пока не увидишь сообщение про свой код вообще забудь. Основное событие формы (которое ты расширяешь) запускается? Может у тебя, например, кнокпа "Записать" обрабатывается кодом, а не вызывает стандартную команду формы со стандартными обработчиками | |||
| 23
    
        Lucifer09 09.04.20✎ 12:25 | 
        (22) Спасибо за дельный совет. 
 Выяснил таким образом выяснил что код исполняется только на клиенте. | |||
| 24
    
        Sneer 09.04.20✎ 17:42 | 
        (23) Ты галку "Безопасный режим" снял?     | |||
| 25
    
        runoff_runoff 09.04.20✎ 17:44 | 
        отладка на сервере не включена     | |||
| 26
    
        Lucifer09 10.04.20✎ 09:39 | 
        (25) База файловая     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |