|
Внешняя печатная форма. | ☑ | ||
---|---|---|---|---|
0
FREEZZEE
18.11.13
✎
16:04
|
Добрый день, товарищи программисты!
Создаю внешнюю печатную форму для УТ 10.3. Делал на основе типовой. В Макете требовалось отразить сравнении цены продажи и цены закупки. Цену продажи брал из реализации, а цену закупки, из регистра накопления "ПартииТоваровНаСкладах", т.к. цену поступления в номенклатуре никто не задавал. Зарегистрировал внешнюю печатную форму в документе "Реализация товаров и услуг". Но заполняет не все колонки. Проверяю по документам, данные поля есть, но при вызове которых выдается ошибка об их отсутствии (в самом предприятии). Плюсом добавилась беда с циклом, который применил я неправильно. Каждая позиция дублируется по несколько раз. Братья, форумчане, дайте пинка просветления, наставьте на путь истинный! |
|||
1
FREEZZEE
18.11.13
✎
16:05
|
// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами // // Возвращаемое значение: // Табличный документ - печатная форма накладной // Функция Печать() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.СсылкаНаОбъект); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.СерияНоменклатуры, | РеализацияТоваровУслугТовары.Цена, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.Количество = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество | КОНЕЦ КАК ЦенаПоступления, | ПартииТоваровНаСкладах.Регистратор КАК ПриходныйДокумент |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО РеализацияТоваровУслугТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И РеализацияТоваровУслугТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &ТекущийДокумент | И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | И (ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | ИЛИ ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ОприходованиеТоваров)"; ЗапросТовары = Запрос.Выполнить().Выгрузить(); ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("СравнениеЦенЗакупкаПродажа"); // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.ТекстЗаголовка = "Сравнение цен закупка\продажа"; ТабДокумент.Вывести(ОбластьМакета); ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабДокумент.Вывести(ОбластьШапка); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); //НомерСтроки = 0; ДЛЯ КАЖДОГО СтрокаТовара ИЗ ЗапросТовары ЦИКЛ Выборка = Запрос.Выполнить().Выбрать(); СчСтрок = 1; Пока Выборка.Следующий() Цикл ОбластьСтрока.Параметры.НомерСтроки = СчСтрок; ЗаполнитьЗначенияСвойств(ОбластьСтрока,Выборка); ОбластьСтрока.Параметры.Артикул = СтрокаТовара.Номенклатура.Артикул; ОбластьСтрока.Параметры.Товар = СтрокаТовара.Номенклатура.Наименование; ОбластьСтрока.Параметры.Серия = СтрокаТовара.СерияНоменклатуры.Наименование; //ОбластьСтрока.Параметры.Количество = СтрокаТовара.СтрокаТовар.Количество; //ОбластьСтрока.Параметры.Цена = СтрокаТовара.Номенклатура.Цена; ОбластьСтрока.Параметры.ЦенаПоступления = СтрокаТовара.ЦенаПоступления; //ОбластьСтрока.Параметры.Сумма = ВыборкаСтрокТовары.Сумма; //ОбластьСтрока.Параметры.СуммаПродажи = СтрокаТовара.РеализацияТоваровУслугТовары.СуммаПродажи; СчСтрок = СчСтрок+1; ТабДокумент.Вывести(ОбластьСтрока); КонецЦикла; КонецЦикла; //////// Возврат ТабДокумент; КонецФункции Печать() ; |
|||
2
Wobland
18.11.13
✎
16:11
|
медитируй над полным текстом ошибки. и да пребудет с тобой сила
|
|||
3
Шапокляк
18.11.13
✎
16:11
|
А что вы хотели, если поступлений может быть несколько? Может, лучше движения по партиям именно этого документа анализировать?
|
|||
4
Wobland
18.11.13
✎
16:14
|
ДЛЯ КАЖДОГО СтрокаТовара ИЗ ЗапросТовары ЦИКЛ
вот это выплюнуть получение данных из документа на экзамене автоматически приводит к провалу |
|||
5
Wobland
18.11.13
✎
16:17
|
(4) ВПФ же, сторно
|
|||
6
FREEZZEE
18.11.13
✎
16:34
|
Wobland, не подскажете, как получить из регистра накопления?
|
|||
7
Wobland
18.11.13
✎
16:38
|
(6) сторно же ;) запрос возвращает желаемое?
|
|||
8
FREEZZEE
18.11.13
✎
17:00
|
по 4м пунктам да, но не в таком виде, как хотелось бы.
|
|||
9
Wobland
18.11.13
✎
17:07
|
то есть, нет. бери консоль и насилуй запрос, пока он не станет выдавать нужное
|
|||
10
FREEZZEE
18.11.13
✎
17:11
|
в самом цикле не устраивает то, что каждая позиция дублируется, но это пол беды. Проблема возникает с выбором нужных данных не из самого документа, а из регистра.
|
|||
11
Wobland
18.11.13
✎
17:12
|
во-первых, соединение надо левое. во-вторых, соединять нужно по всем измерениям
|
|||
12
FREEZZEE
18.11.13
✎
18:27
|
со сторонней помощью, исправил в такой вид. Но теперь Предприятие отказывается регистрировать ВПФ. "Выбранный файл не является внешней обработкой. Либо, данная обработка не предназначена для запуска в этой конфигурации".
Wobland, подскажите, что я сделал не так? Функция Печать() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.СсылкаНаОбъект); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура Как Товар, | РеализацияТоваровУслугТовары.Номенклатура.Артикул Как Артикул, | РеализацияТоваровУслугТовары.СерияНоменклатуры Как Серия, | РеализацияТоваровУслугТовары.Количество, | РеализацияТоваровУслугТовары.Цена, | РеализацияТоваровУслугТовары.Сумма, | РеализацияТоваровУслугТовары.СуммаПродажи, | РеализацияТоваровУслугТовары.НомерСтроки, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.Количество = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество | КОНЕЦ КАК ЦенаПоступления, | ПартииТоваровНаСкладах.Регистратор КАК ПриходныйДокумент |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО РеализацияТоваровУслугТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И РеализацияТоваровУслугТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &ТекущийДокумент | И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | И (ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | ИЛИ ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ОприходованиеТоваров)"; Выборка = Запрос.Выполнить().Выбрать(); ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("СравнениеЦенЗакупкаПродажа"); // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.ТекстЗаголовка = "Сравнение цен закупка\продажа"; ТабДокумент.Вывести(ОбластьМакета); ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабДокумент.Вывести(ОбластьШапка); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); Пока Выборка.Следующий() Цикл ЗаполнитьЗначенияСвойств(ОбластьСтрока,Выборка); ТабДокумент.Вывести(ОбластьСтрока); КонецЦикла; Возврат ТабДокумент; КонецФункции Печать() ; |
|||
13
Wobland
18.11.13
✎
18:29
|
не в той платформе редактировал?
|
|||
14
FREEZZEE
18.11.13
✎
23:02
|
я свой листинг скинул другу, он ее подредактировал. Но выходит, что платформы разные. Но что странно, если бы он в 8.1 делал, то оно переконвертировалась бы, а тут я теряюсь в догадках.
|
|||
15
FREEZZEE
18.11.13
✎
23:10
|
>>получение данных из документа на экзамене автоматически приводит к провалу
------------------- хотелось бы проконсультироваться и по этому поводу. А разве при создании обыкновенной ВПФ, не всё ли равно откуда мы берем данные? мы же не создаем новый документ ил что то подобное, обращаясь к документам, а не к регистрам? Тогда да, систему бы это подгружало. Или я не прав? |
|||
16
FREEZZEE
18.11.13
✎
23:19
|
в последнем листинге по факту, что то я переначудил! Удалось таки её подключить, но результат неутешительный.
|
|||
17
Wobland
19.11.13
✎
06:11
|
(16) каких-то товаров нет, какие-то двоятся?
|
|||
18
anaed
19.11.13
✎
07:20
|
(16)
1) В РН Партии товаров ДокументОприходования заполняется? 2) замени внутренее соединение по номенклатуре и серии на левое соединения по регистратор=ссылка, номенклатуре и серии, и убери все условия кроме ссылка=&текущийдокумент |
|||
19
FREEZZEE
19.11.13
✎
07:39
|
по второму коду, таблица вообще не заполняется. Сейчас бью я старый код, который выкладывал. Просто для меня сейчас главное, что бы работало, а вот каааак это будет работать, быстро или медленно, это уже второй вопрос. Не могу понять, откуда взять количество товара и сумму? ну сумму, я так понимаю умножением посчитали и всё? а кол-во? с регистра оприходованных товаров?
// Функция формирует табличный документ с печатной формой накладной, // разработанной методистами // // Возвращаемое значение: // Табличный документ - печатная форма накладной // Функция Печать() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.СсылкаНаОбъект); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.СерияНоменклатуры, | РеализацияТоваровУслугТовары.Цена, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.Количество = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество | КОНЕЦ КАК ЦенаПоступления, | ПартииТоваровНаСкладах.Регистратор КАК ПриходныйДокумент |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО РеализацияТоваровУслугТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И РеализацияТоваровУслугТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &ТекущийДокумент | И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | И (ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | ИЛИ ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ОприходованиеТоваров)"; ЗапросТовары = Запрос.Выполнить().Выгрузить(); ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("СравнениеЦенЗакупкаПродажа"); // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.ТекстЗаголовка = "Сравнение цен закупка\продажа"; ТабДокумент.Вывести(ОбластьМакета); ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабДокумент.Вывести(ОбластьШапка); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); СчСтрок = 0; ДЛЯ КАЖДОГО СтрокаТовара ИЗ ЗапросТовары ЦИКЛ СчСтрок = СчСтрок+1; ОбластьСтрока.Параметры.НомерСтроки = СчСтрок; ОбластьСтрока.Параметры.Артикул = СтрокаТовара.Номенклатура.Артикул; ОбластьСтрока.Параметры.Товар = СтрокаТовара.Номенклатура.Наименование; ОбластьСтрока.Параметры.Серия = СтрокаТовара.СерияНоменклатуры.Наименование; //ОбластьСтрока.Параметры.Количество = СсылкаНаОбъект.Количество; ОбластьСтрока.Параметры.Цена = СтрокаТовара.Цена; ОбластьСтрока.Параметры.ЦенаПоступления = СтрокаТовара.ЦенаПоступления; //ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма; //ОбластьСтрока.Параметры.СуммаПродажи = СтрокаТовара.СуммаПродажи; ТабДокумент.Вывести(ОбластьСтрока); КонецЦикла; Возврат ТабДокумент; КонецФункции Печать() ; |
|||
20
FREEZZEE
19.11.13
✎
07:43
|
anaed, заполняется РН Товары на складах, в нем документы реализации. Но вызов этого документа, ничего не дает.
|
|||
21
Godofsin
19.11.13
✎
07:44
|
(19) Не пойму, зачем тебе таблица ТЧ документа? Делай выборку из регистра партий, там вся информация есть.
|
|||
22
Wobland
19.11.13
✎
07:45
|
(21) печатная форма у него
|
|||
23
Godofsin
19.11.13
✎
07:46
|
(22) ага, вчитался уже )
|
|||
24
FREEZZEE
19.11.13
✎
07:47
|
>>печатная форма у него
сарказм?) Научите, как правильно быть то >>Делай выборку из регистра партий как к нему обратиться? |
|||
25
anaed
19.11.13
✎
07:48
|
(20) РН Товары на складах и РН Партии товаров на складах несколько разные вещи.
|
|||
26
Godofsin
19.11.13
✎
07:51
|
|ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
|
|||
27
anaed
19.11.13
✎
07:54
|
(24) Для определения возможности решить твою задачу правильно нужен ответ какой метод списания партий используется в программе? Если не понимаешь что это, ответь на вопрос в (18) - документоприходования в РН ПартииТоваровНаСкладах заполнен?
|
|||
28
FREEZZEE
19.11.13
✎
09:29
|
Списание по ФИФО. Сначала списываются собственные, далее принятые. Более, никакие пункты не отражены.
|
|||
29
FREEZZEE
19.11.13
✎
09:31
|
Документ оприходования заполнен.
|
|||
30
anaed
19.11.13
✎
09:31
|
(28)ндс в партиях есть?
|
|||
31
FREEZZEE
19.11.13
✎
09:45
|
(30) Товар поступает без НДС, при продаже НДС учитывается.
|
|||
32
FREEZZEE
19.11.13
✎
09:52
|
написал запрос в таком виде, но значение он берет общее по складу, а нужно при реализации.
Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.СерияНоменклатуры, | РеализацияТоваровУслугТовары.Цена, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.Количество = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество | КОНЕЦ КАК ЦенаПоступления, | ПартииТоваровНаСкладах.Регистратор КАК ПриходныйДокумент, | ПартииТоваровНаСкладах.Количество |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО РеализацияТоваровУслугТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И РеализацияТоваровУслугТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &ТекущийДокумент | И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | И (ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | ИЛИ ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ОприходованиеТоваров)"; |
|||
33
FREEZZEE
19.11.13
✎
09:56
|
вот, исправил, всё работает, осталось теперь только сумму рассчитать:
Функция Печать() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.СсылкаНаОбъект); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.СерияНоменклатуры, | РеализацияТоваровУслугТовары.Цена, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.Количество = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость / ПартииТоваровНаСкладах.Количество | КОНЕЦ КАК ЦенаПоступления, | ПартииТоваровНаСкладах.Регистратор КАК ПриходныйДокумент, | РеализацияТоваровУслугТовары.Количество |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ПО РеализацияТоваровУслугТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура | И РеализацияТоваровУслугТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &ТекущийДокумент | И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | И (ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | ИЛИ ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ОприходованиеТоваров)"; |
|||
34
Wobland
19.11.13
✎
10:04
|
левое, говорят тебе
|
|||
35
anaed
19.11.13
✎
10:17
|
(33) а если проданный товар куплен по авансовому отчету ему в печатную форму путь закрыт?
|
|||
36
FREEZZEE
19.11.13
✎
11:06
|
(34) Wobland, почитал, понял, исправил.
(35) anaed, я не понимаю вас. Я ВПФ прикрутил только к документу РТиУ. В авансов отчете отражены у нас только внутренние расходы и выдачи подотчетному лицу, продаж товара там клиенту нет. Опишите суть возможной проблемы подробнее, пожалуйста. |
|||
37
anaed
19.11.13
✎
12:02
|
(36) если в документе РТиУ будет товар который оприходован только документом АвансовыйОтчет, либо любым другим по которому товар может оприходоваться то условие | И (ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
| ИЛИ ПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.ОприходованиеТоваров)"; отсекет его, то есть в результат запроса эта номенклатура не попадет. 1) Условий кроме РТиУ.Ссылка = &ТекущийДокумент быть не должно. 2) Соединяться по Партии.Регистратор = РТиУ.Ссылка, и далее по номенклатура, характеристика, серия. Документом прихода будет Партии.ДокументОприходования, а не регистратор. 3) На тот случай если продается товар нескольких партий сумму продаж нужно считать через ртиу.товары.цена*партии.количество, а суммойзакупа в таком случае будет партии.стоимость, цена закупа соответсвенно партии.стоимость/партии.количество. |
|||
38
FREEZZEE
19.11.13
✎
12:38
|
(37) Понял, доходчиво объяснили. Спасибо большое!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |