• Yamaha motors
  • Subaru WRX STI
  • Баба Клава!
  • Светодиодные системы освещения

Печать

Примеры программирования 1С 8.1

// Пересчитаем сумму документа в ВалютуУправленческогоУчета ----->
ВалУпрУч = Константы.ВалютаУправленческогоУчета.Получить();
ВалДокумента = ЭтотОбъект.ВалютаДокумента;
ДанныеОВалУпрУчета = МодульВалютногоУчета.ПолучитьКурсВалюты

(ВалУпрУч, ЭтотОбъект.Дата);
ДанныеОВалДокумента = МодульВалютногоУчета.ПолучитьКурсВалюты

(ВалДокумента, ЭтотОбъект.Дата);

Сообщить(ВалУпрУч);
Сообщить(ВалДокумента);
Сообщить(ДанныеОВалУпрУчета.
Курс);
Сообщить(ДанныеОВалДокумента.Курс);

СуммДок = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту

(ЭтотОбъект.СуммаДокумента,
ВалДокумента,
ВалУпрУч,
ДанныеОВалДокумента.Курс,
ДанныеОВалУпрУчета.Курс,
ДанныеОВалДокумента.Кратность,
ДанныеОВалУпрУчета.Кратность)
;

 

 

// Проверяем кто открывает форму ----------------------------------->
Если РольДоступна("Кладовщик") ИЛИ РольДоступна("ПолныеПрава") Тогда
Сообщить("Лимиты не контролируются!");
ПолучитьСуммуТовараВРезервеПоКлиенту(ЭтотОбъект.Контрагент);

ЭтаФорма.ЭлементыФормы.СуммаЛимитаОбщая.Доступность = Истина;
ЭтаФорма.ЭлементыФормы.ВалютаДокумента.Доступность = Истина;

Возврат Отказ; // Не контролировать Лимиты
КонецЕсли;

// Заполнение шапки Нового документа
Если ЭтоНовый() Тогда

ТекПользователь = глЗначениеПеременной("глТекущийПользователь");
ЭтаФорма.Ответственный = ТекПользователь;
ЭтаФорма.Подразделение = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию

(ТекПользователь, "ОсновноеПодразделение");
ЭтаФорма.ВалютаДокумента = Константы.ВалютаУправленческогоУчета.Получить();
КонецЕсли;

 

 

// Запрос к базе --------------------------------------------------->
// Сальдо расчетов по договорам клиентов на дату документа

ЗапросДолгПоДог = Новый Запрос;
ЗапросДолгПоДог.УстановитьПараметр("ДатаКонца" , КонецДня(Дата));
// Если контрагент входит в Холдинг(Группу по нашей извращенной классификации)  
// то в запрос подставляем его группу

Если Строка(ЭтотОбъект.Контрагент.Родитель) = "ПОКУПАТЕЛИ" Тогда
ЗапросДолгПоДог.УстановитьПараметр("Контрагент" , ЭтотОбъект.Контрагент);
Иначе
ЗапросДолгПоДог.УстановитьПараметр("Контрагент" , ЭтотОбъект.Контрагент.Родитель);
КонецЕсли;

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

;

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

// Подсчитываем общую сумму дебеторки контрагенту на дату документа
СуммаДебеторки = 0;
Пока Скелет.Следующий() Цикл
Сумма = ?(Скелет.СуммаВВалютеУпрУчета = NULL,0,Скелет.СуммаВВалютеУпрУчета);
СуммаДебеторки = СуммаДебеторки + Сумма;
КонецЦикла;

 

// ----------------------------------------------------------------------->

Функция ПолучитьСуммуТовараВРезервеПоКлиенту(Контр)

// Запрос к базе ====================================================================
// Получить сумму зарезервированного товара для клиента на дату документа
// берутся суммы заказов целиком!

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НаДату" , КонецДня(Дата));
Запрос.УстановитьПараметр("Контр" , Контр);
Запрос.УстановитьПараметр("ТекущийДокумент" , ЭтотОбъект.Ссылка);

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ВложенныйЗапрос.СуммаДокумента КАК СуммаРезерва,
|    ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
|ИЗ
|    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|            ЗаказПокупателя.Ссылка КАК Ссылка,
|            ЗаказПокупателя.СуммаДокумента КАК СуммаДокумента
|        ИЗ
|            Документ.ЗаказПокупателя КАК ЗаказПокупателя) КАК ВложенныйЗапрос
|        ПО ТоварыВРезервеНаСкладахОстатки.ДокументРезерва.Ссылка = ВложенныйЗапрос.Ссылка
|ГДЕ
|    ТоварыВРезервеНаСкладахОстатки.ДокументРезерва.Контрагент = &Контр
|    И ТоварыВРезервеНаСкладахОстатки.ДокументРезерва.Ссылка <> &ТекущийДокумент
|
|СГРУППИРОВАТЬ ПО
|    ТоварыВРезервеНаСкладахОстатки.ДокументРезерва,
|    ВложенныйЗапрос.СуммаДокумента"

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

ОчиститьСообщения();
Сообщить("_____________________________________________________________");
Сообщить("Товар в резервах под клиента " + Строка(Контр) + "   ->");
СуммаРезерва    = 0;
Пока Скелет.Следующий() Цикл
// Пересчитаем сумму документа в USD
мВалютаУправленческогоУчета    = Константы.ВалютаУправленческогоУчета.Получить();
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Если Скелет.ДокументРезерва.ВалютаДокумента <> мВалютаУправленческогоУчета Тогда
Курс     = МодульВалютногоУчета.ПолучитьКурсВалюты(мВалютаУправленческогоУчета, ЭтотОбъект.Дата);
СуммРезДок = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Скелет.СуммаРезерва,
мВалютаРегламентированногоУчета,
мВалютаУправленческогоУчета,
1, Курс.Курс);
Иначе
СуммРезДок    = Скелет.СуммаРезерва;
КонецЕсли;
СуммаРезерва     = СуммаРезерва + СуммРезДок;
Сообщить(Строка(СкелетокументРезерва) + "  -> " + Строка(СуммРезДок));
КонецЦикла;

Сообщить("Итого :                                         " + Строка(СуммаРезерва));
Сообщить("_____________________________________________________________");



Возврат СуммаРезерва;

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

// -----------------------------------------------------------------------<

 

// ----------------------------------------------------------------------->

// Обработка проведения (находится в основном модуле документа) записывает данные в регист

Процедура ОбработкаПроведения(Отказ, Режим)

Если СуммаДокумента < СуммаЛимитаОбщая Тогда
Для Каждого ТекСтрокаКонтрагенты Из Контрагенты Цикл
// регистр ЛимитыДебеторскойЗадолженности
Движение = Движения.ЛимитыДебеторскойЗадолженности.Добавить();
Движение.Период = Дата;
Движение.Контрагент = ТекСтрокаКонтрагенты.Контрагент;
Движение.СуммаЛимита = ТекСтрокаКонтрагенты.СуммаЛимитаКонтрагента;
Движение.СуммаДокумента = СуммаДокумента;
Движение.СуммаЛимитаОбщая = СуммаЛимитаОбщая;
Движение.ВалютаДокумента = ВалютаДокумента;
Движение.Документ = Номер;
КонецЦикла;
Иначе
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Истина);
Предупреждение("Превышение Общего лимита!",10,"Предупреждение");
Отказ = Истина;
Возврат;
КонецЕсли;

КонецПроцедуры

// -----------------------------------------------------------------------<