Получить основную спецификацию

1. HaIIpuKoJIe 14.01.19 12:26 Сейчас в теме
Добрый день. В обработке есть ТЧ из которой программно заполняется документ "ЗаказНаПроизводство" Как получить основную спецификацию из регистра сведений ""ОсновныеСпецификации" и ввести в документ?
 НовДок = Документы.ЗаказНаПроизводство2_2.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
	НовДок.Организация = Справочники.Организации.НайтиПоНаименованию("Организация");
	НовДок.Подразделение = Справочники.СтруктураПредприятия.НайтиПоКоду("00-000001");
	НовДок.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СобственноеПроизводство;
	НовДок.ЗаказПодДеятельность = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
	НовДок.Приоритет = Справочники.Приоритеты.НайтиПоНаименованию("Средний");
	НовДок.Статус = Перечисления.СтатусыЗаказовНаПроизводство2_2.Формируется;
	Склад = Справочники.Склады.НайтиПоНаименованию("Производственный цех (Склад)");	
	НовДок.НачатьНеРанее = НачалоДня(ТекущаяДата());
	НовДок.Ответственный = ПараметрыСеанса.ТекущийПользователь;
	НовДок.РазмещениеВыпуска = Перечисления.СпособыПривязкиОперацийПроизводства.КНачалу;
	Для Каждого ТекущаяСтрока  Из Объект.Продукция 
	    Цикл 
		Если ТекущаяСтрока.КЗаказу Тогда
	    нс = НовДок.Продукция.добавить();  
	    нс.Номенклатура = ТекущаяСтрока.НоменклатураВЭтап;
		нс.Характеристика = ТекущаяСтрока.ХарактеристикаВЭтап;
		нс.КоличествоУпаковок = ТекущаяСтрока.КоличествоВЭтап;
		нс.Количество = ТекущаяСтрока.КоличествоВЭтап;
		нс.Склад = Склад;
		
		//нс.Спецификация = ТекущаяСтрока.Спецификация;	
		 КонецЕсли;
	КонецЦикла;	
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 14.01.19 12:32 Сейчас в теме
(1) например запросом к этому регистру сведений.

А вообще надо хотя бы архитектуру вашего прикладного решения представлять, чтобы что-то посоветовать. Может там более явные связи есть.
10. dandykry 9 14.01.19 14:32 Сейчас в теме
(1)
ЕРП.
УправлениеДаннымиОбИзделиях.ЗаполнитьСпецификациюВСтроках

УправлениеДаннымиОбИзделиях.ПолучитьТекстЗапросаОсновнойСпецификации
neyasytyf; +1 Ответить
11. HaIIpuKoJIe 14.01.19 15:16 Сейчас в теме
(10)
ПолучитьТекстЗапросаОсновнойСпецификации

(10) Видел, но использовать ума не хватило
12. dandykry 9 14.01.19 15:21 Сейчас в теме
(11)

Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	СтруктураПредприятия.Ссылка КАК Подразделение
	               |ПОМЕСТИТЬ ПроизводственныеПодразделения
	               |ИЗ
	               |	Справочник.СтруктураПредприятия КАК СтруктураПредприятия
	               |ГДЕ
	               |	НЕ СтруктураПредприятия.ПометкаУдаления
	               |	И СтруктураПредприятия.ПроизводственноеПодразделение
	               |
	               |ОБЪЕДИНИТЬ ВСЕ
	               |
	               |ВЫБРАТЬ
	               |	СтруктураПредприятия.Ссылка
	               |ИЗ
	               |	Справочник.СтруктураПредприятия КАК СтруктураПредприятия
	               |ГДЕ
	               |	НЕ СтруктураПредприятия.ПометкаУдаления
	               |	И СтруктураПредприятия.ПодразделениеДиспетчер";
	
	Запрос.Выполнить();   //ПроизводственныеПодразделения для получения спецификации подразделение не должно быть пустым



//ТаблицаДанных = Запрос.Выполнить().Выгрузить();  //ТаблицаДанных получить запросом или самому заполнить
		
			Запрос.Текст = 
			"ВЫБРАТЬ РАЗЛИЧНЫЕ
			|	ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
			|	ВЫРАЗИТЬ(Таблица.Характеристика КАК Справочник.ХарактеристикиНоменклатуры) КАК Характеристика,
			|	ВЫРАЗИТЬ(Таблица.НачалоПроизводства КАК ДАТА) КАК НачалоПроизводства
			|ПОМЕСТИТЬ ТаблицаДокумента
			|ИЗ
			|	&КоллекцияДанных КАК Таблица
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Номенклатура
			|;
			|
			|////////////////////////////////////////////////////////////­////////////////////
			|ВЫБРАТЬ
			|	Таблица.Номенклатура КАК Номенклатура,
			|	Таблица.Характеристика КАК Характеристика,
			|	Таблица.НачалоПроизводства КАК НачалоПроизводства,
			|	ПроизводственныеПодразделения.Подразделение КАК Подразделение
			|ПОМЕСТИТЬ СписокНоменклатуры
			|ИЗ
			|	ТаблицаДокумента КАК Таблица,
			|	ПроизводственныеПодразделения КАК ПроизводственныеПодразделения
			|;
			|
			|////////////////////////////////////////////////////////////­////////////////////
			|УНИЧТОЖИТЬ ТаблицаДокумента";	
			
			Запрос.УстановитьПараметр("КоллекцияДанных", ТаблицаДанных);
			
			
			СтруктураКлючаПоискаСтроки = Новый Структура("Номенклатура,
			|Характеристика,
			|НачалоПроизводства",
			"Номенклатура",
			"Характеристика",
			"НачалоПроизводства");
			
			УправлениеДаннымиОбИзделиях.ЗаполнитьОсновныеСпецификацииВКоллекции(Запрос, ТаблицаДанных, СтруктураКлючаПоискаСтроки);
Показать
14. sdaf 12.08.22 12:39 Сейчас в теме
(1)УправлениеДаннымиОбИзделияхВызовСервера.ПолучитьОсновнуюСпецификацию
3. signum2009 1028 14.01.19 12:32 Сейчас в теме
Запросом к РС (срез последних), только не в цикле запрос делать, а перед циклом
4. HaIIpuKoJIe 14.01.19 12:44 Сейчас в теме
(3) Не совсем пока понимаю как это сделать. Есть пример?

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


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

Так явно не правильно, да и параметры так в запрос не передаются. РС не периодический.
5. BarsukM 14.01.19 12:55 Сейчас в теме
(4) Запросом получить таб часть "Продукция" и присоединить ЛЕВЫМ образом поле "Характеристика" регистра "ОсновныеСпецификации" по полям "Номенклатура" и "Характеристика" .
6. signum2009 1028 14.01.19 12:55 Сейчас в теме
Вы сформируйте в запросе временную таблицу с номенклатурой и характеристикой (их можно получить из коллекции Объект.Продукция в таблицу значений), потом сделайте отбор по этой временной таблице в регистре сведений (с помощью оператора В, получите связку для данного документа Номенклатура-Характеристика-ОсновнаяСпецификация, ну а дальше или обходите выборку и находите строки в ТЧ документа и изменяете их, или наоборот ...
7. signum2009 1028 14.01.19 13:13 Сейчас в теме
(6)
Типа того
	
ТЗ = Объект.Продукция.Выгрузить(,"Номенклатура,Характеристика");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    ТЗ.Номенклатура КАК Номенклатура,
               |    ТЗ.Характеристика КАК Характеристика
               |ПОМЕСТИТЬ втТЗ
               |ИЗ
               |    &ТЗ КАК ТЗ
               |
               |ИНДЕКСИРОВАТЬ ПО
               |    Номенклатура
               |;
               |
               |////////////////////////////////////////////////////////////­////////////////////
               |ВЫБРАТЬ
               |    втТЗ.Номенклатура КАК Номенклатура,
               |    втТЗ.Характеристика КАК Характеристика,
               |    ЕСТЬNULL(ОсновнаяСпецификация.Спецификация, ЗНАЧЕНИЕ(Справочник.Спецификация.ПустаяСсылка)) КАК Спецификация
               |ИЗ
               |    втТЗ КАК втТЗ
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновнаяСпецификация КАК ОсновнаяСпецификация
               |        ПО втТЗ.Номенклатура = ОсновнаяСпецификация.Номенклатура
               |            И втТЗ.Характеристика = ОсновнаяСпецификация.Спецификация
               |ГДЕ
               |    (ОсновнаяСпецификация.Номенклатура, ОсновнаяСпецификация.Характеристика) В
               |            (ВЫБРАТЬ
               |                вт.Номенклатура,
               |                вт.Характеристика
               |            ИЗ
               |                втТЗ КАК вт)";

Запрос.УстановитьПараметр("ТЗ",ТЗ);

Выборка = Запрос.Выполнить().Выбрать();

Показать
8. BarsukM 14.01.19 13:46 Сейчас в теме
(7) А почему индекс только по номенкалтуре?
9. signum2009 1028 14.01.19 13:58 Сейчас в теме
(8) В принципе, тут индекс нужен по номенклатуре и характеристике, т.к. по обоим полям идет связь. Наспех сделал особо не подумал
13. meriferi 14.01.19 17:00 Сейчас в теме
Управление производством.определитьспецификациюпоумолчанию (номенклатура, , дата)
Оставьте свое сообщение

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