Имя: Пароль:
1C
 
Выбор по группировкам в Таблице Значений
0 Falex
 
05.11.07
01:14
Есть таблица значений:
   Таблица=Новый ТаблицаЗначений;
   Таблица.Колонки.Добавить("Контрагент");
   Таблица.Колонки.Добавить("Договор");
   Таблица.Колонки.Добавить("Аппарат");
   Таблица.Колонки.Добавить("Цена");
В моем примере получено что-то подобное:
1. Контрагент1, Дог1,Ап1,100;
2. Контрагент1, Дог2,Ап2,100;
3. Контрагент3, Дог3,Ап3,100;
4. Контрагент4, Дог4,Ап4,100;

Дальше мне надо создать по одному документу для каждого контрагента (т.е. в данном случае 3 документа) и заполнить таюл.часть. Проблема в том как создать эти 3 документ как бы группируя таблицу значений по контрагенту. Я попробовал вот так, но не работает:
            Если Таблица.Количество()>0 Тогда
                тмп=Справочники.Контрагенты.ПустаяСсылка();
                Для Каждого Строка из Таблица Цикл
                    Если Строка.Контрагент<>тмп Тогда
                        Док=Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
                        Док.Организация=Справочники.Организации.НайтиПоКоду("00001");
                        Док.Контрагент=Строка.Контрагент;
                        Док.Дата=ТекущаяДата();
                        Док.ДоговорКонтрагента=Строка.Договор;
                        Док.СтруктурнаяЕдиница=Справочники.БанковскиеСчета.НайтиПоКоду("00001");
                        Услуги=Док.Услуги.Добавить();
                        Услуги.Номенклатура=Справочники.Номенклатура.ТехническоеОбслуживание;
                        Услуги.Содержание=Услуги.Номенклатура.Наименование;
                        Услуги.Количество=1;
                        Услуги.Цена=Строка.Цена;
                        Услуги.Сумма=Услуги.Количество*Услуги.Цена;
                        Услуги.ДляТовара=Строка.Аппарат;
                        Услуги.СтавкаНДС=Услуги.Номенклатура.СтавкаНДС;
                    Иначе
                        Док.ПолучитьФорму("ФормаДокумента").Открыть();
                    КонецЕсли;
                    тмп=Строка.Контрагент;
                КонецЦикла;
            КонецЕсли;
1 ТелепатБот
 
гуру
05.11.07
01:14
2 Falex
 
05.11.07
01:15
Перенесите пожалуйста в тему 1С 8.0. Опять забыл это сделать (
3 lamme
 
05.11.07
05:39
(0)
начинай обход своей таблицы -не с первой строки, а с последней.
т.е. первый создавай док для Контрагент4 и тд.
4 lamme
 
05.11.07
05:40
(было подоное - когда при прямом обходе ТЗ - создавался первый док - и все. Остальне -не хотели. Почему -хз. Обход снизу вверх - помог)
5 у лю 427
 
05.11.07
06:31
ламо - оно и есть ламо...
6 lamme
 
05.11.07
06:37
(5)
завидуешь нику ?
или как ?
7 Falex
 
05.11.07
10:25
А можно пример как делать обход в моем случае.
8 IronDemon
 
05.11.07
10:37
Выгрузи контрагентов в отдельную таблицу, сверни её. Делаешь обход её и отбор в исходной таблице записей с текущим контрагентом.
9 Falex
 
05.11.07
10:54
Не понял.Просто я новичок в этом деле.Вы бы не могли привести пример кода в моем случае пожалуйста.
10 anb
 
05.11.07
11:00
- отсортировать таблицу по контрагенту.
- по прямой обходить,
- при смене контрагента создавать новый док
11 mikecool
 
05.11.07
11:03
гм... если таблица заполнена запросом(не вижу препятствий чтобы заполнить ее запросом), то нафик вообще таблица??
12 Falex
 
05.11.07
14:37
Таблица уже отсортирована по контрагенту.
Так как мнее узнать,что контрагент сменился?Можно кодом показать.
13 MaxiSoft
 
05.11.07
17:00
Если Таблица.Количество()>0 Тогда
                тмп=Справочники.Контрагенты.ПустаяСсылка();
                Для Каждого Строка из Таблица Цикл
                Если (Строка.Контрагент<>тмп) И (тмп <> Справочники.Контрагенты.ПустаяСсылка()) Тогда
                      Док.Записать();
                КонецЕсли;        
                Если Строка.Контрагент<>тмп Тогда
                        Док=Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
                        Док.Организация=Справочники.Организации.НайтиПоКоду("00001");
                        Док.Контрагент=Строка.Контрагент;
                        Док.Дата=ТекущаяДата();
                        Док.ДоговорКонтрагента=Строка.Договор;
                        Док.СтруктурнаяЕдиница=Справочники.БанковскиеСчета.НайтиПоКоду("00001");
                        Услуги=Док.Услуги.Добавить();
                        Услуги.Номенклатура=Справочники.Номенклатура.ТехническоеОбслуживание;
                        Услуги.Содержание=Услуги.Номенклатура.Наименование;
                        Услуги.Количество=1;
                        Услуги.Цена=Строка.Цена;
                        Услуги.Сумма=Услуги.Количество*Услуги.Цена;
                        Услуги.ДляТовара=Строка.Аппарат;
                        Услуги.СтавкаНДС=Услуги.Номенклатура.СтавкаНДС;
                    Иначе
                        Услуги=Док.Услуги.Добавить();
                                Услуги.Номенклатура=Справочники.Номенклатура.ТехническоеОбслуживание;
                        Услуги.Содержание=Услуги.Номенклатура.Наименование;
                        Услуги.Количество=1;
                        Услуги.Цена=Строка.Цена;
                        Услуги.Сумма=Услуги.Количество*Услуги.Цена;
                        Услуги.ДляТовара=Строка.Аппарат;
                        Услуги.СтавкаНДС=Услуги.Номенклатура.СтавкаНДС;  
                    КонецЕсли;
                    тмп=Строка.Контрагент;
                КонецЦикла;
            КонецЕсли;
Основная теорема систематики: Новые системы плодят новые проблемы.