Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выбрать документы содержащие номенклатуру
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bereznoy
При проведении возвратной накладной, необходимо сделать проверку, если товар отгружался не более чем месяц назад, то все ОК, а если товар не отгружался вообще в течении месяца или дата отгрузки больше чем месяц с текущей даты, то выдавать ошибку, не дать провести и выдать сообщение какие товары выходят за "рамки" разрешенных возвратов.

Вероятно необходимо сделать запрос по тобличной части документов РеализацияТоваровиУслуг, по каждой строки из ВозвратДокументовОтПокупателя

Запрос = Новый Запрос("ВЫБРАТЬ
                      |    РеализацияТоваровУслуг.Товары.(
                      |        Номенклатура
                      |    ) КАК НоменклатураРеализации
                      |ИЗ
                      |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                      |ГДЕ
                      |    РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода");
    
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(НачалоДня(Дата),-1));
Запрос.УстановитьПараметр("КонецПериода", НачалоДня(Дата));
РезультатЗапроса = Запрос.Выполнить();    
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
    
Сообщить(Выборка.НоменклатураРеализации);


Помогите плз с запросиком
Ardi
В стандартных конфигурациях возвратная накладная вводится на основании реализации.
sava1
Не обязательно

Если продажи конкретному контрагенту - проверить регистр Продажи (и лучше в подписке ПриЗаписи)
Fynjy
Я так протелепатирую, что это УТП ... Исходя из этого есть регистр Продажи - запрос нужно делать к нему ... Так выгребать не проведенные, не правильно проведенные и помеченные документы не комильфо ... И запрос нужно делать к табличной части Товары если уж все ж таки выгребать документы ...
Цитата(sava1 @ 06.11.12, 7:55) необходимо зарегистрироваться для просмотра ссылки
Если продажи конкретному контрагенту - проверить регистр Продажи (и лучше в подписке ПриЗаписи)

В бухии нет регистра продажи к примеру ...
bereznoy
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    

////////////////////////////////////////////////////////////////////////////////////////////////
//Проверка
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос("ВЫБРАТЬ
                |    Продажи.Номенклатура КАК НоменклатураРеализации,
                |    Продажи.Контрагент,
                |    Продажи.Количество
                |ИЗ
                |    РегистрНакопления.Продажи КАК Продажи
                |ГДЕ
                |    Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
                |    И Продажи.Номенклатура = &НоменклатураСтроки
                |    И Продажи.Контрагент = &КонтрагентПродажи");
                
Запрос.УстановитьПараметр("КонтрагентПродажи", ЭтотОбъект.Контрагент);
Запрос.УстановитьПараметр("НоменклатураСтроки", ТекСтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(НачалоДня(Дата),-1));
Запрос.УстановитьПараметр("КонецПериода", НачалоДня(Дата));
                
РезультатЗапроса = Запрос.Выполнить();    
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
    
Сообщить(Выборка.НоменклатураРеализации);

КонецЦикла;
        
    
КонецПроцедуры // ПередЗаписью()



Вот так сделал, может что то не так сделал?
Ardi
Данные отборы нужно вставить не в "Где" а в "РегистрНакопления.Продажи(...............................................)".
Zaval
Все не так, причем начиная с приемки Задачи. Перезвоните мне со служебного телефона 0972344412.
alex040269
Zaval , а можно озвучить? Вкратце!

Zaval
Можно бы было вкратце - я бы озвучил smile.gif
Пример
05.09.12 Продажа 20шт
15.09.12 Возврат 20шт
25.09.12 Возврат 20шт

В этой ситуации нужно анализировать продажи за 16.08.12 - 15.09.12, чтобы выяснить, какая часть Возврата от 15.09 уложилась в "свой месяц", а какая сторнировала Продажу от 05.09.
А если и там были возвраты - в общем случае(надеюсь есть помнящие, что значит решение задачи в общем случае) придется рассчитать историю прдаж/возвратов за весь период ведения учета.

Мое мнение - нужен дополнительный РН
sava1
Цитата(Ardi @ 06.11.12, 0:52) необходимо зарегистрироваться для просмотра ссылки
В стандартных конфигурациях возвратная накладная вводится на основании реализации.


не надо усложнять задачу - обычно действуют на основаниии - и надо в запросе анализировать документ основание
alex040269
Цитата(sava1 @ 07.11.12, 9:11) необходимо зарегистрироваться для просмотра ссылки
не надо усложнять задачу - обычно действуют на основаниии - и надо в запросе анализировать документ основание

можно и так, НО тогда придется ввести жесткое ограничение и запретить ввод возврата не на основании.

Цитата(Zaval @ 07.11.12, 8:13) необходимо зарегистрироваться для просмотра ссылки
Можно бы было вкратце - я бы озвучил smile.gif
Пример
05.09.12 Продажа 20шт
15.09.12 Возврат 20шт
25.09.12 Возврат 20шт

В этой ситуации нужно анализировать продажи за 16.08.12 - 15.09.12, чтобы выяснить, какая часть Возврата от 15.09 уложилась в "свой месяц", а какая сторнировала Продажу от 05.09.
А если и там были возвраты - в общем случае(надеюсь есть помнящие, что значит решение задачи в общем случае) придется рассчитать историю прдаж/возвратов за весь период ведения учета.

Мое мнение - нужен дополнительный РН

В общих чертах понятно. И нужно еще анализировать. Быть может возврат и вкладывается в заданный период, НО этот товар уже вернули.
sava1
Проще запретить ввод не на основании чем разгребать всю туфту. Еще один анализ приЗаписи на наличие докОснования.
bereznoy
Возврат без документа основания возможен, т.к. варианта два будет, на основании и просто новый документ возврата, код такой сейчас
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос("ВЫБРАТЬ
                |    Продажи.Номенклатура КАК НоменклатураРеализации,
                |    Продажи.Контрагент,
                |    Продажи.Количество КАК Количество
                |ИЗ
                |    РегистрНакопления.Продажи КАК Продажи
                |ГДЕ
                |    Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
                |    И Продажи.Номенклатура = &НоменклатураСтроки
                |    И Продажи.Контрагент = &КонтрагентПродажи");
                
Запрос.УстановитьПараметр("КонтрагентПродажи", ЭтотОбъект.Контрагент);
Запрос.УстановитьПараметр("НоменклатураСтроки", ТекСтрокаТовары.Номенклатура);
Запрос.УстановитьПараметр("НачалоПериода", ДобавитьМесяц(НачалоДня(Дата),-1));
Запрос.УстановитьПараметр("КонецПериода", НачалоДня(Дата));
                
РезультатЗапроса = Запрос.Выполнить();    
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();



Если Выборка.Количество < ТекСтрокаТовары.Количество Тогда      
    
    Сообщить("Продаж (за месяц):  " + ТекСтрокаТовары.Номенклатура + " - " + Выборка.Количество + " Возрат: " + ТекСтрокаТовары.Количество);
Отказ = Истина;  
КонецЕсли;
КонецЦикла;


Единственное как описал Zaval, как учесть этот вариант не знаю, конечно можно послушаться и сделать регистр накопления возвратов и при записи документа еще смотреть сколкьо за месяц возвратов
Ardi
Делаем запрос по контрагенту за весь период.
Продажа идёт плюсом. Возврат минусом.
В свёрнутом виде уже вернутые ПАРТИИ будут исчезать.

Получившуюся таблицу анализируем за свежий период.
-----------
Вариант 2:
Если анализируем оборот за месяц - то возвраты старых партий будут минусом, а возвраты свежих исчезнут из таблицы.
Далее анализируем сумму плюсовых оборотов в таблице.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.