Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Задание №1.
- // с использованием подзапроса
- "ВЫБРАТЬ РАЗЛИЧНЫЕ
- | Productions.Наименование КАК Name,
- | Productions.Код КАК ProdID
- |ИЗ
- | Справочник.Productions КАК Productions
- |ГДЕ
- | НЕ Productions.Код В
- | (ВЫБРАТЬ РАЗЛИЧНЫЕ
- | Trade.ProdID КАК ProdID
- | ИЗ
- | РегистрСведений.Trade КАК Trade)
- |
- |УПОРЯДОЧИТЬ ПО
- | ProdID"
- // без использования подзапроса
- "ВЫБРАТЬ
- | Productions.Наименование КАК Name,
- | СУММА(Trade.ProdID) КАК ProdID_Trade,
- | Productions.Код КАК ProdID
- |ПОМЕСТИТЬ ВТ_Отгрузки
- |ИЗ
- | Справочник.Productions КАК Productions
- | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Trade КАК Trade
- | ПО Productions.Код = Trade.ProdID
- |
- |СГРУППИРОВАТЬ ПО
- | Productions.Наименование,
- | Productions.Код
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ РАЗЛИЧНЫЕ
- | Отгрузки.Name КАК Name,
- | Отгрузки.ProdID КАК ProdID
- |ИЗ
- | ВТ_Отгрузки КАК Отгрузки
- |ГДЕ
- | Отгрузки.ProdID_Trade ЕСТЬ NULL
- |
- |УПОРЯДОЧИТЬ ПО
- | ProdID"
- // Задание №2.
- "ВЫБРАТЬ
- | CurrValues.cDate КАК cDate,
- | CurrValues.CurrID КАК CurrID,
- | CurrValues.Value КАК Value
- |ПОМЕСТИТЬ ВТ_КурсыВалют
- |ИЗ
- | РегистрСведений.CurrValues КАК CurrValues
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ
- | КурсыВалют.cDate КАК cDate,
- | СУММА(КурсыВалют.CurrID) КАК CurrID
- |ПОМЕСТИТЬ ВТ_КурсыВалютМакс
- |ИЗ
- | ВТ_КурсыВалют КАК КурсыВалют
- |
- |СГРУППИРОВАТЬ ПО
- | КурсыВалют.cDate
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ
- | ВТ_КурсыВалют.CurrID КАК CurrID,
- | Currencies.Наименование КАК Name,
- | ВТ_КурсыВалют.Value КАК Value
- |ИЗ
- | ВТ_КурсыВалют КАК ВТ_КурсыВалют
- | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КурсыВалютМакс КАК ВТ_КурсыВалютМакс
- | ПО ВТ_КурсыВалют.cDate = ВТ_КурсыВалютМакс.cDate
- | И ВТ_КурсыВалют.CurrID = ВТ_КурсыВалютМакс.CurrID
- | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Currencies КАК Currencies
- | ПО ВТ_КурсыВалют.CurrID = Currencies.Код
- |
- |УПОРЯДОЧИТЬ ПО
- | CurrID"
- // Задание №3
- Первый запрос выигрывает в производительности за счет того, что выборка отработает уже по отобранному измерению. Т.е. сначала отработает отбор, и только потом сама выборка (но уже с наложенным ограничением). Второй же вопрос выведет те же данные, что и первый, но с той разницей, что вначале рассчитается остаток по всем позициям и только потом наложится отбор
- // Задание №4
- //Рекомендации по исправлению ошибок в процедуре представлены в прикрепленном в письме файле .docx
- // Исправленная процедура
- Процедура ОбработкаПроведенияПравильная(Отказ, РежимПроведения)
- // Формирование движений по регистрам
- Запрос = Новый Запрос;
- Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
- Запрос.Текст =
- "ВЫБРАТЬ
- | Поступления.Ссылка КАК Регистратор,
- | Поступления.Номенклатура КАК Номенклатура,
- | Поступления.Партия КАК Партия,
- | СУММА(Поступления.Количество) КАК Количество,
- | СУММА(Поступления.Сумма) КАК Сумма
- |ПОМЕСТИТЬ ВТ_ДанныеДокумента
- |ИЗ
- | Документ.ПоступлениеТоваров.Товары КАК Поступления
- |ГДЕ
- | Поступления.Ссылка = &Регистратор
- |
- |СГРУППИРОВАТЬ ПО
- | Поступления.Ссылка,
- | Поступления.Партия,
- | Поступления.Номенклатура
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ
- | ВТ_ДанныеДокумента.Регистратор КАК Регистратор,
- | ВТ_ДанныеДокумента.Номенклатура КАК Номенклатура,
- | ВТ_ДанныеДокумента.Партия КАК Партия,
- | ЕСТЬNULL(Партии.Дата, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаПартии,
- | СУММА(ВТ_ДанныеДокумента.Количество) КАК Количество,
- | СУММА(ВТ_ДанныеДокумента.Сумма) КАК Сумма
- |ПОМЕСТИТЬ ВТ_ДанныеПоступленийСДатойПартии
- |ИЗ
- | ВТ_ДанныеДокумента КАК ВТ_ДанныеДокумента
- | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Партии КАК Партии
- | ПО ВТ_ДанныеДокумента.Партия = Партии.Ссылка
- |
- |СГРУППИРОВАТЬ ПО
- | ВТ_ДанныеДокумента.Партия,
- | ВТ_ДанныеДокумента.Регистратор,
- | ВТ_ДанныеДокумента.Номенклатура,
- | ЕСТЬNULL(Партии.Дата, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ
- | Поступления.Регистратор КАК Регистратор,
- | Поступления.Номенклатура КАК Номенклатура,
- | Поступления.Партия КАК Партия,
- | Поступления.ДатаПартии КАК ДатаПартии,
- | СУММА(Поступления.Количество) КАК Количество,
- | СУММА(Поступления.Сумма) КАК Сумма,
- | ЕСТЬNULL(Поступления.Сумма, 0) * ЕСТЬNULL(КурсыВалют.Value, 0) КАК СуммаВал,
- | &Дата КАК Период,
- | &Контрагент КАК Контрагент
- |ИЗ
- | ВТ_ДанныеПоступленийСДатойПартии КАК Поступления
- | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.CurrValues.СрезПоследних(
- | ,
- | Валюта В
- | (ВЫБРАТЬ РАЗЛИЧНЫЕ
- | ОсновнаяИностраннаяВалюта.Значение КАК Значение
- | ИЗ
- | Константа.ОсновнаяИностраннаяВалюта КАК ОсновнаяИностраннаяВалюта)) КАК КурсыВалют
- | ПО Поступления.ДатаПартии = КурсыВалют.Период
- |
- |СГРУППИРОВАТЬ ПО
- | Поступления.Партия,
- | Поступления.Номенклатура,
- | Поступления.ДатаПартии,
- | Поступления.Регистратор,
- | ЕСТЬNULL(Поступления.Сумма, 0) * ЕСТЬNULL(КурсыВалют.Value, 0)";
- Запрос.УстановитьПараметр("Регистратор", Ссылка);
- //Запрос.УстановитьПараметр("Валюта", Константы.ОсновнаяИностраннаяВалюта.Получить());
- Запрос.УстановитьПараметр("Дата", Дата);
- Запрос.УстановитьПараметр("Контрагент", Контрагент);
- РезультатЗапроса = Запрос.Выполнить();
- Если РезультатЗапроса.Пустой() Тогда
- Возврат;
- КонецЕсли;
- Выборка = РезультатЗапроса.Выбрать();
- Движения.ТоварыНаСкладах.Записывать = Истина;
- Движения.ТоварыНаСкладах.Очистить();
- Движения.ЗаказыПоставщикам.Записывать = Истина;
- Движения.ЗаказыПоставщикам.Очистить();
- Пока Выборка.Следующий() Цикл
- // РН "Товары на складах" - Приход
- Движение = Движения.ТоварыНаСкладах.Добавить();
- ЗаполнитьЗначенияСвойств(Движение, Выборка);
- Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
- // РН "Заказы поставщикам" - Расход
- Движение = Движения.ЗаказыПоставщикам.Добавить();
- ЗаполнитьЗначенияСвойств(Движение, Выборка);
- Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
- КонецЦикла;
- // Запись движений
- Движения.ТоварыНаСкладах.БлокироватьДляИзменения = Истина;
- Движения.Записать();
- Движения.ЗаказыПоставщикам.БлокироватьДляИзменения = Истина;
- Движения.Записать();
- // Контроль остатков
- Запрос.Текст =
- "ВЫБРАТЬ РАЗЛИЧНЫЕ
- | ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,
- | &Контрагент КАК Контрагент,
- | ПоступлениеТоваровТовары.Партия КАК Партия
- |ПОМЕСТИТЬ ДокТЧ
- |ИЗ
- | ВТ_ДанныеДокумента КАК ПоступлениеТоваровТовары
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Productions КАК СправочникНоменклатура
- | ПО ПоступлениеТоваровТовары.Номенклатура = СправочникНоменклатура.Ссылка
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ
- | ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.Номенклатура) КАК Номенклатура,
- | ЕСТЬNULL(ПРЕДСТАВЛЕНИЕ(СправочникНоменклатура.ЕдиницаИзмерения), НЕОПРЕДЕЛЕНО) КАК ЕдиницаИзмерения,
- | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
- |ИЗ
- | РегистрНакопления.ЗаказыПоставщикам.Остатки(
- | &МоментВремениОстатки,
- | (Номенклатура, Контрагент, Партия) В
- | (ВЫБРАТЬ РАЗЛИЧНЫЕ
- | ДокТЧ.Номенклатура КАК Номенклатура,
- | ДокТЧ.Контрагент КАК Контрагент,
- | ДокТЧ.Партия КАК Партия
- | ИЗ
- | ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладахОстатки
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Productions КАК СправочникНоменклатура
- | ПО ТоварыНаСкладахОстатки.Номенклатура = СправочникНоменклатура.Ссылка
- |ГДЕ
- | ТоварыНаСкладахОстатки.КоличествоОстаток < 0";
- Запрос.УстановитьПараметр("Ссылка", Ссылка);
- Запрос.УстановитьПараметр("МоментВремениОстатки", Новый Граница(МоментВремени(), ВидГраницы.Включая)); // проверка остатков, включая движения документа
- РезультатЗапроса = Запрос.Выполнить();
- Если Не РезультатЗапроса.Пустой() Тогда
- // есть отрицательные остатки
- Отказ = Истина;
- Выборка = РезультатЗапроса.Выбрать();
- Пока Выборка.Следующий() Цикл
- Сообщение = Новый СообщениеПользователю;
- Сообщение.Текст = "Оформлено больше, чем в заказе по номенклатуре""" + Выборка.Номенклатура + """ на " +
- СтрЗаменить(Формат(-Выборка.КоличествоОстаток, "ЧН="), Символы.НПП, "") + " " + Выборка.ЕдиницаИзмерения;
- Сообщение.Сообщить();
- КонецЦикла;
- КонецЕсли;
- Если Отказ Тогда
- Возврат;
- КонецЕсли;
- КонецПроцедуры
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement