Добрый день задача следующая есть таблица вида например https://prnt.sc/10q813c
когда создавал обработку делал что для каждого документа из приемника создавался документ в источнике и поиск был по ГУИД в регистре (см ниже )
а вот когда задача встала что нужно объединить в один что то застрял.
Подскажите как объединить документы в один???
когда создавал обработку делал что для каждого документа из приемника создавался документ в источнике и поиск был по ГУИД в регистре (см ниже )
а вот когда задача встала что нужно объединить в один что то застрял.
Подскажите как объединить документы в один???
Отказ = Ложь;
Попытка
УТ = ПодключитьсяКБазе(ИмяСервера, ИмяБазы, ПутьКБазе, Пользователь, Пароль);
Исключение
Сообщить("База не открыта");
Отказ = Истина;
КонецПопытки;
Если Отказ Тогда
Возврат;
КонецЕсли;
Функция СопоставитьВнутреннийДокумент(ОписаниеДокументаУТ_УИД, ВидДок8БП, ВидОбъекта) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИдентификаторВ83", ОписаниеДокументаУТ_УИД);
ТекстЗапроса =
"ВЫБРАТЬ
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника КАК Ссылка
|ИЗ
| РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
|ГДЕ
| СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника = &ИдентификаторВ83";
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Док8БП = Выборка.Ссылка;
Иначе
Если ВидОбъекта="Документ" Тогда
Док8БП = Документы[ВидДок8БП].ПустаяСсылка();
ИначеЕсли ВидОбъекта="Справочник" Тогда
Док8БП = Справочники[ВидДок8БП].ПустаяСсылка();
КонецЕсли;
КонецЕсли;
Возврат Док8БП;
КонецФункции
Для Каждого Док Из СписокДокументов Цикл //СПИСОК ДОКУМЕНТОВ ДЛЯ ПЕРЕНОСА
Если Док.Выбран Тогда //ПЕРЕНОСИМ ТОЛЬКО ТЕ КОТОРЫЕ ОТМЕТИЛИ
Организация = Док.Организация;
Если Док.Вид="Реализация (акты, накладные)" Тогда //И ОПРЕДЛЕННОГО
ДокУТ = УТ.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Док.Номер, Док.Дата); //НАШЛИ ДОКУМЕНТ В БАЗЕ УТ
Если ЗначениеЗаполнено(Док.СсылкаБух) тогда //УЖЕ ЕСТЬ СОЗДАННЫЙ ДОКУМЕНТ В БУХГАЛТЕРИИ
Если НЕ ПропускатьРанееЗанесенныеДокументы тогда
Док.СсылкаБух = СоздатьРеализацию(ДокУТ, Док.СсылкаБух,Док.КонтрагентЗамена, ПроблемныеКонтрагенты);
Иначе
СообщитьЗаписатьВЛог("Пропущен документ: """ + Док.СсылкаБух.Номер + """ от: " + Формат(Док.СсылкаБух.Дата, "ДЛФ=Д"));
ЗаполнитьРезультатПереноса("РеализацияТоваровУслуг",Ложь,,,Истина);
Продолжить;
КонецЕсли;
Иначе
//СОЗДАЕМ НОВЫЙ ДОКУМЕНТ В БУХГАЛТЕРИИ
СсылкаБух = СопоставитьВнутреннийДокумент(Док.УИД,"РеализацияТоваровУслуг", "Документ");
//СсылкаБух БУДЕТ ПУСТАЯ ССЫЛКА
Док.СсылкаБух = СоздатьРеализацию(ДокУТ, СсылкаБух, Док.КонтрагентЗамена,ПроблемныеКонтрагенты);
КонецЕсли;
Если ЗначениеЗаполнено(Док.СсылкаБух) И ПроводитьДокументы И НЕ Док.Ссылкабух.Проведен Тогда
Док.ошибка = Истина;
Иначе
Док.ошибка = Ложь;
КонецЕсли;
СообщитьЗаписатьВЛог("*** *** ***");
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьПо теме из базы знаний
- Заполнить ТЧ документа данными других документов (Копирование ТЧ)
- Объединение нескольких печатных форм в один табличный документ
- Объединение нескольких поступлений в один документ в 1С:Бухгалтерии 3.0
- Объединение документов Списание товаров и Оприходование товаров по заданному периоду
- Объединение нескольких документов Реализация товаров и услуг в один
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для Каждого Док Из СписокДляПереноса Цикл
Если УсловиеДляОбъединенияВыполнено Тогда
НовыйДок = УжеСозданныйДок;
Иначе
НовыйДок = Документы.НужныйВидДокумента.СоздатьДокумент();
КонецЕсли;
Для Каждого Строка из ну и дальше все понятно заполняем все что нужно.
КонецЦикла;
Показать
вот да вы правы но меня смущает другое
вот что тнужно объединить в списке мы сами выбираем отсуда получаем список нужных документов для переноса ну естественно добавлю проверки на то что один контрагент а не разные и т.д.
когда я создавал связь по ГУИД Источника = ГУИД приемника (регистр СоответствияОбъектовИнформационныхБаз )
тут у меня будет что источники разные приемник один это тоже я проблем не вижу
а вот я создал первый документ из списка то мне как потом найти "УжеСозданныйДок" условие скажем так написать
вот что тнужно объединить в списке мы сами выбираем отсуда получаем список нужных документов для переноса ну естественно добавлю проверки на то что один контрагент а не разные и т.д.
когда я создавал связь по ГУИД Источника = ГУИД приемника (регистр СоответствияОбъектовИнформационныхБаз )
тут у меня будет что источники разные приемник один это тоже я проблем не вижу
а вот я создал первый документ из списка то мне как потом найти "УжеСозданныйДок" условие скажем так написать
Для Каждого Док Из СписокДляПереноса Цикл
Если УсловиеДляОбъединенияВыполнено Тогда
НовыйДок = УжеСозданныйДок; /
Иначе
НовыйДок = Документы.НужныйВидДокумента.СоздатьДокумент();
КонецЕсли;
Для Каждого Строка из ну и дальше все понятно заполняем все что нужно.
КонецЦикла;
Показать
(6)встал другой вопрос сделал условия отбора но чтот как то тупо мне кажется
ТЗПроверки = СписокДокументов.Выгрузить(,"Выбран,Контрагент,СсылкаБух");
МассивСтрок = ТЗПроверки.НайтиСтроки(Новый Структура("Выбран", Ложь));
Для Каждого ЭлементМассив Из МассивСтрок Цикл
ТЗПроверки.Удалить(ЭлементМассив); //удаляем строки
КонецЦикла;
ТЗПроверки.Свернуть("Выбран,Контрагент,СсылкаБух");
ДокументыДляПереноса = СписокДокументов.НайтиСтроки(Новый Структура("Выбран, Вид",Истина,"Реализация (акты, накладные)"));
Если ТЗПроверки.Количество()= 1 Тогда
Если не ЗначениеЗаполнено(ТЗПроверки[0].СсылкаБух) Тогда
Для Каждого Док Из ДокументыДляПереноса Цикл //СПИСОК ДОКУМЕНТОВ ДЛЯ ПЕРЕНОСА
КонецЦикла;
Иначе
Сообщить("Нельзя выбрать документ для которых уже есть сссылки в БП 3.0");
КонецЕсли;
Иначе
Сообщить("Объединение документов возможно только по одному контрагенту.");
КонецЕсли;
Показать
(5)
я создал первый документ из списка то мне как потом найти "УжеСозданныйДок" условие скажем так написать
ИМХО, лучше вообще поменять алгоритм: сначала загрузить все нужные документы в таблицу значений, ТЗ свернуть по нужным параметрам и потом из нее создать и заполнить один документ.
ВОТ ЧТО ПОЛУЧИЛОСЬ МБ ПОДСКАЖИТЕ НА СЧЕТ ОПТИМИЗАЦИИ СКАЖЕМ ТАК
Процедура ОбъединитьДокументыНаСервере (ТабличныйДокумент) Экспорт
Отказ = Ложь;
Попытка
УТ = ПодключитьсяКБазе(ИмяСервера, ИмяБазы, ПутьКБазе, Пользователь, Пароль);
Исключение
Сообщить("База не открыта");
Отказ = Истина;
КонецПопытки;
Если Отказ Тогда
Возврат;
КонецЕсли;
ТЗПроверки = СписокДокументов.Выгрузить(,"Выбран,Контрагент,СсылкаБух");
МассивСтрок = ТЗПроверки.НайтиСтроки(Новый Структура("Выбран", Ложь));
Для Каждого ЭлементМассив Из МассивСтрок Цикл
ТЗПроверки.Удалить(ЭлементМассив); //удаляем строки
КонецЦикла;
ТЗПроверки.Свернуть("Выбран,Контрагент,СсылкаБух");
ДокументыДляПереноса = СписокДокументов.НайтиСтроки(Новый Структура("Выбран, Вид",Истина,"Реализация (акты, накладные)"));
Если ТЗПроверки.Количество()= 1 Тогда
Если не ЗначениеЗаполнено(ТЗПроверки[0].СсылкаБух) Тогда
//////////////------------------------------------
НаклБух = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
РеализацияУТ = УТ.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ДокументыДляПереноса[0].Номер, ДокументыДляПереноса[0].Дата);
//заполним шапку по первой РТУ
Организация = ДокументыДляПереноса[0].Организация;
НаклБух.Дата = КонецДня(ТекущаяДата());
НаклБух.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду(РеализацияУТ.Валюта.Код);
НаклБух.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
Отказ = Ложь;
Если Не ЗначениеЗаполнено(ДокументыДляПереноса[0].КонтрагентЗамена) Тогда
НаклБух.Контрагент = НайтиКонтрагента(РеализацияУТ.Контрагент, РеализацияУТ, "Реализация (акты, накладные)", ПроблемныеКонтрагенты, Отказ);
Иначе
НаклБух.Контрагент = ДокументыДляПереноса[0].КонтрагентЗамена;
КонецЕсли;
Комментарий="";
Для каждого стр Из ДокументыДляПереноса Цикл
НаклБух.Комментарий = Комментарий +"н"+стр.Номер+"д"+стр.Дата+";"
КонецЦикла; //"н"+1+"д"+2+";"
НаклБух.Комментарий = Комментарий;
НаклБух.КратностьВзаиморасчетов = 1;
НаклБух.КурсВзаиморасчетов = 1;
НаклБух.Склад = ЭтотОбъект.СкладПоУмолчанию;
НаклБух.Организация = Организация;
НаклБух.Ответственный = Ответственный;
НаклБух.СуммаВключаетНДС = РеализацияУТ.ЦенаВключаетНДС;
НаклБух.СуммаДокумента = РеализацияУТ.СуммаДокумента;
НаклБух.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
НаклБух.ПодразделениеОрганизации = НайтиПодразделение(РеализацияУТ.Подразделение);
Если НЕ РеализацияУТ.Договор.Наименование="" Тогда
НаклБух.ДоговорКонтрагента = НайтиДоговор(РеализацияУТ.Договор, НаклБух.Контрагент,УТ.XMLСтрока(РеализацияУТ.Договор.ТипДоговора), НаклБух.ВалютаДокумента, "Договор с покупателем");
Иначе
НаклБух.ДоговорКонтрагента = НайтиДоговор(Неопределено, НаклБух.Контрагент, "СПокупателем", НаклБух.ВалютаДокумента, "Договор с покупателем");
КонецЕсли;
Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаРасчетов(НаклБух);
//ЗАПОЛНЯЕМ ТЧ
РеализацияУТ = "";
Для каждого ДОК Из ДокументыДляПереноса Цикл
РеализацияУТ = УТ.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ДОК.Номер, ДОК.Дата); //НАШЛИ ДОКУМЕНТ В БАЗЕ УТ
Если УТ.XMLСтрока(РеализацияУТ.Статус) = "Отгружено" Тогда
ТоварыУТ = РеализацияУТ.ВидыЗапасов;
Иначе
ТоварыУТ = РеализацияУТ.Товары;
КонецЕсли;
Для каждого Стр из ТоварыУТ Цикл
АналитикаНоменклатуры = Стр.АналитикаУчетаНоменклатуры;
// LS.AKU.26.03.2020 15:38:39 -> Обмен по расписанию в переносе УТ 11-БП
Услуга = ?(УТ.XMLСтрока(АналитикаНоменклатуры.Номенклатура.ТипНоменклатуры)="Услуга", Истина, Ложь);
Если Услуга Тогда
Продолжить;
КонецЕсли;
//<-
НовСтрока = НаклБух.Товары.Добавить();
НовСтрока.Номенклатура = НайтиНоменклатуру(АналитикаНоменклатуры.Номенклатура);
НовСтрока.Субконто = НовСтрока.Номенклатура.НоменклатурнаяГруппа;
НовСтрока.Количество = Стр.Количество;
НовСтрока.Сумма = Стр.СуммаСНДС;
// LS.AKU.10.08.2018 ->
//НовСтрока.Цена = Стр.Цена;
НовСтрока.Цена = ?(ЗначениеЗаполнено(Стр.Количество), Стр.СуммаСНДС/Стр.Количество, 0);
//<-
НовСтрока.СтавкаНДС = НайтиПеречисление(УТ.XMLСтрока(Стр.СтавкаНДС), "НДС");
НовСтрока.СуммаНДС = Стр.СуммаНДС;
НовСтрока.ЕдиницаИзмерения = НовСтрока.Номенклатура.ЕдиницаИзмерения;
НовСтрока.Коэффициент = 1;
Если УТ.XMLСтрока(РеализацияУТ.Статус) = "Отгружено" Тогда
НовСтрока.НомерГТД = НайтиГТД(Стр.НомерГТД.Код);
НовСтрока.СтранаПроисхождения = НайтиСтрану(Стр.НомерГТД.СтранаПроисхождения);
КонецЕсли;
КонецЦикла;
Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВТабличнойЧасти(НаклБух, "Товары");
// Услуги в отдельную ТЧ
ТоварыУТ = РеализацияУТ.Товары;
Для каждого Стр из ТоварыУТ Цикл
АналитикаНоменклатуры = Стр.АналитикаУчетаНоменклатуры;
Услуга = ?(УТ.XMLСтрока(АналитикаНоменклатуры.Номенклатура.ТипНоменклатуры)="Услуга", Истина, Ложь);
Если НЕ Услуга Тогда
Продолжить;
КонецЕсли;
НовСтрока = НаклБух.Услуги.Добавить();
НовСтрока.Номенклатура = НайтиНоменклатуру(АналитикаНоменклатуры.Номенклатура);
НовСтрока.Субконто = НовСтрока.Номенклатура.НоменклатурнаяГруппа;
НовСтрока.Количество = Стр.Количество;
НовСтрока.Сумма = Стр.СуммаСНДС;
НовСтрока.Цена = ?(ЗначениеЗаполнено(Стр.Количество), Стр.СуммаСНДС/Стр.Количество, 0);
НовСтрока.СтавкаНДС = НайтиПеречисление(УТ.XMLСтрока(Стр.СтавкаНДС), "НДС");
НовСтрока.СуммаНДС = Стр.СуммаНДС;
КонецЦикла;
Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВТабличнойЧасти(НаклБух, "Услуги");
//<-
КонецЦикла;
Попытка
Если НЕ ПроводитьДокументы Тогда
НаклБух.Записать(РежимЗаписиДокумента.Запись);
Для каждого ДОКУТ Из ДокументыДляПереноса Цикл
РеализацияУТ = УТ.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ДОКУТ.Номер, ДОКУТ.Дата); //НАШЛИ ДОКУМЕНТ В БАЗЕ УТ
ЗаписатьУИД(НаклБух, УТ.XMLString(РеализацияУТ.УникальныйИдентификатор()));
//ОбъектУТРеализация = РеализацияУТ.GetObject();
//ОбъектУТРеализация.АМ_ЗагруженВБухгалтерию = Истина;
//ОбъектУТРеализация.Записать();
КонецЦикла;
Иначе
НаклБух.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Для каждого ДОКУТ Из ДокументыДляПереноса Цикл
РеализацияУТ = УТ.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ДОКУТ.Номер, ДОКУТ.Дата); //НАШЛИ ДОКУМЕНТ В БАЗЕ УТ
ЗаписатьУИД(НаклБух, УТ.XMLString(РеализацияУТ.УникальныйИдентификатор()));
//ОбъектУТРеализация = РеализацияУТ.GetObject();
//ОбъектУТРеализация.АМ_ЗагруженВБухгалтерию = Истина;
//ОбъектУТРеализация.Записать();
КонецЦикла;
Сообщить("Создан документ РеализацияТоваровУслуг: """ + НаклБух.Номер + """ от: " + Формат(НаклБух.Дата, "ДЛФ=Д"));
КонецЕсли;
Исключение
НаклБух.Записать(РежимЗаписиДокумента.Запись);
Для каждого ДОКУТ Из ДокументыДляПереноса Цикл
РеализацияУТ = УТ.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(ДОКУТ.Номер, ДОКУТ.Дата); //НАШЛИ ДОКУМЕНТ В БАЗЕ УТ
ЗаписатьУИД(НаклБух, УТ.XMLString(РеализацияУТ.УникальныйИдентификатор()));
//ОбъектУТРеализация = РеализацияУТ.GetObject();
//ОбъектУТРеализация.АМ_ЗагруженВБухгалтерию = Истина;
//ОбъектУТРеализация.Записать();
КонецЦикла;
КонецПопытки;
Иначе
Сообщить("Нельзя выбрать документ для которых уже есть сссылки в БП 3.0");
КонецЕсли;
Иначе
Сообщить("Объединение документов возможно только по одному контрагенту.");
КонецЕсли;
СообщитьЗаписатьВЛог(" ");
СообщитьЗаписатьВЛог("****** Перенос документов успешно завершен! ******");
УТ = "";
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот