Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Другие решения на платформе "1С:Предприятие 8"]

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

EL Khan
читатель
офлайн
Дата регистрации: 10.02.2012
Сообщений: 92
Пост №1
 
09.11.2012 15:03

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

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №2
 
09.11.2012 15:12

Для этого надо видеть кусок кода, который вызывает эту процедуру.

EL Khan
читатель
офлайн
Дата регистрации: 10.02.2012
Сообщений: 92
Пост №3
 
09.11.2012 15:20

она вызывается при проведении Реализации товаров и услуг, когда в остатках нет требуемых товаров

EL Khan
читатель
офлайн
Дата регистрации: 10.02.2012
Сообщений: 92
Пост №4
 
09.11.2012 16:06

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

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №5
 
09.11.2012 16:06

Мне не словесное описание нужно, а кусок кода, где происходит вызов.

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №6
 
09.11.2012 16:08

<pre>, Выборка.НоменклатураПредставление.Код                   // Эко Номенклатура.Код (представление) </pre><br><br> <br>Это кто делал?

EL Khan
читатель
офлайн
Дата регистрации: 10.02.2012
Сообщений: 92
Пост №7
 
09.11.2012 16:11

я

EL Khan
читатель
офлайн
Дата регистрации: 10.02.2012
Сообщений: 92
Пост №8
 
09.11.2012 16:27

знаю что бред, подскажите пожалуйста как правильней

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №9
 
09.11.2012 17:06

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

EL Khan
читатель
офлайн
Дата регистрации: 10.02.2012
Сообщений: 92
Пост №10
 
09.11.2012 17:26

"если не ощибаюсь вот сам и запрос<br> <br> <br><pre>Процедура КонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(ДокументОбъект) ЕстьСоставНабора       = Ложь; Если ДокументОбъект.СоставНабора.Количество() > 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")); Если ЕстьКачество Тогда       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%",                         "Качество");       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%",                   "ВЫБОР КОГДА ДокНаб.Качество = &ПустоеКачество ТОГДА ДокТов.Качество                                                                                                                   |ИНАЧЕ ДокНаб.Качество КОНЕЦ"); Иначе       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Качество%",       " &Новый");       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_Качество%", "&Новый"); КонецЕсли;      Если ЕстьСпособСписания Тогда       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%", "ВЫБОР КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров                                                                                                                         |ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров КОНЕЦ");       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%",       " СпособСписанияОстаткаТоваров"); Иначе       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_СпособСписанияОстаткаТоваров%",       " &ПустойСпособСписания");       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ПОЛЕ_Набор_СпособСписанияОстаткаТоваров%", "&ПустойСпособСписания"); КонецЕсли; ДополнитьТекстЗапроса(ТекстЗапроса,ложь,,ложь,,ложь,ЕстьКачество,ЕстьСкладВТабЧасти,ТекстЗапросаСписокНоменклатуры);      Запрос.Текст = ТекстЗапроса;      РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); ОбработатьРезультатЗапроса(Выборка,истина,ТекстЗапросаРезервыПоДокументуБезСерии<>""""); КонецПроцедуры //КонтрольОстатков_Реализация_ОтчетОРознПродажах() </pre><br><br> <br> <br>и ее надо откорректировать Оо"

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация