УТ 11 Программное создание документа ПриобретениеТоваровУслуг

1. Mastershi 16.09.22 09:39 Сейчас в теме
Волею судеб требуется создать программно документ ПриобретениеТоваровУслуг в УТ 11.5.8.263.
Столкнулся с тем, что просто заполнить поля, которые есть в форме, недостаточно. Более того, определённые реквизиты, видимо заполняются именно в модуле формы и именно в процессе заполнения формы. В пору спросить, как сэмулировать программно ввод документа через форму.

Вопрос простой: как сделать так, чтобы создать документ программно и он таки провёлся (опять же, программно)?
В процессе проведения всплывают "Не заполнен склад" (оказывается, в строках товаров надо заполнять невидимое поле "Склад"), "ДокументПоступления не может быть пустым" и т.п.

Вообще, задача возникла из переноса ПоступленийТоваровУслуг из БП3 в УТ11.
ybatiaev; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. fedel_lozovski 16.09.22 10:19 Сейчас в теме
(1)Соглашусь с (2) и (3).
Единственное добавлю, есть обработки которые показывают значения всех реквизитов объектов и дают возможность сравнить объекты базы данных. Очень помогают в вашем случае. А то помимо "невидимых" реквизитов бывают которые необходимо заполнять пустыми ссылками...
13. Mastershi 16.09.22 11:22 Сейчас в теме
(6)
Единственное добавлю, есть обработки которые показывают значения всех реквизитов объектов и дают возможность сравнить объекты базы данных.
Если есть готовая или ссылка на источник, то буду благодарен.
15. Altez50 1 16.09.22 11:29 Сейчас в теме
(13)
значения всех реквизитов объектов и дают возможность сравнить объекты базы данных.

https://github.com/cpr1c/tools_ui_1c
Прикрепленные файлы:
16. Altez 256 16.09.22 11:43 Сейчас в теме
(13) Инструменты разработчика, Редактор реквизитов объектов, в поиске. Направление решения в (12), проблему из (0) должен решить вызов "ПроверитьЗаполнитьСклад" (раскомментровать).
19. fedel_lozovski 18.09.22 06:06 Сейчас в теме
24. ybatiaev 58 07.12.22 13:56 Сейчас в теме
(6) оно почти так, но такое ощущение, что при заполнении реквизитов дополняются не только невидимые реквизиты, но и необходимые регистры, на которых явно в объекте нет ссылок. Только столкнулся на УД11.5 с этим ((((((
7. lefthander 16.09.22 10:23 Сейчас в теме
(1)
В процессе проведения всплывают "Не заполнен склад" (оказывается, в строках товаров надо заполнять невидимое поле "Склад"),
потому как документ в режиме приема на разные склады построчно... Точно реквизит не помню если его выставить, то будет только один склад в реквизитах документа а не строк
8. Mastershi 16.09.22 10:55 Сейчас в теме
(7) Когда упомянутая опция установлена в состояние "Один склад", то на форме в строках товаров склад не выводится, но в модуле формы заполняется в каждой строке в "тени". Соответственно, если этого не знать (а я это обнаружил недавно), то можно усоздаваться программно документами - ни один из них не проведётся. По Док.Записать() ни одно событие формы не происходит и не обрабатывается. Шах и мат, как говорится. В прочем, это уже почти лирика :(
10. lefthander 16.09.22 11:09 Сейчас в теме
(8)Странно я в ЕРП 2.4 заполняю программно кучу документов, но нигде в строке не прописываю склад ;) Наверно потому что использую методы конфиги, а не придумываю свои ;)
11. Mastershi 16.09.22 11:11 Сейчас в теме
(10) Речь идёт про УТ11. Иные конфигурации - не показатель, увы. :(
ybatiaev; +1 Ответить
20. gybson 18.09.22 16:51 Сейчас в теме
(11) УТ 11 и ERP 2.4 в этой части практически идентичны
9. Gerts 12 16.09.22 10:58 Сейчас в теме
(1) 100% рабочий механизм. Создаём вручную документ, а потом создаем программно. На ручном смотрим что и как должно быть заполнено, и это приписывает в обработке. Работает на 100% конфигураций! На 100% видов документов. (По секрету - и на справочниках тоже)
23. Mastershi 04.10.22 10:51 Сейчас в теме
(9) Увы. При сохранении документа происходят какие-то дополнительные действия, в частности, делается запись в один из справочников (выяснил косвенно). В общем, ищем обходной путь решения... Спасибо всем откликнувшимся. Узнал много нового.
ybatiaev; +1 Ответить
25. ybatiaev 58 07.12.22 13:58 Сейчас в теме
(23) в какой справочник? ЧТо удалось узнать? Я копаюсь с этим. Можете подсказать?
34. ybatiaev 58 07.12.22 14:47 Сейчас в теме
(1) Вот попытался даже создать документ руками(верхний на картинке) точно такой же, как и не руками(нижний). Разницы не заметил.
Это я пометил на удаление созданный программно и созданный руками и посмотреть на то, ЧТО удаляется.
Возможно обработка не показывает то, что МОЖНО удалить (((
Если Вы нашли решение, чиркните куда копать (
Прикрепленные файлы:
38. anton13m 2 07.12.22 15:43 Сейчас в теме
(34)
Вы как-то странно реквизиты сравниваете.
Возьмите обработку для просмотра реквизитов, а не через удаление.

И нужно заполнять все реквизиты, а не те которые на форме отображаются.
Если вы какой-то реквизит на форме заполнили, а с ним другой заполнился, то вам его и программно нужно заполнять.
39. пользователь 07.12.22 15:47
Сообщение было скрыто модератором.
...
40. ybatiaev 58 07.12.22 15:51 Сейчас в теме
(32)
(38) Вы думаете именно с этого я НЕ НАЧАЛ? Алгоритм был старый проверенный. 1) делаем руками документ. 2) делаем программно документ с обязательным заполнением ровно тех же реквизитов ДОКУМЕНТА. И заполняю не только те, которые на форме, потому как 10 лет назад этому учился на курсах "1С". Сертификат есть.
В УТ11.5 это по другому работает.
А через удаление смотрел какие ещё ОБЪЕКТЫ кроме реквизитов заполняются. Поэтому и вывел их в картинку в сообщении.
Во всех конфигурациях, с которыми поработал старый алгоритм создания прокатывает. И с КД2 тоже. А вот с УТ11.5 засада (((
Поэтому и прошу помощи
42. anton13m 2 07.12.22 16:24 Сейчас в теме
(40)
Вы думаете именно с этого я НЕ НАЧАЛ

Я без понятия с чего вы начали, но если вы ищите ссылки на объект с помощью обработки удаления, хотя существует платформенная обработка, то тут можно задуматься.
Только что создал программно документ и никаких проблем не было.
Если у вас не проводится документ и ошибка при записи движений с незаполненным регистратором, то проблема тут не в том, что реквизит не заполнен, а в том, что он заполнен неверно. Здесь уже в бизнес-логике процессов нужно разбираться.
Прикрепленные файлы:
50. ybatiaev 58 23.12.22 13:57 Сейчас в теме
(42) Вы писали, что только что создали программно документ в УТ11.5. Можете привести пример кода?
Кстати, некоторые документы у меня проводятся, некоторые нет. Простое сравнение реквизитов не помогло - создаются одинаково, как и все сопутствующие реквизиты. Правила одни и те же. Сначала списка заметил, что проводится только один склад, чуть ниже именно этот склад перестал проводиться, значит не в складе дело. Проверил договоры. С одним и тем же договором один документ проводится , другой нет, значит дело не в договоре, хотя выводится сообщение

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

контрагент один и тот же, организация одна и та же

Возможно в конвертации порядок заполнения реквизитов важен...
51. anton13m 2 26.12.22 09:10 Сейчас в теме
(50)
Можете привести пример кода?


Проверил и удалил обработку, т.к. ничего особенного в ней не было.
Код примерно следующий:
Док = Документы.ПриобретениеТоваровИУслуг.СоздатьДокумент();
// заполнение реквизитов в соответствии с реквизитами интерактивно созданного и проведенного документа
...
Док.Дата = ...
Док.ВидОперации = ...
...
Док.Записать(РежимЗаписиДокумента.Проведение);
53. ybatiaev 58 27.12.22 00:43 Сейчас в теме
(51) спасибо! Разбираюсь. Доделывать всё равно надо. Пытаюсь после синхронизации сразу сохранить и провести документ (в рамках самой синхронизации). Часть получилась уже. 2007-2009 год почти весь сделался. Потом руками перепровожу - тоже всё ок. ХЗ пока. Не нашёл причины. А так я специально делал непроведёнными синхронизированные документы, а потом руками проводил, чтобы увидеть другие ошибки, если они возникнут
46. Altez50 1 08.12.22 22:00 Сейчас в теме
(40) Как придет решение, оставьте пж тут для потомков. В УТ11.4/ERP2.4 в 2020 создавал поступления / реализации программно в КД2 и ловил ошибку проведения.
Стоило что-то типа видов запасов оставить незаполненным - и документ при проведении это исправлял и проводился. Не претендую на точность, тогда решил методом тыка.
Если использовать логику ОбработкиЗаполнения - проблем обычно нет. А если кто найдется ОбработкуПроведения изучить и на ИС логику выложить - королем форума рискует стать).
2. tamidi 8 16.09.22 09:49 Сейчас в теме
Чтобы создать документ надо заполнить все необходимые реквизиты, по другом никак.
Можно разобрать процедуру, которая заполняет реквизиты при создании нового документа, либо заполнить тестовый документ данными, которые вам понадобятся и запросом посмотреть, какие еще реквизиты заполнились и также учесть это при создании.
Ну или отлавливать ошибки по одной и заполнять реквизиты при отладке.
26. ybatiaev 58 07.12.22 14:01 Сейчас в теме
(2) в УТ11 так не работает! Уже писали про это выше. При ручном заполнении реквизитов дополнительно заполняются регистры, справочники и ещё хрен пойми чего. И на это всё в реквизитах документа даже ссылок нет. Всё в "кишках" и общих модулях. 1С путать умеет (
Вот только с этим столкнулся на УТ11.5
3. igor63 16.09.22 09:50 Сейчас в теме
Посмотрите в консоле запросов какие поля заполнены в проведенном документе, и заполните по аналогии
27. ybatiaev 58 07.12.22 14:01 Сейчас в теме
(3) в УТ11 так не работает! Это первое, что делал всегда. Тут не помогает ( от слова совсем
30. anton13m 2 07.12.22 14:09 Сейчас в теме
(27)
Всегда работало и работает.
Никаких записей в справочнике или регистре сведений без которых нельзя провести документ - нет.
Если какой-то реквизит не заполнен, то он и в ошибке выведется.
31. ybatiaev 58 07.12.22 14:21 Сейчас в теме
(30)
(30)
Конечно выводится - ошибка типа "Не установлен отбор по регистратору (Регистр накопления: Запасы и потребности). А внизу другая ошибка "Выбрано соглашение с таким вариантом приемки, при котором приобретение будет проводиться в рамках соглашения в целом.
Возможность создания документов с такими соглашениями оставлена для того, что бы закрыть уже начатые движения по соглашениям.
Создавать новые документы с такими соглашениями не рекомендуется."
Причём соглашение одно и то же, только один документ создан программно, другой руками с теми же данными

В реквизитах ничего подобного нет, значит, как пишут в (12) нужно запустить процедуру не экспортную "ОбработкаЗаполнения" для этого объекта.
Прикрепленные файлы:
32. anton13m 2 07.12.22 14:39 Сейчас в теме
(31)
Ну это вы там чего-то не то заполняете.
Если интерактивно заполнить документ и провести, то программно созданный документ с такими же реквизитами проведется.
36. ybatiaev 58 07.12.22 15:17 Сейчас в теме
(32) сделал так сразу. НЕ ПРОВОДИТСЯ. Раз такая тема в инете обсуждается, значит проблема есть. Кстати для других конфигураций действительно всё проводится. Не первый год "замужем" )))
Тут засада (((
Причем это не только для поступлений, а для всех видов документов в УТ11.5
4. karamazoff 96 16.09.22 09:55 Сейчас в теме
быстрое простое решение - копируйте существующий документ и перезаполняйте в нем шапку и таблицу
12. Altez50 1 16.09.22 11:12 Сейчас в теме
(4)на собесе такое не покажешь, не универсально.

Пример заполнения:
(открывается форма и в неё добавляются строки ТЧ Товары с вызовом типовых обработчиков)

	Для Каждого СтрРезультата Из МассивСтрок Цикл
			
		СтрокаТабличнойЧасти = ВладелецФормы.Объект.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, СтрРезультата);
		
	//	//Далее заполнение таблицы товаров с выполнением типовых процедур обработки строки
	//	СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ВладелецФормы.Объект);
	//
		СтруктураДействий = Новый Структура;
	//	СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", СтрокаТабличнойЧасти.Характеристика);
		СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", СтрокаТабличнойЧасти.Упаковка);
		СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	//	СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(ВладелецФормы.Объект, ВладелецФормы.СкладГруппа));
	//	
	//	Если ВладелецФормы.ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(ВладелецФормы.Объект.Соглашение) Тогда
	//		СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(ВладелецФормы.Объект));
	//	Иначе
	//		СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(ВладелецФормы.Объект));
	//	КонецЕсли;
	//	СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Новый Структура("НалогообложениеНДС, Дата", ВладелецФормы.Объект.НалогообложениеНДС, ВладелецФормы.Объект.Дата));
	//	СтруктураДействий.Вставить("ЗаполнитьКодТНВЭД", ВладелецФормы.Объект.НалогообложениеНДС);
	//	СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", ВладелецФормы.Объект.ВернутьМногооборотнуюТару);
	//	СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", ВладелецФормы.Объект.ВернутьМногооборотнуюТару);
	//	СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
	//	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
	//	СтруктураДействий.Вставить("ПересчитатьСумму");
	//	СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
	//	СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
	//	СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
	//	СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
	//	СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
	//	СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
	//	СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", СтрокаТабличнойЧасти.Склад, ВладелецФормы.ПараметрыУказанияСерий));
	//	
	//	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ВладелецФормы, СтруктураДействий);
	//	
		СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
			ЭтаФорма.ИмяФормы, "Товары"));
			
		ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(СтрокаТабличнойЧасти, СтруктураДействий, Неопределено);
	//	
	//	ПродажиКлиентСервер.РассчитатьИтоговыеПоказателиРеализации(ВладелецФормы);
	//	СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ВладелецФормы);
		
		
		
	КонецЦикла;
Показать
ybatiaev; gybson; +2 Ответить
17. karamazoff 96 16.09.22 14:25 Сейчас в теме
(12)я же написал - быстрое, а не красивое, и конечно не для собеса
28. ybatiaev 58 07.12.22 14:05 Сейчас в теме
(12) а программно то как? Делаю синхронизацию КД2. Форму не откроешь, надо выполнить какой-то алгоритм уже при записи. Так-то можно в КД2 это включить, но надо знать точно
5. lefthander 16.09.22 10:18 Сейчас в теме
Как правило в модуле документа есть вызов функции заполнения документа по умолчанию, вот и Вы вызывайте, заполняйте, затем свои реквизиты уточняйте
14. Altez50 1 16.09.22 11:26 Сейчас в теме
(5) В БСП для этого вызывается ОМ ОбработкаТабличнойЧастиКлиент и ему подобные, пример в (12)
18. user1831019 16.09.22 14:44 Сейчас в теме
(14) Есть и серверные. В ERP у меня прекрасно доки формируются регламентными заданиями на сервере.
33. ybatiaev 58 07.12.22 14:42 Сейчас в теме
(18) а если КД2 это будет создавать? Какие процедуры там запустить нужно? "ОбработкаЗаполнения"? Это сейчас тестирую тоже
35. ybatiaev 58 07.12.22 15:13 Сейчас в теме
(32)
(14) как вариант взял созданный программно документ и перезаполнил все реквизиты(менял) - не отработало (((((
21. muskul 19.09.22 04:09 Сейчас в теме
В правилах хорошего тона есть правило вызова обработки заполнения после создание элемента и документа, который как раз и заолняет все те скрытые поля при вводе нового.
22. kras01 19.09.22 08:53 Сейчас в теме
Сравните документ, который создан программно с документом, который создан через форму через ИР портативный, там есть обработка сравнение документов. Заполните поля, которые программно создайте и все
Прикрепленные файлы:
29. ybatiaev 58 07.12.22 14:07 Сейчас в теме
(22) так в УТ11.5 это не работает. Писали выше.Только что с этим столкнулся ((((
И что за обработка такая красивая "Сравнение объектов УИ"... удобная. Где взять?
47. Altez50 1 08.12.22 22:49 Сейчас в теме
48. ybatiaev 58 09.12.22 06:42 Сейчас в теме
(47)
(47) это сразу делал. И так делал всегда до этого. Вообще всегда последовательность была такая: 1) сначала создаю руками документ; 2) создаю программно и сверяю всё ли одинаково. Так работало всегда. До того, как стал создавать документ в УТ11.5.
Сравнение - всё совпадает.
На всякий случай попытался сравнить при удалении (34) . По картинке видно, что при создании документа(без проведения пока) создаётся куча всего, кроме заполнения реквизитов документа. Там регистры сведений ещё и справочники. Но всё равно что-то не хватает ещё.
Причем, при проведении уже, ругается на одно(не заполнен регистратор в графике оплаты), а через СООБЩИТЬ() выдает, что использовано не то соглашение. Хотя в ручном документе именно тоже соглашение. Короче пока не разобрался ((((((((
49. ybatiaev 58 09.12.22 06:43 Сейчас в теме
(47) не этой обработкой пробовал. За обработку спасибо, сейчас приду на работу и именно ей посмотрю ещё.
37. пользователь 07.12.22 15:22
Сообщение было скрыто модератором.
...
41. 3gf 07.12.22 16:02 Сейчас в теме
через консоль запросов откройте документы созданный "вручную" и программно, и чисто визуально сравните поля, ну и в программе потом добавьте то чего не хватает
43. ybatiaev 58 07.12.22 16:25 Сейчас в теме
(42)
(41) Писал выше - НЕ РАБОТАЕТ данный механизм в УТ11. Нут вот не работает (((( этим механизмом пользуюсь 11 лет уже
44. anton13m 2 07.12.22 16:41 Сейчас в теме
(43)
Ну не работает, значит не работает. Ищите другие способы, пока остальные будут использовать "не рабочий механизм".
Вам один вариант уже назвали, а вы все упираетесь. Ну как сравните реквизиты, в том числе и в табличных частях, может и заработает.
45. ybatiaev 58 07.12.22 16:44 Сейчас в теме
(44) брат, тема не моя, значит есть проблема. Мало того, в поисковике нашел много подобных вопросов именно по УТ11.
У меня за спиной 11 лет стажа программирования в 1С(и не только) и опыт есть. Что рабочее и что не рабочее отличить могу
52. aatm 26.12.22 13:40 Сейчас в теме
Надеюсь это есть нужное решение!
Задача стоит такая же.Проверяю. Спасибо!
54. 1cmailru 4 27.12.22 08:29 Сейчас в теме
Раньше, в обычном приложении, мы смотрели на обработчики событий у реквизитов формы "ПриВыбореКонтрагента()", "ПриИзмененииОрганизации()" и т.д. Там внутри, раньше вызывались процедуры типа "ОбработкаТабличныхЧастей.ЗаполнитьСчетаУчета()" или что то в этом роде, сейчас в управляемых формах немного сложнее, в обработчиках событий под капотом, есть что то типа "ОбработкаТабличныхЧастейКлиент.ЗаполнитьСчетаУчета()", а в КД2 или в обработках, в которых мы программно создаем документ, мы обычно находимся на сервере, поэтому напрямую использовать клиентские процедуры мы не можем, надо искать модули с аналогичным названием, но с постфиксом "Сервер", и получится что то типа "ОбработкаТабличныхЧастейСервер.ЗаполнитьСчетаУчета()"

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

и этот путь более правильный, нежели смотреть какие скрытые реквизиты заполнились при интерактивном вводе - там же не просто надо чем попало заполнить, а должны отработать алгоритмы заполнения, которые выберут нужные данные, для заполнения.
55. dreamadv 155 02.01.23 14:44 Сейчас в теме
Еще вариант посмотреть ссылки на документ через поиск ссылок и сразу находятся все регистры сведений где он еще фигурирует.
56. progersan 6 18.07.23 15:44 Сейчас в теме
Всем привет!

У кого-то все-таки удалось программно сформировать нормальный документ ПриобретениеТоваровУслуг?
Я сейчас пытаюсь сделать, все бы неплохо. Даже проводится. Но товары не появляются на складе. Может я что-то не понял в конфигурации. Ковыраю демо конфигу от 1С из поставки.

Если что спросил тут https://forum.infostart.ru/forum9/topic301205/
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот