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

08.12.22

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
Переопределение пересчета упаковок
.cfe 5,84Kb
37 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Введение

В типовых конфигурациях, таких как Управление торговлей 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.

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

29400 руб.

29.06.2023    8779    26    15    

35

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

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3500 руб.

07.02.2023    9605    99    17    

57

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

9600 руб.

17.06.2025    851    1    0    

1

Адаптация типовых решений Бухгалтер 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Разработка для упрощения процедуры передачи данных о выплатах для конфигурации 1С:ЗиКГУ. Данное расширение предоставляет возможность экспортировать данные «Распоряжения» непосредственно из документа "Ведомость в банк" в формате XML.

3840 руб.

13.11.2024    1903    3    4    

4

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

Маленькая заметка (в трех разных масштабах) для тех, кто часто видит окно при входе в ЗУП «Новые сообщения для расшифровки по 1С-Отчетность», которое появляется через 60 секунд после запуска программы, как раз когда вы уже добрались до интересующей вас формы и начали в ней что-то активно делать:

1 стартмани

17.06.2024    6677    80    Znata_PI    8    

22

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    6560    dimanich70    17    

22

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

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

01.03.2024    15055    dimanich70    11    

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

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

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

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

Если СтруктураДействий.Свойство("УпаковкаИзменена") Тогда
19. Petroglyph 07.03.25 10:11 Сейчас в теме
странно, почему никто не сказал автору что когда в документ добавляешь новую позицию вылетает ошибка. с ней надо постоянно соглашаться.в коде аж три деления на значения которые еще не введены(количество и пр), надо в таких случаях сначала делать проверку на деление на ноль.
20. gzharkoj 539 07.03.25 10:20 Сейчас в теме
(19) Добрый день, видимо сами правят. Я уверен, что вы тестируете на новых релизах, не тех, под которые я делал. В общем тут решения активно прям не поддерживаю. напишите, вашу конфигурацию, попробую помочь.
21. color-it 01.07.25 19:58 Сейчас в теме
Доброго дня. а под УНФ 3.0 не будет такого решения? столько времени прошло, а 1С так и не сделали автоматический пересчет
22. gzharkoj 539 01.07.25 20:22 Сейчас в теме
(21) не занимался этим под УНФ, к нему это расширение не подойдет.
23. color-it 22.07.25 11:37 Сейчас в теме
а сможете сделать такое для УНФ? очень не удобно пересчитывать каждый раз
24. gzharkoj 539 22.07.25 13:09 Сейчас в теме
(23) на текущий момент нет
Оставьте свое сообщение