Имя: Пароль:
1C
1С v8
Связать набор записи и виртуальную таблицу остатков
0 Domanoff26
 
03.10.11
10:20
перед записью регистра накопления, хочу связать набор записи(ЭтотОБъект) и таблицу остатков, помещаю набор записи во временную табл, потом делаю запрос где описываю временную таблицу, но только не знаю как мне описать видДвижения, и вообще правильно ли я делаю подчскажите
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц  = МенеджерВременныхТаблиц;
   Запрос.Текст ="ВЫБРАТЬ * Поместить врТЗ из &ТЗ как ТЗ";
   Запрос.УстановитьПараметр("ТЗ", ЭтотОбъект);
   
   Запрос = новый Запрос;
   Запрос.МенеджерВременныхТаблиц =МенеджерВременныхТаблиц;
   Запрос.Текст ="ВЫБРАТЬ
                 |    врТз.Номенклатура КАК Номенклатура,
                 |    врТз.ХарактиристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                 |    врТз.СерияНоменклатуры КАК СерияНоменклатуры,
                 |    врТз.Заказ КАК Заказ,
                 |    врТз.Размещение КАК Размещение,
                 |    врТз.Количество КАК КоличествоОстаток
                 |ИЗ
                 |    врТз КАК врТз
                 |
                 |ОБЪЕДИНИТЬ ВСЕ
                 |
                 |ВЫБРАТЬ
                 |    УчетТоваровПроверкаОстатки.Номенклатура,
                 |    УчетТоваровПроверкаОстатки.ХарактеристикаНоменклатуры,
                 |    УчетТоваровПроверкаОстатки.СерияНоменклатуры,
                 |    УчетТоваровПроверкаОстатки.Заказ,
                 |    УчетТоваровПроверкаОстатки.Размещение,
                 |    УчетТоваровПроверкаОстатки.КоличествоОстаток
                 |ИЗ
                 |    РегистрНакопления.УчетТоваровПроверка.Остатки КАК УчетТоваровПроверкаОстатки"
1 zbv
 
03.10.11
10:25
Запрос.УстановитьПараметр("ТЗ", ЭтотОбъект.Выгрузить());
2 zbv
 
03.10.11
10:28
ГДЕ
врТз.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
3 Domanoff26
 
03.10.11
10:29
(1) это да, а обязательно все поля описывать, или он сопоставит по названию все нормально, + мне нужен вид движения как его описывать и потом пользоваться им?
4 Domanoff26
 
03.10.11
10:29
(2) как его описать?
5 zbv
 
03.10.11
10:30
(4) в смысле описать ?
6 Domanoff26
 
03.10.11
10:32
(5) ну в смысле в описании временной таблицы, там где я начинаю связвать с табл остатков, я сначало делаю описание временной табл
7 Maxus43
 
03.10.11
10:33
(6) тип есть такой, вид движения накопления
8 Domanoff26
 
03.10.11
10:35
(7) а какой смысл в этих типах, если при закрытии конструктора они теряются?
9 zbv
 
03.10.11
10:38
(6) вот тут
Запрос.Текст ="ВЫБРАТЬ * Поместить врТЗ из &ТЗ как ТЗ";

ты описал все поля. Если надо какие-то конкретно, то так и пиши:
"ВЫбрать
ТЗ.ВидДвижения,
ТЗ.Номенклатура,
Тз.ХарактиристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
Тз.СерияНоменклатуры КАК СерияНоменклатуры,
Тз.Заказ КАК Заказ,
Тз.Размещение КАК Размещение,
Тз.Количество КАК КоличествоОстаток
Поместить врТЗ
из
&ТЗ как ТЗ
10 PCcomCat
 
03.10.11
10:42
А нельзя ли так:
Запрос.УстановитьПараметр("ТЗ", ЭтотОбъект.Выгрузить(,"ВидДвижения,Номенклатура,..."));
?
11 Domanoff26
 
03.10.11
11:46
чего то не видит запрос мой набор записи , находит только количество и то неопрделено, может его как то представлять надо?
  Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц  = МенеджерВременныхТаблиц;
   Запрос.Текст ="ВЫБРАТЬ
                 |    ТЗ.ВидДвижения,
                 |    ТЗ.Номенклатура,
                 |    ЕСТЬNULL(ТЗ.ХарактеристикаНоменклатуры, НЕОПРЕДЕЛЕНО) КАК ХарактеристикаНоменклатуры,
                 |    ЕСТЬNULL(ТЗ.СерияНоменклатуры, НЕОПРЕДЕЛЕНО) КАК СерияНоменклатуры,
                 |    ЕСТЬNULL(ТЗ.Заказ, НЕОПРЕДЕЛЕНО) КАК Заказ,
                 |    ЕСТЬNULL(ТЗ.Размещение, НЕОПРЕДЕЛЕНО) КАК Размещение,
                 |    ТЗ.Количество КАК Количество
                 |ПОМЕСТИТЬ врТЗ
                 |ИЗ
                 |    &ТЗ КАК ТЗ";
   Запрос.УстановитьПараметр("ТЗ", ЭтотОбъект.Выгрузить());
         Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();

   Запрос = новый Запрос;
   Запрос.МенеджерВременныхТаблиц =МенеджерВременныхТаблиц;
   Запрос.Текст ="ВЫБРАТЬ
                 |    запрос.Номенклатура,
                 |    запрос.ХарактеристикаНоменклатуры,
                 |    запрос.СерияНоменклатуры,
                 |    запрос.Заказ,
                 |    запрос.Размещение,
                 |    запрос.КоличествоОстаток
                 |ИЗ
                 |    (ВЫБРАТЬ
                 |        врТз.Номенклатура КАК Номенклатура,
                 |        врТз.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                 |        врТз.СерияНоменклатуры КАК СерияНоменклатуры,
                 |        врТз.Заказ КАК Заказ,
                 |        врТз.Размещение КАК Размещение,
                 |        ВЫБОР
                 |            КОГДА врТз.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                 |                ТОГДА -1 * врТз.Количество
                 |            ИНАЧЕ врТз.Количество
                 |        КОНЕЦ КАК КоличествоОстаток
                 |    ИЗ
                 |        врТз КАК врТз
                 |    
                 |    ОБЪЕДИНИТЬ ВСЕ
                 |    
                 |    ВЫБРАТЬ
                 |        УчетТоваровПроверкаОстатки.Номенклатура,
                 |        УчетТоваровПроверкаОстатки.ХарактеристикаНоменклатуры,
                 |        УчетТоваровПроверкаОстатки.СерияНоменклатуры,
                 |        УчетТоваровПроверкаОстатки.Заказ,
                 |        УчетТоваровПроверкаОстатки.Размещение,
                 |        УчетТоваровПроверкаОстатки.КоличествоОстаток
                 |    ИЗ
                 |        РегистрНакопления.УчетТоваровПроверка.Остатки КАК УчетТоваровПроверкаОстатки) КАК запрос";
                 Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
12 Domanoff26
 
03.10.11
12:34
почему не выгружается этотОбъект, его надо как то приводить?
13 zbv
 
03.10.11
12:41
эти строки убери

   Выборка = Результат.Выбрать();

   Запрос = новый Запрос;
   Запрос.МенеджерВременныхТаблиц =МенеджерВременныхТаблиц;
14 Domanoff26
 
03.10.11
12:46
(13 ) не видит врТЗ
15 Domanoff26
 
03.10.11
12:52
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц  = МенеджерВременныхТаблиц;
   Запрос.Текст ="ВЫБРАТЬ
                 |    ТЗ.ВидДвижения,
                 |    ТЗ.Номенклатура,
                 |    ЕСТЬNULL(ТЗ.ХарактеристикаНоменклатуры, НЕОПРЕДЕЛЕНО) КАК ХарактеристикаНоменклатуры,
                 |    ЕСТЬNULL(ТЗ.СерияНоменклатуры, НЕОПРЕДЕЛЕНО) КАК СерияНоменклатуры,
                 |    ЕСТЬNULL(ТЗ.Заказ, НЕОПРЕДЕЛЕНО) КАК Заказ,
                 |    ЕСТЬNULL(ТЗ.Размещение, НЕОПРЕДЕЛЕНО) КАК Размещение,
                 |    ТЗ.Количество КАК Количество
                 |ПОМЕСТИТЬ врТЗ
                 |ИЗ
                 |    &ТЗ КАК ТЗ";
   Запрос.УстановитьПараметр("ТЗ", ЭтотОбъект.Выгрузить());
   //Запрос.УстановитьПараметр("ВидДвижения", ЭтотОбъект.ВыгрузитьКолонку("ВидДвижения"));
   //Запрос.УстановитьПараметр("Номенклатура", ЭтотОбъект.ВыгрузитьКолонку("Номенклатура"));
   //Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ЭтотОбъект.ВыгрузитьКолонку("ХарактеристикаНоменклатуры"));
   //Запрос.УстановитьПараметр("СерияНоменклатуры", ЭтотОбъект.ВыгрузитьКолонку("СерияНоменклатуры"));
   //Запрос.УстановитьПараметр("Заказ", ЭтотОбъект.ВыгрузитьКолонку("Заказ"));
   //Запрос.УстановитьПараметр("Размещение", ЭтотОбъект.ВыгрузитьКолонку("Размещение"));
   //Запрос.УстановитьПараметр("Размещение", ЭтотОбъект.ВыгрузитьКолонку("Размещение"));

   //      Результат = Запрос.Выполнить();
   //Выборка = Результат.Выбрать();

   //Запрос = новый Запрос;
   //Запрос.МенеджерВременныхТаблиц =МенеджерВременныхТаблиц;
   Запрос.Текст =Запрос.Текст + ";";
   Запрос.Текст =Запрос.Текст + "ВЫБРАТЬ
                 |    запрос.Номенклатура,
                 |    запрос.ХарактеристикаНоменклатуры,
                 |    запрос.СерияНоменклатуры,
                 |    запрос.Заказ,
                 |    запрос.Размещение,
                 |    запрос.КоличествоОстаток
                 |ИЗ
                 |    (ВЫБРАТЬ
                 |        врТз.Номенклатура КАК Номенклатура,
                 |        врТз.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                 |        врТз.СерияНоменклатуры КАК СерияНоменклатуры,
                 |        врТз.Заказ КАК Заказ,
                 |        врТз.Размещение КАК Размещение,
                 |        ВЫБОР
                 |            КОГДА врТз.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                 |                ТОГДА -1 * врТз.Количество
                 |            ИНАЧЕ врТз.Количество
                 |        КОНЕЦ КАК КоличествоОстаток
                 |    ИЗ
                 |        врТз КАК врТз
                 |    
                 |    ОБЪЕДИНИТЬ ВСЕ
                 |    
                 |    ВЫБРАТЬ
                 |        УчетТоваровПроверкаОстатки.Номенклатура,
                 |        УчетТоваровПроверкаОстатки.ХарактеристикаНоменклатуры,
                 |        УчетТоваровПроверкаОстатки.СерияНоменклатуры,
                 |        УчетТоваровПроверкаОстатки.Заказ,
                 |        УчетТоваровПроверкаОстатки.Размещение,
                 |        УчетТоваровПроверкаОстатки.КоличествоОстаток
                 |    ИЗ
                 |        РегистрНакопления.УчетТоваровПроверка.Остатки КАК УчетТоваровПроверкаОстатки) КАК запрос";
                 Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   пока выборка.Следующий() Цикл
       Если Выборка.КоличествоОстаток<0 Тогда
           ОбщегоНазначения.СообщитьОбОшибке("Проверка отрицательных остатков регистра ""Учет товаров"", отрицательные остатки по номенклатуре " + Выборка.Номенклатура
           + ?(ЗначениеЗаполнено(Выборка.Заказ)," ,по заказу " + Выборка.Заказ,"")+?(ЗначениеЗаполнено(Выборка.Размещение)," ,по размещению " + Выборка.Размещение,""),Отказ, , СтатусСообщения.Важное);
           Если ПараметрыСеанса.ПакетныйРежим Тогда
               Отказ = ложь;
           КонецЕсли;
       КонецЕСли;
       КонецЦикла;
   КОнецПроцедуры

останавливается на Выборка = Результат.Выбрать(); и долго че то выбирает, видимо все равно не видит набор
16 zbv
 
03.10.11
12:58
Запрос.Выполнить(); - оставь

Должно быть так:
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц  = МенеджерВременныхТаблиц;
ЗАпрос.Текст = //Создание временной таблицы
Запрос.Выполнить();

Запрос.Текст = //Работаем с Врем. табл. и другими данными
17 Domanoff26
 
03.10.11
13:10
(16) а таблицу остатков надо не только объеденять, но и ограничивать условием?
18 zbv
 
03.10.11
13:11
(17) не мешало бы, а то у тебя все остатки тянет.
19 Domanoff26
 
03.10.11
14:04
а перед записью регистра не делают проверки на отрицательность, и если да, то почему?