Имя: Пароль:
1C
 
Не проводится СФ при проведении через пкм
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) Попробую в тесте, спасибо
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс