Не записывается документ в 1С 7.7

1. Divanoff 22 21.04.19 21:44 Сейчас в теме
День добрый.
Подскажите а почему данный код не записывает документ?
Я листинг 1С 7.7 совсем забыл, прошу не ругаться строго.
Спасибо.

//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
	Перем Запрос, ТекстЗапроса;
	//Создание объекта типа Запрос
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(кк)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|ОбрабатыватьДокументы все;
	|Без итогов;
	|СчетФактура = Документ.СчетФактура.ТекущийДокумент;
	|Аванс = Документ.СчетФактура.Аванс;
	|Группировка СчетФактура без групп;
	|"//}}ЗАПРОС
	;
	
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;

	// Подготовка к заполнению выходных форм данными запроса

	// Заполнение полей "Заголовок"

	Пока Запрос.Группировка() = 1 Цикл
		// Заполнение полей Сформировать
        Док = СоздатьОбъект("Документ.СчетФактура");
		Док.НайтиДокумент(Запрос.СчетФактура);
		
		Сообщить("Обрабатывается документ: " + Запрос.СчетФактура);
		
        Если Док.ПометкаУдаления() = 0 Тогда
			 Продолжить;
		КонецЕсли;	
		
		Если Док.ВидОперации <> Перечисление.ВидыОперацийСчетаФактурыВыданного.Аванс Тогда
			Продолжить;
		КонецЕсли;	
		
		Док.КодВидаОперации = "02";
		Док.Записать();
		Если Док.Проведен() = 1 Тогда
			Док.Провести(0,1);
		КонецЕсли;
		Сообщить("Обработан документ: " + Запрос.СчетФактура);
	КонецЦикла;
	Сообщить("Обработка завершена !");
	// Вывод заполненной формы

КонецПроцедуры
Показать


Программа выполняется без ошибок, но реквизиты не перезаписывает у документов.
По теме из базы знаний
Найденные решения
5. Divanoff 22 21.04.19 22:25 Сейчас в теме
Разобрался. Вот правильный листинг:

Процедура Сформировать()
	Перем Запрос, ТекстЗапроса;
	//Создание объекта типа Запрос
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(кк)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|ОбрабатыватьДокументы все;
	|Без итогов;
	|СчетФактура = Документ.СчетФактура.ТекущийДокумент;
	|Группировка СчетФактура без групп;
	|"//}}ЗАПРОС
	;
	
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;

	// Подготовка к заполнению выходных форм данными запроса

	// Заполнение полей "Заголовок"

	Пока Запрос.Группировка() = 1 Цикл
		// Заполнение полей Сформировать
		Док = СоздатьОбъект("Документ.СчетФактура");
		
		Если Док.НайтиДокумент(Запрос.СчетФактура) = 1 Тогда
			
			Если Док.ПометкаУдаления() = 1 Тогда
				Продолжить;
			КонецЕсли;	
			
			Если Док.ВидОперации <> Перечисление.ВидыОперацийСчетаФактурыВыданного.Аванс Тогда
				Продолжить;
			КонецЕсли;	
			
			Сообщить("Обрабатывается документ: " + Запрос.СчетФактура);
			
			Если СокрЛП(Док.КодВидаОперации) = "02" Тогда
				Продолжить;
			КонецЕсли;
			
			Док.КодВидаОперации = "02";
			Док.Записать();
			Если Док.Проведен() = 1 Тогда
				Док.Провести(0,1);
			КонецЕсли;
			Сообщить("Обработан документ: " + Запрос.СчетФактура);
			
		КонецЕсли;
		
	КонецЦикла;
	Сообщить("Обработка завершена !");
	// Вывод заполненной формы

КонецПроцедуры  
Показать
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ishelper 21.04.19 22:15 Сейчас в теме
(1)
Подскажите а почему данный код не записывает документ?
Да мало ли... Например, после вот этого:
Док.НайтиДокумент(Запрос.СчетФактура);

не проверяется - а нашелся ли документ?

Вы же в коде выводите сообщения только о результатах запроса, а чему равно Док - остается неизвестным.

Самое простое - посмотреть на выводимые сообщения после вот такой минимальной модификации:
//       Док.НайтиДокумент(Запрос.СчетФактура);
       Если Док.НайтиДокумент(Запрос.СчетФактура) = 0 Тогда
             Продолжить;
        КонецЕсли;
3. alxarz 31 21.04.19 22:20 Сейчас в теме
(1)
почему данный код не записывает документ?
а какие сообщения выводит код?
4. Divanoff 22 21.04.19 22:22 Сейчас в теме
В коде нашел ошибку, но все равно не записывает.
Вот новая версия кода, даже документы проводятся, а реквизит не заполняется.
Даже через отладчик непонятно с чем я работаю, со ссылкой или с объектом.

Процедура Сформировать()
	Перем Запрос, ТекстЗапроса;
	//Создание объекта типа Запрос
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(кк)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|ОбрабатыватьДокументы все;
	|Без итогов;
	|СчетФактура = Документ.СчетФактура.ТекущийДокумент;
	|Группировка СчетФактура без групп;
	|"//}}ЗАПРОС
	;
	
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;

	// Подготовка к заполнению выходных форм данными запроса

	// Заполнение полей "Заголовок"

	Пока Запрос.Группировка() = 1 Цикл
		// Заполнение полей Сформировать
		Док = СоздатьОбъект("Документ.СчетФактура");
		
		Если Док.НайтиДокумент(Запрос.СчетФактура) = 1 Тогда
			
			Если Док.ПометкаУдаления() = 1 Тогда
				Продолжить;
			КонецЕсли;	
			
			Если Док.ВидОперации <> Перечисление.ВидыОперацийСчетаФактурыВыданного.Аванс Тогда
				Продолжить;
			КонецЕсли;	
			
			Сообщить("Обрабатывается документ: " + Запрос.СчетФактура);
			
			Если СокрЛП(Док.КодВидаОперации) <> "02" Тогда
				Продолжить;
			КонецЕсли;
			
			Док.КодВидаОперации = "02";
			Док.Записать();
			Если Док.Проведен() = 1 Тогда
				Док.Провести(0,1);
			КонецЕсли;
			Сообщить("Обработан документ: " + Запрос.СчетФактура);
			
		КонецЕсли;
		
	КонецЦикла;
	Сообщить("Обработка завершена !");
	// Вывод заполненной формы

КонецПроцедуры  
Показать
5. Divanoff 22 21.04.19 22:25 Сейчас в теме
Разобрался. Вот правильный листинг:

Процедура Сформировать()
	Перем Запрос, ТекстЗапроса;
	//Создание объекта типа Запрос
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(кк)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|ОбрабатыватьДокументы все;
	|Без итогов;
	|СчетФактура = Документ.СчетФактура.ТекущийДокумент;
	|Группировка СчетФактура без групп;
	|"//}}ЗАПРОС
	;
	
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;

	// Подготовка к заполнению выходных форм данными запроса

	// Заполнение полей "Заголовок"

	Пока Запрос.Группировка() = 1 Цикл
		// Заполнение полей Сформировать
		Док = СоздатьОбъект("Документ.СчетФактура");
		
		Если Док.НайтиДокумент(Запрос.СчетФактура) = 1 Тогда
			
			Если Док.ПометкаУдаления() = 1 Тогда
				Продолжить;
			КонецЕсли;	
			
			Если Док.ВидОперации <> Перечисление.ВидыОперацийСчетаФактурыВыданного.Аванс Тогда
				Продолжить;
			КонецЕсли;	
			
			Сообщить("Обрабатывается документ: " + Запрос.СчетФактура);
			
			Если СокрЛП(Док.КодВидаОперации) = "02" Тогда
				Продолжить;
			КонецЕсли;
			
			Док.КодВидаОперации = "02";
			Док.Записать();
			Если Док.Проведен() = 1 Тогда
				Док.Провести(0,1);
			КонецЕсли;
			Сообщить("Обработан документ: " + Запрос.СчетФактура);
			
		КонецЕсли;
		
	КонецЦикла;
	Сообщить("Обработка завершена !");
	// Вывод заполненной формы

КонецПроцедуры  
Показать
6. ishelper 21.04.19 22:32 Сейчас в теме
(5)
Вот правильный листинг:
Те же гениталии, вид сбоку.

Еще осталось СоздатьОбъект() вынести за пределы цикла - а то это один их первых признаков так называемого "г...внокода".
7. Divanoff 22 21.04.19 22:38 Сейчас в теме
(6) Да это понятно, просто с 7.7 вообще не работал лет 10, даже эта несложная программа далась с трудом. Пришлось погуглить.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)