Процедура СообщитьОНедостаткеТовара
Показывать по
10
20
40
сообщений
- 1
- 2
09.11.2012
15:03
#1
"Здравствуйте уважаемые программисты 1С. Помогите пожалуйста с проблемой. Как дописать процедуру так чтобы при появлении служебной сообщении перед номенклатурой появлялась также его код. Конфигурация УТ редакция 10.3
!! Остатка Товар с качеством Новый на складе Склад недостаточно.
+ Code
!! Остатка Товар с качеством Новый на складе Склад недостаточно.
+ Code
Процедура СообщитьОНедостаткеТовара(Требуется, Свободно = 0, ВРезерве = 0, КПередаче = 0, КПолучению = 0, Отказ, Заголовок="""", Склад = """", ЗаказПоставщику = """", Номенклатура = """", Характеристика = """", Серия = """", Качество = """", ЕИ = """", СтрокаСообщения = """") Экспорт Если СтрокаСообщения = """" Тогда Если ВРезерве > 0 ИЛИ КПередаче > 0 Тогда СтрокаСообщения = "Свободного остатка "; Иначе СтрокаСообщения = "Остатка "; КонецЕсли; КонецЕсли; СтрокаСообщения = СтрокаСообщения + Номенклатура + Характеристика + Серия; СтрокаСообщения = СтрокаСообщения + ?(Качество = """", """", " с качеством " + Качество); Если ЗаказПоставщику <> """" И Склад <> """" Тогда СтрокаСообщения = СтрокаСообщения + " в заказах поставщикам на склад " + Склад + " недостаточно для размещения."; ИначеЕсли ЗаказПоставщику <> """" Тогда СтрокаСообщения = СтрокаСообщения + " заказанного по документу " + ЗаказПоставщику + " недостаточно для размещения."; ИначеЕсли Склад <> """" Тогда СтрокаСообщения = СтрокаСообщения + " на складе " + Склад + " недостаточно."; КонецЕсли; ОшибкаНетОстатка(СтрокаСообщения, Свободно , Требуется, ЕИ, Отказ, Заголовок); Если КПередаче > 0 Тогда Сообщить("К передаче " + КПередаче + " " + ЕИ); КонецЕсли; Если ВРезерве > 0 Тогда Сообщить("Зарезервировано " + ВРезерве + " " + ЕИ); КонецЕсли; Если КПолучению > 0 Тогда Сообщить("К получению "+ КПолучению + " "+ ЕИ); КонецЕсли; КонецПроцедуры // СообщитьОНедостаткеТовара()" 09.11.2012
15:20
#3
она вызывается при проведении Реализации товаров и услуг, когда в остатках нет требуемых товаров
09.11.2012
16:06
#4
"вызывается она помоему отсюда
Процедура ОбработатьРезультатЗапроса(Выборка,ЕстьСерия,ЕстьРезервыПоДокументуБезСерии) Пока Выборка.Следующий() Цикл Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда ДокументКоличествоБезСерии = Выборка.ДокументКоличество; РезервыПоДокументуБезСерииКоличество = ?(ЕстьРезервыПоДокументуБезСерии,Выборка.РезервыПоДокументуБезСерииКоличество,Выборка.РезервыПоДокументуКоличество); Продолжить; КонецЕсли; ДокументКоличество = Выборка.ДокументКоличество; КоличествоНаСкладе = Выборка.ОстатокКоличество; КоличествоВРезерве = Выборка.РезервыКоличество; КоличествоВРезервеПоСерии = Выборка.РезервыПоСерииКоличество; РезервыПоДокументуКоличество = Выборка.РезервыПоДокументуКоличество; КПередачеКоличество = Выборка.КПередачеКоличество; КПередачеБезСерииКоличество = ?(ЕстьСерия,Выборка.КПередачеБезСерииКоличество,КПередачеКоличество); КПередачеПоДокументуКоличество = Выборка.КПередачеПоДокументуКоличество; КПередачеПоДокументуБезСерииКоличество = ?(ЕстьСерия,Выборка.КПередачеПоДокументуБезСерииКоличество,Выборка.КПередачеПоДокументуКоличество); КПолучениюКоличество = Выборка.КПолучению; КПолучениюПоДокументуКоличество = Выборка.КПолучениюПоДокументуКоличество; НедоступноНаСкладе = Макс(КоличествоВРезерве - РезервыПоДокументуБезСерииКоличество,0) + Макс(КПередачеБезСерииКоличество - КПередачеПоДокументуБезСерииКоличество,0) + Макс(КПолучениюКоличество-КПолучениюПоДокументуКоличество,0); // Сначала проверяем остаток товара на складе с учетом серий, // потом свободный остаток товара (без учета серий) Если ЕстьСерия Тогда КоличествоБезРезерва = КоличествоНаСкладе; мКоличествоВРезерве = 0; //если серия не заполнена - уменьшать свободный остаток на количество резерва и товаров к передаче нельзя, // т.к. может попасть резервирование или товары к передаче, выполненные без учета серии Если ЗначениеЗаполнено(Выборка.СерияНоменклатуры) Тогда Если ИспользоватьУказаниеСерийНоменклатурыПриРезервировании Тогда //может иметься резерв в разрезе серий - его надо убрать из свободного остатка мКоличествоВРезерве = Макс(КоличествоВРезервеПоСерии - РезервыПоДокументуКоличество,0); КоличествоБезРезерва = КоличествоНаСкладе - мКоличествоВРезерве; КонецЕсли; КоличествоБезРезерва = КоличествоБезРезерва - КПередачеКОличество + КПередачеПоДокументуКоличество; КонецЕсли; Если КоличествоБезРезерва < ДокументКоличество Тогда УправлениеЗапасами.СообщитьОНедостаткеТовара(ДокументКоличество // Требуемое количество товара , КоличествоБезРезерва // Свободное количество товара , мКоличествоВРезерве // Количество в резерве , Макс(КПередачеКоличество - КПередачеПоДокументуКоличество,0) , Макс(КПолучениюКоличество-КПолучениюПоДокументуКоличество,0) , Отказ, Заголовок , СокрЛП(Выборка.Склад) // Склад (представление) , // Заказ поставщику (представление) , Выборка.НоменклатураПредставление // Номенклатура (представление) , Выборка.НоменклатураПредставление.Код // Эко Номенклатура.Код (представление) , " "+Выборка.ХарактеристикаНоменклатурыПредставление // Характеристика (представление) , " "+Выборка.СерияНоменклатурыПредставление // Серия номенклатуры (представление) , СокрЛП(Выборка.Качество) // Качество товара (представление) , Выборка.ЕдиницаХраненияОстатковПредставление // Единица хранения остатков (представление) ); Продолжить; КонецЕсли; КоличествоНаСкладе = Выборка.ОстатокБезСерииКоличество; ДокументКоличество = ДокументКоличествоБезСерии; КонецЕсли; Если КоличествоНаСкладе - НедоступноНаСкладе < ДокументКоличество Тогда УправлениеЗапасами.СообщитьОНедостаткеТовара(ДокументКоличество // Требуемое количество товара , КоличествоНаСкладе - НедоступноНаСкладе // Свободное количество товара , КоличествоВРезерве - РезервыПоДокументуБезСерииКоличество // Количество товара в резерве , Макс(КПередачеБезСерииКоличество - КПередачеПоДокументуБезСерииКоличество,0) // Количество товара к передаче , Макс(КПолучениюКоличество-КПолучениюПоДокументуКоличество,0) , Отказ, Заголовок , СокрЛП(Выборка.Склад) // Склад (представление) , // Заказ поставщику (представление) , Выборка.НоменклатураПредставление // Номенклатура (представление) , Выборка.ХарактеристикаНоменклатурыПредставление // Характеристика (представление) , // Серия номенклатуры (представление) , // Качество товара (представление) , Выборка.ЕдиницаХраненияОстатковПредставление // Единица хранения остатков (представление) ); ДокументКоличествоБезСерии = 0; КонецЕсли; КонецЦикла; КонецПроцедуры"
09.11.2012
16:08
#6
, Выборка.НоменклатураПредставление.Код // Эко Номенклатура.Код (представление)
Это кто делал?
09.11.2012
17:06
#9
Получить Код от элемента через "точку" можно только от ссылки. Тут же из Выборки используют строковое представление "НоменклатураПредставление". Нужно найти запрос, который формирует выборку и в нем определить получение поля Код от Номенклатуры. Дальше можно использовать это поле как Вы и делаете. В процедуре формирования сообщения не забудьте добавить параметр (лучше в самом конце после всех типовых, чтобы было видно Ваше "вмешательство" в код), а то будет "ругаться", что лишнего пихаете в параметры процедуры. В коде процедуры уже используйте этот параметр с кодом номенклатуры как Вам будет угодно.
09.11.2012
17:26
#10
"если не ощибаюсь вот сам и запрос
и ее надо откорректировать Оо"
Процедура КонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(ДокументОбъект) ЕстьСоставНабора = Ложь; Если ДокументОбъект.СоставНабора.Количество() > 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")); Если ЕстьКачество Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%", "Качество"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%", "ВЫБОР КОГДА ДокНаб.Качество = &ПустоеКачество ТОГДА ДокТов.Качество |ИНАЧЕ ДокНаб.Качество КОНЕЦ"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%", " &Новый"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%", "&Новый"); КонецЕсли; Если ЕстьСпособСписания Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%", "ВЫБОР КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров |ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров КОНЕЦ"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%", " СпособСписанияОстаткаТоваров"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%", " &ПустойСпособСписания"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%", "&ПустойСпособСписания"); КонецЕсли; ДополнитьТекстЗапроса(ТекстЗапроса,ложь,,ложь,,ложь,ЕстьКачество,ЕстьСкладВТабЧасти,ТекстЗапросаСписокНоменклатуры); Запрос.Текст = ТекстЗапроса; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); ОбработатьРезультатЗапроса(Выборка,истина,ТекстЗапросаРезервыПоДокументуБезСерии<>""""); КонецПроцедуры //КонтрольОстатков_Реализация_ОтчетОРознПродажах() и ее надо откорректировать Оо"
- 1
- 2
Читают тему
(гостей: 1)