Имя: Пароль:
1C
1С v8
Передача ТаблицыЗначений в запросе
0 Alexsey58
 
10.10.12
10:53
Имеется ТаблицаЗначений содержащие документы ЗаказПокупателя, нужно создать документы, пишу через запрос, документы создаются, но в таблицу записывается весь товар, как сделать чтобы сортировался по Заказу документа, всю неделю вожусь не чего не поучается,
вот мой код:

         Для Каждого ТЗКл Из ТЗ Цикл
           Запрос = Новый Запрос;
           Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
           МенеджерТаблицыДанных = Запрос.МенеджерВременныхТаблиц;
           Запрос.Текст =
               "ВЫБРАТЬ
               |    ТЗ.Заказ КАК Заказ,
               |    ТЗ.Контрагент КАК Контрагент,
               |    ТЗ.Артикул КАК Артикул,
               |    ТЗ.Производитель КАК Производитель,
               |    ТЗ.Цена КАК Цена,
               |    ТЗ.Сумма КАК Сумма,
               |    ТЗ.Оплачено КАК Оплачено,
               |    ТЗ.Долг КАК Долг,
               |    ТЗ.Номенклатура КАК Номенклатура,
               |    ТЗ.Количество КАК Количество
               |ПОМЕСТИТЬ ВремТаб_ТЗ
               |ИЗ
               |    &ТЗ КАК ТЗ
               |";
               Запрос.УстановитьПараметр("ТЗ", ТЗ);
               Запрос.Выполнить();
               
           ЗапросКбазеДанных = Новый Запрос;
           ЗапросКбазеДанных.МенеджерВременныхТаблиц = МенеджерТаблицыДанных;
           ЗапросКбазеДанных.Текст =
               "ВЫБРАТЬ
               |    ВремТаб_ТЗ.Заказ,
               |    ВремТаб_ТЗ.Контрагент,
               |    ВремТаб_ТЗ.Артикул,
               |    ВремТаб_ТЗ.Производитель,
               |    ВремТаб_ТЗ.Цена,
               |    ВремТаб_ТЗ.Сумма,
               |    ВремТаб_ТЗ.Оплачено,
               |    ВремТаб_ТЗ.Долг,
               |    ВремТаб_ТЗ.Номенклатура,
               |    ВремТаб_ТЗ.Количество,
               |    ЗаказПокупателя.Заказ КАК ЗаказКл
               |ИЗ
               |    ВремТаб_ТЗ КАК ВремТаб_ТЗ
               |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
               |        ПО ВремТаб_ТЗ.Заказ = ЗаказПокупателя.Заказ
               |";
               
               
               Выборка = ЗапросКбазеДанных.Выполнить().Выбрать();
               
               Докум = Документы.ЗаказПокупателя.СоздатьДокумент();
               Докум.Заказ = ТЗКл.Заказ;
               Докум.Контрагент = ТЗКл.Контрагент;
               ТаблЧасть = Докум.Товары;
               
               ТаблЧасть.Очистить();
               
               Пока Выборка.Следующий() Цикл
                   Строка = ТаблЧасть.Добавить();
                   Строка.Артикул = Выборка.Артикул;
                   Строка.Номенклатура = Выборка.Номенклатура;
                   Строка.Производитель = Выборка.Производитель;
                   Строка.Цена = Выборка.Цена;
                   Строка.Сумма = Выборка.Сумма;
                   Строка.Количество = Выборка.Количество;
                   Строка.Оплачено = Выборка.Оплачено;
                   Строка.Долг = Выборка.Долг;
               КонецЦикла;
               
           ФормадокументаЗаказКл = Докум.ПолучитьФорму();
           ////ФормадокументаЗаказКл.Записать();
           ФормадокументаЗаказКл.Открыть();
           
       КонецЦикла;
1 Нуф-Нуф
 
10.10.12
10:54
ужаснах
2 DrShad
 
10.10.12
10:55
(0) что за адский отжиг
3 GLazNik
 
10.10.12
10:56
Нифига не понял...
"но в таблицу записывается весь товар, как сделать чтобы сортировался по Заказу документа". Что таки надо? сортировать или еще чего?
4 Галахад
 
гуру
10.10.12
10:57
Наверное тута:
Запрос.УстановитьПараметр("ТЗ", ТЗКл);
5 DrShad
 
10.10.12
10:58
(4) т.е. ты предлагаешь передавать в запрос строку ТЗ?
6 Галахад
 
гуру
10.10.12
10:59
(5) Ага. Цикл же есть. Зачем он иначе?
7 Лефмихалыч
 
10.10.12
10:59
(0) ни чего не понятно. Чего ты добиться хочешь?
8 чеширский кот
 
10.10.12
11:00
А вообще это накой фиг надо то?
9 DrShad
 
10.10.12
11:01
(6) т.е. у тебя запросы умеют в качестве истоника данных хавать строки ТЗ?
10 Галахад
 
гуру
10.10.12
11:04
(9) А, ну да. Тогда наверное так ТЗКл.ТЗ
11 Alexsey58
 
10.10.12
11:04
есть xml-файл, нужно загружать его в 1с, в xml-файл содержит документ ЗаказПокупателя, т.к. документов за день может достигать 100 документов, решил сделать через запрос, выгрузил в ТаблицуЗначений и потом перенес в запрос,
стнруктура ТаблицыЗначений токава
   ТЗ = новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Заказ", Новый ОписаниеТипов("Строка"));
   ТЗ.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
   ТЗ.Колонки.Добавить("Ожидается", Новый ОписаниеТипов("Дата"));
   ТЗ.Колонки.Добавить("Баланс", Новый ОписаниеТипов("Число"));
   ТЗ.Колонки.Добавить("Срок", Новый ОписаниеТипов("Число"));
   ТЗ.Колонки.Добавить("ГарСрок", Новый ОписаниеТипов("Число"));
   ТЗ.Колонки.Добавить("Направление", Новый ОписаниеТипов("Строка"));
   ТЗ.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка"));
   ТЗ.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
   ТЗ.Колонки.Добавить("Производитель", Новый ОписаниеТипов("Строка"));
   ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Строка"));
   ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
   ТЗ.Колонки.Добавить("Оплачено", Новый ОписаниеТипов("Число"));
   ТЗ.Колонки.Добавить("Долг", Новый ОписаниеТипов("Число"));
   ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));      
   ТЗ.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));      
   ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));      

контрагент, заказывает несколько позиции товара, в ТЗ это отображается как отдельная строка, вот нужно сделать отбор по "Заказу"
12 pumbaEO
 
10.10.12
11:08
100 заказов? Фигня.



Процедура СозданиеЗаказа()
   
   ТЗ = Заказы = Новый ТаблицаЗначений;
   Заказы.Колонки.Добавить("Заказ", Новый ОписаниеТипов("ДокументСсылка.ЗаказПокупателя"));
   ТЗЗаказы = ТЗ.Скопировать("Заказ");
   ТЗЗаказы.Свернуть("Заказ", "");
   
   Для каждого СтрокаТаблицы Из ТЗЗаказы Цикл
       СтруктураОтбора = Новый Структура;
       СтруктураОтбора.Вставить("Заказ", СтрокаТаблицы.Заказ);
       
       НайденныеСтроки = ТЗ.НайтиСтроки(СтруктураОтбора);
       Если НайденныеСтроки.Количество() > 0 Тогда
           //{ Создание документа "Заказ покупателя" в докЗаказПокупателя
           докЗаказПокупателя = Документы.ЗаказПокупателя.СоздатьДокумент();
           //{  Заполнение реквизитов
           докЗаказПокупателя.АдресДоставки                             = ; // Строка
           докЗаказПокупателя.ВалютаДокумента                           = ; // СправочникСсылка.Валюты / (Общ)
           докЗаказПокупателя.УдалитьВремяНапоминания                   = ; // Дата / (Упр)
           докЗаказПокупателя.ДатаОплаты                                = ; // Дата / (Упр)
           докЗаказПокупателя.ДатаОтгрузки                              = ; // Дата / (Упр)
           докЗаказПокупателя.ДисконтнаяКарта                           = ; // СправочникСсылка.ИнформационныеКарты
           докЗаказПокупателя.ДоговорКонтрагента                        = ; // СправочникСсылка.ДоговорыКонтрагентов / (Общ)
           докЗаказПокупателя.ИспользоватьПлановуюСебестоимость         = ; // Булево / (Общ)
           докЗаказПокупателя.ИтогПлановаяСебестоимость                 = ; // Число / (Общ)
           докЗаказПокупателя.Комментарий                               = ; // Строка / (Общ) Любая дополнительная информация
           докЗаказПокупателя.Контрагент                                = ; // СправочникСсылка.Контрагенты / (Общ)
           докЗаказПокупателя.КратностьВзаиморасчетов                   = ; // Число / (Общ)
           докЗаказПокупателя.КурсВзаиморасчетов                        = ; // Число / (Общ) Курс валюты взаиморасчетов по договору
           докЗаказПокупателя.УдалитьНапомнитьОСобытии                  = ; // Булево / (Упр)
           докЗаказПокупателя.Организация                               = ; // СправочникСсылка.Организации / (Общ)
           докЗаказПокупателя.Ответственный                             = ; // СправочникСсылка.Пользователи / (Общ)
           докЗаказПокупателя.Подразделение                             = ; // СправочникСсылка.Подразделения / (Упр)
           докЗаказПокупателя.СтруктурнаяЕдиница                        = ; // СправочникСсылка.БанковскиеСчета, СправочникСсылка.Кассы / (Общ)
           докЗаказПокупателя.СкладГруппа                               = ; // СправочникСсылка.Склады, СправочникСсылка.ГруппыДоступностиСкладов / (Общ)
           докЗаказПокупателя.СуммаВключаетНДС                          = ; // Булево / (Общ)
           докЗаказПокупателя.СуммаДокумента                            = ; // Число / (Общ) Сумма в валюте документа, налоги включены согласно флагам
           докЗаказПокупателя.ТипЦен                                    = ; // СправочникСсылка.ТипыЦенНоменклатуры / (Общ)
           докЗаказПокупателя.УдалитьКонтактноеЛицо                     = ; // СправочникСсылка.КонтактныеЛица / (Упр)
           докЗаказПокупателя.УчитыватьНДС                              = ; // Булево / (Общ)
           докЗаказПокупателя.АвторасчетНДС                             = ; // Булево
           докЗаказПокупателя.Грузополучатель                           = ; // СправочникСсылка.Контрагенты / (Общ)
           докЗаказПокупателя.КонтактноеЛицоКонтрагента                 = ; // СправочникСсылка.КонтактныеЛицаКонтрагентов
           докЗаказПокупателя.УсловиеПродаж                             = ; // СправочникСсылка.УсловияПродаж
           докЗаказПокупателя.ДополнениеКАдресуДоставки                 = ; // Строка
           докЗаказПокупателя.ДокументОснование                         = ; // ДокументСсылка.Событие, ДокументСсылка.ЗаказПоставщику, ДокументСсылка.СчетНаОплатуПокупателю, ДокументСсылка.Order
           докЗаказПокупателя.Грузоотправитель                          = ; // СправочникСсылка.Контрагенты / (Общ)
           докЗаказПокупателя.НомерВходящегоДокументаЭлектронногоОбмена = ; // Строка
           докЗаказПокупателя.ДатаВходящегоДокументаЭлектронногоОбмена  = ; // Дата
           докЗаказПокупателя.ТорговаяТочка                             = ; // СправочникСсылка.ТорговыеТочки
           докЗаказПокупателя.ТорговыйАгент                             = ; // СправочникСсылка.ТорговыеАгенты
           докЗаказПокупателя.СтадияДокумента                           = ; // СправочникСсылка.ДО_СтадииДокументов
           докЗаказПокупателя.Форма2                                    = ; // Булево
           докЗаказПокупателя.ОплатаПоФакту                             = ; // Булево
           докЗаказПокупателя.РазрешенаОтгрузка                         = ; // Булево
           докЗаказПокупателя.РазшешилОтгрузку                          = ; // СправочникСсылка.Пользователи
           докЗаказПокупателя.ВесНакладной                              = ; // Число / В КГ
           докЗаказПокупателя.ОбъемНакладной                            = ; // Число
           докЗаказПокупателя.Ассортимент                               = ; // Число
           докЗаказПокупателя.РезервПодЗаказПокупателя                  = ; // Булево
           докЗаказПокупателя.МножетвеннаяОтгрузка                      = ; // Булево
           докЗаказПокупателя.ТерриториальноеПодразделение              = ; // СправочникСсылка.Подразделения / (Упр)
           докЗаказПокупателя.ОтключитьКонтрольКратности                = ; // Булево
           докЗаказПокупателя.НужнаФорма2                               = ; // Булево
           //}  Заполнение реквизитов
           //{  Заполнение табличных частей
           //{   Заполнение табличной части Товары
           Для Каждого ЭлементМассива Из НайденныеСтроки Цикл
               докЗаказПокупателяСтрока = докЗаказПокупателя.Товары.Добавить();
               докЗаказПокупателяСтрока.ЕдиницаИзмерения                    = ; // СправочникСсылка.ЕдиницыИзмерения / (Общ)
               докЗаказПокупателяСтрока.ЕдиницаИзмеренияМест                = ; // СправочникСсылка.ЕдиницыИзмерения / (Общ)
               докЗаказПокупателяСтрока.Количество                          = ; // Число / (Общ)
               докЗаказПокупателяСтрока.КоличествоМест                      = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Коэффициент                         = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Номенклатура                        = ; // СправочникСсылка.Номенклатура / (Общ)
               докЗаказПокупателяСтрока.ПлановаяСебестоимость               = ; // Число / (Общ)
               докЗаказПокупателяСтрока.ПроцентСкидкиНаценки                = ; // Число / (Общ) Процент скидки (если данная скидка детализируется по позициям номенклатуры, то является значением по умолчанию)
               докЗаказПокупателяСтрока.Размещение                          = ; // ДокументСсылка.ЗаказПоставщику, СправочникСсылка.Склады, ДокументСсылка.ВнутреннийЗаказ / (Общ)
               докЗаказПокупателяСтрока.СтавкаНДС                           = ; // ПеречислениеСсылка.СтавкиНДС / (Общ)
               докЗаказПокупателяСтрока.Сумма                               = ; // Число / (Общ)
               докЗаказПокупателяСтрока.СуммаНДС                            = ; // Число / (Общ)
               докЗаказПокупателяСтрока.ХарактеристикаНоменклатуры          = ; // СправочникСсылка.ХарактеристикиНоменклатуры / (Общ)
               докЗаказПокупателяСтрока.Цена                                = ; // Число / (Общ)
               докЗаказПокупателяСтрока.ПроцентАвтоматическихСкидок         = ; // Число
               докЗаказПокупателяСтрока.УсловиеАвтоматическойСкидки         = ; // ПеречислениеСсылка.УсловияСкидкиНаценки / (Общ) Условие скидки-наценки
               докЗаказПокупателяСтрока.ЗначениеУсловияАвтоматическойСкидки = ; // СправочникСсылка.ВидыДисконтныхКарт, СправочникСсылка.ИнформационныеКарты, Число / (Общ) Значение условия скидки
               докЗаказПокупателяСтрока.КлючСтроки                          = ; // Число
               докЗаказПокупателяСтрока.СерияНоменклатуры                   = ; // СправочникСсылка.СерииНоменклатуры
           КонецЦикла;
           //}   Заполнение табличной части Товары
           //{   Заполнение табличной части ВозвратнаяТара
           Для Каждого Из Цикл
               докЗаказПокупателяСтрока = докЗаказПокупателя.ВозвратнаяТара.Добавить();
               докЗаказПокупателяСтрока.Номенклатура = ; // СправочникСсылка.Номенклатура / (Общ)
               докЗаказПокупателяСтрока.Количество   = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Цена         = ; // Число / (Общ) Оценочная стоимость возвратной тары в валюте взаиморасчетов
               докЗаказПокупателяСтрока.Сумма        = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Размещение   = ; // ДокументСсылка.ЗаказПоставщику, СправочникСсылка.Склады, ДокументСсылка.ВнутреннийЗаказ / (Общ)
           КонецЦикла;
           //}   Заполнение табличной части ВозвратнаяТара
           //{   Заполнение табличной части Услуги
           Для Каждого Из Цикл
               докЗаказПокупателяСтрока = докЗаказПокупателя.Услуги.Добавить();
               докЗаказПокупателяСтрока.Содержание                          = ; // Строка / (Общ)
               докЗаказПокупателяСтрока.Количество                          = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Цена                                = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Сумма                               = ; // Число / (Общ)
               докЗаказПокупателяСтрока.СтавкаНДС                           = ; // ПеречислениеСсылка.СтавкиНДС / (Общ)
               докЗаказПокупателяСтрока.СуммаНДС                            = ; // Число / (Общ)
               докЗаказПокупателяСтрока.Номенклатура                        = ; // СправочникСсылка.Номенклатура / (Общ)
               докЗаказПокупателяСтрока.ПроцентСкидкиНаценки                = ; // Число / (Общ) Процент скидки (если данная скидка детализируется по позициям номенклатуры, то является значением по умолчанию)
               докЗаказПокупателяСтрока.ПроцентАвтоматическихСкидок         = ; // Число
               докЗаказПокупателяСтрока.УсловиеАвтоматическойСкидки         = ; // ПеречислениеСсылка.УсловияСкидкиНаценки / (Общ) Условие скидки-наценки
               докЗаказПокупателяСтрока.ЗначениеУсловияАвтоматическойСкидки = ; // СправочникСсылка.ВидыДисконтныхКарт, СправочникСсылка.ИнформационныеКарты, Число / (Общ) Значение условия скидки
           КонецЦикла;
           //}   Заполнение табличной части Услуги
           //{   Заполнение табличной части СоставНабора
           Для Каждого Из Цикл
               докЗаказПокупателяСтрока = докЗаказПокупателя.СоставНабора.Добавить();
               докЗаказПокупателяСтрока.Номенклатура               = ; // СправочникСсылка.Номенклатура / (Общ)
               докЗаказПокупателяСтрока.ХарактеристикаНоменклатуры = ; // СправочникСсылка.ХарактеристикиНоменклатуры / (Общ)
               докЗаказПокупателяСтрока.Количество                 = ; // Число / (Общ)
               докЗаказПокупателяСтрока.ЕдиницаИзмерения           = ; // СправочникСсылка.ЕдиницыИзмерения / (Общ)
               докЗаказПокупателяСтрока.КлючСтроки                 = ; // Число
               докЗаказПокупателяСтрока.Цена                       = ; // Число
               докЗаказПокупателяСтрока.СерияНоменклатуры          = ; // СправочникСсылка.СерииНоменклатуры
           КонецЦикла;
           //}   Заполнение табличной части СоставНабора
           //}  Заполнение табличных частей
           //} Создание документа ЗаказПокупателя в докЗаказПокупателя
           
       КонецЕсли;
       
   КонецЦикла;
КонецПроцедуры
13 Галахад
 
гуру
10.10.12
11:08
О, почти угадал.
14 DrShad
 
10.10.12
11:09
(11) грузи сразу из XML и не парь мозг людям
15 DrShad
 
10.10.12
11:09
(13) что ты угадал? иди мотивацию свою повышай
16 чеширский кот
 
10.10.12
11:09
Ну просто не вижу смысла. Ты то уже на стадии загрузки из xml сформировал таблицу значений, зачем еще раз её "маслать"
17 чеширский кот
 
10.10.12
11:10
В первую очередь упорядочить таблицу по заказу
18 Галахад
 
гуру
10.10.12
11:11
(15) Чо нервный такой?
19 DrShad
 
10.10.12
11:11
(16) зачем ее вообще создавать? тупо на чтении XML писать документы
20 DrShad
 
10.10.12
11:11
(18) не тупи
21 чеширский кот
 
10.10.12
11:13
(19) Тоже логично. Но лучше когда есть стресоустойчивость кода.
22 чеширский кот
 
10.10.12
11:14
Создание документов при чтении может выйти боком даже при использовании исключительных ситуаций!
23 DrShad
 
10.10.12
11:15
(22) да ладно!? а как же тогда обмены проходят?
24 Alexsey58
 
10.10.12
11:15
100 заказов в среднем, был один день xml содержал 1000 заказов, выгрузку напрямую проше реализовать но не надежно
25 Галахад
 
гуру
10.10.12
11:16
(20) Почему нет? Именно этим я сейчас и занимаюсь. Туплю в Инете. Ты тоже.
26 чеширский кот
 
10.10.12
11:17
(23) Проходят, согласен. И очень много в них смущает!
27 DrShad
 
10.10.12
11:21
(26) например? имхается ты просто не умеешь их готовить
28 чеширский кот
 
10.10.12
11:21
У тебя в ТЗ.Заказ что конкретно попадает?
29 DrShad
 
10.10.12
11:22
(28) судя по коду какая-то строка
30 чеширский кот
 
10.10.12
11:24
(29) Строка понятно. Код заказа или например "Заказ №24 от 10.10.12"
31 pumbaEO
 
10.10.12
11:26
(30) а какая разница ?
32 DrShad
 
10.10.12
11:27
(31) +1, имхо однокуйственно
33 Alexsey58
 
10.10.12
11:27
строка "А1-5225/3077"
34 чеширский кот
 
10.10.12
11:28
(31) решил уточнить ... код я тута пишу
35 DrShad
 
10.10.12
11:29
(34) решил за него написать!?
36 pumbaEO
 
10.10.12
11:31
(35) а что там писать, 3 конструктора вызвать.
37 чеширский кот
 
10.10.12
11:32
Для Каждого ТекСтрока Из ТаблицаЗначений Цикл
       ИскомыйЗаказ = Документы.ЗаказПокупателя.НайтиПоНомеру(ТекСтрока.Заказ);
       Если ИскомыйЗаказ = Неопределено Тогда
           НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
           //Присваиваем реквизиты шапки
           НоваяСтрокаДокумента = НовыйДокумент.Товары.Добавить();
           //Присваиваем реквизиты строки
       Иначе
           НоваяСтрокаДокумента = ИскомыйЗаказ.Товары.Добавить();
           //Присваиваем реквизиты строки
       КонецЕсли;    
   КонецЦикла;
38 чеширский кот
 
10.10.12
11:33
Принцип ясен?
39 DrShad
 
10.10.12
11:33
(37) ужас не менее адский
40 чеширский кот
 
10.10.12
11:34
(39) Чем тебя пугает "принцип топора" ?
41 pumbaEO
 
10.10.12
11:35
(37) свойства в типовых не для того сделанны, что бы потом искать заказы по номеру документа.
42 чеширский кот
 
10.10.12
11:35
ОООО ... хотя можно по другому
43 чеширский кот
 
10.10.12
11:36
(41) жду твоего варианта
44 чеширский кот
 
10.10.12
11:36
мне всегда приятно узнать что то новое 8)
45 Alexsey58
 
10.10.12
11:37
запрос выкидывать?, так суть ясна
46 Alexsey58
 
10.10.12
11:38
просто некоторые предлогали, выгрузит в ТЗ потом через запрос загружать в документ
47 чеширский кот
 
10.10.12
11:44
тип базы какой?
48 Alexsey58
 
10.10.12
11:54
загрузка с интернет-магазина по xml-файлу, 1с на postgreSQL, так-как, база будет рости постоянно
49 sttt
 
10.10.12
12:40
да уж, а я без работы сижу... что делаю не так?