Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=9643)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Выбрать документы содержащие номенклатуру

Автор: bereznoy 06.11.12, 0:00

При проведении возвратной накладной, необходимо сделать проверку, если товар отгружался не более чем месяц назад, то все ОК, а если товар не отгружался вообще в течении месяца или дата отгрузки больше чем месяц с текущей даты, то выдавать ошибку, не дать провести и выдать сообщение какие товары выходят за "рамки" разрешенных возвратов.

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

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


Помогите плз с запросиком

Автор: Ardi 06.11.12, 0:52

В стандартных конфигурациях возвратная накладная вводится на основании реализации.

Автор: sava1 06.11.12, 7:55

Не обязательно

Если продажи конкретному контрагенту - проверить регистр Продажи (и лучше в подписке ПриЗаписи)

Автор: Fynjy 06.11.12, 8:06

Я так протелепатирую, что это УТП ... Исходя из этого есть регистр Продажи - запрос нужно делать к нему ... Так выгребать не проведенные, не правильно проведенные и помеченные документы не комильфо ... И запрос нужно делать к табличной части Товары если уж все ж таки выгребать документы ...

Цитата(sava1 @ 06.11.12, 7:55) *
Если продажи конкретному контрагенту - проверить регистр Продажи (и лучше в подписке ПриЗаписи)

В бухии нет регистра продажи к примеру ...

Автор: bereznoy 06.11.12, 23:35

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

    

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

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



Вот так сделал, может что то не так сделал?

Автор: Ardi 06.11.12, 23:52

Данные отборы нужно вставить не в "Где" а в "РегистрНакопления.Продажи(...............................................)".

Автор: Zaval 07.11.12, 1:18

Все не так, причем начиная с приемки Задачи. Перезвоните мне со служебного телефона 0972344412.

Автор: alex040269 07.11.12, 7:33

Zaval , а можно озвучить? Вкратце!


Автор: 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 07.11.12, 9:11

Цитата(Ardi @ 06.11.12, 0:52) *
В стандартных конфигурациях возвратная накладная вводится на основании реализации.


не надо усложнять задачу - обычно действуют на основаниии - и надо в запросе анализировать документ основание

Автор: alex040269 07.11.12, 9:25

Цитата(sava1 @ 07.11.12, 9:11) http://pro1c.org.ua/index.php?act=findpost&pid=59868
Можно бы было вкратце - я бы озвучил 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 07.11.12, 9:30

Проще запретить ввод не на основании чем разгребать всю туфту. Еще один анализ приЗаписи на наличие докОснования.

Автор: bereznoy 11.11.12, 15:23

Возврат без документа основания возможен, т.к. варианта два будет, на основании и просто новый документ возврата, код такой сейчас

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



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


Единственное как описал Zaval, как учесть этот вариант не знаю, конечно можно послушаться и сделать регистр накопления возвратов и при записи документа еще смотреть сколкьо за месяц возвратов

Автор: Ardi 11.11.12, 15:41

Делаем запрос по контрагенту за весь период.
Продажа идёт плюсом. Возврат минусом.
В свёрнутом виде уже вернутые ПАРТИИ будут исчезать.

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua