|
|
|
Не проводится СФ при проведении через пкм | ☑ | ||
|---|---|---|---|---|
|
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) Попробую в тесте, спасибо |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |