// Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос;
// Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ | РеализацияМатериалы.Номенклатура, | РеализацияМатериалы.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | СУММА(РеализацияМатериалы.Количество) КАК КоличествоВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.Реализация.Материалы КАК РеализацияМатериалы |ГДЕ | РеализацияМатериалы.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РеализацияМатериалы.Номенклатура, | РеализацияМатериалы.Номенклатура.ВидНоменклатуры";
Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить();
Движения.ТоварыНаСкладах.Записать();
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ТекСтрокаМатериалы.Номенклатура; Движение.Склад = Склад; Движение.Штрихкод = ТекСтрокаМатериалы.Штрихкод; Движение.Количество = ТекСтрокаМатериалы.Количество; КонецЦикла; Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда // Проверить отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Материал, | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0";
Запрос3.УстановитьПараметр("Склад", Склад);
Результат = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли;
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Stiff @ 14.06.12, 11:01)
Списывает товар со склада даже, если не хватает его
Данный пример предполагает списание товаров в любом случае, а уже затем контроль отрицательных остатков, и в случае если остатки отрицательные то происходит отмена проведения. Поскольку товар у вас списывается, значит проблема в контроле отрицательных остатков, отладчик - точка останова в строку "Если Режим = РежимПроведенияДокумента.Оперативный Тогда" и смотрите что происходит.
p.s. ну и сам пример видоизменен у вас, может стоит использовать запись регистра из выборки первого запроса (так как это показано в примере), а не из ТЧ документа.
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Временные таблицы тут не причем. Не пойму в чем проблема найти косяк текущего кода, пример из книги рабочий - лично проверено. Другой заготовки нет, изобретайте.
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 22
Спасибо сказали: 0 раз
Рейтинг: 0
То что пример рабочий я сам знаю.я пробую его переделать под себя.
Взял пример, убрал то, что не нужно. Оставил только то, что связано с моей конфигурацией. Результат - списывает товары в минус, сообщение не выводит.Ну в чем причина??
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ТоварыНаСкладах.Записывать = Истина;
// Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
// Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ | РеализацияМатериалы.Номенклатура, | РеализацияМатериалы.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | СУММА(РеализацияМатериалы.Количество) КАК КоличествоВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.Реализация.Материалы КАК РеализацияМатериалы |ГДЕ | РеализацияМатериалы.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РеализацияМатериалы.Номенклатура";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВТ; Запрос2.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.ВидНоменклатуры, | НоменклатураДокумента.КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество, | ТоварыНаСкладахОстатки.Штрихкод |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Материал";
// Запишем пустые наборы записей чтобы читать остатки без учета данных в документе
Движения.ТоварыНаСкладах.Записать();
Результат = Запрос2.Выполнить(); //ТЗ = Результат.Выгрузить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Материал Тогда // регистр ТоварыНаСкладах Расход // регистр ТоварыНаСкладах Расход
Движения.ТоварыНаСкладах.Записывать = Истина; Для Каждого ТекСтрокаМатериалы Из Материалы Цикл Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.Штрихкод = ВыборкаДетальныеЗаписи.Штрихкод; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; КонецЦикла;
КонецЕсли;
КонецЦикла;
Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда // Проверить отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Материал, | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0";
Запрос3.УстановитьПараметр("Склад", Склад);
Результат = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли;
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Stiff @ 14.06.12, 12:22)
Результат - списывает товары в минус, сообщение не выводит.Ну в чем причина??
Пользуйтесь отладчиком, гадать можно бесконечно (вдруг есть что-то вне этого кода, делающее не то что надо).
p.s. это вообще не понятно - что оно делает...
Результат = Запрос2.Выполнить(); //ТЗ = Результат.Выгрузить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Материал Тогда // регистр ТоварыНаСкладах Расход // регистр ТоварыНаСкладах Расход
Движения.ТоварыНаСкладах.Записывать = Истина; Для Каждого ТекСтрокаМатериалы Из Материалы Цикл Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.Штрихкод = ВыборкаДетальныеЗаписи.Штрихкод; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; КонецЦикла;
КонецЕсли;
КонецЦикла;
точнее не непонятно, а понятно - тупо-код какой-то, в выборке перебирать еще и материалы, и не использовать ничего из материалов...
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!