|   |   | 
| 
 | Внешняя печатная форма. | ☑ | ||
|---|---|---|---|---|
| 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) Понял, доходчиво объяснили. Спасибо большое!     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |