![]() |
![]() |
![]() |
|
Не проводится СФ при проведении через пкм | ☑ | ||
---|---|---|---|---|
0
Илья1С
02.10.25
✎
17:12
|
Такая ситуация, доработал реквизит в форме Расходной "НомерСФ" Он берется из СФ которая создается после проведения РН, все работает правильно если проводить из формы, делал код в обработчике проведения. Если РН проводить через пкм - провести, то почему то СФ создается, номер заполняется. а СФ не проводится... Подскажите пожалуйста, уже не знаю куда смотреть, сейчас такой код
Если НЕ Договор.Пустая() Тогда СчетФактура = ОмОбщиеПроцедурыИФункции.НайтиПодчиненнуюСчетФактуру(Ссылка); Если СчетФактура = Неопределено И струкУчетнаяПолитикаФирмы.АвтоматическоеФормированиеСчетаФактуры И ОмОбщиеПроцедурыИФункции.ПолучитьДоступностьВВодаСчетФактуры(Ссылка) Тогда Сообщить("Создаём СФ автоматически"); // Вызываем как процедуру ОмОбщиеПроцедурыИФункции.ВвестиСчетФактуруАвтоматически(ЭтотОбъект); // Ищем созданную СФ СчетФактура = ОмОбщиеПроцедурыИФункции.НайтиПодчиненнуюСчетФактуру(Ссылка); Если ЗначениеЗаполнено(СчетФактура) Тогда СФОбъект = СчетФактура.ПолучитьОбъект(); Если НЕ СФОбъект.Проведен Тогда Попытка СФОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкиПриПроведении", Истина); // Обход возможных проверок СФОбъект.Записать(РежимЗаписиДокумента.Проведение); Сообщить("СФ проведена: " + СФОбъект.Ссылка); Исключение Сообщить("Ошибка проведения СФ: " + ОписаниеОшибки()); // Записываем СФ без проведения, чтобы сохранить данные СФОбъект.Записать(РежимЗаписиДокумента.Запись); Сообщить("СФ записана без проведения: " + СФОбъект.Ссылка); КонецПопытки; КонецЕсли; ЭтотОбъект.НомерСф = СФОбъект.Номер; // Если нужен формат "Номер от Дата": // ЭтотОбъект.НомерСф = СтрШаблон("%1 от %2", СФОбъект.Номер, Формат(СФОбъект.Дата, "ДФ=dd.MM.yyyy")); ЭтотОбъект.ДополнительныеСвойства.Вставить("НеЗаполнятьНомерСФ", Истина); // Защита от рекурсии ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); Сообщить("Заполнен НомерСф в РН: " + ЭтотОбъект.НомерСф); Иначе Сообщить("СФ не создана!"); КонецЕсли; ОмОбщиеПроцедурыИФункции.ПроверитьДатуСчетФактуры(ЭтотОбъект); ИначеЕсли ЗначениеЗаполнено(СчетФактура) И ОмОбщиеПроцедурыИФункции.ПолучитьДоступностьВВодаСчетФактуры(Ссылка) Тогда Сообщить("Переоформляем СФ"); ОмОбщиеПроцедурыИФункции.ПереоформлениеСчетФактуры(Ссылка); СФОбъект = СчетФактура.ПолучитьОбъект(); Если НЕ СФОбъект.Проведен Тогда Попытка СФОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкиПриПроведении", Истина); // Обход возможных проверок СФОбъект.Записать(РежимЗаписиДокумента.Проведение); Сообщить("СФ проведена: " + СФОбъект.Ссылка); Исключение Сообщить("Ошибка проведения СФ: " + ОписаниеОшибки()); СФОбъект.Записать(РежимЗаписиДокумента.Запись); Сообщить("СФ записана без проведения: " + СФОбъект.Ссылка); КонецПопытки; КонецЕсли; ЭтотОбъект.НомерСф = СФОбъект.Номер; ЭтотОбъект.ДополнительныеСвойства.Вставить("НеЗаполнятьНомерСФ", Истина); ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); Сообщить("Заполнен НомерСф в РН: " + ЭтотОбъект.НомерСф); КонецЕсли; КонецЕсли; |
|||
1
lubitelxml
02.10.25
✎
17:15
|
(0) как теперь такое развидеть (перезапись ЭтотОбъект)? Зачем хранить номер сч-ф в расходной?
|
|||
2
Маленький Вопросик
02.10.25
✎
17:15
|
ну и г*внокод... хорошая смена растет)))
учи БСП! МассивСсылок = Новый Массив; МассивСсылок.Добавить(ТвояСФ.Ссылка); Провести1 = ОбщегоНазначения.ПровестиДокументы(МассивСсылок); |
|||
3
Илья1С
02.10.25
✎
17:17
|
Потому что операторы выписывают накладные и им надо сразу видеть номер
|
|||
4
lubitelxml
02.10.25
✎
17:18
|
(2) вот это тоже треш
ОмОбщиеПроцедурыИФункции.ВвестиСчетФактуруАвтоматически(ЭтотОбъект); // Ищем созданную СФ СчетФактура = ОмОбщиеПроцедурыИФункции.НайтиПодчиненнуюСчетФактуру(Ссылка); А нельзя было ввести и сразу вернуть ссылку которая получилась? |
|||
5
lubitelxml
02.10.25
✎
17:19
|
(3) выведи запросом
|
|||
6
Маленький Вопросик
02.10.25
✎
17:20
|
(4) это скорее всего какая-то самописка - ОмОбщиеПроцедурыИФункции
|
|||
7
lubitelxml
02.10.25
✎
17:22
|
(0) попытка проведения и вызов исключения можно в отдельную процедуру вынести, чтобы код не повторялся. Но это уже в конце, когда код будет похож на нормальный
|
|||
8
Илья1С
02.10.25
✎
17:24
|
(6) Да, верно (5) Проблема в том, что потребуется два проведения РН тогда, т.к. при первом создается сф а запрос не видит ещё её, но возможно я не правильно писал запрос...
|
|||
9
Маленький Вопросик
02.10.25
✎
17:27
|
"Проблема в том, что потребуется два проведения РН тогда..." - ты сначала сделай комплект, а затем последовательно проведи...
с самопиской тебе тут не помогут - а в типовых - вот так (2) |
|||
10
Илья1С
02.10.25
✎
17:45
|
Ну так работает, сейчас буду тестировать работает ли при пкм + провести
Если НЕ Договор.Пустая() Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | СчетФактура.Номер КАК Номер |ИЗ | Документ.СчетФактура.Состав КАК СчетФактураСостав | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура | ПО СчетФактураСостав.Ссылка = СчетФактура.Ссылка |ГДЕ | СчетФактураСостав.Основание = &ДокументОснование | И НЕ СчетФактура.ПометкаУдаления"; Запрос.УстановитьПараметр("ДокументОснование", Ссылка); РезультатЗапроса = Запрос.Выполнить(); НомерСФ = ""; Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); НомерСФ = Выборка.Номер; КонецЕсли; Если ПустаяСтрока(НомерСФ) И струкУчетнаяПолитикаФирмы.АвтоматическоеФормированиеСчетаФактуры И ОмОбщиеПроцедурыИФункции.ПолучитьДоступностьВВодаСчетФактуры(Ссылка) Тогда Сообщить("Создаём СФ автоматически"); Попытка ОмОбщиеПроцедурыИФункции.ВвестиСчетФактуруАвтоматически(ЭтотОбъект); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); НомерСФ = Выборка.Номер; КонецЕсли; Исключение Сообщить("Ошибка создания СФ: " + ОписаниеОшибки()); КонецПопытки; ИначеЕсли ЗначениеЗаполнено(НомерСФ) И ОмОбщиеПроцедурыИФункции.ПолучитьДоступностьВВодаСчетФактуры(Ссылка) Тогда Сообщить("Переоформляем СФ"); Попытка ОмОбщиеПроцедурыИФункции.ПереоформлениеСчетФактуры(Ссылка); // Повторный запрос для получения номера после переоформления РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); НомерСФ = Выборка.Номер; КонецЕсли; Сообщить("Переоформлен документ: Счет-фактура " + НомерСФ); Исключение Сообщить("Ошибка переоформления СФ: " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; Если ЗначениеЗаполнено(НомерСФ) Тогда ЭтотОбъект.НомерСф = НомерСФ; ЭтотОбъект.ДополнительныеСвойства.Вставить("НеЗаполнятьНомерСФ", Истина); ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); Сообщить("Заполнен НомерСф в РН: " + ЭтотОбъект.НомерСф); КонецЕсли; ОмОбщиеПроцедурыИФункции.ПроверитьДатуСчетФактуры(ЭтотОбъект); КонецЕсли; Исключение Сообщить("Общая ошибка блока СФ: " + ОписаниеОшибки()); КонецПопытки; #Если Клиент Тогда Оповестить("ЗаписьСчетФактуры", Ссылка); #КонецЕсли |
|||
11
Илья1С
02.10.25
✎
17:53
|
И все равно СФ остается не проведенная при пкм... Может есть догадки что можно сделать, вроде запрос не должен никак влиять на проведение
|
|||
12
Илья1С
02.10.25
✎
18:01
|
Ага, теперь просто не проводится СФ при любом проведении РН
|
|||
13
lubitelxml
02.10.25
✎
18:14
|
(10) а где у тебя проведение счет фактуры в коде? Или в общем модуле проводиться?
|
|||
14
Илья1С
02.10.25
✎
19:18
|
Вот сделал с проведением. но так не проводится... Но вроде в общем модуле проводиться должно
Если НЕ Договор.Пустая() Тогда // Запрос для получения номера и ссылки СФ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | СчетФактура.Ссылка КАК Ссылка, | СчетФактура.Номер КАК Номер |ИЗ | Документ.СчетФактура.Состав КАК СчетФактураСостав | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактура КАК СчетФактура | ПО СчетФактураСостав.Ссылка = СчетФактура.Ссылка |ГДЕ | СчетФактураСостав.Основание = &ДокументОснование | И НЕ СчетФактура.ПометкаУдаления"; Запрос.УстановитьПараметр("ДокументОснование", Ссылка); РезультатЗапроса = Запрос.Выполнить(); СчетФактура = Неопределено; НомерСФ = ""; Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); СчетФактура = Выборка.Ссылка; НомерСФ = Выборка.Номер; КонецЕсли; Если ПустаяСтрока(НомерСФ) И струкУчетнаяПолитикаФирмы.АвтоматическоеФормированиеСчетаФактуры И ОмОбщиеПроцедурыИФункции.ПолучитьДоступностьВВодаСчетФактуры(Ссылка) Тогда Сообщить("Создаём СФ автоматически"); Попытка ОмОбщиеПроцедурыИФункции.ВвестиСчетФактуруАвтоматически(ЭтотОбъект); // Повторный запрос для получения созданной СФ РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); СчетФактура = Выборка.Ссылка; НомерСФ = Выборка.Номер; КонецЕсли; Если ЗначениеЗаполнено(СчетФактура) Тогда // Проводим СФ СФОбъект = СчетФактура.ПолучитьОбъект(); СФОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкиПриПроведении", Истина); МассивСсылок = Новый Массив; МассивСсылок.Добавить(СчетФактура); РезультатПроведения = ОбщегоНазначения.ПровестиДокументы(МассивСсылок); Если РезультатПроведения[0].Проведен Тогда Сообщить("СФ проведена: " + СчетФактура); Иначе Сообщить("Ошибка проведения СФ: " + РезультатПроведения[0].ОписаниеОшибки); КонецЕсли; Иначе Сообщить("СФ не создана!"); КонецЕсли; Исключение Сообщить("Ошибка создания СФ: " + ОписаниеОшибки()); КонецПопытки; ИначеЕсли ЗначениеЗаполнено(СчетФактура) И ОмОбщиеПроцедурыИФункции.ПолучитьДоступностьВВодаСчетФактуры(Ссылка) Тогда Сообщить("Переоформляем СФ"); Попытка ОмОбщиеПроцедурыИФункции.ПереоформлениеСчетФактуры(Ссылка); // Обновляем номер СФ РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); СчетФактура = Выборка.Ссылка; НомерСФ = Выборка.Номер; КонецЕсли; Сообщить("Переоформлен документ: Счет-фактура " + НомерСФ); // Проводим СФ СФОбъект = СчетФактура.ПолучитьОбъект(); СФОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкиПриПроведении", Истина); МассивСсылок = Новый Массив; МассивСсылок.Добавить(СчетФактура); РезультатПроведения = ОбщегоНазначения.ПровестиДокументы(МассивСсылок); Если РезультатПроведения[0].Проведен Тогда Сообщить("СФ проведена: " + СчетФактура); Иначе Сообщить("Ошибка проведения СФ: " + РезультатПроведения[0].ОписаниеОшибки); КонецЕсли; Исключение Сообщить("Ошибка переоформления СФ: " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; // Заполняем НомерСф Если ЗначениеЗаполнено(НомерСФ) Тогда ЭтотОбъект.НомерСф = НомерСФ; ЭтотОбъект.ДополнительныеСвойства.Вставить("НеЗаполнятьНомерСФ", Истина); ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); Сообщить("Заполнен НомерСф в РН: " + ЭтотОбъект.НомерСф); КонецЕсли; |
|||
15
Илья1С
02.10.25
✎
18:50
|
С помощью интернета и ии пришел к методу проведения СФ отложено, при проведении через форму СФ проводится, сейчас буду проталкивать обмены и смотреть что на счет через пкм
|
|||
16
Волшебник
02.10.25
✎
19:18
|
надо убрать условие:
Если НЕ Договор.Пустая() Тогда |
|||
17
Илья1С
02.10.25
✎
21:32
|
Помогло отложенное проведение сф, спасибо всем!
(16) Попробую в тесте, спасибо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |