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

11.03.21

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

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

День добрый.

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

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

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

Всем добра!

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

См. также

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

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

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

3480 руб.

22.08.2023    1255    1    4    

3

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

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

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

08.11.2023    3848    ids79    21    

62

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

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

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

28.08.2023    5646    YA_418728146    6    

119

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

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

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

23.05.2023    8221    biimmap    41    

57

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

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

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

13.02.2023    7149    skv_79    9    

82

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    14547    114    sapervodichka    106    

124
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. shtinalex 260 11.03.21 12:19 Сейчас в теме
Плюсую, тоже вначале записывал объект, а потом открывал форму. После уже дошёл до этот метода загрузки без записи документа. Вот рабочий пример: Обработка загрузки цен в документ "Установка цен номенклатуры"
2. obmanOZ 33 15.03.21 11:22 Сейчас в теме
Пасиб, посмотрю можно ли на рознице сделать подобное. У меня работает через костыль )
3. shtinalex 260 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с и этот сложно устроенный документ заставил попотеть :)

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



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