|
Процедура СообщитьОНедостаткеТовара | ☑ | ||
---|---|---|---|---|
0
EKO LX
08.11.12
✎
16:32
|
Здравствуйте уважаемые программисты 1С. Помогите пожалуйста с проблемой. Как дописать процедуру так чтобы при появлении служебной сообщении перед номенклатурой появлялась также его код
!! Остатка Товар с качеством Новый на складе Склад недостаточно. Процедура СообщитьОНедостаткеТовара(Требуется, Свободно = 0, ВРезерве = 0, КПередаче = 0, КПолучению = 0, Отказ, Заголовок="", Склад = "", ЗаказПоставщику = "", Номенклатура = "", Характеристика = "", Серия = "", Качество = "", ЕИ = "", СтрокаСообщения = "") Экспорт Если СтрокаСообщения = "" Тогда Если ВРезерве > 0 ИЛИ КПередаче > 0 Тогда СтрокаСообщения = "Свободного остатка "; Иначе СтрокаСообщения = "Остатка "; КонецЕсли; КонецЕсли; СтрокаСообщения = СтрокаСообщения + Номенклатура + Характеристика + Серия; СтрокаСообщения = СтрокаСообщения + ?(Качество = "", "", " с качеством " + Качество); Если ЗаказПоставщику <> "" И Склад <> "" Тогда СтрокаСообщения = СтрокаСообщения + " в заказах поставщикам на склад " + Склад + " недостаточно для размещения."; ИначеЕсли ЗаказПоставщику <> "" Тогда СтрокаСообщения = СтрокаСообщения + " заказанного по документу " + ЗаказПоставщику + " недостаточно для размещения."; ИначеЕсли Склад <> "" Тогда СтрокаСообщения = СтрокаСообщения + " на складе " + Склад + " недостаточно."; КонецЕсли; ОшибкаНетОстатка(СтрокаСообщения, Свободно , Требуется, ЕИ, Отказ, Заголовок); Если КПередаче > 0 Тогда Сообщить("К передаче " + КПередаче + " " + ЕИ); КонецЕсли; Если ВРезерве > 0 Тогда Сообщить("Зарезервировано " + ВРезерве + " " + ЕИ); КонецЕсли; Если КПолучению > 0 Тогда Сообщить("К получению "+ КПолучению + " "+ ЕИ); КонецЕсли; КонецПроцедуры // СообщитьОНедостаткеТовара() |
|||
1
Maxus43
08.11.12
✎
16:33
|
СтрокаСообщения = СтрокаСообщения + Номенклатура.Код + Номенклатура + Характеристика + Серия;
|
|||
2
EKO LX
08.11.12
✎
16:38
|
(1) ругается
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {ОбщийМодуль.УправлениеЗапасами(3059)}: Значение не является значением объектного типа (Код) |
|||
3
Maxus43
08.11.12
✎
16:39
|
а, там строка передаётся. в процедуре видишь параметры? туда надо код передать ещё, ссылки на номенклатуру нету
|
|||
4
EKO LX
08.11.12
✎
16:44
|
(3) а не подскажи как это сделать?
|
|||
5
drcrasher
08.11.12
✎
16:45
|
(4) забей. не нужен тебе 1С.
|
|||
6
Maxus43
08.11.12
✎
16:45
|
(4) глобальным поиском "СообщитьОНедостаткеТовара", там смотри
|
|||
7
EKO LX
08.11.12
✎
16:47
|
(5) с чего вы это взяли?
|
|||
8
drcrasher
08.11.12
✎
16:48
|
(7) с того, что программирование в первую очередь подразумевает умение логически мыслить, во вторую - разбираться в чужом коде.
|
|||
9
EKO LX
08.11.12
✎
16:50
|
(6) ну это процедура в (0) что так смотреть? очень нужно помогите пожалуйста
|
|||
10
EKO LX
08.11.12
✎
16:53
|
(8) дело в том что я не программист, а это процедура из типовой конфигурации УТ 8.1 10,3. могу лишь что-то откорректировать, ну тут не знаю что делать
|
|||
11
Cunni
08.11.12
✎
16:53
|
(4) в параметры процедура добавь еще один со значением кода.
(5) а о том, что ТС может быть еще совсем-совсем зеленый ты не подумал? |
|||
12
Maxus43
08.11.12
✎
16:53
|
(9) глобальный поиск покажет Откуда она вызывается, там править надо
|
|||
13
Cunni
08.11.12
✎
16:53
|
ой, это типовая.. лучше ниче не добавлять)
|
|||
14
EKO LX
08.11.12
✎
16:58
|
(13) а как быть? этот код очень нужен, потом что наименование номенклатуры большинстве одинаковы, поэтому отличить можно только по коду
|
|||
15
EKO LX
08.11.12
✎
16:59
|
(12) а как ее вызвать?
|
|||
16
Cunni
08.11.12
✎
17:00
|
(14) Вот честно, как поступать в типовых я хз, сам работаю недавно и у меня тут полная самописка, мне было бы проще добавить еще один параметр, ну или вместо "Номенклатура = """ вставлять ссылку, а не текст и уже от нее плясать куда хочется. Сейчас умные люди ответят, можно так или нет)
|
|||
17
Maxus43
08.11.12
✎
17:00
|
(15) ктрл + шифт + F
всё, я пас. до такой степени разжёвывать не могу более) |
|||
18
drcrasher
08.11.12
✎
17:01
|
(10) точно не программист?
http://www.forum.mista.ru/index.php?user_id=78342 |
|||
19
EKO LX
08.11.12
✎
17:05
|
(16) спасибо за попытку)
(17) я вас не понимаю зачем искать эту процедуру если я ее уже нашел (18) только корректирую. |
|||
20
Maxus43
08.11.12
✎
17:06
|
(19) ну тогда селяви, раз не понимаем
|
|||
21
drcrasher
08.11.12
✎
17:07
|
(19) найми программера. Пять тыщ центов в час - не дорого.
(20)(17) +100500 |
|||
22
EKO LX
08.11.12
✎
17:15
|
(20) спасибо за попытку
(21) на нашем языке говорят haran a?r?y?r? что в переводе "чего вам надо?" |
|||
23
EKO LX
09.11.12
✎
14:54
|
ап
|
|||
24
EKO LX
09.11.12
✎
15:18
|
(12) только сейчас узнал об этом, спасибо)) сейчас поглядим
|
|||
25
EKO LX
09.11.12
✎
16:07
|
вот что в регистре ТоварыНаСкладах
Процедура ОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ЕстьРезервыПоДокументуБезСерии) Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда ДокументКоличествоБезСерии = Выборка.ДокументКоличество; РезервыПоДокументуБезСерииКоличество = ?(ЕстьРезервыПоДокументуБезСерии,Выборка.РезервыПоДокументуБезСерииКоличество,Выборка.РезервыПоДокументуКоличество); Продолжить; КонецЕсли; ДокументКоличество = Выборка.ДокументКоличество; КоличествоНаСкладе = Выборка.ОстатокКоличество; КоличествоВРезерве = Выборка.РезервыКоличество; КоличествоВРезервеПоСерии = Выборка.РезервыПоСерииКоличество; РезервыПоДокументуКоличество = Выборка.РезервыПоДокументуКоличество; КПередачеКоличество = Выборка.КПередачеКоличество; КПередачеБезСерииКоличество = ?(ЕстьСерия,Выборка.КПередачеБезСерииКоличество,КПередачеКоличество); КПередачеПоДокументуКоличество = Выборка.КПередачеПоДокументуКоличество; КПередачеПоДокументуБезСерииКоличество = ?(ЕстьСерия,Выборка.КПередачеПоДокументуБезСерииКоличество,Выборка.КПередачеПоДокументуКоличество); КПолучениюКоличество = Выборка.КПолучению; КПолучениюПоДокументуКоличество = Выборка.КПолучениюПоДокументуКоличество; НедоступноНаСкладе = Макс(КоличествоВРезерве - РезервыПоДокументуБезСерииКоличество,0) + Макс(КПередачеБезСерииКоличество - КПередачеПоДокументуБезСерииКоличество,0) + Макс(КПолучениюКоличество-КПолучениюПоДокументуКоличество,0); // Сначала проверяем остаток товара на складе с учетом серий, // потом свободный остаток товара (без учета серий) Если ЕстьСерия Тогда КоличествоБезРезерва = КоличествоНаСкладе; мКоличествоВРезерве = 0; //если серия не заполнена - уменьшать свободный остаток на количество резерва и товаров к передаче нельзя, // т.к. может попасть резервирование или товары к передаче, выполненные без учета серии Если ЗначениеЗаполнено(Выборка.СерияНоменклатуры) Тогда Если ИспользоватьУказаниеСерийНоменклатурыПриРезервировании Тогда //может иметься резерв в разрезе серий - его надо убрать из свободного остатка мКоличествоВРезерве = Макс(КоличествоВРезервеПоСерии - РезервыПоДокументуКоличество,0); КоличествоБезРезерва = КоличествоНаСкладе - мКоличествоВРезерве; КонецЕсли; КоличествоБезРезерва = КоличествоБезРезерва - КПередачеКОличество + КПередачеПоДокументуКоличество; КонецЕсли; Если КоличествоБезРезерва < ДокументКоличество Тогда УправлениеЗапасами.СообщитьОНедостаткеТовара(ДокументКоличество // Требуемое количество товара , КоличествоБезРезерва // Свободное количество товара , мКоличествоВРезерве // Количество в резерве , Макс(КПередачеКоличество - КПередачеПоДокументуКоличество,0) , Макс(КПолучениюКоличество-КПолучениюПоДокументуКоличество,0) , Отказ, Заголовок , СокрЛП(Выборка.Склад) // Склад (представление) , // Заказ поставщику (представление) , Выборка.НоменклатураПредставление // Номенклатура (представление) , Выборка.НоменклатураПредставление.Код // Эко Номенклатура.Код (представление) , " "+Выборка.ХарактеристикаНоменклатурыПредставление // Характеристика (представление) , " "+Выборка.СерияНоменклатурыПредставление // Серия номенклатуры (представление) , СокрЛП(Выборка.Качество) // Качество товара (представление) , Выборка.ЕдиницаХраненияОстатковПредставление // Единица хранения остатков (представление) ); Продолжить; КонецЕсли; КоличествоНаСкладе = Выборка.ОстатокБезСерииКоличество; ДокументКоличество = ДокументКоличествоБезСерии; КонецЕсли; Если КоличествоНаСкладе - НедоступноНаСкладе < ДокументКоличество Тогда УправлениеЗапасами.СообщитьОНедостаткеТовара(ДокументКоличество // Требуемое количество товара , КоличествоНаСкладе - НедоступноНаСкладе // Свободное количество товара , КоличествоВРезерве - РезервыПоДокументуБезСерииКоличество // Количество товара в резерве , Макс(КПередачеБезСерииКоличество - КПередачеПоДокументуБезСерииКоличество,0) // Количество товара к передаче , Макс(КПолучениюКоличество-КПолучениюПоДокументуКоличество,0) , Отказ, Заголовок , СокрЛП(Выборка.Склад) // Склад (представление) , // Заказ поставщику (представление) , Выборка.НоменклатураПредставление // Номенклатура (представление) , Выборка.ХарактеристикаНоменклатурыПредставление // Характеристика (представление) , // Серия номенклатуры (представление) , // Качество товара (представление) , Выборка.ЕдиницаХраненияОстатковПредставление // Единица хранения остатков (представление) ); ДокументКоличествоБезСерии = 0; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
26
samozvanec
09.11.12
✎
16:12
|
СтрокаСообщения = СтрокаСообщения + Справочники.Номенклатура.НайтиПоНайменованию(Номенклатура).Код + Номенклатура + Характеристика + Серия;
2 |
|||
27
samozvanec
09.11.12
✎
16:13
|
никогда бы не подумал, что такое напишу
|
|||
28
samozvanec
09.11.12
✎
16:17
|
(26) двойку в конце не надо переписывать
|
|||
29
del123
09.11.12
✎
16:17
|
(26) (14) смотрел?)
|
|||
30
samozvanec
09.11.12
✎
16:18
|
(29) не смотрел
|
|||
31
EKO LX
09.11.12
✎
16:23
|
(26) не получается((
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {ОбщийМодуль.УправлениеЗапасами(3059)}: Метод объекта не обнаружен (НайтиПоНайменованию) |
|||
32
Serg_1960
09.11.12
✎
16:29
|
"Найменование" - наименование
|
|||
33
del123
09.11.12
✎
16:30
|
да не взлетит у него это..)
|
|||
34
EKO LX
09.11.12
✎
16:39
|
(30) ОГРОМНОЕ ВАМ СПАСИБО!
(32) Спасибо, вернее НайтиПоНаименованию) |
|||
35
НЕА123
09.11.12
✎
16:46
|
(34)
эй! товарищ! а как же (14)? |
|||
36
НЕА123
09.11.12
✎
16:47
|
(26)
преступник. |
|||
37
del123
09.11.12
✎
16:49
|
(35) Недолго будет счастье его :D
|
|||
38
samozvanec
09.11.12
✎
16:50
|
(36) я не хотел, честно
(34) если (14), тогда тебе такой вариант не подходит |
|||
39
EKO LX
09.11.12
✎
17:12
|
(38) мда, действительно((
|
|||
40
EKO LX
09.11.12
✎
17:32
|
думаю вот что нужно отредактировать, а именно добавить малюсенький код "Код"
Процедура КонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(ДокументОбъект) ЕстьСоставНабора = Ложь; Если ДокументОбъект.СоставНабора.Количество() > 0 Тогда ЕстьСоставНабора = Истина; КонецЕсли; ЕстьКачество = МетаданныеТабЧасти.Реквизиты.Найти("Качество") <> Неопределено; ЕстьСпособСписания = МетаданныеТабЧасти.Реквизиты.Найти("СпособСписанияОстаткаТоваров") <> Неопределено; ЕстьСкладВТабЧасти = МетаданныеТабЧасти.Реквизиты.Найти("Склад") <> Неопределено; // Текст вложенного запроса, ограничивающего номенклатуру при получении остатков Если ЕстьСоставНабора Тогда ТекстЗапросаСписокНоменклатуры = " |ВЫБРАТЬ РАЗЛИЧНЫЕ | Док.Номенклатура КАК Номенклатура |ИЗ | ( | ВЫБРАТЬ | Док.Номенклатура | ИЗ | Документ." + ИмяТаблицы +" КАК Док | ГДЕ | Док.Ссылка = &ДокументСсылка | И НЕ Док.Номенклатура.Комплект | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Док.Номенклатура | ИЗ | Документ." + ИмяДокумента + ".СоставНабора КАК Док | ГДЕ | Док.Ссылка = &ДокументСсылка | | ) КАК Док |"; ТекстЗапросаРеквизитыДокумента = " | (ВЫБРАТЬ //строки ТЧ Товары которые не являются набором | Ссылка, | Номенклатура, | %ПОЛЕ_Склад%, | %ПОЛЕ_СпособСписанияОстаткаТоваров% КАК СпособСписанияОстаткаТоваров, | %ПОЛЕ_Качество% КАК Качество, | ХарактеристикаНоменклатуры, | СерияНоменклатуры, | Коэффициент, | %ПОЛЕ_ЗаказПокупателя% КАК ЗаказПокупателя, | Количество | ИЗ | Документ." + ИмяТаблицы + " | ГДЕ | Ссылка = &ДокументСсылка | И НЕ Номенклатура.Комплект | //строки ТЧ СоставНабора | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Ссылка, | Номенклатура, | Склад, | СпособСписанияОстаткаТоваров, | Качество, | ХарактеристикаНоменклатуры, | СерияНоменклатуры, | Коэффициент, | ЗаказПокупателя, | Количество | ИЗ | (ВЫБРАТЬ | ДокНаб.Ссылка, | ДокНаб.Номенклатура, | %ПОЛЕ_Набор_Склад% КАК Склад, | %ПОЛЕ_Набор_СпособСписанияОстаткаТоваров% КАК СпособСписанияОстаткаТоваров, | %ПОЛЕ_Набор_Качество% КАК Качество, | ДокНаб.ХарактеристикаНоменклатуры, | ДокНаб.СерияНоменклатуры, | ДокНаб.ЕдиницаИзмерения.Коэффициент КАК Коэффициент, | %ПОЛЕ_Набор_ЗаказПокупателя% КАК ЗаказПокупателя, | ДокНаб.Количество * ДокТов.Количество * ДокТов.Коэффициент КАК Количество | ИЗ | Документ." + ИмяДокумента + ".СоставНабора КАК ДокНаб | ЛЕВОЕ СОЕДИНЕНИЕ Документ." + ИмяТаблицы + " КАК ДокТов | ПО ДокТов.КлючСтроки = ДокНаб.КлючСтроки | И ДокТов.Ссылка = &ДокументСсылка | ГДЕ | ДокНаб.Ссылка = &ДокументСсылка | ) КАК Набор | | ) |"; //есть состав набора - склады берутся из двух табличных частей ЗапросСклады = новый Запрос; ЗапросСклады.Текст = "Выбрать РАЗЛИЧНЫЕ Склад |ИЗ Документ."+ИмяТаблицы+" |ГДЕ Ссылка=&ДокументСсылка |ОБЪЕДИНИТЬ |ВЫБРАТЬ Склад ИЗ |Документ." + ИмяДокумента + ".СоставНабора |ГДЕ Ссылка=&ДокументСсылка И Склад<>&ПустойСклад |"; ЗапросСклады.УстановитьПараметр("ДокументСсылка",СтруктураШапкиДокумента.Ссылка); ЗапросСклады.УстановитьПараметр("ПустойСклад",Справочники.Склады.ПустаяСсылка()); Иначе //Если ЕстьСоставНабора Тогда ТекстЗапросаСписокНоменклатуры = " |ВЫБРАТЬ РАЗЛИЧНЫЕ | Номенклатура |ИЗ | Документ." + ИмяТаблицы +" |ГДЕ Ссылка = &ДокументСсылка |"; ТекстЗапросаРеквизитыДокумента = " | Документ." + ИмяТаблицы + " |"; //нет набора - склады берутся из одной табличной части ЗапросСклады = новый Запрос; ЗапросСклады.Текст = "Выбрать различные Склад ИЗ Документ."+ИмяТаблицы+" |ГДЕ Ссылка=&ДокументСсылка"; ЗапросСклады.УстановитьПараметр("ДокументСсылка",СтруктураШапкиДокумента.Ссылка); КонецЕсли; //Если ЕстьСоставНабора Тогда Запрос = Новый Запрос; Если ЕстьСкладВТабЧасти Тогда СписокСкладов = ЗапросСклады.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад"); Иначе СписокСкладов = новый Массив; СписокСкладов.Добавить(СтруктураШапкиДокумента.Склад); КонецЕсли; // Установим параметры запроса ЗаполнитьОбщиеПараметрыЗапроса(Запрос); Запрос.УстановитьПараметр("СписокСкладов", СписокСкладов); Запрос.УстановитьПараметр("ПустойЗаказПокупателя", Документы.ЗаказПокупателя.ПустаяСсылка()); Запрос.УстановитьПараметр("ПустойСклад", Справочники.Склады.ПустаяСсылка()); Запрос.УстановитьПараметр("ПустойСпособСписания", Перечисления.СпособыСписанияОстаткаТоваров.ПустаяСсылка()); Запрос.УстановитьПараметр("ПустоеКачество", Справочники.Качество.ПустаяСсылка()); ТекстЗапроса = " |ВЫБРАТЬ // Запрос, контролирующий остатки на складах | Док.Номенклатура КАК Номенклатура, | Док.Номенклатура.Представление КАК НоменклатураПредставление, | Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление, | Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ПРЕДСТАВЛЕНИЕ(Док.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление, | Док.СерияНоменклатуры КАК СерияНоменклатуры, | ПРЕДСТАВЛЕНИЕ(Док.СерияНоменклатуры) КАК СерияНоменклатурыПредставление, | %ПОЛЕ_Док_Склад% КАК Склад, | %ПОЛЕ_Док_Качество% КАК Качество, | СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) | КАК ДокументКоличество, | ЕстьNull(МАКСИМУМ(ОстаткиБезСерии.КоличествоОстаток),0) КАК ОстатокБезСерииКоличество, | ЕстьNull(МАКСИМУМ(Остатки.КоличествоОстаток),0) КАК ОстатокКоличество, | ЕстьNull(МАКСИМУМ(Резервы.КоличествоОстаток),0) КАК РезервыКоличество, | %ПОЛЕ_РезервыПоСерииКоличество% КАК РезервыПоСерииКоличество, | ЕстьNull(МАКСИМУМ(ТоварыКПередаче.КоличествоОстаток),0) КАК КПередачеКоличество, | ЕстьNull(МАКСИМУМ(ТоварыКПередачеБезСерии.КоличествоОстаток),0) КАК КПередачеБезСерииКоличество, | %ПОЛЕ_РезервыПоДокументуКоличество% КАК РезервыПоДокументуКоличество, | %ПОЛЕ_РезервыПоДокументуБезСерии_Количество% КАК РезервыПоДокументуБезСерииКоличество, | 0 КАК КПолучению, | 0 КАК КПолучениюПоДокументуКоличество, | 0 КАК КПередачеПоДокументуКоличество, | 0 КАК КПередачеПоДокументуБезСерииКоличество |ИЗ | "+ ТекстЗапросаРеквизитыДокумента + " КАК Док | //таблица остатков товаров с учетом серий |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре% | //УСЛОВИЕ_Качество | ) КАК Остатки |ПО | Док.Номенклатура = Остатки.Номенклатура | И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры | И Док.СерияНоменклатуры = Остатки.СерияНоменклатуры | //СОЕДИНЕНИЕ_Качество_Остатки | //СОЕДИНЕНИЕ_Склад_Остатки //таблица остатков товаров без учета серий |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре% | //УСЛОВИЕ_Качество | ) КАК ОстаткиБезСерии |ПО | Док.Номенклатура = ОстаткиБезСерии.Номенклатура | И Док.ХарактеристикаНоменклатуры = ОстаткиБезСерии.ХарактеристикаНоменклатуры | //СОЕДИНЕНИЕ_Качество_ОстаткиБезСерии | //СОЕДИНЕНИЕ_Склад_ОстаткиБезСерии | //таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка) |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре%) КАК Резервы |ПО | Док.Номенклатура = Резервы.Номенклатура | И Док.ХарактеристикаНоменклатуры = Резервы.ХарактеристикаНоменклатуры | //СОЕДИНЕНИЕ_ДокументРезерва_Резервы | //СОЕДИНЕНИЕ_Склад_Резервы | //СОЕДИНЕНИЕ_Качество_Резервы //таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка) |"+?(ИспользоватьУказаниеСерийНоменклатурыПриРезервировании," |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре%) КАК РезервыПоСерии |ПО | Док.Номенклатура = РезервыПоСерии.Номенклатура | И Док.ХарактеристикаНоменклатуры = РезервыПоСерии.ХарактеристикаНоменклатуры | И Док.СерияНоменклатуры = РезервыПоСерии.СерияНоменклатуры | //СОЕДИНЕНИЕ_ДокументРезерва_Резервы | //СОЕДИНЕНИЕ_Склад_РезервыПоСерии | //СОЕДИНЕНИЕ_Качество_Резервы |","")+" |"+?(ИмяДокумента = "РеализацияТоваровУслуг"," //таблица резервов по документу: количество, которое списывается за счет резерва (эта часть требуется только для документа Реализация) |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ ТЧ.Номенклатура, | ТЧ.Склад, | ТЧ.ХарактеристикаНоменклатуры | //ПОЛЕ_ТЧ_Серия | //количество, списываемое за счет резерва, не может превышать количество указанное в документе | ,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА | Сумма(ТЧ.ДокументКоличество) | ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток) | КОНЕЦ КАК КоличествоОстаток | ИЗ | //сгруппированная табличная часть документа с отбором строк которые списываются из резерва | (ВЫБРАТЬ | Номенклатура, | Склад, | ЗаказПокупателя, | ХарактеристикаНоменклатуры | //ПОЛЕ_Серия | ,СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество | ИЗ | " + ТекстЗапросаРеквизитыДокумента +" КАК ВремДок | ГДЕ ВремДок.Ссылка = &ДокументСсылка | И ВремДок.ЗаказПокупателя <> &ПустойЗаказПокупателя и ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва | СГРУППИРОВАТЬ ПО | Номенклатура, | Склад, | ЗаказПокупателя, | ХарактеристикаНоменклатуры | //ПОЛЕ_Серия | ) КАК ТЧ | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре% | ) КАК ВремРезервы | ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура | И ТЧ.Склад = ВремРезервы.Склад | И ТЧ.ЗаказПокупателя = ВремРезервы.ДокументРезерва | И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры | //СОЕДИНЕНИЕ_Серия_ВремРезервы | СГРУППИРОВАТЬ ПО | ТЧ.Номенклатура, | ТЧ.Склад, | ТЧ.ХарактеристикаНоменклатуры | //ПОЛЕ_ТЧ_Серия |) КАК РезервыПоДокументу |ПО |Док.Номенклатура = РезервыПоДокументу.Номенклатура |И Док.Склад = РезервыПоДокументу.Склад |И Док.ЗаказПокупателя <> &ПустойЗаказПокупателя И Док.СпособСписанияОстаткаТоваров = &ИзРезерва |И Док.ХарактеристикаНоменклатуры = РезервыПоДокументу.ХарактеристикаНоменклатуры |//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу //таблица резервов по документу без учета серий: количество, которое списывается за счет резерва |//ЗАПРОС_РезервыПоДокументуБезСерии |","")+" |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре% | //УСЛОВИЕ_Качество | ) КАК ТоварыКПередаче |ПО | Док.Номенклатура = ТоварыКПередаче.Номенклатура | И Док.ХарактеристикаНоменклатуры = ТоварыКПередаче.ХарактеристикаНоменклатуры | И Док.СерияНоменклатуры = ТоварыКПередаче.СерияНоменклатуры | //СОЕДИНЕНИЕ_Склад_ТоварыКПередаче | //СОЕДИНЕНИЕ_Качество_ТоварыКПередаче |ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре% | //УСЛОВИЕ_Качество | ) КАК ТоварыКПередачеБезСерии |ПО | Док.Номенклатура = ТоварыКПередачеБезСерии.Номенклатура | И Док.ХарактеристикаНоменклатуры = ТоварыКПередачеБезСерии.ХарактеристикаНоменклатуры | //СОЕДИНЕНИЕ_Склад_ТоварыКПередачеБезСерии | //СОЕДИНЕНИЕ_Качество_ТоварыКПередачеБезСерии | |ГДЕ | Док.Ссылка = &ДокументСсылка | И Не Док.Номенклатура.Комплект | И Не Док.Номенклатура.Услуга // остатки по услугам контролировать не надо. | //УСЛОВИЕ_Склад |СГРУППИРОВАТЬ ПО | | Док.Номенклатура, | Док.ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры, | %ПОЛЕ_Док_Качество%, | %ПОЛЕ_Док_Склад% | |ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы | |ИТОГИ СУММА (ДокументКоличество), МАКСИМУМ(ОстатокБезСерииКоличество), МАКСИМУМ(РезервыКоличество), | МАКСИМУМ(КПередачеКоличество), МАКСИМУМ(РезервыПоДокументуКоличество), Максимум(РезервыПоСерииКоличество), | Максимум(КПередачеБезСерииКоличество), МАКСИМУМ(РезервыПоДокументуБезСерииКоличество), | Максимум(КПолучению), Максимум(КПередачеПоДокументуКоличество), Максимум(КПередачеПоДокументуБезСерииКоличество), Максимум(КПолучениюПоДокументуКоличество) |ПО Номенклатура, | ХарактеристикаНоменклатуры, | Склад | //ПОЛЕ_Качество |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоСерииКоличество%", ?(ИспользоватьУказаниеСерийНоменклатурыПриРезервировании,"ЕстьNull(МАКСИМУМ(РезервыПоСерии.КоличествоОстаток),0)","0")); ТекстЗапросаРезервыПоДокументуБезСерии = ""; Если ИмяДокумента = "РеализацияТоваровУслуг" Тогда //есть реквизит ЗаказПокупателя, документ может списывать товар из резерва Если ИспользоватьУказаниеСерийНоменклатурыПриРезервировании Тогда ТекстЗапросаРезервыПоДокументуБезСерии = " |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ ТЧ.Номенклатура, | ТЧ.Склад, | ТЧ.ХарактеристикаНоменклатуры | //количество, списываемое за счет резерва, не может превышать количество указанное в документе | ,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток) ТОГДА | Сумма(ТЧ.ДокументКоличество) | ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток) | КОНЕЦ КАК КоличествоОстаток | ИЗ | //сгруппированная табличная часть документа с отбором строк которые списываются из резерва | (ВЫБРАТЬ | Номенклатура, | Склад, | ЗаказПокупателя, | ХарактеристикаНоменклатуры | ,СУММА(ВЫРАЗИТЬ(Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество | ИЗ | " + ТекстЗапросаРеквизитыДокумента +" КАК ВремДок | ГДЕ ВремДок.Ссылка = &ДокументСсылка | И ВремДок.ЗаказПокупателя <> &ПустойЗаказПокупателя и ВремДок.СпособСписанияОстаткаТоваров = &ИзРезерва | СГРУППИРОВАТЬ ПО | Номенклатура, | Склад, | ЗаказПокупателя, | ХарактеристикаНоменклатуры | ) КАК ТЧ | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Склад в (&СписокСкладов) И | %ВыборкаПоНоменклатуре% | ) КАК ВремРезервы | ПО ТЧ.Номенклатура = ВремРезервы.Номенклатура | И ТЧ.Склад = ВремРезервы.Склад | И ТЧ.ЗаказПокупателя = ВремРезервы.ДокументРезерва | И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры | СГРУППИРОВАТЬ ПО | ТЧ.Номенклатура, | ТЧ.Склад, | ТЧ.ХарактеристикаНоменклатуры |) КАК РезервыПоДокументуБезСерии |ПО |Док.Номенклатура = РезервыПоДокументуБезСерии.Номенклатура |И Док.Склад = РезервыПоДокументуБезСерии.Склад |И Док.ЗаказПокупателя <> &ПустойЗаказПокупателя И Док.СпособСписанияОстаткаТоваров = &ИзРезерва |И Док.ХарактеристикаНоменклатуры = РезервыПоДокументуБезСерии.ХарактеристикаНоменклатуры |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ЗАПРОС_РезервыПоДокументуБезСерии", ТекстЗапросаРезервыПоДокументуБезСерии); //резервы по документу имеет смысл определять с точностью до серии ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_ТЧ_Серия", ",ТЧ.СерияНоменклатуры"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//ПОЛЕ_Серия", ",СерияНоменклатуры"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_ВремРезервы", "И (ТЧ.СерияНоменклатуры = ВремРезервы.СерияНоменклатуры ИЛИ НЕ ЕстьNull(ТЧ.ЗаказПокупателя.ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей,ложь))"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_Серия_РезервыПоДокументу", "И Док.СерияНоменклатуры = РезервыПоДокументу.СерияНоменклатуры"); КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуКоличество%", "ЕстьNull(Максимум(РезервыПоДокументу.КоличествоОстаток),0)"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//СОЕДИНЕНИЕ_ДокументРезерва_Резервы", " И (Док.ЗаказПокупателя = &ПустойЗаказПокупателя ИЛИ Док.СпособСписанияОстаткаТоваров <> &ИзРезерва)"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ЗаказПокупателя%", "ЗаказПокупателя"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_ЗаказПокупателя%", "ДокТов.ЗаказПокупателя"); Иначе //Если ИмяДокумента = "РеализацияТоваровУслуг" Тогда //документ не может списывать товар из резерва - не надо определять резервы по документу ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуКоличество%", "0"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_ЗаказПокупателя%", "NULL"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_ЗаказПокупателя%", "NULL"); КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_РезервыПоДокументуБезСерии_Количество%", ?(ТекстЗапросаРезервыПоДокументуБезСерии<>"", "ЕстьNull(МАКСИМУМ(РезервыПоДокументуБезСерии.КоличествоОстаток),0)", "0")); Если ЕстьКачество Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%", "Качество"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%", "ВЫБОР КОГДА ДокНаб.Качество = &ПустоеКачество ТОГДА ДокТов.Качество |ИНАЧЕ ДокНаб.Качество КОНЕЦ"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%", " &Новый"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%", "&Новый"); КонецЕсли; Если ЕстьСпособСписания Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%", "ВЫБОР КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров |ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров КОНЕЦ"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%", " СпособСписанияОстаткаТоваров"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%", " &ПустойСпособСписания"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%", "&ПустойСпособСписания"); КонецЕсли; ДополнитьТекстЗапроса(ТекстЗапроса,ложь,,ложь,,ложь,ЕстьКачество,ЕстьСкладВТабЧасти,ТекстЗапросаСписокНоменклатуры); Запрос.Текст = ТекстЗапроса; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); ОбработатьРезультатЗапроса(Выборка,истина,ТекстЗапросаРезервыПоДокументуБезСерии<>""); КонецПроцедуры //КонтрольОстатков_Реализация_ОтчетОРознПродажах() |
|||
41
singlych
09.11.12
✎
17:37
|
(25) попробуйте в процедуре ОбработатьРезультатЗапроса
вместо Выборка.НоменклатураПредставление написать Выборка.НоменклатураПредставление + " код " + Выборка.Номенклатура.Код |
|||
42
EKO LX
09.11.12
✎
17:56
|
(41) singlych, Вы гений! Очень Вам благодарен!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |