Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Деление на валюты          
sanek6662009@gma... Подменю пользователя
сообщение 11.10.18, 14:40
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 52
Из: Днепр
Спасибо сказали: 3 раз
Рейтинг: 0

Всем доброго времени суток, столкнулся с такой ситуацией:
Руководство хочет работать с двумя валютами одновременно (грн. и usd), чтобы документы были в валюте товара.
Имея на руках типовую УТ 10.3 и поковыряв её понял что штатными средствами этого не сделать.
Штатная УТ может создать, сохранить и распечатать документ в валюте договора контрагента.

Но задача есть задача....

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

КонецФункции

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

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    дО = выбЗаказ.ПолучитьОбъект();
    тз = дО.Товары.Выгрузить();
    тз.Колонки.Добавить("Валюта");
    тз.Колонки.Добавить("ЦенаВал");
    тз.Колонки.Добавить("СуммаВал");
    тз.Колонки.Добавить("Договор");
    
    Для каждого стр из тз Цикл
        стрЦены = ПолучитьСтрЦЕны(стр.Номенклатура,дО.ТипЦен,дО.Дата);
        стр.Валюта = стрЦены.Валюта;
        стр.ЦенаВал = стрЦены.Цена;
        стр.СуммаВал = стр.Цена *  стр.Количество;
        
        стр.Договор = НайтиДоговорКОнтрагента(дО.Контрагент,стр.Валюта);
        
    КонецЦикла;    
    
    тзНаФОрме = тз;
    ЭлементыФОрмы.тзНаФОрме.СоздатьКолонки();
    
    дО_грн = Документы.ЗаказПокупателя.СоздатьДокумент();    
    ЗаполнитьЗначенияСвойств(дО_грн,дО,,"Номер");
    дО_грн.ДоговорКонтрагента = НайтиДоговорКОнтрагента(дО_грн.Контрагент,Справочники.Валюты.НайтиПоКоду("980"));
    Для каждого стр из  тз Цикл
        Если стр.Валюта.код = "980" Тогда
        НоваяСтрока = дО_грн.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСТрока,стр);
        НоваяСтрока.ЦЕна = стр.ЦЕнаВал;
        НоваяСтрока.Сумма = стр.СуммаВал;
        КонецЕсли;
    КонецЦикла;
    ф = дО_грн.ПолучитьФорму("ФормаДокумента");
    ф.Открыть();
    
    //дО_грн = Документы.ЗаказПокупателя.СоздатьДокумент();
    //дО_грн.ДоговорКонтрагента = НайтиДоговорКОнтрагента(дО_грн.Контрагент,Справочники.Валюты.НайтиПоКоду("980"));
    //ЗаполнитьЗначенияСвойств(дО_грн,дО,,"Номер");
    дО.Товары.Очистить();
    Для каждого стр из  тз Цикл
        Если стр.Валюта.код = "840" Тогда
        НоваяСтрока = дО.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСТрока,стр);
        НоваяСтрока.ЦЕна = стр.ЦЕнаВал;
        НоваяСтрока.Сумма = стр.СуммаВал;
        КонецЕсли;
    КонецЦикла;
    ф = дО.ПолучитьФорму("ФормаДокумента");
    ф.Открыть();
    
КонецПроцедуры


тоесть имея у контрагента 2 договора, в данном случае гривна и доллар, при нажатии на кнопку обработка уберет из документа позиции, которые не соответсвуют валюте договора и создаст документ с ними в нужной валюте.

тестировалась на УТ 10.3 (обычное приложение)
думаю для УТП и УПП тоже подойдёт. На других - тестите, главное условие : наличие у контрагента двух договоров с разными валютами и коды валют должны братся из класификатора, в противном случае прийдется немного допилить.

а вот собственно и обработка, пароль стандартный: Прикрепленный файл  DelenieZakazovPokupatelya.zip ( 7,81 килобайт ) Кол-во скачиваний: 22



Сообщение отредактировал Vofka - 11.10.18, 16:37

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 1:58
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!