Создание документа Установка цен номенклатуры без записи документа

11.03.21

Разработка - Универсальные функции

Рабочий механизм создания документа Установка цен номенклатуры в КА 2 и УТ 11, без сохранения документа и с рабочим отображением заполненных данных.

День добрый.

Много шерстил Сеть в поиске решения проблемы.

Знающим известно, что этот документ в УТ 11, КА 2 и Рознице 2 выглядит не так, как хранится его содержимое.

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

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

Но с этим документом такое не сработало. Все необходимые методы формы по заполнению элементов это самой формы сработали при вызове этой же пресловутой формы. Дальнейшее заполнения данных объекта никак не влияли на содержание элементов формы. И открывалась форма так же, как если бы мы создали новый документ.

У меня была задачка загрузить цены из внешнего источника и открыть документ. Сама задача тут не рассматривается. Будет показан вариант, как я решил задачу открытия формы еще не записанного документа с заполненными данными.

Она оказалась не настолько сложна, просто надо было изучить метод заполнения документа в модуле объекта.

Там идет сравнение типа данных для заполнения и в самом низу была проверка на тип Структура. От нее и решил отталкиваться.

Структура там простая - два поля с именами Дата и ТаблицаНоменклатуры. Если Дата может содержать в себе просто дату будущего документа, то поле Таблица Номенклатуры должна содержать в себе адрес данных во временном хранилище

 

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
		//...
		//несколько проверок на типы документов
		//...
	ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда		
		Если ДанныеЗаполнения.Свойство("ТаблицаНоменклатуры") Тогда			
			ЗаполнитьПоТаблицеНоменклатуры(
				ДанныеЗаполнения);			
		КонецЕсли;		
	КонецЕсли;
КонецПроцедуры

Тут вызывается метод ЗаполнитьПоТаблицеНоменклатуры

Процедура ЗаполнитьПоТаблицеНоменклатуры(ДанныеЗаполнения)
	
	ТаблицаНоменклатуры = ПолучитьИзВременногоХранилища(ДанныеЗаполнения.ТаблицаНоменклатуры);
	Товары.Загрузить(ТаблицаНоменклатуры);
	
	ТаблицаНоменклатуры.Свернуть("ВидЦены");
	
	ВидыЦен.Загрузить(ТаблицаНоменклатуры);
	
	Дата = ДанныеЗаполнения.Дата;
		
КонецПроцедуры

Вот из этих знаний и было найдено решение.

Просто покажу код заполнения, думаю, многие поймут, что тут. Переменная ТипЦеныДокумента - реквизит формы для подстановки нужного вида цены. ДатаДокумента - также реквизит, взятый из внешнего источника.

&НаСервере
Функция ПолучитьАдресТаблицыТоваров()
	ТаблицаНоменклатуры = новый ТаблицаЗначений;
	ТаблицаНоменклатуры.Колонки.Добавить("Номенклатура");
	ТаблицаНоменклатуры.Колонки.Добавить("Характеристика");
	ТаблицаНоменклатуры.Колонки.Добавить("ВидЦены");
	ТаблицаНоменклатуры.Колонки.Добавить("Цена");
	Для каждого Товар из Товары Цикл
		НоваяСтрока = ТаблицаНоменклатуры.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, товар);
		НоваяСтрока.ВидЦены = ТипЦеныДокумента;
	КонецЦикла;
	Адрес = ПоместитьВоВременноеХранилище(ТаблицаНоменклатуры, ЭтаФорма.УникальныйИдентификатор);
	Возврат Адрес
КонецФункции

&НаКлиенте
Процедура ЗагрузитьЦены(Команда)
	Для каждого Товар из Товары Цикл
		Если Товар.Номенклатура.Пустая() или (Товар.Характеристика.Пустая() и НЕ ПустаяСтрока(Товар.ХарактеристикаИзФайла)) Тогда
			ПоказатьПредупреждение(,"Есть незаполненные строки");
			Возврат
		КонецЕсли;
	КонецЦикла;	
	СтруктураЗаполнения = Новый Структура;
	СтруктураЗаполнения.Вставить("Дата", ДатаДокумента);	
	Адрес = ПолучитьАдресТаблицыТоваров();
	СтруктураЗаполнения.Вставить("ТаблицаНоменклатуры", Адрес);
	П = Новый Структура("ЗначенияЗаполнения", СтруктураЗаполнения);
	ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта", П, ЭтаФорма);
КонецПроцедуры

После выполнения данного кода форма документа открывается в готовом виде и можно только нажать Провести и закрыть.

 

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

Я не претендую на уникальность решения (повторюсь - искал долго) и прошу не обращать внимания на вероятные ляпы в алгоритме. Я просто хотел поделиться готовым решением поставленной задачи.

Проверил функционал на УТ 11.4.13.71 и КА 2.4.13.96. Как будет работать механизм с другими конфигурациями, не берусь сказать. К примеру, в конфигурации Розница:Аптека 2.6 нет такого заполнения, в типовой Рознице не проверял. Если в методе ОбработкаЗаполнения есть проверка на структуру и далее заполнение будет так же, как указано выше - механизм сработает.

Надеюсь, кому-нибудь будет полезно.

Всем добра!

УстановкаЦенНоменклатуры загрузка цен открытие формы

См. также

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

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

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

28.12.2023    4823    mrXoxot    11    

99

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3953    ke.92@mail.ru    16    

61

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

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

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

08.11.2023    7024    ids79    25    

74

Валидация JSON через XDTO (включая массивы)

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

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8802    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

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

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

Уверен, все в курсе, что контактная информация опять во всех конфигурациях хранится по-новому. Связано это с появлением так называемых муниципальных адресов, где районы заменили городские округа. Сейчас происходит массовый отказ от УПП и других устаревших решений, а также массовый переход с зарубежных систем. Возникает потребность преобразовать старые адреса в новые. И тут нас всех ждёт масса неприятных сюрпризов от разработчиков БСП. О программном интерфейсе контактной информации и пойдёт речь в данной статье.

23.05.2023    11518    biimmap    43    

59

Как проводятся документы в типовых конфигурациях от 1С: дополнение

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

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

13.02.2023    8886    skv_79    10    

89
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. shtinalex 271 11.03.21 12:19 Сейчас в теме
Плюсую, тоже вначале записывал объект, а потом открывал форму. После уже дошёл до этот метода загрузки без записи документа. Вот рабочий пример: Обработка загрузки цен в документ "Установка цен номенклатуры"
2. obmanOZ 33 15.03.21 11:22 Сейчас в теме
Пасиб, посмотрю можно ли на рознице сделать подобное. У меня работает через костыль )
3. shtinalex 271 13.05.21 10:23 Сейчас в теме
(2) В рознице есть типовая обработка для загрузки номенклатуры и цен из файла, называется "Загрузка данных из файла". Я её брал за основу для Загрузка цен из файла Excel в документ "Установка цен номенклатуры"
4. rabotana 13.01.23 09:09 Сейчас в теме
Пришло ценообразование 2,5, и всё стало нерабочим. Может кто подскажет что теперь надо поправить в этом методе?
5. Vladimir_D 119 13.01.23 09:44 Сейчас в теме
(4)это в каком релизе? Перестал следить.
6. rabotana 13.01.23 10:22 Сейчас в теме
с 11,5 по идее, там можно (и видимо нужно ) выбирать метод ценообразования 11.5, вот пока его не включил - работает. В установке цен я так понял задействуется табличнаяЧасть Товары2_5, новая ветка в заполнении (это наверное пришло из CRM или КА2.5)
7. Vladimir_D 119 13.01.23 10:29 Сейчас в теме
(6)понятно. Вполне может быть. Надо глянуть.
8. EugeneR1c 26.01.23 18:56 Сейчас в теме
Спасибо! Пригодилось!
9. ANF-BR 03.03.23 12:02 Сейчас в теме
Спасибо за решение, очень помогло! А не подскажите как сделать так чтобы документ создавался не с одним видом цен, а с несколькими?
10. ANF-BR 03.03.23 12:58 Сейчас в теме
11. gtrr34 6 10.09.23 14:48 Сейчас в теме
СПАСИБИЩЕ!
мне повезло, промучился своими силами только час, потом пошел серфить и сразу вышла ваша подсказка.
УТ 11.5.13
в настройках отключены цены 2,5 и этот код работает! ура!

Ниже упрощенный вариант, если нужно открыть документ с одной определенной номенклатурой (без характеристик)

&НаСервере
Функция ПолучитьАдресТаблицыТоваров()
	
	ТаблицаНоменклатуры = новый ТаблицаЗначений;
	ТаблицаНоменклатуры.Колонки.Добавить("Номенклатура");
	ТаблицаНоменклатуры.Колонки.Добавить("ВидЦены");
	ТаблицаНоменклатуры.Колонки.Добавить("Цена"); 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ВидыЦен.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.ВидыЦен КАК ВидыЦен";

	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = ТаблицаНоменклатуры.Добавить(); 
		НоваяСтрока.Номенклатура = Номенклатура;//Ссылка на номенклатуру
		НоваяСтрока.ВидЦены = Выборка.Ссылка;
	КонецЦикла;

	Адрес = ПоместитьВоВременноеХранилище(ТаблицаНоменклатуры, ЭтаФорма.УникальныйИдентификатор);
	Возврат Адрес
КонецФункции

&НаКлиенте
Процедура УстановитьЦены(Команда)
	СтруктураЗаполнения = Новый Структура;
	СтруктураЗаполнения.Вставить("Дата", ТекущаяДата());	
	Адрес = ПолучитьАдресТаблицыТоваров();
	СтруктураЗаполнения.Вставить("ТаблицаНоменклатуры", Адрес);
	П = Новый Структура("ЗначенияЗаполнения", СтруктураЗаполнения);
	ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта", П, ЭтаФорма);
КонецПроцедуры
Показать
nekiilik1c; +1 Ответить
12. gtrr34 6 10.09.23 15:24 Сейчас в теме
Комментарий заполнил таким костылем:

В процедуре на клиенте где заполняем структуру добавил строку

	СтруктураЗаполнения.Вставить("Комментарий", "Документ создан .... ";



В расширение перенес процедуру "ОбработкаЗаполнения" из модуля объекта Документы.УстановкаЦенНоменклатуры

&После("ОбработкаЗаполнения")
Процедура ХХ_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ЭтотОбъект.Комментарий = "" Тогда
		ЭтотОбъект.Комментарий = ДанныеЗаполнения.Комментарий;
	КонецЕсли
	
КонецПроцедуры
Показать
13. gtrr34 6 12.09.23 18:34 Сейчас в теме
Долго промучился с задачей открыть по ссылке документ Установка цен номенклатуры и добавить в него новый товар. Когда пазл сошелся оказалось все просто. Я только начал ковырять 1с и этот сложно устроенный документ заставил попотеть :)

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



&НаСервере
Процедура АК_ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка) //Обязательно "Перед" иначе дерево цен не заполнится
	
	Попытка //без попытки: если открывать форму например из списка без переданных параметров - будет ошибка типа "Нет такого параметра..."
		Если Параметры.АК_ЗаполнитьТЧ Тогда
			
			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	ВидыЦен.Ссылка КАК Ссылка
			|ИЗ
			|	Справочник.ВидыЦен КАК ВидыЦен";
			
			РезультатЗапроса = Запрос.Выполнить();
			Выборка = РезультатЗапроса.Выбрать();
			
			Пока Выборка.Следующий() Цикл
				НоваяСтрока = Объект.Товары.Добавить(); 
				НоваяСтрока.Номенклатура = Параметры.АК_Номенклатура;
				НоваяСтрока.ВидЦены = Выборка.Ссылка;
			КонецЦикла;
		КонецЕсли;	
	Исключение
	КонецПопытки; 	
	
КонецПроцедуры
Показать
14. Miket78 21 20.03.24 15:06 Сейчас в теме
В УТ 11.5 для ценообразования 2.5 значение цены не заполняется. Виды цен и номенклатура заполняется, а цены пустые. В процедуре ЗагрузитьТовары для 2.5 в СтруктураРезультата.ТаблицаТоваров отсутствует колонка Цена, хотя на входе в ТаблицаТовары колонка Цена есть и она заполнена. Как побороть?

Процедура ЗагрузитьТовары(ТаблицаТовары)
	
	ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25();
	
	Если ИспользуетсяЦенообразование25 Тогда
		Если ТаблицаТовары.Колонки.Найти("Упаковка") = Неопределено Тогда
			ТаблицаТовары.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
		КонецЕсли;
		
		Если ТаблицаТовары.Колонки.Найти("Серия") = Неопределено Тогда
			ТаблицаТовары.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
		КонецЕсли;
		
		Если ТаблицаТовары.Колонки.Найти("Характеристика") = Неопределено Тогда
			ТаблицаТовары.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
		КонецЕсли;
	
		СтруктураНастроек = Новый Структура();
		СтруктураНастроек.Вставить("ТаблицаТоваров", ТаблицаТовары);
		СтруктураНастроек.Вставить("ИмяМакетаСхемыКомпоновкиДанных", "Макет2_5");
		СтруктураНастроек.Вставить("КомпоновщикНастроек", Неопределено);
		СтруктураНастроек.Вставить("ВестиУчетСертификатовНоменклатуры", Ложь);
		СтруктураНастроек.Вставить("ИспользуетсяОтборПоВнешнемуИсточникуДанных", Истина);
		СтруктураНастроек.Вставить("ОбязательныеПоля"   , Новый Массив);

		СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура");
		СтруктураНастроек.ОбязательныеПоля.Добавить("Характеристика");
		СтруктураНастроек.ОбязательныеПоля.Добавить("ХарактеристикаЦО");
		СтруктураНастроек.ОбязательныеПоля.Добавить("Серия");
		СтруктураНастроек.ОбязательныеПоля.Добавить("СерияЦО");
		СтруктураНастроек.ОбязательныеПоля.Добавить("Упаковка");
		СтруктураНастроек.ОбязательныеПоля.Добавить("УпаковкаЦО");
		СтруктураНастроек.ОбязательныеПоля.Добавить("ВидЦены");
		
		СтруктураРезультата = Обработки.ПодборТоваровПоОтбору.ПодготовитьСтруктуруДанных(СтруктураНастроек);
		
		Товары2_5.Загрузить(СтруктураРезультата.ТаблицаТоваров);
	Иначе
		Товары.Загрузить(ТаблицаТовары);
	КонецЕсли;
		
КонецПроцедуры
Показать
Оставьте свое сообщение