Процедура СообщитьОНедостаткеТовара

Новая тема
Показывать по 10 20 40 сообщений
"Здравствуйте уважаемые программисты 1С. Помогите пожалуйста с проблемой. Как дописать процедуру так чтобы при появлении служебной сообщении перед номенклатурой появлялась также его код. Конфигурация УТ редакция 10.3

!! Остатка Товар   с качеством Новый на складе Склад недостаточно.
+ Code
Процедура СообщитьОНедостаткеТовара(Требуется, Свободно = 0, ВРезерве = 0, КПередаче = 0, КПолучению = 0, Отказ, Заголовок="""", Склад = """", ЗаказПоставщику = """", Номенклатура = """", Характеристика = """", Серия = """", Качество = """", ЕИ = """", СтрокаСообщения = """") Экспорт    Если СтрокаСообщения = """" Тогда        Если ВРезерве > 0 ИЛИ КПередаче > 0 Тогда            СтрокаСообщения = "Свободного остатка ";        Иначе            СтрокаСообщения = "Остатка ";        КонецЕсли;    КонецЕсли;    СтрокаСообщения = СтрокаСообщения + Номенклатура + Характеристика + Серия;    СтрокаСообщения = СтрокаСообщения + ?(Качество = """", """", " с качеством " + Качество);    Если ЗаказПоставщику <> """" И Склад <> """" Тогда        СтрокаСообщения = СтрокаСообщения + " в заказах поставщикам на склад " + Склад + " недостаточно для размещения.";    ИначеЕсли ЗаказПоставщику <> """" Тогда        СтрокаСообщения = СтрокаСообщения + " заказанного по документу " + ЗаказПоставщику + " недостаточно для размещения.";    ИначеЕсли Склад <> """" Тогда        СтрокаСообщения = СтрокаСообщения + " на складе " + Склад + " недостаточно.";    КонецЕсли;    ОшибкаНетОстатка(СтрокаСообщения, Свободно , Требуется, ЕИ, Отказ, Заголовок);    Если КПередаче > 0 Тогда        Сообщить("К передаче " + КПередаче + " " + ЕИ);    КонецЕсли;    Если ВРезерве > 0 Тогда        Сообщить("Зарезервировано " + ВРезерве + " " + ЕИ);    КонецЕсли;    Если КПолучению > 0 Тогда        Сообщить("К получению "+ КПолучению + " "+ ЕИ);    КонецЕсли;    КонецПроцедуры // СообщитьОНедостаткеТовара()
"
Для этого надо видеть кусок кода, который вызывает эту процедуру.
она вызывается при проведении Реализации товаров и услуг, когда в остатках нет требуемых товаров
"вызывается она помоему отсюда


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



Это кто делал?
я
знаю что бред, подскажите пожалуйста как правильней
Получить Код от элемента через "точку" можно только от ссылки. Тут же из Выборки используют строковое представление "НоменклатураПредставление". Нужно найти запрос, который формирует выборку и в нем определить получение поля Код от Номенклатуры. Дальше можно использовать это поле как Вы и делаете. В процедуре формирования сообщения не забудьте добавить параметр (лучше в самом конце после всех типовых, чтобы было видно Ваше "вмешательство" в код), а то будет "ругаться", что лишнего пихаете в параметры процедуры. В коде процедуры уже используйте этот параметр с кодом номенклатуры как Вам будет угодно.
"если не ощибаюсь вот сам и запрос


Процедура КонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(ДокументОбъект)     ЕстьСоставНабора       = Ложь;     Если ДокументОбъект.СоставНабора.Количество() > 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)

Быстрый переход