Здравствуйте коллеги.
В типовой УНФ 1.6 вплоть до последней редакции 1.6.13.58 при проведении документов ПриходнаяНакладная и ЧекККМВозврат отсутствует контроль остатков по серийным номерам даже при установке константы КонтрольОстатковСерийныхНомеров в Истина.
Поводом для написании этой небольшой статьи послужила публикация "УНФ: Учет серийных номеров".
Итак, начнем с документа ПриходнаяНакладная.
Открываем модуль менеджера документа ПриходнаяНакладная, находим процедуру
ВыполнитьКонтроль(ДокументСсылкаПриходнаяНакладная, ДополнительныеСвойства, Отказ, УдалениеПроведения = Ложь) Экспорт
и видим, что в СтруктураВременныеТаблицы отсутствует ДвиженияСерийныеНомераИзменение, а в тексте запроса нет обращения к РегистрНакопления.СерийныеНомера.Остатки. Пробуем исправить. Заменяем текст данной процедуры на следующий код:
// Выполняет контроль возникновения отрицательных остатков. // Процедура ВыполнитьКонтроль(ДокументСсылкаПриходнаяНакладная, ДополнительныеСвойства, Отказ, УдалениеПроведения = Ложь) Экспорт Если НЕ УправлениеНебольшойФирмойСервер.ВыполнитьКонтрольОстатков() Тогда Возврат; КонецЕсли; // МобильноеПриложение Если МобильноеПриложениеВызовСервера.НужноОграничитьФункциональность() Тогда Возврат; КонецЕсли; // Конец МобильноеПриложение СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы; // Если временные таблицы "ДвиженияЗапасыИзменение", "ДвиженияЗапасыНаСкладахИзменение", // "ДвиженияЗапасыКПоступлениюНаСкладыИзменение", "ДвиженияЗапасыПереданныеИзменение", // "ДвиженияЗапасыПринятыеИзменение", "ДвиженияРазмещениеЗаказовИзменение", // "ДвиженияПотребностьВЗапасахИзменение" содержат записи, необходимо выполнить контроль // реализации товаров. Если СтруктураВременныеТаблицы.ДвиженияЗапасыИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗапасыНаСкладахИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗапасыКПоступлениюНаСкладыИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗапасыПереданныеИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗапасыПринятыеИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияРазмещениеЗаказовИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗаказыПокупателейИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗаказыПоставщикамИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияПотребностьВЗапасахИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияРасчетыСПоставщикамиИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияСуммовойУчетВРозницеИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗапасыВРазрезеГТДИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияСерийныеНомераИзменение //Для контроля серийных номеров Тогда Запрос = Новый Запрос( "ВЫБРАТЬ | ДвиженияЗапасыНаСкладахИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияЗапасыНаСкладахИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияЗапасыНаСкладахИзменение.СтруктурнаяЕдиница КАК СтруктурнаяЕдиницаПредставление, | ДвиженияЗапасыНаСкладахИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияЗапасыНаСкладахИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияЗапасыНаСкладахИзменение.Партия КАК ПартияПредставление, | ДвиженияЗапасыНаСкладахИзменение.Ячейка КАК ЯчейкаПредставление, | ЗапасыНаСкладахОстатки.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы КАК ТипСтруктурнойЕдиницы, | ЗапасыНаСкладахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗапасыНаСкладахИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗапасыНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасыНаСкладах, | ЕСТЬNULL(ЗапасыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасыНаСкладах |ИЗ | ДвиженияЗапасыНаСкладахИзменение КАК ДвиженияЗапасыНаСкладахИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки(&МоментКонтроля, ) КАК ЗапасыНаСкладахОстатки | ПО ДвиженияЗапасыНаСкладахИзменение.Организация = ЗапасыНаСкладахОстатки.Организация | И ДвиженияЗапасыНаСкладахИзменение.СтруктурнаяЕдиница = ЗапасыНаСкладахОстатки.СтруктурнаяЕдиница | И ДвиженияЗапасыНаСкладахИзменение.Номенклатура = ЗапасыНаСкладахОстатки.Номенклатура | И ДвиженияЗапасыНаСкладахИзменение.Характеристика = ЗапасыНаСкладахОстатки.Характеристика | И ДвиженияЗапасыНаСкладахИзменение.Партия = ЗапасыНаСкладахОстатки.Партия | И ДвиженияЗапасыНаСкладахИзменение.Ячейка = ЗапасыНаСкладахОстатки.Ячейка | И (ЕСТЬNULL(ЗапасыНаСкладахОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияЗапасыИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияЗапасыИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияЗапасыИзменение.СтруктурнаяЕдиница КАК СтруктурнаяЕдиницаПредставление, | ДвиженияЗапасыИзменение.СчетУчета КАК СчетУчетаПредставление, | ДвиженияЗапасыИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияЗапасыИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияЗапасыИзменение.Партия КАК ПартияПредставление, | ДвиженияЗапасыИзменение.ЗаказПокупателя КАК ЗаказПокупателяПредставление, | ЗапасыОстатки.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы КАК ТипСтруктурнойЕдиницы, | ЗапасыОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗапасыИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасы, | ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасы, | ЕСТЬNULL(ЗапасыОстатки.СуммаОстаток, 0) КАК СуммаОстатокЗапасы |ИЗ | ДвиженияЗапасыИзменение КАК ДвиженияЗапасыИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(&МоментКонтроля, ) КАК ЗапасыОстатки | ПО ДвиженияЗапасыИзменение.Организация = ЗапасыОстатки.Организация | И ДвиженияЗапасыИзменение.СтруктурнаяЕдиница = ЗапасыОстатки.СтруктурнаяЕдиница | И ДвиженияЗапасыИзменение.СчетУчета = ЗапасыОстатки.СчетУчета | И ДвиженияЗапасыИзменение.Номенклатура = ЗапасыОстатки.Номенклатура | И ДвиженияЗапасыИзменение.Характеристика = ЗапасыОстатки.Характеристика | И ДвиженияЗапасыИзменение.Партия = ЗапасыОстатки.Партия | И ДвиженияЗапасыИзменение.ЗаказПокупателя = ЗапасыОстатки.ЗаказПокупателя | И (ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияЗапасыПереданныеИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияЗапасыПереданныеИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияЗапасыПереданныеИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияЗапасыПереданныеИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияЗапасыПереданныеИзменение.Партия КАК ПартияПредставление, | ДвиженияЗапасыПереданныеИзменение.Контрагент КАК КонтрагентПредставление, | ДвиженияЗапасыПереданныеИзменение.Договор КАК ДоговорПредставление, | ДвиженияЗапасыПереданныеИзменение.Заказ КАК ЗаказПредставление, | ДвиженияЗапасыПереданныеИзменение.ТипПриемаПередачи КАК ТипПриемаПередачиПредставление, | ЗапасыПереданныеОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗапасыПереданныеИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗапасыПереданныеОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасыПереданные, | ЕСТЬNULL(ЗапасыПереданныеОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасыПереданные, | ЕСТЬNULL(ДвиженияЗапасыПереданныеИзменение.СуммаРасчетовИзменение, 0) + ЕСТЬNULL(ЗапасыПереданныеОстатки.СуммаРасчетовОстаток, 0) КАК СуммаРасчетовЗапасыПереданные, | ЕСТЬNULL(ЗапасыПереданныеОстатки.СуммаРасчетовОстаток, 0) КАК СуммаРасчетовОстатокЗапасыПереданные |ИЗ | ДвиженияЗапасыПереданныеИзменение КАК ДвиженияЗапасыПереданныеИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыПереданные.Остатки(&МоментКонтроля, ) КАК ЗапасыПереданныеОстатки | ПО ДвиженияЗапасыПереданныеИзменение.Организация = ЗапасыПереданныеОстатки.Организация | И ДвиженияЗапасыПереданныеИзменение.Номенклатура = ЗапасыПереданныеОстатки.Номенклатура | И ДвиженияЗапасыПереданныеИзменение.Характеристика = ЗапасыПереданныеОстатки.Характеристика | И ДвиженияЗапасыПереданныеИзменение.Партия = ЗапасыПереданныеОстатки.Партия | И ДвиженияЗапасыПереданныеИзменение.Контрагент = ЗапасыПереданныеОстатки.Контрагент | И ДвиженияЗапасыПереданныеИзменение.Договор = ЗапасыПереданныеОстатки.Договор | И ДвиженияЗапасыПереданныеИзменение.Заказ = ЗапасыПереданныеОстатки.Заказ | И ДвиженияЗапасыПереданныеИзменение.ТипПриемаПередачи = ЗапасыПереданныеОстатки.ТипПриемаПередачи | И (ЕСТЬNULL(ЗапасыПереданныеОстатки.КоличествоОстаток, 0) < 0 | ИЛИ ЕСТЬNULL(ЗапасыПереданныеОстатки.СуммаРасчетовОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияЗапасыПринятыеИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияЗапасыПринятыеИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияЗапасыПринятыеИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияЗапасыПринятыеИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияЗапасыПринятыеИзменение.Партия КАК ПартияПредставление, | ДвиженияЗапасыПринятыеИзменение.Контрагент КАК КонтрагентПредставление, | ДвиженияЗапасыПринятыеИзменение.Договор КАК ДоговорПредставление, | ДвиженияЗапасыПринятыеИзменение.Заказ КАК ЗаказПредставление, | ДвиженияЗапасыПринятыеИзменение.ТипПриемаПередачи КАК ТипПриемаПередачиПредставление, | ЗапасыПринятыеОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗапасыПринятыеИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗапасыПринятыеОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасыПринятые, | ЕСТЬNULL(ЗапасыПринятыеОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасыПринятые, | ЕСТЬNULL(ДвиженияЗапасыПринятыеИзменение.СуммаРасчетовИзменение, 0) + ЕСТЬNULL(ЗапасыПринятыеОстатки.СуммаРасчетовОстаток, 0) КАК СуммаРасчетовЗапасыПринятые, | ЕСТЬNULL(ЗапасыПринятыеОстатки.СуммаРасчетовОстаток, 0) КАК СуммаРасчетовОстатокЗапасыПринятые |ИЗ | ДвиженияЗапасыПринятыеИзменение КАК ДвиженияЗапасыПринятыеИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыПринятые.Остатки(&МоментКонтроля, ) КАК ЗапасыПринятыеОстатки | ПО ДвиженияЗапасыПринятыеИзменение.Организация = ЗапасыПринятыеОстатки.Организация | И ДвиженияЗапасыПринятыеИзменение.Номенклатура = ЗапасыПринятыеОстатки.Номенклатура | И ДвиженияЗапасыПринятыеИзменение.Характеристика = ЗапасыПринятыеОстатки.Характеристика | И ДвиженияЗапасыПринятыеИзменение.Партия = ЗапасыПринятыеОстатки.Партия | И ДвиженияЗапасыПринятыеИзменение.Контрагент = ЗапасыПринятыеОстатки.Контрагент | И ДвиженияЗапасыПринятыеИзменение.Договор = ЗапасыПринятыеОстатки.Договор | И ДвиженияЗапасыПринятыеИзменение.Заказ = ЗапасыПринятыеОстатки.Заказ | И ДвиженияЗапасыПринятыеИзменение.ТипПриемаПередачи = ЗапасыПринятыеОстатки.ТипПриемаПередачи | И (ЕСТЬNULL(ЗапасыПринятыеОстатки.КоличествоОстаток, 0) < 0 | ИЛИ ЕСТЬNULL(ЗапасыПринятыеОстатки.СуммаРасчетовОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияЗаказыПокупателейИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияЗаказыПокупателейИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияЗаказыПокупателейИзменение.ЗаказПокупателя КАК ЗаказПредставление, | ДвиженияЗаказыПокупателейИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияЗаказыПокупателейИзменение.Характеристика КАК ХарактеристикаПредставление, | ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗаказыПокупателейИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) КАК ОстатокЗаказыПокупателей, | ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗаказыПокупателей |ИЗ | ДвиженияЗаказыПокупателейИзменение КАК ДвиженияЗаказыПокупателейИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки(&МоментКонтроля, ) КАК ЗаказыПокупателейОстатки | ПО ДвиженияЗаказыПокупателейИзменение.Организация = ЗаказыПокупателейОстатки.Организация | И ДвиженияЗаказыПокупателейИзменение.ЗаказПокупателя = ЗаказыПокупателейОстатки.ЗаказПокупателя | И ДвиженияЗаказыПокупателейИзменение.Номенклатура = ЗаказыПокупателейОстатки.Номенклатура | И ДвиженияЗаказыПокупателейИзменение.Характеристика = ЗаказыПокупателейОстатки.Характеристика | И (ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияЗаказыПоставщикамИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияЗаказыПоставщикамИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияЗаказыПоставщикамИзменение.ЗаказПоставщику КАК ЗаказПоставщикуПредставление, | ДвиженияЗаказыПоставщикамИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияЗаказыПоставщикамИзменение.Характеристика КАК ХарактеристикаПредставление, | ЗаказыПоставщикамОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗаказыПоставщикамИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗаказыПоставщикамОстатки.КоличествоОстаток, 0) КАК ОстатокЗаказыПоставщикам, | ЕСТЬNULL(ЗаказыПоставщикамОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗаказыПоставщикам |ИЗ | ДвиженияЗаказыПоставщикамИзменение КАК ДвиженияЗаказыПоставщикамИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&МоментКонтроля, ) КАК ЗаказыПоставщикамОстатки | ПО ДвиженияЗаказыПоставщикамИзменение.Организация = ЗаказыПоставщикамОстатки.Организация | И ДвиженияЗаказыПоставщикамИзменение.ЗаказПоставщику = ЗаказыПоставщикамОстатки.ЗаказПоставщику | И ДвиженияЗаказыПоставщикамИзменение.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура | И ДвиженияЗаказыПоставщикамИзменение.Характеристика = ЗаказыПоставщикамОстатки.Характеристика | И (ЕСТЬNULL(ЗаказыПоставщикамОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияПотребностьВЗапасахИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияПотребностьВЗапасахИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияПотребностьВЗапасахИзменение.ТипДвижения КАК ТипДвиженияПредставление, | ДвиженияПотребностьВЗапасахИзменение.ЗаказПокупателя КАК ЗаказПокупателяПредставление, | ДвиженияПотребностьВЗапасахИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияПотребностьВЗапасахИзменение.Характеристика КАК ХарактеристикаПредставление, | ПотребностьВЗапасахОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияПотребностьВЗапасахИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ПотребностьВЗапасахОстатки.КоличествоОстаток, 0) КАК ОстатокПотребностьВЗапасах, | ЕСТЬNULL(ПотребностьВЗапасахОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокПотребностьВЗапасах |ИЗ | ДвиженияПотребностьВЗапасахИзменение КАК ДвиженияПотребностьВЗапасахИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПотребностьВЗапасах.Остатки(&МоментКонтроля, ) КАК ПотребностьВЗапасахОстатки | ПО ДвиженияПотребностьВЗапасахИзменение.Организация = ПотребностьВЗапасахОстатки.Организация | И ДвиженияПотребностьВЗапасахИзменение.ТипДвижения = ПотребностьВЗапасахОстатки.ТипДвижения | И ДвиженияПотребностьВЗапасахИзменение.ЗаказПокупателя = ПотребностьВЗапасахОстатки.ЗаказПокупателя | И ДвиженияПотребностьВЗапасахИзменение.Номенклатура = ПотребностьВЗапасахОстатки.Номенклатура | И ДвиженияПотребностьВЗапасахИзменение.Характеристика = ПотребностьВЗапасахОстатки.Характеристика | И (ЕСТЬNULL(ПотребностьВЗапасахОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияРазмещениеЗаказовИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияРазмещениеЗаказовИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияРазмещениеЗаказовИзменение.ЗаказПокупателя КАК ЗаказПокупателяПредставление, | ДвиженияРазмещениеЗаказовИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияРазмещениеЗаказовИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияРазмещениеЗаказовИзменение.ИсточникОбеспечения КАК ИсточникОбеспеченияПредставление, | РазмещениеЗаказовОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияРазмещениеЗаказовИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(РазмещениеЗаказовОстатки.КоличествоОстаток, 0) КАК ОстатокРазмещениеЗаказов, | ЕСТЬNULL(РазмещениеЗаказовОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокРазмещениеЗаказов |ИЗ | ДвиженияРазмещениеЗаказовИзменение КАК ДвиженияРазмещениеЗаказовИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказов.Остатки(&МоментКонтроля, ) КАК РазмещениеЗаказовОстатки | ПО ДвиженияРазмещениеЗаказовИзменение.Организация = РазмещениеЗаказовОстатки.Организация | И ДвиженияРазмещениеЗаказовИзменение.ЗаказПокупателя = РазмещениеЗаказовОстатки.ЗаказПокупателя | И ДвиженияРазмещениеЗаказовИзменение.Номенклатура = РазмещениеЗаказовОстатки.Номенклатура | И ДвиженияРазмещениеЗаказовИзменение.Характеристика = РазмещениеЗаказовОстатки.Характеристика | И ДвиженияРазмещениеЗаказовИзменение.ИсточникОбеспечения = РазмещениеЗаказовОстатки.ИсточникОбеспечения | И (ЕСТЬNULL(РазмещениеЗаказовОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияРасчетыСПоставщикамиИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияРасчетыСПоставщикамиИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияРасчетыСПоставщикамиИзменение.Контрагент КАК КонтрагентПредставление, | ДвиженияРасчетыСПоставщикамиИзменение.Договор КАК ДоговорПредставление, | ДвиженияРасчетыСПоставщикамиИзменение.Договор.ВалютаРасчетов КАК ВалютаПредставление, | ДвиженияРасчетыСПоставщикамиИзменение.Документ КАК ДокументПредставление, | ДвиженияРасчетыСПоставщикамиИзменение.Заказ КАК ЗаказПредставление, | ДвиженияРасчетыСПоставщикамиИзменение.ТипРасчетов КАК ТипРасчетовПредставление, | ЛОЖЬ КАК ДвиженияДенежныхДокументов, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаПередЗаписью КАК СуммаПередЗаписью, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаПриЗаписи КАК СуммаПриЗаписи, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаИзменение КАК СуммаИзменение, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаВалПередЗаписью КАК СуммаВалПередЗаписью, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаВалПриЗаписи КАК СуммаВалПриЗаписи, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаВалИзменение КАК СуммаВалИзменение, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаВалПриЗаписи - ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаВалОстаток, 0) КАК СуммаВыданныхАвансов, | ДвиженияРасчетыСПоставщикамиИзменение.СуммаВалИзменение + ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаВалОстаток, 0) КАК СуммаНепогашеннойЗадолженности, | ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаВалОстаток, 0) КАК СуммаВалОстаток, | ДвиженияРасчетыСПоставщикамиИзменение.ТипРасчетов КАК ТипРасчетов |ИЗ | ДвиженияРасчетыСПоставщикамиИзменение КАК ДвиженияРасчетыСПоставщикамиИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПоставщиками.Остатки(&МоментКонтроля, ) КАК РасчетыСПоставщикамиОстатки | ПО ДвиженияРасчетыСПоставщикамиИзменение.Организация = РасчетыСПоставщикамиОстатки.Организация | И ДвиженияРасчетыСПоставщикамиИзменение.Контрагент = РасчетыСПоставщикамиОстатки.Контрагент | И ДвиженияРасчетыСПоставщикамиИзменение.Договор = РасчетыСПоставщикамиОстатки.Договор | И ДвиженияРасчетыСПоставщикамиИзменение.Документ = РасчетыСПоставщикамиОстатки.Документ | И ДвиженияРасчетыСПоставщикамиИзменение.Заказ = РасчетыСПоставщикамиОстатки.Заказ | И ДвиженияРасчетыСПоставщикамиИзменение.ТипРасчетов = РасчетыСПоставщикамиОстатки.ТипРасчетов | И (ВЫБОР | КОГДА ДвиженияРасчетыСПоставщикамиИзменение.ТипРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыРасчетов.Аванс) | ТОГДА ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаВалОстаток, 0) > 0 | ИНАЧЕ ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаВалОстаток, 0) < 0 | КОНЕЦ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияСуммовойУчетВРозницеИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияСуммовойУчетВРозницеИзменение.Организация КАК ОрганизацияПредставление, | ДвиженияСуммовойУчетВРозницеИзменение.СтруктурнаяЕдиница КАК СтруктурнаяЕдиницаПредставление, | ДвиженияСуммовойУчетВРозницеИзменение.СтруктурнаяЕдиница.РозничныйВидЦен.ВалютаЦены КАК ВалютаПредставление, | ЕСТЬNULL(СуммовойУчетВРозницеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаВалИзменение + ЕСТЬNULL(СуммовойУчетВРозницеОстатки.СуммаВалОстаток, 0) КАК ОстатокВРознице, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаПередЗаписью КАК СуммаПередЗаписью, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаПриЗаписи КАК СуммаПриЗаписи, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаИзменение КАК СуммаИзменение, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаВалПередЗаписью КАК СуммаВалПередЗаписью, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаВалПриЗаписи КАК СуммаВалПриЗаписи, | ДвиженияСуммовойУчетВРозницеИзменение.СуммаВалИзменение КАК СуммаВалИзменение, | ДвиженияСуммовойУчетВРозницеИзменение.СебестоимостьПередЗаписью КАК СебестоимостьПередЗаписью, | ДвиженияСуммовойУчетВРозницеИзменение.СебестоимостьПриЗаписи КАК СебестоимостьПриЗаписи, | ДвиженияСуммовойУчетВРозницеИзменение.СебестоимостьИзменение КАК СебестоимостьИзменение |ИЗ | ДвиженияСуммовойУчетВРозницеИзменение КАК ДвиженияСуммовойУчетВРозницеИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СуммовойУчетВРознице.Остатки(&МоментКонтроля, ) КАК СуммовойУчетВРозницеОстатки | ПО ДвиженияСуммовойУчетВРозницеИзменение.Организация = СуммовойУчетВРозницеОстатки.Организация | И ДвиженияСуммовойУчетВРозницеИзменение.СтруктурнаяЕдиница = СуммовойУчетВРозницеОстатки.СтруктурнаяЕдиница | И (ЕСТЬNULL(СуммовойУчетВРозницеОстатки.СуммаВалОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияЗапасыВРазрезеГТДИзменение.НомерСтроки КАК НомерСтроки, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыВРазрезеГТДИзменение.Организация) КАК ОрганизацияПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыВРазрезеГТДИзменение.НомерГТД) КАК НомерГТДПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыВРазрезеГТДИзменение.Номенклатура) КАК НоменклатураПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыВРазрезеГТДИзменение.Характеристика) КАК ХарактеристикаПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыВРазрезеГТДИзменение.Партия) КАК ПартияПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыВРазрезеГТДИзменение.СтранаПроисхождения) КАК СтранаПроисхожденияПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ЗапасыВРазрезеГТДОстатки.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗапасыВРазрезеГТДИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗапасыВРазрезеГТДОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасыВРазрезеГТД, | ЕСТЬNULL(ЗапасыВРазрезеГТДОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасыВРазрезеГТД |ИЗ | ДвиженияЗапасыВРазрезеГТДИзменение КАК ДвиженияЗапасыВРазрезеГТДИзменение | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыВРазрезеГТД.Остатки( | &МоментКонтроля, | (Организация, НомерГТД, Номенклатура, Характеристика, Партия, СтранаПроисхождения) В | (ВЫБРАТЬ | ДвиженияЗапасыВРазрезеГТДИзменение.Организация КАК Организация, | ДвиженияЗапасыВРазрезеГТДИзменение.НомерГТД КАК НомерГТД, | ДвиженияЗапасыВРазрезеГТДИзменение.Номенклатура КАК Номенклатура, | ДвиженияЗапасыВРазрезеГТДИзменение.Характеристика КАК Характеристика, | ДвиженияЗапасыВРазрезеГТДИзменение.Партия КАК Партия, | ДвиженияЗапасыВРазрезеГТДИзменение.СтранаПроисхождения КАК СтранаПроисхождения | ИЗ | ДвиженияЗапасыВРазрезеГТДИзменение КАК ДвиженияЗапасыВРазрезеГТДИзменение)) КАК ЗапасыВРазрезеГТДОстатки | ПО ДвиженияЗапасыВРазрезеГТДИзменение.Организация = ЗапасыВРазрезеГТДОстатки.Организация | И ДвиженияЗапасыВРазрезеГТДИзменение.НомерГТД = ЗапасыВРазрезеГТДОстатки.НомерГТД | И ДвиженияЗапасыВРазрезеГТДИзменение.Номенклатура = ЗапасыВРазрезеГТДОстатки.Номенклатура | И ДвиженияЗапасыВРазрезеГТДИзменение.Характеристика = ЗапасыВРазрезеГТДОстатки.Характеристика | И ДвиженияЗапасыВРазрезеГТДИзменение.Партия = ЗапасыВРазрезеГТДОстатки.Партия | И ДвиженияЗапасыВРазрезеГТДИзменение.СтранаПроисхождения = ЗапасыВРазрезеГТДОстатки.СтранаПроисхождения |ГДЕ | ЕСТЬNULL(ЗапасыВРазрезеГТДОстатки.КоличествоОстаток, 0) < 0 | |УПОРЯДОЧИТЬ ПО | НомерСтроки; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияСерийныеНомераИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияСерийныеНомераИзменение.СерийныйНомер КАК СерийныйНомерПредставление, | ДвиженияСерийныеНомераИзменение.СтруктурнаяЕдиница КАК СтруктурнаяЕдиницаПредставление, | ДвиженияСерийныеНомераИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияСерийныеНомераИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияСерийныеНомераИзменение.Партия КАК ПартияПредставление, | ДвиженияСерийныеНомераИзменение.Ячейка КАК ЯчейкаПредставление, | СерийныеНомераОстатки.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы КАК ТипСтруктурнойЕдиницы, | СерийныеНомераОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияСерийныеНомераИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(СерийныеНомераОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасыНаСкладах, | ЕСТЬNULL(СерийныеНомераОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасыНаСкладах |ИЗ | ДвиженияСерийныеНомераИзменение КАК ДвиженияСерийныеНомераИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СерийныеНомера.Остатки(&МоментКонтроля, ) КАК СерийныеНомераОстатки | ПО ДвиженияСерийныеНомераИзменение.СерийныйНомер = СерийныеНомераОстатки.СерийныйНомер | И ДвиженияСерийныеНомераИзменение.СтруктурнаяЕдиница = СерийныеНомераОстатки.СтруктурнаяЕдиница | И ДвиженияСерийныеНомераИзменение.Номенклатура = СерийныеНомераОстатки.Номенклатура | И ДвиженияСерийныеНомераИзменение.Характеристика = СерийныеНомераОстатки.Характеристика | И ДвиженияСерийныеНомераИзменение.Партия = СерийныеНомераОстатки.Партия | И ДвиженияСерийныеНомераИзменение.Ячейка = СерийныеНомераОстатки.Ячейка | И (ЕСТЬNULL(СерийныеНомераОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки"); Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("МоментКонтроля", ДополнительныеСвойства.ДляПроведения.МоментКонтроля); МассивРезультатов = Запрос.ВыполнитьПакет(); Если НЕ МассивРезультатов[0].Пустой() ИЛИ НЕ МассивРезультатов[1].Пустой() ИЛИ НЕ МассивРезультатов[2].Пустой() ИЛИ НЕ МассивРезультатов[3].Пустой() ИЛИ НЕ МассивРезультатов[4].Пустой() ИЛИ НЕ МассивРезультатов[5].Пустой() ИЛИ НЕ МассивРезультатов[6].Пустой() ИЛИ НЕ МассивРезультатов[7].Пустой() ИЛИ НЕ МассивРезультатов[8].Пустой() ИЛИ НЕ МассивРезультатов[9].Пустой() ИЛИ НЕ МассивРезультатов[10].Пустой() ИЛИ НЕ МассивРезультатов[11].Пустой() Тогда ДокументОбъектПриходнаяНакладная = ДокументСсылкаПриходнаяНакладная.ПолучитьОбъект() КонецЕсли; // Отрицательный остаток запасов на складе. Если НЕ МассивРезультатов[0].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[0].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасыНаСкладах(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток учета запасов. Если НЕ МассивРезультатов[1].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[1].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасы(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток запасов переданных. Если НЕ МассивРезультатов[2].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[2].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасыПереданные(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток запасов принятых. Если НЕ МассивРезультатов[3].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[3].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасыПринятые(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по заказу покупателя. Если НЕ МассивРезультатов[4].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[4].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗаказыПокупателей(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по заказу поставщику. Если НЕ МассивРезультатов[5].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[5].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗаказыПоставщикам(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток потребностей в запасах. Если НЕ МассивРезультатов[6].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[6].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструПотребностьВЗапасах(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток размещение заказов. Если НЕ МассивРезультатов[7].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[7].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструРазмещениеЗаказов(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по расчетам с поставщиками. Если НЕ МассивРезультатов[8].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[8].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструРасчетыСПоставщиками(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по суммовому учету в рознице. Если НЕ МассивРезультатов[9].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[9].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструСуммовойУчетВРознице(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по остаткам запасов в разрезе номеров ГТД. Если Константы.КонтролироватьОстаткиПоНомерамГТД.Получить() И НЕ МассивРезультатов[10].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[10].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасыВРазрезеГТД(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по серийным номерам. Если Константы.КонтрольОстатковСерийныхНомеров.Получить() И НЕ МассивРезультатов[11].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[11].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструСерийныеНомера(ДокументОбъектПриходнаяНакладная, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; КонецЕсли; КонецПроцедуры // ВыполнитьКонтроль()
Далее открываем модуль менеджера документа ЧекККМВозврат. Находим процедуру
ВыполнитьКонтроль(ДокументСсылкаЧекККМВозврат, ДополнительныеСвойства, Отказ, УдалениеПроведения = Ложь) Экспорт и заменяем код процедуры на следующий:
// Выполняет контроль возникновения отрицательных остатков. // Процедура ВыполнитьКонтроль(ДокументСсылкаЧекККМВозврат, ДополнительныеСвойства, Отказ, УдалениеПроведения = Ложь) Экспорт Если НЕ УправлениеНебольшойФирмойСервер.ВыполнитьКонтрольОстатков() ИЛИ НЕ Константы.КонтролироватьОстаткиПриПробитииЧековККМ.Получить() ИЛИ ДокументСсылкаЧекККМВозврат.Архивный Тогда Возврат; КонецЕсли; СтруктураВременныеТаблицы = ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы; // Если временные таблицы "ДвиженияЗапасыИзменение", необходимо выполнить контроль реализации товаров. Если СтруктураВременныеТаблицы.ДвиженияЗапасыНаСкладахИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияЗапасыИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияДенежныеСредстваВКассахККМИзменение ИЛИ СтруктураВременныеТаблицы.ДвиженияСерийныеНомераИзменение Тогда Запрос = Новый Запрос( "ВЫБРАТЬ | ДвиженияЗапасыНаСкладахИзменение.НомерСтроки КАК НомерСтроки, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыНаСкладахИзменение.Организация) КАК ОрганизацияПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыНаСкладахИзменение.СтруктурнаяЕдиница) КАК СтруктурнаяЕдиницаПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыНаСкладахИзменение.Номенклатура) КАК НоменклатураПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыНаСкладахИзменение.Характеристика) КАК ХарактеристикаПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыНаСкладахИзменение.Партия) КАК ПартияПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияЗапасыНаСкладахИзменение.Ячейка) КАК ЯчейкаПредставление, | ЗапасыНаСкладахОстатки.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы КАК ТипСтруктурнойЕдиницы, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ЗапасыНаСкладахОстатки.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияЗапасыНаСкладахИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(ЗапасыНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокЗапасыНаСкладах, | ЕСТЬNULL(ЗапасыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокЗапасыНаСкладах |ИЗ | ДвиженияЗапасыНаСкладахИзменение КАК ДвиженияЗапасыНаСкладахИзменение | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки( | &МоментКонтроля, | (Организация, СтруктурнаяЕдиница, Номенклатура, Характеристика, Партия, Ячейка) В | (ВЫБРАТЬ | ДвиженияЗапасыНаСкладахИзменение.Организация КАК Организация, | ДвиженияЗапасыНаСкладахИзменение.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, | ДвиженияЗапасыНаСкладахИзменение.Номенклатура КАК Номенклатура, | ДвиженияЗапасыНаСкладахИзменение.Характеристика КАК Характеристика, | ДвиженияЗапасыНаСкладахИзменение.Партия КАК Партия, | ДвиженияЗапасыНаСкладахИзменение.Ячейка КАК Ячейка | ИЗ | ДвиженияЗапасыНаСкладахИзменение КАК ДвиженияЗапасыНаСкладахИзменение)) КАК ЗапасыНаСкладахОстатки | ПО ДвиженияЗапасыНаСкладахИзменение.Организация = ЗапасыНаСкладахОстатки.Организация | И ДвиженияЗапасыНаСкладахИзменение.СтруктурнаяЕдиница = ЗапасыНаСкладахОстатки.СтруктурнаяЕдиница | И ДвиженияЗапасыНаСкладахИзменение.Номенклатура = ЗапасыНаСкладахОстатки.Номенклатура | И ДвиженияЗапасыНаСкладахИзменение.Характеристика = ЗапасыНаСкладахОстатки.Характеристика | И ДвиженияЗапасыНаСкладахИзменение.Партия = ЗапасыНаСкладахОстатки.Партия | И ДвиженияЗапасыНаСкладахИзменение.Ячейка = ЗапасыНаСкладахОстатки.Ячейка |ГДЕ | ЕСТЬNULL(ЗапасыНаСкладахОстатки.КоличествоОстаток, 0) < 0 | |УПОРЯДОЧИТЬ ПО | НомерСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияДенежныеСредстваВКассахККМИзменение.НомерСтроки КАК НомерСтроки, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияДенежныеСредстваВКассахККМИзменение.Организация) КАК ОрганизацияПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияДенежныеСредстваВКассахККМИзменение.КассаККМ) КАК КассаККМПредставление, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ДвиженияДенежныеСредстваВКассахККМИзменение.КассаККМ.ВалютаДенежныхСредств) КАК ВалютаПредставление, | ЕСТЬNULL(ДенежныеСредстваВКассахККМОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ЕСТЬNULL(ДенежныеСредстваВКассахККМОстатки.СуммаВалОстаток, 0) КАК СуммаВалОстаток, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаВалИзменение + ЕСТЬNULL(ДенежныеСредстваВКассахККМОстатки.СуммаВалОстаток, 0) КАК ОстатокДенежныхСредств, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаПередЗаписью КАК СуммаПередЗаписью, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаПриЗаписи КАК СуммаПриЗаписи, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаИзменение КАК СуммаИзменение, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаВалПередЗаписью КАК СуммаВалПередЗаписью, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаВалПриЗаписи КАК СуммаВалПриЗаписи, | ДвиженияДенежныеСредстваВКассахККМИзменение.СуммаВалИзменение КАК СуммаВалИзменение |ИЗ | ДвиженияДенежныеСредстваВКассахККМИзменение КАК ДвиженияДенежныеСредстваВКассахККМИзменение | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредстваВКассахККМ.Остатки( | &МоментКонтроля, | (Организация, КассаККМ) В | (ВЫБРАТЬ | ДвиженияДенежныеСредстваВКассахККМИзменение.Организация КАК Организация, | ДвиженияДенежныеСредстваВКассахККМИзменение.КассаККМ КАК ТипДенежныхСредств | ИЗ | ДвиженияДенежныеСредстваВКассахККМИзменение КАК ДвиженияДенежныеСредстваВКассахККМИзменение)) КАК ДенежныеСредстваВКассахККМОстатки | ПО ДвиженияДенежныеСредстваВКассахККМИзменение.Организация = ДенежныеСредстваВКассахККМОстатки.Организация | И ДвиженияДенежныеСредстваВКассахККМИзменение.КассаККМ = ДенежныеСредстваВКассахККМОстатки.КассаККМ |ГДЕ | ЕСТЬNULL(ДенежныеСредстваВКассахККМОстатки.СуммаВалОстаток, 0) < 0 | |УПОРЯДОЧИТЬ ПО | НомерСтроки; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДвиженияСерийныеНомераИзменение.НомерСтроки КАК НомерСтроки, | ДвиженияСерийныеНомераИзменение.СерийныйНомер КАК СерийныйНомерПредставление, | ДвиженияСерийныеНомераИзменение.СтруктурнаяЕдиница КАК СтруктурнаяЕдиницаПредставление, | ДвиженияСерийныеНомераИзменение.Номенклатура КАК НоменклатураПредставление, | ДвиженияСерийныеНомераИзменение.Характеристика КАК ХарактеристикаПредставление, | ДвиженияСерийныеНомераИзменение.Партия КАК ПартияПредставление, | ДвиженияСерийныеНомераИзменение.Ячейка КАК ЯчейкаПредставление, | СерийныеНомераОстатки.СтруктурнаяЕдиница.ТипСтруктурнойЕдиницы КАК ТипСтруктурнойЕдиницы, | СерийныеНомераОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПредставление, | ЕСТЬNULL(ДвиженияСерийныеНомераИзменение.КоличествоИзменение, 0) + ЕСТЬNULL(СерийныеНомераОстатки.КоличествоОстаток, 0) КАК ОстатокСерийныеНомера, | ЕСТЬNULL(СерийныеНомераОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокСерийныеНомера |ИЗ | ДвиженияСерийныеНомераИзменение КАК ДвиженияСерийныеНомераИзменение | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СерийныеНомера.Остатки(&МоментКонтроля, ) КАК СерийныеНомераОстатки | ПО ДвиженияСерийныеНомераИзменение.СтруктурнаяЕдиница = СерийныеНомераОстатки.СтруктурнаяЕдиница | И ДвиженияСерийныеНомераИзменение.Номенклатура = СерийныеНомераОстатки.Номенклатура | И ДвиженияСерийныеНомераИзменение.Характеристика = СерийныеНомераОстатки.Характеристика | И ДвиженияСерийныеНомераИзменение.Партия = СерийныеНомераОстатки.Партия | И ДвиженияСерийныеНомераИзменение.СерийныйНомер = СерийныеНомераОстатки.СерийныйНомер | И ДвиженияСерийныеНомераИзменение.Ячейка = СерийныеНомераОстатки.Ячейка | И (ЕСТЬNULL(СерийныеНомераОстатки.КоличествоОстаток, 0) < 0) | |УПОРЯДОЧИТЬ ПО | НомерСтроки"); Если Не ДокументСсылкаЧекККМВозврат.ДвиженияПоЗапасамУдалять Тогда Запрос.Текст = Запрос.Текст // [0 и 1] + СформироватьШаблонПакетногоЗапроса() + СформироватьТекстЗапросаОстаткиЗапасы(); // [2] КонецЕсли; Запрос.МенеджерВременныхТаблиц = СтруктураВременныеТаблицы.МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("МоментКонтроля", ДополнительныеСвойства.ДляПроведения.МоментКонтроля); МассивРезультатов = Запрос.ВыполнитьПакет(); Если НЕ МассивРезультатов[0].Пустой() ИЛИ НЕ МассивРезультатов[1].Пустой() Тогда ДокументОбъектЧекККМВозврат = ДокументСсылкаЧекККМВозврат.ПолучитьОбъект() КонецЕсли; // Отрицательный остаток запасов на складе. Если НЕ МассивРезультатов[0].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[0].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасыНаСкладах(ДокументОбъектЧекККМВозврат, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток по кассе ККМ. Если НЕ МассивРезультатов[1].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[1].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструДенежныеСредстваВКассахККМ(ДокументОбъектЧекККМВозврат, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; // Отрицательный остаток учета запасов. Если Не ДокументСсылкаЧекККМВозврат.ДвиженияПоЗапасамУдалять Тогда Если НЕ МассивРезультатов[2].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[2].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструЗапасы(ДокументОбъектЧекККМВозврат, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; КонецЕсли; // Отрицательный остаток учета серийных номеров. Если Не ДокументСсылкаЧекККМВозврат.ДвиженияПоЗапасамУдалять Тогда Если Константы.КонтрольОстатковСерийныхНомеров.Получить() И НЕ МассивРезультатов[3].Пустой() Тогда ВыборкаИзРезультатаЗапроса = МассивРезультатов[3].Выбрать(); УправлениеНебольшойФирмойСервер.СообщитьОбОшибкахПроведенияПоРегиструСерийныеНомера(ДокументОбъектЧекККМВозврат, ВыборкаИзРезультатаЗапроса, Отказ); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры // ВыполнитьКонтроль()
Обновляем конфигурацию базы данных, проверяем и пользуемся.
Доработку документов КорректировкаПоступления и КорректировкаРеализации будем рассматривать в следующей статье.
Спасибо.