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

26.10.20

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

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

Вводные

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

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

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

 

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

 

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

 

Обработка

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

 

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

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

где

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

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

 

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

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

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

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

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

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

 

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

Вызывается
 

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

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

 

Итог

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

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

 

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

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

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

См. также

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

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

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

07.02.2024    2354    YA_418728146    11    

40

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

8

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

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

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

28.12.2023    4835    mrXoxot    11    

99

Ключи аналитик учета в ЕРП, КА, УТ

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

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

08.11.2023    7051    ids79    25    

74

Распределение по базе среднего в ЗИКГУ 3.1

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

Результат расчета начислений (отпуск, БЛ и т.д.) может распределятся по базе среднего заработка. У таких начислений на вкладке "Налоги, взносы, бухучет" стоит галка "По базе среднего заработка". Но бывают случаи, что данное распределение необходимо скорректировать.

1 стартмани

14.09.2023    445    2    Vlx    0    

1

Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)

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

В статье приведен алгоритм доработок типового механизма настройки заполнения бухгалтерской отчетности на примере конфигурации 1С:ERP. Управление холдингом (3.1.8.15). Цель доработок - сделать процесс настроек более гибким и удобным для пользователей

11.09.2023    1929    ICL-Soft    3    

12

Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом

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

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

18.07.2023    2156    it_box    1    

7

Работа с контактной информацией. Часть 2

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

Во второй части статьи рассмотрим вопрос преобразования адреса из старого формата в новый. Рассмотрим реальные задачи, связанные с контактной информацией.

05.06.2023    6958    biimmap    4    

41
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1475 03.02.20 10:09 Сейчас в теме
Мне нужно было разбить 1 строку без характеристик на несколько с характеристиками по ФИФО и чтобы цена не пересчиталась автоматом. Писал свой костыль в дебри кода на тот момент не полез.
2. malikov_pro 1292 03.02.20 10:25 Сейчас в теме
(1) Это немного про другое, там идет проверка на заполненность характеристик при флаге их использования в номенклатуре.
Какую бизнес задачу решали при распределении по характеристикам?
3. Xershi 1475 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 1292 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 1292 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 1292 19.07.23 07:49 Сейчас в теме
(18) Переписывать механизм распределения (перехватывать результат и обрабатывать строки по своему), в целом у обработчиков проблема что они разделяют строку легко, а с объединением тяжко.
20. dimensity 15.09.23 17:54 Сейчас в теме
для 11.5.10 и новее - курите Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов, там команды в командной панели есть
Прикрепленные файлы:
Оставьте свое сообщение