Контроль возвратов товаров от покупателей для Управление Торговлей 10.3

17.01.13

Разработка - Механизмы типовых конфигураций

Контроль возвратов был реализован без учета скидок (не было необходимости, дописать возможно).
Контроль осуществлен по следующим критериям:
1. Контроль цены в документе продажи и документе возврата(должна быть одинаковой(!!!скидки не учитываются, требуется дописка)).
2. Контроль на заполнение документа реализации (ДокументПартии).
3. Контроль количества номенклатуры возврата и количества номенклатуры в документе реализации, с учетом уже возвращенного товара.
4. Контроль даты документа. Возврат можно осуществить в течении 15 суток.
5. Контроль наличия номенклатуры в документе реализации.

Код разделён на две части, так как при перепроведении документов(если вдруг кто накатит на существующую конфигурацию) могут возникнуть ошибки по заполнению документов при проведении (наличие документа партии, разница дат не более 15 дней).

На скриншоте 1 отображен контроль осуществляемый оработкой проведения. Документ ЧП00000001 пытаемся провести, документ

ЧП00000002 ранее вернул товар такой же как в документе ЧП00000001 (строка №2).

Строка 3 успешно прошла проверку.

 

 

Пояснения в коде.

В модуле документа ВозвратТоваровОтПокупателя в "ОбработкеПроведения" необходимо прописать следующий код:

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

А так же следующий код в модуле "ФормыДокумента" документа ВозвратТоваровОтПокупателя: 

Если Не РольДоступна("ПолныеПрава") Тогда //Проверка пользователя.
Для каждого Эл из Товары цикл
Если не ЗначениеЗаполнено(Эл.ДокументПартии) Тогда //Проверка заполнения документа партии в документе возврата
Сообщить("В строке № "+Эл.НомерСтроки+" не заполнен документ партии. Проведение невозможно.");
Отказ = Истина;
Иначе //Если документ не заполнен Тогда проверяем на разность дат.
Если (НачалоДня(ТекущаяДата())-НачалоДня(эл.ДокументПартии.Дата))/86400 > 15 Тогда //Проверка разности дат (15 - количество дней)
Сообщить("В строке № "+Эл.НомерСтроки+" использован документ партии давностью более 15 дней. Проведение невозможно.");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Расчет себестоимости в типовых конфигурациях 1С – для многих «черный ящик», работающий по жестко зашитым в него алгоритмам. Реализация этого «черного ящика» может меняться в зависимости от конкретной конфигурации – УПП, БП 3.0, ERP. Но принцип работы везде одинаковый. Расскажем о том, как устроен расчет себестоимости, как его дорабатывать, и какие методы могут быть эффективны и без доработок.

27.12.2024    11176    Begemoth80    32    

84

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    2364    PROSTO-1C    0    

21

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    2474    Vidz    0    

12

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1397    olja-ljaaa    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kiv8008 09.12.14 10:48 Сейчас в теме
Спасибо автору, очень пригодился код, всё работает, проверка количества возвращаемого товара работает на отлично, при наличии огромного количества менеджеров, стало появляться огромное количества возвратов, больше чем положено по реализации, отсюда на складах пересортица. Произвел некоторые манипуляции в первую очередь запретив, проведение возврата больше положенного и пользователям с полными правами.
2. user1590105 04.09.21 08:59 Сейчас в теме
Помогите, пожалуйста. У меня выдаёт кучу ошибок на этот код:

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4411,1)}: Переменная не определена (Запрос)
<<?>>Запрос.Текст ="ВЫБРАТЬ (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4423,1)}: Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("Ссылка",Эл.ДокументПартии); (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4424,1)}: Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("Номенклатура",Эл.Номенклатура); (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4425,13)}: Переменная не определена (Запрос)
Результат = <<?>>Запрос.Выполнить().Выбрать(); //Запрос на наличие товара в документе партии, если есть то при каких ценах продавалось тоже известно. (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4434,1)}: Переменная не определена (Запрос)
<<?>>Запрос.Текст = "ВЫБРАТЬ (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4450,1)}: Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("Ссылка",Ссылка); (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4451,1)}: Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("Номенклатура",Эл.Номенклатура); (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4452,1)}: Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("ДокументПартии",Эл.ДокументПартии); (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4453,1)}: Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("Цена",Результат.Цена); (Проверка: Толстый клиент (обычное приложение))

{Документ.ВозвратТоваровОтПокупателя.МодульОбъекта(4454,14)}: Переменная не определена (Запрос)
Результат2 = <<?>>Запрос.Выполнить().Выбрать(); //Запрос на проведённые возвраты, не учитывая текущий документ, с текущей номенклтурой, ценой и документом партии (Проверка: Толстый клиент (обычное приложение))

Код скопировал и вставил в модуль как в описании. База УТП 1.2
Оставьте свое сообщение