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

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    8209    25    15    

32

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 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    8947    97    17    

53

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

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

3840 руб.

13.11.2024    1564    3    4    

4

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

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

1 стартмани

17.06.2024    5908    74    Znata_PI    7    

22

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

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

2 стартмани

22.04.2024    6264    dimanich70    15    

22

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

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

01.03.2024    13485    dimanich70    11    

25

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

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

1 стартмани

27.10.2023    5269    44    TempTablesManager    16    

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

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

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

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

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