Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

как занести значения из ТЗ в одну ячейку документа?

как занести значения из ТЗ в одну ячейку документа?
Я
   1Слайт
 
15.06.20 - 14:47
Экземпляры - это таблица на форме с номерами экземпляров, это номера мне нужно вытащить. ТЗ может быть и пустая, а может содержать несколько значений
Отбираю документы.
в результате мне дает таблицу, но если если экземпляров несколько, то строки дублируются, при чем бредово(пример, отбираю 3 документа Док1(3 экз.), Док2 )(1 экз) и Док3 (0 экз.):
Документ       Экземпляр
Док1           Док1/1
Док1           Док1/1;
               Док1/2;
Док1           Док1/1;
               Док1/2;
               Док1/3
Док2           Док1/1;
               Док1/2;
               Док1/3;
               Док2/1;....

Если в документе нет экземпляров, как в Док3, то номера экземпляров других документов по документу тоже дублируются в его строке
Запрос6 = Новый Запрос;
            Запрос6.Текст =
            "ВЫБРАТЬ
            |    АрхивныйДокументЭкземпляры.Ссылка КАК Ссылка,
            |    АрхивныйДокументЭкземпляры.Номер КАК Номер
            |ПОМЕСТИТЬ ВТ
            |ИЗ
            |    Документ.АрхивныйДокумент.Экземпляры КАК АрхивныйДокументЭкземпляры
            |ГДЕ
            |    АрхивныйДокументЭкземпляры.Ссылка.ДецНомер В(&ТаблицаДецНомера)
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |    АрхивныйДокумент.Ссылка КАК Ссылка,
            |    АрхивныйДокумент.Дата КАК Дата,
            |    АрхивныйДокумент.ДецНомер КАК ДецНомер,
            |    АрхивныйДокумент.Наименование КАК Наименование,
            |    АрхивныйДокумент.КолвоПодл КАК КолвоПодл,
            |    АрхивныйДокумент.КолЛистов КАК КолЛистов
            |ПОМЕСТИТЬ ВТ1
            |ИЗ
            |    Документ.АрхивныйДокумент КАК АрхивныйДокумент
            |ГДЕ
            |    АрхивныйДокумент.ДецНомер В(&ТаблицаДецНомера)
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |    ВТ.Ссылка КАК Ссылка,
            |    ВТ.Номер КАК Номер,
            |    ВТ1.Ссылка КАК Ссылка1,
            |    ВТ1.Дата КАК Дата,
            |    ВТ1.ДецНомер КАК ДецНомер,
            |    ВТ1.Наименование КАК Наименование,
            |    ВТ1.КолвоПодл КАК КолвоПодл,
            |    ВТ1.КолЛистов КАК КолЛистов
            |ИЗ
            |    ВТ КАК ВТ,
            |    ВТ1 КАК ВТ1";
            к = 0;
            Запрос6.УстановитьПараметр("ТаблицаДецНомера", ТаблицаДецНомера);
            Выборка6 = Запрос6.Выполнить().Выбрать();
            Текст3 = "";
            Пока Выборка6.Следующий()Цикл
                    к = к+1;
                    Текст3 = Текст3 + Строка(Выборка6.Номер) + "; ";
                    Сообщить(Текст3);
                    ОбластьЗначенияТабл.Параметры.НомерПП = к;
                    ОбластьЗначенияТабл.Параметры.ДецНомер = Выборка6.ДецНомер;
                    ОбластьЗначенияТабл.Параметры.ДатаРег = Формат(Выборка6.Дата, "ДЛФ=Д");
                    ОбластьЗначенияТабл.Параметры.НаимДок = Выборка6.Наименование;
                    ОбластьЗначенияТабл.Параметры.КолЭкз = Выборка6.КолвоПодл;
                    ОбластьЗначенияТабл.Параметры.ЛистыЭкз = Выборка6.КолЛистов;
                    ОбластьЗначенияТабл.Параметры.ВсегоЛистов = ЧислоПрописью((Выборка6.КолЛистов*Выборка6.Колвоподл),"Л=ru_RU; НП=Ложь",",,,,,,,,0");
                    ОбластьЗначенияТабл.Параметры.НомерЭкз = Текст3;
                    ТабДок.Вывести(ОбластьЗначенияТабл);
            КонецЦикла;
   D_E_S_131
 
1 - 15.06.20 - 15:12
Выбирай стразу из ТЧ "Экземпляры" и группируй, суммируя КолвоПодл и КолЛистов.
   1Слайт
 
2 - 15.06.20 - 15:15
(1) прбовала, но тоже что -то не пошло... сейчас еще раз попробую(
   D_E_S_131
 
3 - 15.06.20 - 15:22
(2) У Вас номера из таблицы могут находиться либо в тч "Экземпляры", либо в реквизите "ДецНомер"?
   1Слайт
 
4 - 15.06.20 - 15:28
(3) децНомер - это ТЧ на форме, там пользователь отбирает список номеров документов, которые нужно обработать
ТЧ Экземпляры это таблица непосредственно в документе, который мы отобрали по Децномеру
   D_E_S_131
 
5 - 15.06.20 - 15:33
(4) А тогда чего выбираются данные в ВТ1 по данным в таблице?
   Ёпрст
 
6 - 15.06.20 - 15:35
(0) Так примерно:

            |ВЫБРАТЬ
            |    АрхивныйДокумент.Ссылка КАК Ссылка,
            |    АрхивныйДокумент.Дата КАК Дата,
            |    АрхивныйДокумент.ДецНомер КАК ДецНомер,
            |    АрхивныйДокумент.Наименование КАК Наименование,
            |    АрхивныйДокумент.КолвоПодл КАК КолвоПодл,
            |    АрхивныйДокумент.КолЛистов КАК КолЛистов,
            |    ЕстьNULL(АрхивныйДокументЭкземпляры.Номер,"""") как НомерЭкземпляра

            |ИЗ
            |    Документ.АрхивныйДокумент КАК АрхивныйДокумент
|левое соединение  Документ.АрхивныйДокумент.Экземпляры КАК АрхивныйДокументЭкземпляры ПО АрхивныйДокументЭкземпляры.ССылка = АрхивныйДокумент.ССылка
            |ГДЕ
            |    АрхивныйДокумент.ДецНомер В(&ТаблицаДецНомера)
            |ИТОГИ ПО ССылка

Далее обход группировки по итогам, на первом уровне твой документ, на втором, твои номера экземпляров, если есть
   Ёпрст
 
7 - 15.06.20 - 15:36
+6 и почитайте про cross join, который вы в первом запросе слепили, полезно
   1Слайт
 
8 - 16.06.20 - 10:35
ребят, туплю, в каждую следующую строчку с новым документом записываются номера экземпляров по предыдущим документам+по текущему
тыкните носом где ошибка

Запрос6.УстановитьПараметр("ТаблицаДецНомера", ТаблицаДецНомера);
            ВыборкаДокумента = Запрос6.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка"); 
            Текст3 = "";
            Пока ВыборкаДокумента.Следующий()Цикл
                ВыборкаЭкземпляров = ВыборкаДокумента.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номер");
                к = к+1;
                Пока ВыборкаЭкземпляров.Следующий()Цикл    
                    ОбластьЗначенияТабл.Параметры.НомерПП = к;
                    ОбластьЗначенияТабл.Параметры.ДецНомер = ВыборкаЭкземпляров.ДецНомер;
                    ОбластьЗначенияТабл.Параметры.ДатаРег = Формат(ВыборкаЭкземпляров.Дата, "ДЛФ=Д");
                    ОбластьЗначенияТабл.Параметры.НаимДок = ВыборкаЭкземпляров.Наименование;
                    ОбластьЗначенияТабл.Параметры.КолЭкз = ВыборкаЭкземпляров.КолвоПодл;
                    ОбластьЗначенияТабл.Параметры.ЛистыЭкз = ВыборкаЭкземпляров.КолЛистов;
                    ОбластьЗначенияТабл.Параметры.ВсегоЛистов = ЧислоПрописью((ВыборкаЭкземпляров.КолЛистов*ВыборкаЭкземпляров.Колвоподл),"Л=ru_RU; НП=Ложь",",,,,,,,,0");
                    Текст3 = Текст3 + Строка(ВыборкаЭкземпляров.Номер) + "; ";
                    Сообщить(Текст3);
                    ОбластьЗначенияТабл.Параметры.НомерЭкз = Текст3;
                КонецЦикла;
                    ТабДок.Вывести(ОбластьЗначенияТабл);
            КонецЦикла;
   Ёпрст
 
9 - 16.06.20 - 10:47
(8) открой для себя метод ЗаполнитьЗначенияСвойств, а так, Параметры очищай.
   1Слайт
 
10 - 16.06.20 - 10:51
(9) спасибо огромное!
   1Слайт
 
11 - 16.06.20 - 14:04
оказалось до бональности тупо - за циклом объявила переменную...
к = 0; 
            Запрос6.УстановитьПараметр("ТаблицаДецНомера", ТаблицаДецНомера);
            ВыборкаДокумента = Запрос6.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка"); 
            Пока ВыборкаДокумента.Следующий()Цикл  
                ВыборкаЭкземпляров = ВыборкаДокумента.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номер");
                к = к+1; 
                Текст3 = "";
                Пока ВыборкаЭкземпляров.Следующий() Цикл 
                    ОбластьЗначенияТабл.Параметры.НомерПП = к;
                    ОбластьЗначенияТабл.Параметры.ДецНомер = ВыборкаЭкземпляров.ДецНомер;
                    ОбластьЗначенияТабл.Параметры.ДатаРег = Формат(ВыборкаЭкземпляров.Дата, "ДЛФ=Д");
                    ОбластьЗначенияТабл.Параметры.НаимДок = ВыборкаЭкземпляров.Наименование;
                    ОбластьЗначенияТабл.Параметры.КолЭкз = ВыборкаЭкземпляров.КолвоПодл;
                    ОбластьЗначенияТабл.Параметры.ЛистыЭкз = ВыборкаЭкземпляров.КолЛистов;
                    ОбластьЗначенияТабл.Параметры.ВсегоЛистов = ЧислоПрописью((ВыборкаЭкземпляров.КолЛистов*ВыборкаЭкземпляров.Колвоподл),"Л=ru_RU; НП=Ложь",",,,,,,,,0");
                    Текст3 = Текст3 + Строка(ВыборкаЭкземпляров.Номер) + "; ";
                    Сообщить(Текст3);
                    ОбластьЗначенияТабл.Параметры.НомерЭкз = Текст3;
                КонецЦикла;
                ТабДок.Вывести(ОбластьЗначенияТабл);
            КонецЦикла;

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.