|
Обход запроса | ☑ | ||
---|---|---|---|---|
0
CalvinKlein
27.09.11
✎
21:24
|
Привет всем, подскажите, пожалуйста, не могу уже который час найти ошибку. Дела запрос с итогами, обхожу сначала по группировкам, потом делаю выбрать и он пишет что ошибка "Значение не является значением объектного типа..." Раньше делал нормально все работала, в чем может быть ошибка, помогите пожалуйста?
Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга, | РасходнаяНакладнаяСписокНоменклатуры.Партия |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Партия, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДокТЧ.Номенклатура КАК Номенклатура, | ДокТЧ.НоменклатураУслуга КАК Услуга, | ДокТЧ.Количество КАК Количество, | ДокТЧ.Сумма КАК Сумма, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток, | ДокТЧ.Партия КАК Партия |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | (Номенклатура, Партия) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, | ДокТЧ.Партия | ИЗ | ДокТЧ)) КАК ОстаткиНоменклатурыОстатки | ПО ДокТЧ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | И ДокТЧ.Партия = ОстаткиНоменклатурыОстатки.Партия |ИТОГИ | МИНИМУМ(Услуга), | МИНИМУМ(Количество), | МИНИМУМ(Сумма) |ПО | Номенклатура"; Запрос.УстановитьПараметр("МоментВремени",МоментВремени()); Запрос.УстановитьПараметр("Ссылка",Ссылка); Результат = Запрос.Выполнить(); ВыборкаЗаписей = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗаписей.Следующий() Цикл ТекСебеСтоимость = 0; Если (НЕ ВыборкаЗаписей.Услуга) тогда ДетальнаяВыборка = ВыборкаЗаписей.Выбрать(); |
|||
1
CalvinKlein
27.09.11
✎
21:25
|
Хотя в консоле запросов смотрю все как надо...А когда обращаюсь ДетальнаяВыборка.Количество допустим, выдает ошибку(
|
|||
2
wade25
27.09.11
✎
21:38
|
Посмотри может где встречается NULL и из этого косяк...
|
|||
3
Мимохожий Однако
27.09.11
✎
21:42
|
Можно обрамить Попыткой Исключением и включить после Исключения шлагбаум отладчика,чтобы посмотреть в момент ошибки.
|
|||
4
Ненавижу 1С
гуру
27.09.11
✎
22:04
|
(0) ошибка в коде, который ты не показал нам ((
|
|||
5
CalvinKlein
27.09.11
✎
22:07
|
Извиняюсь, но там все вроде норм...Вот весь код, все равно не работает =(
Движения.Продажи.Записывать = Истина; Движения.ОстаткиНоменклатуры.Записывать = Истина; //Удаляем прошлые записи Движения.ОстаткиНоменклатуры.Записать(); //БлокировкаДанных Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия","Партия"); Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; Блокировка.Заблокировать(); //Чтение партий, досутпных для списания. Соритровка согласно метода списания себестоимости. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга, | РасходнаяНакладнаяСписокНоменклатуры.Партия |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Партия, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДокТЧ.Номенклатура КАК Номенклатура, | ДокТЧ.НоменклатураУслуга КАК Услуга, | ДокТЧ.Количество КАК Количество, | ДокТЧ.Сумма КАК Сумма, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток, | ДокТЧ.Партия КАК Партия |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | (Номенклатура, Партия) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, | ДокТЧ.Партия | ИЗ | ДокТЧ)) КАК ОстаткиНоменклатурыОстатки | ПО ДокТЧ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | И ДокТЧ.Партия = ОстаткиНоменклатурыОстатки.Партия |ИТОГИ | МИНИМУМ(Услуга), | МИНИМУМ(Количество), | МИНИМУМ(Сумма) |ПО | Номенклатура"; Запрос.УстановитьПараметр("МоментВремени",МоментВремени()); Запрос.УстановитьПараметр("Ссылка",Ссылка); Результат = Запрос.Выполнить(); ВыборкаЗаписей = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаЗаписей.Следующий() Цикл ТекСебеСтоимость = 0; Если (НЕ ВыборкаЗаписей.Услуга) тогда ДетальнаяВыборка = ВыборкаЗаписей.Выбрать(); Если (ДетальнаяВыборка.Количество > ДетальнаяВыборка.КоличествоОстаток) тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает "+ДетальнаяВыборка.Номенклатура+" в количество " +ДетальнаяВыборка.КоличествоОстаток-ДетальнаяВыборка.Количество+" из партии "+ ДетальнаяВыборка.Партия; Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если Отказ тогда Продолжить; КонецЕсли; ТекСебеСтоимость = ДетальнаяВыборка.Количество*(ДетальнаяВыборка.СуммаОстаток/ДетальнаяВыборка.КоличествоОстаток); Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.Период = Дата; Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Партия = ДетальнаяВыборка.Партия; Движение.Номенклатура = ДетальнаяВыборка.Номенклатура; Движение.Количество = ДетальнаяВыборка.Количество; Движение.Стоимость = ТекСебеСтоимость; КонецЕсли; //Регистр Продаж. Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаЗаписей.Номенклатура; Движение.Себестоимость = ТекСебеСтоимость; Движение.Выручка = ВыборкаЗаписей.Сумма; Движение.Количество = ВыборкаЗаписей.Количество; КонецЦикла; |
|||
6
CalvinKlein
27.09.11
✎
22:08
|
на этой строчке выдает ошибку
Если (ДетальнаяВыборка.Количество > ДетальнаяВыборка.КоличествоОстаток) тогда |
|||
7
zak555
27.09.11
✎
22:10
|
(5) док может проводиться оперативно и неопреративно ?
|
|||
8
CalvinKlein
27.09.11
✎
22:13
|
(7) Да
|
|||
9
wade25
27.09.11
✎
22:14
|
Это задача к специалисту чтоли? =)
|
|||
10
zak555
27.09.11
✎
22:14
|
(8) тогда остатки проверяй в конце проведения при оперативном
|
|||
11
CalvinKlein
27.09.11
✎
22:15
|
причем в консоле запросов все ок...
|
|||
12
aleks11
27.09.11
✎
22:17
|
Может ДетальнаяВыборка.Следующий ?
|
|||
13
CalvinKlein
27.09.11
✎
22:18
|
(9) так точно) Вот отсюда пример http://www.ax-online.ru/Exams/AttPlatf/Task-1.3.aspx
(10) Остатки есть, меня смущает, на самом верхнем уровне у КоличествоОстатки и СуммаОстатки стоит NULL, когда смотрю через дебагер... |
|||
14
CalvinKlein
27.09.11
✎
22:20
|
(12)точно! Спасибо большое!
Запомню раз и на всегда... |
|||
15
zak555
27.09.11
✎
22:22
|
РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга
это не надо заменить на РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга на РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга КАК НоменклатураУслуга ??? |
|||
16
wade25
27.09.11
✎
22:23
|
ТС, вот, полезно тебе будет =)
http://chistov.spb.ru/forum/4-637-1 |
|||
17
CalvinKlein
27.09.11
✎
22:25
|
(15) Решение выше.Все равно спасибо!
Вопрос на вскидку, кто-нибудь сдавал спеца? Сколько на экзамене задач? (16) Спасибо! |
|||
18
wade25
27.09.11
✎
22:27
|
||||
19
zak555
27.09.11
✎
22:32
|
(16) я думаю, что доверять
http://chistov.spb.ru/forum/4-175-5524-16-1256139412 нельзя, ибо есть строчка : Если Выборка.Номенклатура.Тип = Перечисления.ТипыНоменклатуры.Товар Тогда а это г@внокод |
|||
20
wade25
27.09.11
✎
22:35
|
(19) Там много вариантов решения =)
|
|||
21
zak555
27.09.11
✎
22:35
|
(20) у автора написано, что спец
|
|||
22
zak555
27.09.11
✎
22:37
|
а где текст этой задачи ?
|
|||
23
wade25
27.09.11
✎
22:41
|
(22) наверно вот http://www.ax-online.ru/Exams/AttPlatf/Task-1.3.aspx
|
|||
24
wade25
27.09.11
✎
22:42
|
+(23) Вот так лучше
Задача 1.3. Компания занимается оптовой торговлей. Поступление товаров отражается документом «Приходная накладная», продажа - «Расходная накладная». Помимо продажи товара, могут оказываться дополнительные услуги, например по доставке. И услуги и товары указываются в одной табличной части. Складской учет товаров не ведется. При проведении расходной накладной при нехватке товара необходимо выдавать соответствующее предупреждение с указанием количества нехватки и не позволять проводить документ. В документе «Расходная накладная», а табличной части для каждого товара пользователь указывает партию, которую необходимо списать. В том случае, если товара по указанной партии не хватает, документ не проводится и выводится соответствующее сообщение о нехватке. Необходимо построить отчет по анализу продаж товаров за период и остаткам товара на указанную дату. Продажи с 01.01.2010 по 31.03.2010 Номенклатура Кол- во Себест-стъ Продажа Прибыль Интервал Срок Куртка замшевая 3 300 620 320 10 20 Портсигар 3 30 50 20 разовая 50 Доставка 1 100 100 разовая Прибыль рассчитывается как: «Сумма продаж» - «Себестоимость» Интервал - расчетный показатель средний интервал отгрузок (в днях). Он рассчитывается как: «Дата первой отгрузки» - «Дата последней отгрузки» / «количество отгрузок» В том случае, когда отгрузка была только одна, то в колонке Интервал выводится «разовая». Срок - расчетный показатель срок последней отгрузки (в днях), определяющий, как давно прошла последняя отгрузка. Он рассчитывается как: Конец периода отчета» - «Дата последнего документа отгрузки» Остатки товаров на 01.01.2010 Номенклатура Партия Кол-во Стоимость Куртка замшевая 4 350 Прих. Накладная №1 2 250 Прих. Накладная №2 2 100 Портсигар 6 65 Прих. Накладная №1 5 50 Прих. Накладная №3 1 15 |
|||
25
CalvinKlein
27.09.11
✎
22:43
|
||||
26
CalvinKlein
27.09.11
✎
22:43
|
||||
27
zak555
27.09.11
✎
22:44
|
||||
28
zak555
27.09.11
✎
22:44
|
а пользователь может не указать партию ?
|
|||
29
CalvinKlein
27.09.11
✎
22:47
|
наверное да, если это услуга
|
|||
30
zak555
28.09.11
✎
02:13
|
что-то похоже делал, только хз - рабочее или нет =)
Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.СтоимостьНоменклатуры.Записывать = Истина; Движения.Продажи.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | РасходнаяНакладнаяСписокНоменклатуры.Партия, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры, | РасходнаяНакладнаяСписокНоменклатуры.Партия" ; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Выполнить(); ПарамПеречисления = Перечисления.ВидыНоменклатуры.Товар; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.ВидНоменклатуры, | НоменклатураДокумента.Партия, | НоменклатураДокумента.КоличествоВДокументе, | НоменклатураДокумента.СуммаВДокументе, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК Количество, | ЕСТЬNULL(СтоимостьНоменклатурыОстатки.СтоимостьОстаток, 0) КАК Стоимость |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( &МоментВремени | , | Номенклатура В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента | ГДЕ | НоменклатураДокумента.ВидНоменклатуры = &ПарамПеречисления) | И Партия В | (ВЫБРАТЬ | НоменклатураДокумента.Партия | ИЗ | НоменклатураДокумента | ГДЕ | НоменклатураДокумента.ВидНоменклатуры = &ПарамПеречисления)) КАК ОстаткиНоменклатурыОстатки | ПО НоменклатураДокумента.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | И НоменклатураДокумента.Партия = ОстаткиНоменклатурыОстатки.Партия | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьНоменклатуры.Остатки( &МоментВремени | , | Номенклатура В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента | ГДЕ | НоменклатураДокумента.ВидНоменклатуры = &ПарамПеречисления) | И Партия В | (ВЫБРАТЬ | НоменклатураДокумента.Партия | ИЗ | НоменклатураДокумента | ГДЕ | НоменклатураДокумента.ВидНоменклатуры = &ПарамПеречисления)) КАК СтоимостьНоменклатурыОстатки | ПО НоменклатураДокумента.Номенклатура = СтоимостьНоменклатурыОстатки.Номенклатура | И НоменклатураДокумента.Партия = СтоимостьНоменклатурыОстатки.Партия" ; Запрос.УстановитьПараметр("ПарамПеречисления", ПарамПеречисления); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Движения.ОстаткиНоменклатуры. БлокироватьДляИзменения = Истина; Движения.СтоимостьНоменклатуры. БлокироватьДляИзменения = Истина; Движения.ОстаткиНоменклатуры. Очистить(); Движения.СтоимостьНоменклатуры. Очистить(); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда СтоимостьТовара = 0; Иначе СтоимостьТовара = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество; КонецЕсли; Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = ПарамПеречисления Тогда // регистр ОстаткиНоменклатуры Расход Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; // регистр СтоимостьНоменклатуры Расход Движение = Движения.СтоимостьНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движение.Стоимость = СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе; КонецЕсли; // регистр Продажи Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.Себестоимость = СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.Партия, | ОстаткиНоменклатурыОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиНоменклатуры.Остатки( &МоментВремени | , | Номенклатура В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента | ГДЕ | НоменклатураДокумента.ВидНоменклатуры = &ПарамПеречисления) | И Партия В | (ВЫБРАТЬ | НоменклатураДокумента.Партия | ИЗ | НоменклатураДокумента | ГДЕ | НоменклатураДокумента.ВидНоменклатуры = &ПарамПеречисления)) КАК ОстаткиНоменклатурыОстатки |ГДЕ | ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0" ; Запрос.УстановитьПараметр("ПарамПеречисления", ПарамПеречисления); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(ВыборкаДетальныеЗаписи.КоличествоОстаток) + " товара " + Строка(ВыборкаДетальныеЗаписи.Номенклатура) + " из партии " + Строка(ВыборкаДетальныеЗаписи.Партия); Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
31
zak555
28.09.11
✎
09:00
|
где ж критики ? =)
|
|||
32
zak555
28.09.11
✎
09:49
|
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | РасходнаяНакладнаяСписокНоменклатуры.Партия, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураПартииДокумента |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры, | РасходнаяНакладнаяСписокНоменклатуры.Партия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НоменклатураПартииДокумента.Номенклатура | НоменклатураПартииДокумента.Партия |ПОМЕСТИТЬ НоменклатураТоварСПартией |ИЗ | НоменклатураПартииДокумента КАК НоменклатураПартииДокумента |ГДЕ | НоменклатураПартииДокумента.ВидНоменклатуры = &ВидНоменклатуры" ; ПарамПеречисления = Перечисления.ВидыНоменклатуры.Товар; Запрос.УстановитьПараметр("ВидНоменклатуры", ПарамПеречисления); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Выполнить(); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | НоменклатураПартииДокумента.Номенклатура, | НоменклатураПартииДокумента.ВидНоменклатуры, | НоменклатураПартииДокумента.Партия, | НоменклатураПартииДокумента.КоличествоВДокументе, | НоменклатураПартииДокумента.СуммаВДокументе, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК Количество, | ЕСТЬNULL(СтоимостьНоменклатурыОстатки.СтоимостьОстаток, 0) КАК Стоимость |ИЗ | НоменклатураПартииДокумента КАК НоменклатураПартииДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( &МоментВремени | , | Номенклатура В (ВЫБРАТЬ НоменклатураТоварСПартией.Номенклатура | ИЗ НоменклатураТоварСПартией) | | И Партия В (ВЫБРАТЬ НоменклатураТоварСПартией.Партия | ИЗ НоменклатураТоварСПартией) | ) КАК ОстаткиНоменклатурыОстатки | | ПО НоменклатураПартииДокумента.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | И НоменклатураПартииДокумента.Партия = ОстаткиНоменклатурыОстатки.Партия | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьНоменклатуры.Остатки( &МоментВремени | , | Номенклатура В (ВЫБРАТЬ НоменклатураТоварСПартией.Номенклатура | ИЗ НоменклатураТоварСПартией) | | И Партия В (ВЫБРАТЬ НоменклатураТоварСПартией.Партия | ИЗ НоменклатураТоварСПартией) | ) КАК СтоимостьНоменклатурыОстатки | ПО НоменклатураПартииДокумента.Номенклатура = СтоимостьНоменклатурыОстатки.Номенклатура | И НоменклатураПартииДокумента.Партия = СтоимостьНоменклатурыОстатки.Партия" ; Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); |
|||
33
zak555
28.09.11
✎
10:02
|
вот наверное оптимальнее -)
Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.СтоимостьНоменклатуры.Записывать = Истина; Движения.Продажи.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | РасходнаяНакладнаяСписокНоменклатуры.Партия, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураПартииДокумента |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры, | РасходнаяНакладнаяСписокНоменклатуры.Партия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НоменклатураПартииДокумента.Номенклатура | НоменклатураПартииДокумента.Партия |ПОМЕСТИТЬ НоменклатураТоварСПартией |ИЗ | НоменклатураПартииДокумента КАК НоменклатураПартииДокумента |ГДЕ | НоменклатураПартииДокумента.ВидНоменклатуры = &ВидНоменклатуры" ; ПарамПеречисления = Перечисления.ВидыНоменклатуры.Товар; Запрос.УстановитьПараметр("ВидНоменклатуры", ПарамПеречисления); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Выполнить(); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | НоменклатураПартииДокумента.Номенклатура, | НоменклатураПартииДокумента.ВидНоменклатуры, | НоменклатураПартииДокумента.Партия, | НоменклатураПартииДокумента.КоличествоВДокументе, | НоменклатураПартииДокумента.СуммаВДокументе, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК Количество, | ЕСТЬNULL(СтоимостьНоменклатурыОстатки.СтоимостьОстаток, 0) КАК Стоимость |ИЗ | НоменклатураПартииДокумента КАК НоменклатураПартииДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( &ГраницаБезЭтогоДокумента | , | Номенклатура В (ВЫБРАТЬ НоменклатураТоварСПартией.Номенклатура | ИЗ НоменклатураТоварСПартией) | | И Партия В (ВЫБРАТЬ НоменклатураТоварСПартией.Партия | ИЗ НоменклатураТоварСПартией) | ) КАК ОстаткиНоменклатурыОстатки | | ПО НоменклатураПартииДокумента.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | И НоменклатураПартииДокумента.Партия = ОстаткиНоменклатурыОстатки.Партия | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьНоменклатуры.Остатки( &ГраницаБезЭтогоДокумента | , | Номенклатура В (ВЫБРАТЬ НоменклатураТоварСПартией.Номенклатура | ИЗ НоменклатураТоварСПартией) | | И Партия В (ВЫБРАТЬ НоменклатураТоварСПартией.Партия | ИЗ НоменклатураТоварСПартией) | ) КАК СтоимостьНоменклатурыОстатки | ПО НоменклатураПартииДокумента.Номенклатура = СтоимостьНоменклатурыОстатки.Номенклатура | И НоменклатураПартииДокумента.Партия = СтоимостьНоменклатурыОстатки.Партия" ; Запрос.УстановитьПараметр("ГраницаБезЭтогоДокумента", Новый Граница(Дата, ТипГраницы.НеВключая)); Движения.ОстаткиНоменклатуры. БлокироватьДляИзменения = Истина; Движения.СтоимостьНоменклатуры. БлокироватьДляИзменения = Истина; //очищать теперь не надо будет (!) //Движения.ОстаткиНоменклатуры. Очистить(); //Движения.СтоимостьНоменклатуры. Очистить(); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда СтоимостьТовара = 0; Иначе СтоимостьТовара = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество; КонецЕсли; Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = ПарамПеречисления Тогда // регистр ОстаткиНоменклатуры Расход Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; // регистр СтоимостьНоменклатуры Расход Движение = Движения.СтоимостьНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Партия = ВыборкаДетальныеЗаписи.Партия; Движение.Стоимость = СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе; КонецЕсли; // регистр Продажи Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.Себестоимость = СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.Партия, | ОстаткиНоменклатурыОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиНоменклатуры.Остатки( &МоментВремени | , | Номенклатура В (ВЫБРАТЬ НоменклатураТоварСПартией.Номенклатура | ИЗ НоменклатураТоварСПартией) | | И Партия В (ВЫБРАТЬ НоменклатураТоварСПартией.Партия | ИЗ НоменклатураТоварСПартией) | ) КАК ОстаткиНоменклатурыОстатки |ГДЕ | ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0" ; Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(ВыборкаДетальныеЗаписи.КоличествоОстаток) + " товара " + Строка(ВыборкаДетальныеЗаписи.Номенклатура) + " из партии " + Строка(ВыборкаДетальныеЗаписи.Партия); Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
34
zak555
28.09.11
✎
10:07
|
не
ТидГраницы.НеВключая а ВидГраницы.НеВключая |
|||
35
CalvinKlein
28.09.11
✎
14:17
|
(33) Сложнова-то) А зачем ты разграничения делал для оперативного и не оперативного, какая логика?
|
|||
36
zak555
28.09.11
✎
18:42
|
(35) так пойми : зачем 1с в принципе зачем ввела это понятие
|
|||
37
zak555
29.09.11
✎
00:04
|
так и не было комментаторов
|
|||
38
kuza2000
29.09.11
✎
00:23
|
(5) чет я не пойму...
Вроде после ДетальнаяВыборка = ВыборкаЗаписей.Выбрать(); ДетальнаяВыборка имеет тип ВыборкаИзРезультатаЗапроса, соответственно ее надо обходить ДетальнаяВыборка.Следующий() и т.д... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |