Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:06

Разделение документа на несколько частей.

Автор Hit08, 16 янв 2019, 15:54

0 Пользователей и 1 гость просматривают эту тему.

Hit08

Добрый вечер! Хотел бы посоветоваться с вами, уважаемые участники форума.

Ситуация такая - есть документ, в ТЧ которого может быть какое угодно количество строк. Есть команда для разделения данного документа на части, а именно - при нажатии кнопки в основном(текущем) документе остается 20 строк, а остальные строки делятся между новыми документами. На данный момент деление происходит некорректно, к примеру в основном документе есть 65 строк, при нажатии на кнопку Разделить в нем остается 20 строчек в ТЧ, в следующем документе - 25 строчек, и в последнем - 20 строчек. А нужно чтобы делилось так - в основном 20 строчек, в следующем 20, в другом еще 20, а в третьем 5 строк. Подскажите пожалуйста, как можно это реализовать? Код запроса прилагаю ниже:

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

   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   МассивРезультатЗапроса = Запрос.ВыполнитьПакет();
   
   //Выборки
   Шапка = МассивРезультатЗапроса[0].Выбрать();
   
   Шапка.Следующий();
   
   Строки = Шапка.СоставТМЗ.Выбрать();   

   
   ТребуетсяСозданиеДокумента = Истина;
   КонечнаяСтрока =Строки.Количество();//20;
   СписаноСтрок = 0;//20;
   
   
   
   ОсталосьРазделить = Строки.Количество();
   
   
   Пока Строки.Следующий() цикл
      
      Если ТребуетсяСозданиеДокумента тогда
         
         НовыйДокумент = Документы.СчетФактураВыданная.СоздатьДокумент();
         ЗаполнитьЗначенияСвойств(НовыйДокумент,Шапка);
         
         ТребуетсяСозданиеДокумента = Ложь;
         
      КонецЕсли;
      
      НоваяСтрока = НовыйДокумент.СоставТМЗ.Добавить();
      ЗаполнитьЗначенияСвойств(НоваяСтрока,Строки);
      
      Если Строки.НомерСтроки = КонечнаяСтрока тогда
         
         Попытка
            
            НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Создан документ " + НовыйДокумент.Ссылка;
            Сообщение.Сообщить();
            
         Исключение
            
            Сообщить(ОписаниеОшибки());
            
         КонецПопытки;
         
         ТребуетсяСозданиеДокумента = Истина;
                                                          
         ОсталосьРазделить = ОсталосьРазделить - СписаноСтрок;
         СписаноСтрок = Мин(ОсталосьРазделить,20);
         КонечнаяСтрока = КонечнаяСтрока + СписаноСтрок;
         
      КонецЕсли;
      
   КонецЦикла;
   
       СоставТМЗ.Загрузить(МассивРезультатЗапроса[1].Выгрузить());
   
КонецПроцедуры

LexaK

запрос-то тут причем? просто один проход циклом по ТЧ
если помогло нажмите: Спасибо!

Похожие темы (5)

Рейтинг@Mail.ru

Поиск