|
Ошибка в расширении | ☑ | ||
---|---|---|---|---|
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
08.04.20
✎
23:21
|
(4) Это форма документа - правильно Объект
|
|||
6
AlvlSpb
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
08.04.20
✎
23:47
|
(9) Решение в (8)
|
|||
11
AlvlSpb
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) База файловая
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |