Альтернативный пересчет упаковок товаров в типовых конфигурациях

08.12.22

Задачи пользователя - Адаптация типовых решений

Рассмотрен вариант пересчета упаковок, при котором исходное количество товара не изменяется, а происходит пересчет упаковок друг относительно друга.

Скачать файлы

Наименование Файл Версия Размер
Переопределение пересчета упаковок
.cfe 5,84Kb
27
.cfe 5,84Kb 27 Скачать

Введение

В типовых конфигурациях, таких как Управление торговлей 11 или  Комплексная автоматизация 2, для товара можно заводить наборы упаковок, например:

  1. Штука;
  2. Коробка (90 штук);
  3. Паллета (540 штук или 6 коробок);

Такие упаковки удобно использовать при продажах, особенно клиентам, которые могу оперировать как штучным количеством, так и упаковками одного и того же товара. Например, клиент может попросить оформить ему 360 штук товара, а потом подумав сказать, что ему надо еще две коробки. В таком случае удобно, что система перевела количество в коробки и оператор добавил еще две, нежели  пересчитывать коробки в штуки в голове и прибавлять к исходному количеству.

Что происходит в стандартном механизме? Указывая 360 штук и меняя единицу измерения Штука на Коробку, количество остается равным 360 и в строке у нас получается 360 Коробок, в описанном случае такой механизм работы не удобен. В нашем случае надо, чтобы система пересчитала Штуки в Коробки и получилось 360 / 90 = 4 Коробки.

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

Технические моменты

При изменение колонок табличной части запускается процедура изменения данных, для которой указывается, что необходимо выполнить, например, при изменении количества работает примерно такой код:

ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
//.....
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());

ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);

где СтруктураДействий и есть список операций. Нашей точкой для переопределения является операция ПересчитатьКоличествоЕдиниц, процедура, которая обрабатывает этот ключ, находится в модуле ОбработкаТабличнойЧастиКлиентСервер и имеет вид:

Процедура ПересчитатьКоличествоЕдиницВСтрокеТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) Экспорт 

	Перем УпаковкаНоменклатура;
	
	Если СтруктураДействий.Свойство("ПересчитатьКоличествоЕдиниц", УпаковкаНоменклатура) Тогда
		ПараметрыПересчета = НормализоватьПараметрыПересчетаЕдиниц(ТекущаяСтрока, УпаковкаНоменклатура);
		ДанныеУпаковки = ПолучитьКоэффициентУпаковки(ПараметрыПересчета.Упаковка, КэшированныеЗначения, ПараметрыПересчета.Номенклатура);
		Количество = ТекущаяСтрока.КоличествоУпаковок * ДанныеУпаковки.Коэффициент;
		
		Если ДанныеУпаковки.НужноОкруглятьКоличество
			И ПараметрыПересчета.НужноОкруглять Тогда
			ТекущаяСтрока.Количество = Окр(Количество, 0 ,РежимОкругления.Окр15как20);
		Иначе
			ТекущаяСтрока.Количество = Количество;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

Процедура пересчитывает всегда поле Количество, которое скрыто от пользователя, а работает пользователь с полем КоличествоУпаковок, меняя в нем количество, это поле нам и необходимо пересчитать, а поле Количество, которое отвечает за количество в единицах хранения, изменять не надо. Однако пересчитывать надо поле  КоличествоУпаковок, только когда меняется единица измерения. Этот момент удалось определить по операциям в СтруктуреДействий, при изменении упаковки присутствует операция ПересчитатьЦенуЗаУпаковку, которой нет в других случаях.

Расширяем общий модуль ОбработкаТабличнойЧастиКлиентСервер, получаем следующий код:

&Вместо("ПересчитатьКоличествоЕдиницВСтрокеТЧ")
Процедура Расш1_ПересчитатьКоличествоЕдиницВСтрокеТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) Экспорт 

	Перем УпаковкаНоменклатура;
			                                    
	Если СтруктураДействий.Свойство("ПересчитатьКоличествоЕдиниц", УпаковкаНоменклатура) Тогда
		
                // вставка для пересчета упаковок
		Если СтруктураДействий.Свойство("ПересчитатьЦенуЗаУпаковку") Тогда
			
			ПараметрыПересчета = НормализоватьПараметрыПересчетаЕдиниц(ТекущаяСтрока, УпаковкаНоменклатура);
			ДанныеУпаковки = ПолучитьКоэффициентУпаковки(ПараметрыПересчета.Упаковка, КэшированныеЗначения, ПараметрыПересчета.Номенклатура);			
			ТекущаяСтрока.Цена = ТекущаяСтрока.Цена / (ТекущаяСтрока.Количество / ТекущаяСтрока.КоличествоУпаковок) * ДанныеУпаковки.Коэффициент;
			ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.Количество / ДанныеУпаковки.Коэффициент;			

	        // -------------------------------
		Иначе			
			ПараметрыПересчета = НормализоватьПараметрыПересчетаЕдиниц(ТекущаяСтрока, УпаковкаНоменклатура);
			ДанныеУпаковки = ПолучитьКоэффициентУпаковки(ПараметрыПересчета.Упаковка, КэшированныеЗначения, ПараметрыПересчета.Номенклатура);
			Количество = ТекущаяСтрока.КоличествоУпаковок * ДанныеУпаковки.Коэффициент;			
			Если ДанныеУпаковки.НужноОкруглятьКоличество
				И ПараметрыПересчета.НужноОкруглять Тогда
				ТекущаяСтрока.Количество = Окр(Количество, 0 ,РежимОкругления.Окр15как20);
			Иначе
				ТекущаяСтрока.Количество = Количество;
			КонецЕсли;
			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

В итоге получаем достаточно простую доработку, которую легко поддерживать.

К статье приложено расширение для конфигурации:

  1. 1С:Комплексная автоматизация 2, тестировалось на версии  2.5.10.52, Платформа 8.3.22.1709.
  2. 1С: Управление торговлей 11, тестировалось на версии 11.5.9.135, Платформа 8.3.22.1709.

упаковки пересчет упаковок

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4452    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2953    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

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

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1994    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3119 26.11.18 04:09 Сейчас в теме
Это все хорошо (сграбил в https://infostart.ru/community/groups/22/publications/)
а вот как "правильно" отработать если количество штук не делится нацело на количество коробок? оперировать менеджеру величинами типа "2целых1десятая коробки" - как-то некузяво... Ваши мысли на этот счет?
2. gzharkoj 502 26.11.18 06:48 Сейчас в теме
(1) общего решения нет, раньше на УТ 10.3, КА 1.1, УПП 1.1 работало также как и это расширение, в новых "управляемых" версиях переделали. Каждая организация решает отдельно и при может еще отталкиваться от вида товара, например, более-менее крупные оптовики только в целых величинах могут отгружать более 1 упаковки, те кто поменьше могут дробить, но скажем, максимум по полам, то есть кратно 0.5. Но по-моему опыту обычно при отгрузке стараются указывать количество в единицах хранения.
3. CheBurator 3119 26.11.18 15:48 Сейчас в теме
Сделайте еще приблуду чтобы модифицировать заказ. У меня такая есть. типа клиент прислал заказ. натравливаем обработку. она показывает возможные варианты подгонки под целые упаковки - кратно блокам/минипакам, кратно мастер-коробкам - с указанием прироста по сумме.

у меян 4 кнокпи типа
- согласиться с вариантом клиента
- предложить тактично
- предложить настойчиво
- предложить в грубой форме.

;-) от выбора пункта зависит степень округления.

продажный отдел вовсб пользуется.
для всякой шушеры которая берет много позиций но мелкими порциями - не применяется.
а клиенты покрупнее - продажи манагеры своих клиентов знают - округляют.
и хотя прайсы выдаются с указанием самой "младшей" упаковки - клиентам как-то похрен, они привыкли считать десятками, а поставки идут кратно дюжине и все от дюжины идет в большую и меньшую сторону. и проще при при заказе 40 штук при 12 в коробке - подогнать в 48 штук.
4. gzharkoj 502 26.11.18 16:06 Сейчас в теме
(3) Хорошее предложение, подумаю.
5. CheBurator 3119 26.11.18 16:15 Сейчас в теме
(4) будет интересно - стукайся, покажу как это у меня выглядит (на 77).
надо еще посмотреть - пользуются ли этим сейчас, раньше активно пользовались. формировался также отчет по "подгонке", который можно было юзверю отправить
6. StAn1988 8 11.09.19 16:14 Сейчас в теме
Спасибо за статью. Мне очень помогла.
7. gzharkoj 502 12.09.19 08:14 Сейчас в теме
8. it_sar 20 08.06.20 12:35 Сейчас в теме
В УНФ 1.6.20 будет работать?
9. gzharkoj 502 08.06.20 23:23 Сейчас в теме
(8) Не смотрел, но если в конфигурации есть модуль ОбработкаТабличнойЧастиКлиентСервер и в нем процедура ПересчитатьКоличествоЕдиницВСтрокеТЧ, которая выглядеть как в публикации, то может заработать.
10. it_sar 20 09.06.20 21:34 Сейчас в теме
(9)
ОбработкаТабличнойЧастиКлиентСервер - в УНФ нет...
11. yaroslav_29 19.04.21 13:39 Сейчас в теме
Подскажите, а можно переделать так, чтобы цена осталась за шт а не менялась на цену за упаковку?
12. gzharkoj 502 19.04.21 16:47 Сейчас в теме
13. kdv_rus 11.06.21 16:04 Сейчас в теме
Данное расширение будет работать на пересчет в заказе поставщику?
14. kdv_rus 11.06.21 16:44 Сейчас в теме
(12) Данное расширение будет работать на пересчет в заказе поставщику?
15. gzharkoj 502 16.06.21 22:45 Сейчас в теме
(14) Проверил, в заказе не будет работать, под заказ поставщику надо будет дорабатывать.
16. mylnikov_v 08.12.22 04:33 Сейчас в теме
В 1С:Комплексная автоматизация 2 (2.5.9.143) количество не пересчитывает. Подскажите как заставить расширение пересчитать.
17. gzharkoj 502 08.12.22 08:53 Сейчас в теме
(16) Постараюсь посмотреть на актуальной версии.
18. user1823204 14.07.23 09:56 Сейчас в теме
Если в каких то документах "ПересчитатьЦенуЗаУпаковку" не предусмотрено, то можно
в момент заполнения структуры действий дополнить ее,
СтруктураДействий.Вставить("УпаковкаИзменена", Истина);
а в общем модуле уже будет

Если СтруктураДействий.Свойство("УпаковкаИзменена") Тогда
Оставьте свое сообщение