Заполнение реквзитов с помощью внешней обработки

1. Johney20 24.04.17 23:55 Сейчас в теме
Доброго времени суток. Подскажите, пожалуйста по такому вопросу.

Пишу внешнюю обработку. Ее суть заключается в том, чтобы перенести данные из одного документа "Остатки ЕГАИС" (пусть будет №1) в документ "Передачи в торговый зал ЕГАИС" (№2). Так вот В документе №1 есть реквизит "Алко.продукция" (тип - спр. Классификаторы алко...), но нет реквизита "Номенклатура" (тип - спр. Номенклатура). А в документе №2 Есть оба эти реквизита с такими же типами. И вот как мне заполнить реквизит "Номенклатура"? Эти два справочника между собой никак не связаны..
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Alexey_ 27 25.04.17 00:06 Сейчас в теме
5. comptr 35 25.04.17 07:43 Сейчас в теме
(1) Если есть "спр. Классификаторы алко...", то должен быть регистр сведений, в котором хранится соответствие между ним и справочником "Номеклатура". В типовых розницах он есть, по крайне мере, хотя его названия я не помню.]
7. Johney20 25.04.17 20:31 Сейчас в теме
(5)
(4)
(3)
(2)
Этот вопрос я решила. Теперь только не пойму вот что. Все данные записываются, как нужно. А вот реквизит "Количество" остается незаполненным, хотя механизм такой же, как и для других реквизитов. И кстати, когда прохожу отладчиком, он показывает, что значение присвоено.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |	ОприходованиеТоваровТовары.Номенклатура,
               |	ОприходованиеТоваровТовары.АлкогольнаяПродукция
               |ПОМЕСТИТЬ ОприходТоваров
               |ИЗ
               |	Документ.ОприходованиеТоваров.Товары КАК ОприходованиеТоваровТовары
               |ГДЕ
               |	ОприходованиеТоваровТовары.Ссылка.ДокументОснование.Ссылка = &Ссылка
               |;
               |
               |////////////////////////////////////////////////////////////­////////////////////
               |ВЫБРАТЬ
               |	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.СправкаБ,
               |	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.АлкогольнаяПродукция,
               |	ЕСТЬNULL(ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Количество, 0) КАК Количество
               |ПОМЕСТИТЬ ОстаткиЕГАИС
               |ИЗ
               |	Документ.ОстаткиЕГАИС.ОстаткиПоДаннымЕГАИС КАК ОстаткиЕГАИСОстаткиПоДаннымЕГАИС
               |ГДЕ
               |	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Ссылка = &Ссылка
               |;
               |
               |////////////////////////////////////////////////////////////­////////////////////
               |ВЫБРАТЬ
               |	ОприходованиеТоваров.Магазин,
               |	ОприходованиеТоваров.Склад
               |ПОМЕСТИТЬ РеквизитыОприходованиеТоваров
               |ИЗ
               |	Документ.ОприходованиеТоваров КАК ОприходованиеТоваров
               |;
               |
               |////////////////////////////////////////////////////////////­////////////////////
               |ВЫБРАТЬ
               |	ОприходТоваров.Номенклатура,
               |	ОприходТоваров.АлкогольнаяПродукция,
               |	ОстаткиЕГАИС.СправкаБ,
               |	РеквизитыОприходованиеТоваров.Магазин,
               |	РеквизитыОприходованиеТоваров.Склад,
               |	ОстаткиЕГАИС.Количество
               |ИЗ
               |	ОстаткиЕГАИС КАК ОстаткиЕГАИС
               |		ЛЕВОЕ СОЕДИНЕНИЕ ОприходТоваров КАК ОприходТоваров
               |		ПО ОстаткиЕГАИС.АлкогольнаяПродукция = ОприходТоваров.АлкогольнаяПродукция,
               |	РеквизитыОприходованиеТоваров КАК РеквизитыОприходованиеТоваров";
					Запрос.УстановитьПараметр("Ссылка", ДокументОстатки);
					
					Выборка = Запрос.Выполнить().Выбрать();
					
					НовДок = Документы.ПередачаВТорговыйЗалЕГАИС.СоздатьДокумент();
					НовДок.Магазин = Выборка.Магазин;
					//НовДок.Организация = Выборка.Организация;
					НовДок.Склад = Выборка.Склад;
					НовДок.Дата = ТекущаяДата();
					Пока Выборка.Следующий() Цикл
						
						НовСтр = НовДок.Товары.Добавить();
						НовСтр.Номенклатура = Выборка.Номенклатура;
						НовСтр.Количество = Выборка.Количество; 
						НовСтр.СправкаБ = Выборка.СправкаБ;
						НовСТр.АлкогольнаяПродукция = Выборка.АлкогольнаяПродукция;
						
						
					КонецЦикла;
					
					НовДок.Записать();
Показать
8. independ 1552 25.04.17 20:37 Сейчас в теме
(7) Добавьте еще КоличествоУпаковок
9. Johney20 25.04.17 20:40 Сейчас в теме
(8) Добавила, не помогла, реквизит все равно не заполняется. Какие еще варианты есть?
10. Johney20 25.04.17 20:45 Сейчас в теме
(8) Да и в принципе, разница то какая "Количество" или "КоличествоУпаковок". Он и в первом и во втором случае присваивает значения, если смотреть отладчиком. Но вот почему он в итоге не записывает, я понять не могу.
11. independ 1552 25.04.17 20:59 Сейчас в теме
(10) Связь между справочниками Номенклатура и КлассификаторАлко хранится в регистре СоответствиеНоменклатурыЕГАИС, если у вас используется то запрос можно сделать попроще
"ВЫБРАТЬ
|	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.АлкогольнаяПродукция,
|	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Количество,
|	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Количество КАК КоличествоУпаковок,
|	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.СправкаБ,
|	СоответствиеНоменклатурыЕГАИС.Номенклатура
|ИЗ
|	Документ.ОстаткиЕГАИС.ОстаткиПоДаннымЕГАИС КАК ОстаткиЕГАИСОстаткиПоДаннымЕГАИС
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеНоменклатурыЕГАИС КАК СоответствиеНоменклатурыЕГАИС
|		ПО ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.АлкогольнаяПродукция = СоответствиеНоменклатурыЕГАИС.АлкогольнаяПродукция
|ГДЕ
|	ОстаткиЕГАИСОстаткиПоДаннымЕГАИС.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументОстатки);
ТЗ = Запрос.Выполнить().Выгрузить();
                    
                    НовДок = Документы.ПередачаВТорговыйЗалЕГАИС.СоздатьДокумент();

                    Для каждого стр из ТЗ Цикл
                        НовСтр = НовДок.Товары.Добавить();
                        ЗапонитьЗначенияСвойств(НовСтр,стр);
                    КонецЦикла;
                    
                    НовДок.Записать();
Показать
12. Johney20 25.04.17 21:11 Сейчас в теме
(11) Дмитрий, Вы даже не представляете, насколько я Вам благодарна!))) Спасибо огроиное, заработало)
13. independ 1552 25.04.17 21:16 Сейчас в теме
(12) Пожалуйста, на всякий случай - количество в табличных частях документов Розницы это КоличествоУпаковок
14. Johney20 26.04.17 11:09 Сейчас в теме
(13) Да, я когда в консольку загнала свой запрос, это поняла))
Спасибо еще раз!)
3. VmvLer 25.04.17 00:23 Сейчас в теме
тоже не совсем понял постановку задачи, пришло в голову заполнить элементом по умолчанию "Служебный 0,5 литра"
4. E_Johnny 25.04.17 04:35 Сейчас в теме
в справочнике номенклатура есть реквизит "Алко.продукция"? если отсутствует, то есть несколько вариантов это сопоставить:
добавить реквизит "Алко.продукция" в номенклатуру и заполнить в соответствии с любой логикой;
создать регистр сведений "Соответствие Алко.продукции и номенклатура" и также заполнить в соответствии с необходимой логикой
создать внешний файл со списком соответствия номенклатуры и Алко.продукциив две колонки, например, формат "табличный документ", Excel или ему подобные

и далее во внешней обработке устанавливать соответствие в документах, исходя из выбранного алгоритма сопоставления
6. Johney20 25.04.17 20:01 Сейчас в теме
Этот вопрос я решила. Теперь только не пойму вот что. Все данные записываются, как нужно. А вот реквизит "Количество" остается незаполненным, хотя механизм такой же, как и для других реквизитов. И кстати, когда прохожу отладчиком, он показывает, что значение присвоено.

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

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