Контроль возвратов товаров от покупателей для Управление Торговлей 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 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    497    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    382    tango    5    

3

Ценовая власть. Второй сезон

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

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    614    tango    0    

2

Ценовая власть (УТ 11.5) - 2

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

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    444    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    529    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2599    YA_418728146    11    

42

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1143    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4967    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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
+
Оставьте свое сообщение