При проведении возвратной накладной, необходимо сделать проверку, если товар отгружался не более чем месяц назад, то все ОК, а если товар не отгружался вообще в течении месяца или дата отгрузки больше чем месяц с текущей даты, то выдавать ошибку, не дать провести и выдать сообщение какие товары выходят за "рамки" разрешенных возвратов.
Вероятно необходимо сделать запрос по тобличной части документов РеализацияТоваровиУслуг, по каждой строки из ВозвратДокументовОтПокупателя
Запрос = Новый Запрос("ВЫБРАТЬ
| РеализацияТоваровУслуг.Товары.(
| Номенклатура
| ) КАК НоменклатураРеализации
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода");
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(НачалоДня(Дата),-1));
Запрос.УстановитьПараметр("КонецПериода", НачалоДня(Дата));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Сообщить(Выборка.НоменклатураРеализации);
В стандартных конфигурациях возвратная накладная вводится на основании реализации.
Не обязательно
Если продажи конкретному контрагенту - проверить регистр Продажи (и лучше в подписке ПриЗаписи)
Я так протелепатирую, что это УТП ... Исходя из этого есть регистр Продажи - запрос нужно делать к нему ... Так выгребать не проведенные, не правильно проведенные и помеченные документы не комильфо ... И запрос нужно делать к табличной части Товары если уж все ж таки выгребать документы ...
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
////////////////////////////////////////////////////////////////////////////////////////////////
//Проверка
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Номенклатура КАК НоменклатураРеализации,
| Продажи.Контрагент,
| Продажи.Количество
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И Продажи.Номенклатура = &НоменклатураСтроки
| И Продажи.Контрагент = &КонтрагентПродажи");
Запрос.УстановитьПараметр("КонтрагентПродажи", ЭтотОбъект.Контрагент);
Запрос.УстановитьПараметр("НоменклатураСтроки", ТекСтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(НачалоДня(Дата),-1));
Запрос.УстановитьПараметр("КонецПериода", НачалоДня(Дата));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Сообщить(Выборка.НоменклатураРеализации);
КонецЦикла;
КонецПроцедуры // ПередЗаписью()
Данные отборы нужно вставить не в "Где" а в "РегистрНакопления.Продажи(...............................................)".
Все не так, причем начиная с приемки Задачи. Перезвоните мне со служебного телефона 0972344412.
Zaval , а можно озвучить? Вкратце!
Можно бы было вкратце - я бы озвучил
Пример
05.09.12 Продажа 20шт
15.09.12 Возврат 20шт
25.09.12 Возврат 20шт
В этой ситуации нужно анализировать продажи за 16.08.12 - 15.09.12, чтобы выяснить, какая часть Возврата от 15.09 уложилась в "свой месяц", а какая сторнировала Продажу от 05.09.
А если и там были возвраты - в общем случае(надеюсь есть помнящие, что значит решение задачи в общем случае) придется рассчитать историю прдаж/возвратов за весь период ведения учета.
Мое мнение - нужен дополнительный РН
Проще запретить ввод не на основании чем разгребать всю туфту. Еще один анализ приЗаписи на наличие докОснования.
Возврат без документа основания возможен, т.к. варианта два будет, на основании и просто новый документ возврата, код такой сейчас
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос("ВЫБРАТЬ
| Продажи.Номенклатура КАК НоменклатураРеализации,
| Продажи.Контрагент,
| Продажи.Количество КАК Количество
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И Продажи.Номенклатура = &НоменклатураСтроки
| И Продажи.Контрагент = &КонтрагентПродажи");
Запрос.УстановитьПараметр("КонтрагентПродажи", ЭтотОбъект.Контрагент);
Запрос.УстановитьПараметр("НоменклатураСтроки", ТекСтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(НачалоДня(Дата),-1));
Запрос.УстановитьПараметр("КонецПериода", НачалоДня(Дата));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Если Выборка.Количество < ТекСтрокаТовары.Количество Тогда
Сообщить("Продаж (за месяц): " + ТекСтрокаТовары.Номенклатура + " - " + Выборка.Количество + " Возрат: " + ТекСтрокаТовары.Количество);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
Делаем запрос по контрагенту за весь период.
Продажа идёт плюсом. Возврат минусом.
В свёрнутом виде уже вернутые ПАРТИИ будут исчезать.
Получившуюся таблицу анализируем за свежий период.
-----------
Вариант 2:
Если анализируем оборот за месяц - то возвраты старых партий будут минусом, а возвраты свежих исчезнут из таблицы.
Далее анализируем сумму плюсовых оборотов в таблице.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua