1С 8.3 ЗУП Как скопировать документ целиком при незаполненном поле отбора

1. whitem 26.05.20 05:28 Сейчас в теме
ХЕЛП ХЕЛП ХЕЛП

При заполненном отборе Список должностей - отрабатывает копирование как и задумано, т.е. получается для каждой должности свой документ - это ПРАВИЛЬНО
При незаполненном отборе Список должностей - создается на каждую строку тч документа 1 новый документ, т.е. на 5 строк в документе будет 5 документов - это НЕПРАВИЛЬНО.
Надо чтоб при незаполненном отборе просто копировался документ, так как должности привязаны к статье и подразделению

Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
	Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
	Запрос.УстановитьПараметр("Коэффициент", Коэффициент);

	Запрос.Текст =

"ВЫБРАТЬ
|	МАВ_БюджетнаяОперация.Ссылка КАК Ссылка,
|	МАВ_БюджетнаяОперация.ВерсияДанных КАК ВерсияДанных,
|	МАВ_БюджетнаяОперация.ПометкаУдаления КАК ПометкаУдаления,
|	МАВ_БюджетнаяОперация.Номер КАК Номер,
|	МАВ_БюджетнаяОперация.Дата КАК Дата,
|	МАВ_БюджетнаяОперация.Проведен КАК Проведен,
|	МАВ_БюджетнаяОперация.ПериодПланирования КАК ПериодПланирования,
|	МАВ_БюджетнаяОперация.Сценарий КАК Сценарий,
|	МАВ_БюджетнаяОперация.СтатьяОборотовБюджета КАК СтатьяОборотовБюджета,
|	МАВ_БюджетнаяОперация.Подразделение КАК Подразделение,
|	МАВ_БюджетнаяОперация.Проект КАК Проект,
|	МАВ_БюджетнаяОперация.Ответственный КАК Ответственный,
|	МАВ_БюджетнаяОперация.Организация КАК Организация,
|	МАВ_БюджетнаяОперация.Комментарий КАК Комментарий,
|	МАВ_БюджетнаяОперацияТЧОсновная.Должность КАК Должность,
|	МАВ_БюджетнаяОперацияТЧОсновная.Сумма КАК Сумма
|ИЗ
|	Документ.МАВ_БюджетнаяОперация.ТЧОсновная КАК МАВ_БюджетнаяОперацияТЧОсновная
|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.МАВ_БюджетнаяОперация КАК МАВ_БюджетнаяОперация
|		ПО МАВ_БюджетнаяОперацияТЧОсновная.Ссылка = МАВ_БюджетнаяОперация.Ссылка
|ГДЕ
|	МАВ_БюджетнаяОперация.ПериодПланирования МЕЖДУ &ДатаНач И &ДатаКон
|	И МАВ_БюджетнаяОперация.Проведен = ИСТИНА
|	И МАВ_БюджетнаяОперация.Сценарий = &Сценарий
|	И МАВ_БюджетнаяОперация.СтатьяОборотовБюджета В ИЕРАРХИИ(&СписокСтатейОборотов)
|	И МАВ_БюджетнаяОперация.Подразделение В ИЕРАРХИИ(&СписокПодразделений)
|	И МАВ_БюджетнаяОперацияТЧОсновная.Должность В ИЕРАРХИИ(&СписокДолжностей)";

Если ЗначениеЗаполнено(Сценарий) Тогда
	   	Запрос.УстановитьПараметр("Сценарий", Сценарий);
	Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И МАВ_БюджетнаяОперация.Сценарий = &Сценарий", "");   
КонецЕсли;

Если ЗначениеЗаполнено(СписокСтатейОборотов) Тогда
Запрос.УстановитьПараметр("СписокСтатейОборотов", СписокСтатейОборотов);
	Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И МАВ_БюджетнаяОперация.СтатьяОборотовБюджета В ИЕРАРХИИ(&СписокСтатейОборотов)", "");
КонецЕсли;

Если ЗначениеЗаполнено(СписокПодразделений) Тогда
Запрос.УстановитьПараметр("СписокПодразделений", СписокПодразделений);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И МАВ_БюджетнаяОперация.Подразделение В ИЕРАРХИИ(&СписокПодразделений)", "");
КонецЕсли;

Если ЗначениеЗаполнено(СписокДолжностей) Тогда
Запрос.УстановитьПараметр("СписокДолжностей", СписокДолжностей);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И МАВ_БюджетнаяОперацияТЧОсновная.Должность В ИЕРАРХИИ(&СписокДолжностей)", "");
КонецЕсли;

	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
	//Копируем документ БО
	ДокументКопия = Выборка.Ссылка.Скопировать();
	//Находим в ТЧ БО должность
	НайденаяСтрока = ДокументКопия.ТЧОсновная.Найти(Выборка.Должность, "Должность");
	//Если нашли строку, то меняем в ней сумму
	Если Число = 0 Тогда          
		НайденаяСтрока.Сумма = Выборка.Сумма*Коэффициент;
		иначе
			НайденаяСтрока.Сумма = Выборка.Сумма+Число;
		КонецЕсли;	
		
ВсегоСтрок = ДокументКопия.ТЧОсновная.Количество(); // Получаем количество строк в табличной части
ИндексСтроки = 0; //Первый индекс строки
Пока ИндексСтроки < ВсегоСтрок Цикл //Перебираем строки табличной части
ТекущаяСтрока = ДокументКопия.ТЧОсновная.Получить(ИндексСтроки); //Получаем первую строку
Если ТекущаяСтрока.Сумма<>НайденаяСтрока.Сумма тогда //Проверяем на заданное условие
ДокументКопия.ТЧОсновная.Удалить(ИндексСтроки); //Удаляем
ВсегоСтрок = ВсегоСтрок - 1;
Иначе
	ИндексСтроки = ИндексСтроки + 1; //Получаем индекс следующей записи
КонецЕсли;	
КонецЦикла;

ДокументКопия.Дата = ТекущаяДата();	
ДокументКопия.ПериодПланирования = ДатаНовая;	 		
ДокументКопия.Сценарий	= СценарийНовый;
ДокументКопия.Записать(РежимЗаписиДокумента.Проведение);   
                                                                                                                    
КонецЦикла;
если значениезаполнено(Выборка.Ссылка) тогда
Сообщить("Копирование документов завершено");
иначе Сообщить("Документы для копирования не найдены");
конецесли;
КонецПроцедуры
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Salavat 14 26.05.20 06:26 Сейчас в теме
(1) как минимум я вижу -
Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    //Копируем документ БО
    ДокументКопия = Выборка.Ссылка.Скопировать();

копирование в цикле - точно есть.
3. whitem 26.05.20 07:21 Сейчас в теме
4. Salavat 14 26.05.20 07:38 Сейчас в теме
(3)не понял ухмылку. сам же сказал -
создается на 1 строку тч документа 1 новый документ, т.е. НЕПРАВИЛЬНО.

сам придумай себе названье.
(как ты там называешь - тех, кто отрицает аксиомы)
5. whitem 26.05.20 07:46 Сейчас в теме
(4) если не можешь помочь, то не надо было ничего писать...зачем тему засорять..
копирование в цикле - точно есть.

ну как бы оно и должно быть..документы же копирую...
создается на 1 строку тч документа 1 новый документ, т.е. НЕПРАВИЛЬНО.

это ПРАВИЛЬНЫЙ вариант, если ЗАПОЛНЕН ОТБОР по Должности,
соответственно НЕПРАВИЛЬНЫЙ если мне надо получить просто скопированный документ, так как мне нужны все строки этого документа
6. Salavat 14 26.05.20 08:01 Сейчас в теме
(5)
если не можешь помочь, то не надо было ничего писать...зачем тему засорять..
если не можешь вопрос правильно (про свою ПРАВИЛЬНОСТЬ/НЕПРАВИЛЬНОСТЬ - ты уже прекрасно продемонстрировал, своё понимание. С моим оно - точно не совпадает) задать - жди помощи, дальше..
7. alex-l19041 8 26.05.20 08:54 Сейчас в теме
(1) в чем состоит исходная задача ? для копирования документов нет необходимости брать данные из табличной части...
8. whitem 26.05.20 09:20 Сейчас в теме
(7) в табличной части документа необходимо увеличить или уменьшить сумму по должности.
Например:

Должность:Начальник
Сумма:100
Должна получится сумма: 50

То есть необходимо уменьшить сумму при копировании на: 50
Для этого беру табличную часть..
9. alex-l19041 8 26.05.20 09:34 Сейчас в теме
(8)
ДокументКопия.ТЧОсновная
- вот тут работа с табличной частью...
10. whitem 26.05.20 12:01 Сейчас в теме
(9) я наверно никого не понимаю, так как совсем не программист..можно увидеть вашу мысль на примере?
11. whitem 27.05.20 03:05 Сейчас в теме
тема закрыта. ответ найден
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот