Имя: Пароль:
1C
1С v8
как занести значения из ТЗ в одну ячейку документа?
,
0 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;
                    ТабДок.Вывести(ОбластьЗначенияТабл);
            КонецЦикла;
1 D_E_S_131
 
15.06.20
15:12
Выбирай стразу из ТЧ "Экземпляры" и группируй, суммируя КолвоПодл и КолЛистов.
2 1Слайт
 
15.06.20
15:15
(1) прбовала, но тоже что -то не пошло... сейчас еще раз попробую(
3 D_E_S_131
 
15.06.20
15:22
(2) У Вас номера из таблицы могут находиться либо в тч "Экземпляры", либо в реквизите "ДецНомер"?
4 1Слайт
 
15.06.20
15:28
(3) децНомер - это ТЧ на форме, там пользователь отбирает список номеров документов, которые нужно обработать
ТЧ Экземпляры это таблица непосредственно в документе, который мы отобрали по Децномеру
5 D_E_S_131
 
15.06.20
15:33
(4) А тогда чего выбираются данные в ВТ1 по данным в таблице?
6 Ёпрст
 
15.06.20
15:35
(0) Так примерно:

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

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

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

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