Разбор механизма заполнения вариантов обеспечения в документе Заказ клиента конфигурации УТ 11.4

26.10.20

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

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

Вводные

1. Требуется при загрузке из внешней системы поставить товар в резерв

2. В лоб заполнить все строки "В резерв" и провести документ через "попытка Исключение" не подходит потому что специфика клиента разрешает частичный резерв при создании заказа из внешней системы.

3. Процедуры распределения на уровне объекта нет, вызывается из формы и используются реквизиты формы.

 

Порядок работы

 

Работа от формы документа заказ клиента

При нажатии на кнопку "Заполнить обеспечение"

1. Проверяется корректность заполнения табличной части (ТЧ) с помощью ОбеспечениеКлиент.ПроверитьЗаполнение(...)

2. Открывается форма "ИсполнениеЗаказа"  в которой выбирается порядок обеспечения

3. Форма возвращает структуру

ПереченьВариантов = Новый Массив();
...
Результат = Новый Структура("ПереченьВариантов, ЗаполнятьЦелымиУпаковками");
Результат.ПереченьВариантов = ПереченьВариантов;
Результат.ЗаполнятьЦелымиУпаковками = ЗаполнятьЦелымиУпаковками;

4. В форме заказа данные поступают в ОбработкаВыбора() и перенаправляются в процедуру ЗаполнитьОбеспечениеВУстановленномПорядке()

5. Формируется таблица распределения с помощью Таблица = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспечения()

6. Данные таблицы переносятся в табличную часть документа с помощью Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения()

Проблема в том что процедуры используют "Элементы.Товары.ВыделенныеСтроки" и реквизиты которые находятся только на форме, список в ЗависимыеРеквизиты().

 

Подготовка данных

ТЗ ТаблицаЗаполнениеОбеспечения

1. Создается по описанию ОбеспечениеСервер.ПутиКДаннымПоУмолчанию() с добавлением колонки "Упаковка", как и структура "Хранилище" которая используется для предварительной загрузки и проверки данных.

2. Получает данные из ТаблицаТовары.НайтиПоИдентификатору(Идентификатор);

3. Заполняет добавленную строку через ОбеспечениеКлиентСервер.ЗаполнитьЗначенияСвойствСРазличиемИмен()

4. Дополняет поле Идентификатор = СтрокаТовары.ПолучитьИдентификатор(), если его не заполнить свернет с строки при обработке.

ТЗ "ОтборОформлено" создается по паре "Ссылка, КодСтроки", заполняется выделенными строками, количество в выделенных строках обнуляется.

ТЗ "ОформитьПоНакладным" - Таблица с полями "Ссылка", "КодСтроки", "Количество". Для каждой пары Заказ-КодСтроки содержит оформленное накладными количество.

ТЗ ТаблицаНевыделенныеСтроки так же переносится из табличной части с конвертацией с фильтром НЕ Количество = 0, а для выделенных строк оно было обнулено выше.

После этого перебирая ТаблицаВыделенныеСтроки восстанавливают количество в основной таблице, странно при том что можно было в один заход распределить по двум таблицам.

 

Обработка

После подготовки данные передаются в ОбеспечениеСервер.ТаблицаЗаполнениеОбеспеченияУниверсальный(), результатом работы которого является "ТаблицаЗначений - таблица, с полями Идентификатор, ВариантОбеспечения, ДатаОтгрузки, Количество, Склад. Содержит варианты обеспечения для заполнения."

 

Подготовка данных и обработка в обработке "Состояние обеспечения"

ПараметрыЗаполнения = МенеджерДокумента.ПараметрыВыбораОбеспечения(Документ.Статус);
ТаблицаОбеспечения = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспеченияДокумента(
	Документ, ПереченьВариантов, ПараметрыЗаполнения, ИндексыСтрок);

где

ИндексыСтрок.Добавить(СтрокаТовары.НомерСтроки - 1);

ПереченьВариантов = Новый Массив();
Если ИспользоватьСоСклада Тогда
	ПереченьВариантов.Добавить(Перечисления.ВариантыОбеспечения.СоСклада);
КонецЕсли;

 

Перенос результатов в документ

Выполняется Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения()

При вызове из формы вызывается с указанием формы.

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

при вызове из обработки СостояниеОбеспечения вызывается без указания формы.

МенеджерДокумента.ЗаполнитьВариантОбеспечения(Документ, Неопределено, "ИндексыСтрок", ТаблицаОбеспечения);
Документ.ДополнительныеСвойства.Вставить("КонтролироватьОбеспечение", Ложь);
Попытка
	Документ.Записать(РежимЗаписиДокумента.Проведение);

 

Пост обработка на уровне формы

Вызывается
 

СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);

РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма);

 

Итог

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

Начав "раскапывать" со стороны формы и думая как переписывать код исполняющийся на клиенте нашел решение которое можно запустить на сервере.

 

С уважением к разработчикам типовых решений.

Благодарю за внимание.

УТ 11 Варианты обеспечения

См. также

Ценовая власть. Выносим из цикла схему СКД

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

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

1 стартмани

11.04.2024    499    tango    0    

3

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

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

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

10 стартмани

11.04.2024    385    tango    5    

3

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

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

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

08.04.2024    624    tango    0    

2

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

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

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

06.04.2024    445    tango    1    

1

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

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

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

1 стартмани

05.04.2024    531    tango    12    

2

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

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

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

07.02.2024    2604    YA_418728146    11    

43

Регистры накопления в 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    1149    8    2ncom    6    

8

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

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

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

28.12.2023    4971    mrXoxot    11    

100
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1483 03.02.20 10:09 Сейчас в теме
Мне нужно было разбить 1 строку без характеристик на несколько с характеристиками по ФИФО и чтобы цена не пересчиталась автоматом. Писал свой костыль в дебри кода на тот момент не полез.
+
2. malikov_pro 1293 03.02.20 10:25 Сейчас в теме
(1) Это немного про другое, там идет проверка на заполненность характеристик при флаге их использования в номенклатуре.
Какую бизнес задачу решали при распределении по характеристикам?
+
3. Xershi 1483 03.02.20 10:56 Сейчас в теме
(2) партионный учет через характеристики, чтобы назначать цену на партию. Типовой партионный не дает доступа к партии и заполняется только в регистре через закрытие.
+
4. Montirey 06.10.20 14:34 Сейчас в теме
malikov_pro, спасибо вам огромное, что выложили свое решение. Думаю, что в сумме вы сэкономили огромное количество человекочасов на решении этой проблемы программистам 1С.

Потратив некоторое время на анализ вашей статьи, думаю, что вам все же нужно было выложить итоговый блок кода, тогда экономия человекочасов была бы более оптимальная :)

Итоговый блок кода:

МассивВариантовОбеспечения = Новый Массив; // заполняйте теми вариантами, которые нужны в вашем случае
	МассивВариантовОбеспечения.Добавить(Перечисления.ВариантыОбеспечения.Отгрузить);
	МассивВариантовОбеспечения.Добавить(Перечисления.ВариантыОбеспечения.ОтгрузитьОбособленно);
	
	МассивИндексовВыделенныхСтрок = Новый Массив;
	
	Для каждого СтрокаТабличнойЧастиИз ЗаказКлиента_Объект.Товары Цикл
		МассивИндексовВыделенныхСтрок.Добавить(СтрокаТабличнойЧасти.НомерСтроки - 1);
	КонецЦикла;
	
	ПараметрыЗаполнения = Документы.ЗаказКлиента.ПараметрыВыбораОбеспечения(ЗаказКлиента_Объект.Статус);
	
	ТаблицаОбеспечения  = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспеченияДокумента(ЗаказКлиента_Объект, 
                          МассивВариантовОбеспечения, ПараметрыЗаполнения, МассивИндексовВыделенныхСтрок);
	
	Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения(ЗаказКлиента_Объект, Неопределено, "ИндексыСтрок", ТаблицаОбеспечения);
Показать

P.S. к сожалению не знаю, как отформатировать программный код в привычный всем стиль 1С :(
realEvgenius; adhocprog; alexstav; d4rkmesa; distorshion; dodgev; alenakrr; +7
5. FatPanzer 06.10.20 14:43 Сейчас в теме
(4)
P.S. к сожалению не знаю, как отформатировать программный код в привычный всем стиль 1С :(
Прикрепленные файлы:
Montirey; +1
6. Montirey 06.10.20 16:08 Сейчас в теме
13. alexstav 8 13.11.22 13:37 Сейчас в теме
7. malikov_pro 1293 06.10.20 22:25 Сейчас в теме
(4) Благодарю что скомпоновали. Основная цель в публикациях дать программистам-читателям блоки, из которых они смогут собрать нужный функционал.
Описанное в статье часть из модуля автоматической работы с заказами на перемещение исходя из потребностей заказов клиентов. В течении дня заказываются товары в офисе и резервируются на удаленном складе. В конце дня резерв переносится в заказ на перемещение с обособлением и добавлением до кратности упаковки.
+
8. al_zzz 309 14.08.21 13:51 Сейчас в теме
Возможно, коллеги, поможет сэкономить время следующая информация:
Конфигурация 1С:ERP Управление предприятием 2 (2.5.6.244).
Процедура из ОМ "ОбеспечениеСервер" ТаблицаЗаполнениеОбеспеченияДокумента(вызываемая для объекта) и ТаблицаЗаполнениеОбеспечения(вызываемая из формы) работают по-разному. У меня в результате при тех же переданных параметрах из формы и программно для объекта получались разные результаты - для объекта ничего не презаполнялось.
Причина в следующем коде, в процедуре "ТаблицаЗаполнениеОбеспеченияДокумента":
ПараметрыЗаполнения = Новый Структура("ПереченьВариантов, ИзменятьОбособление", ПереченьВариантов, Ложь);

в то время, как из формы передается параметр "ИзменятьОбособление" = Истина.
+
9. d4rkmesa 27.04.22 09:44 Сейчас в теме
(8)
поможет сэкономить время следующая информация:
Конфигурация 1С:ERP Управление предприятием 2 (2.5.6.244).
Процедура из ОМ "ОбеспечениеСервер" ТаблицаЗаполнениеОбеспеченияДокумента(вызываемая для объекта) и ТаблицаЗаполнениеОбеспечения(вызываемая из формы) работают по-разному. У меня в результате при тех же переданных параметрах из формы и программно для объекта получались разные р


Кстати, а в 2.5.7, где изменен переписан механизм обеспечения, аналогичное заполнение есть в принципе?
+
10. al_zzz 309 12.10.22 14:39 Сейчас в теме
(9)Присоединяюсь к вопросу. Команды в интерфейсе аналогичной я не нашёл. Если выбирать команду "Обеспечение" + "Резервировать", то просто меняется вариант обеспечения всей строки на "Резервировать".
+
14. al_zzz 309 13.11.22 14:03 Сейчас в теме
(10)
Раскуривал механизм в новой версии, в итоге, самостоятельно.
Там отличается тем, что как таковой процедуры, которая сможет проставить указанные статусы в тч нет. Сам процесс разбит на две части:
1. В товарах заполняется колонка "Доступно" из доступных для резервирования остатков.
2. Юзер выделяет нужные строки и выбирает нужный статус, при этом строки разбиваются как надо.
Попробовал поковырять типовой код, но там всё очень сильно завязано на форму. В итоге сделал внешнюю обработку, в которой у меня сама обработка имитировала форму. Правда, пришлось львиную долю процедур из ОМ "ОбеспечениеСервер" перетащить в саму обработку - так не взлетало. В итоге дошел до момента, когда в табличной части товаров заполняется колонка "Доступность". Т.е. выполнил шаг 1.
Дальше решил не испытывать судьбу(было потрачено неприлично много времени, чтоб сделать 1) и написал механизм смены статусов обеспечения в Заказах не используя типовой код.
Всё работает. На днях постараюсь запилить публикацию на эту тему.
+
16. user619846_n.taradanov 15.11.22 12:10 Сейчас в теме
(14) Очень даже есть
1.см. ОбщиеКоманды.РезервироватьЗаказ
2. Мы выдернули функцию ОбеспечениеВДокументахСервер.ВыполнитьДействиеДляЗаказовПослеВопроса(Параметры), слегка модифицировали её в части
				ТаблицаИзменений = ЗаполнитьВариантОбеспеченияПоОстаткамДляВыделенныхСтрокОбъекта(
					ДокументОбъект,
					КодДействия,
					ПараметрыЗаполнения,
					ИндексыСтрок,
					ПараметрыВстраивания);

Где "ИндексыСтрок" - индексы обрабатываемых строк.
Используем для автоматического резервирования заказов маркетов, автоустановке статуса к отгрузке по дате, и очереди резервирования строк заказов по дате отгрузки.
extalionos; user2015374; +2
17. user619846_n.taradanov 15.11.22 12:43 Сейчас в теме
(14)Я кстати тоже по такому пути пошёл сначала. Обработка прям опухла очень быстро и стала похожа на ОМ "ОбеспечениеСервер",
а потом я завел поиск по "ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬ" и ответ нашёлся за 5 минут рассматривания результатов поиска)
+
15. user619846_n.taradanov 15.11.22 12:04 Сейчас в теме
(9) См. ОбщиеКоманды.РезервироватьЗаказ
extalionos; d4rkmesa; +2
11. malikov_pro 1293 12.10.22 15:56 Сейчас в теме
(9) Пока активно работаю с 2.4 по преценденту использования 2.5 напишу изменения.
(10) они оптимизировали меню (меньше пользователей пугает), по функционалу по сути нужно новую статью писать.
d4rkmesa; +1
12. alexstav 8 13.11.22 13:35 Сейчас в теме
Спасибо! полезная статья, пригодилась.
+
18. uriah 17 07.07.23 14:31 Сейчас в теме
Добрый день! А как сделать так, что если товара в заказе больше чем на остатке на складе, действия процедур не делили строку товара на Отгрузить (остаток товара на складе) и Обеспечивать (превышение заказа)?
+
19. malikov_pro 1293 19.07.23 07:49 Сейчас в теме
(18) Переписывать механизм распределения (перехватывать результат и обрабатывать строки по своему), в целом у обработчиков проблема что они разделяют строку легко, а с объединением тяжко.
+
20. dimensity 15.09.23 17:54 Сейчас в теме
для 11.5.10 и новее - курите Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов, там команды в командной панели есть
Прикрепленные файлы:
Xershi; +1
Оставьте свое сообщение