Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 01:05

Обработка для создания пко и рко в зависимости от наличия отриц остатка в кассе

Автор ppkmlite, 09 ноя 2014, 10:35

0 Пользователей и 1 гость просматривают эту тему.

дфтын


sertak

На самом деле весь описанный код, эмммм... неоптимален, но на чем-то учиться надо.
Добавлено: 10 ноя 2014, 16:40


Цитата: дфтын от 10 ноя 2014, 16:38
Именно это я и говорил
Безусловно. Просто если человек учится, он часто спотыкается на мелочах, которые для более опытных очевидны по умолчанию. Типа передача/возврат параметра там и т.д. Лучше разжевать.

ppkmlite

Прикрепила форму. Вообщем получилось как то так.

Процедура Касса1ПриИзменении(Элемент)
   СуммаДок = ОстатокПоКассе();
   ост = СуммаДок;
КонецПроцедуры

Процедура СоздаетНовыеДокументы() Экспорт
   Если суммадок < 0 Тогда
      НовыйПКО = Документы.Приходныйкассовыйордер.СоздатьДокумент();
      НовыйПКО.Дата = ТекущаяДата();
      НовыйПКО.ОтражатьВУправленческомУчете = Истина;
      НовыйПКО.Оплачено=Истина;
      НовыйПКО.Организация = ОрганизацияОт.Ссылка;
      НОвыйПКО.Контрагент = КонтрагентОт.Ссылка;
       НовыйПКО.Касса=Касса1.Ссылка;
      НовыйПКО.СуммаДокумента = суммадок;
      Новаяпеременная = НовыйПКО.РасшифровкаПлатежа.Добавить();
      новаяпеременная.Сделка();
      //Для 
         НовыйПКО.Записать();
      Новаястрока = Многодокументов.Добавить();
      Новаястрока.Документ = НовыйПКО;
      
         КонецЕсли;

Выходит теперь ошибка, что операции сравнения на больше меньше только для значений совпадающих примитивных типов. То есть мне нужно узнать отрицательный остаток или нет, если да, то создать пко. Мне нужно, если я правильно понимаю, вернуть число и его сравнить??Помогите,пожалуйста
Добавлено: 10 ноя 2014, 20:33


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

sertak

СуммаДок - это реквизит типа число?
Не вижу, откуда вызывается процедура Процедура СоздаетНовыеДокументы(). Необходимо проверить, что находится в реквизите СуммаДок на момент ее вызова.

П.С. ост - это локальная переменная Функции ОстатокПоКассе(), поэтому в обработчике Касса1ПриИзменении(..) не нужно писать  ост = СуммаДок, ведь в СуммаДок уже занесено возвращенное функцией ОстатокПоКассе() значение.

Добавлено: 10 ноя 2014, 22:32


Кстати: Функция  ОстатокПоКассе()  Экспорт находится в модуле обработки или формы обработки?

(разговаривает сам с собой: К чему бы этот Экспорт?)

ppkmlite

Функция находится на форме обработки, форма управляемая.
Я прошла отладчиком. У меня теперь возникает вопрос, каким методом(да вообще каким способом) вывести документы на форму, так как они у меня создаются(если я захожу в список документов из меню-документы-касса...), а на форму не выводит
Вот функция
Процедура СоздаетНовыеДокументы(СуммапоКассе1,СуммаПоКассе2) Экспорт
   Если СуммапоКассе2 < 0 Тогда
      Если  СуммапоКассе1 > 0 Тогда
         НовыйПКО = Документы.Приходныйкассовыйордер.СоздатьДокумент();
         НовыйПКО.Дата = ТекущаяДата();
         НовыйПКО.ОтражатьВУправленческомУчете = Истина;
         НовыйПКО.Оплачено=Истина;
         НовыйПКО.Организация = ОрганизацияКому.Ссылка;
         НовыйПКО.ДоговорКонтрагента = Договор2;
         НОвыйПКО.Контрагент = КонтрагентКому.Ссылка;
         НовыйПКО.Касса=Касса3;
         НовыйПКО.СуммаДокумента = СуммаПоКассе2*(-1);
         НОВАЯПЕРЕМЕННАЯ = НОВЫЙПКО.РасшифровкаПлатежа.Добавить();
         новаяПеременная.ДоговорКонтрагента=Договор2;
         //новаяПеременная.Сделка();
         //новаяПеременная.КурсВзаиморасчетов();
         новаяПеременная.СуммаПлатежа=СуммаПоКассе2;
         //новаяПеременная.КратностьВзаиморасчетов();
         //новаяПеременная.СуммаВзаиморасчетов();
         новаяПеременная.СтавкаНДС = 0;
         новаяПеременная.СуммаНДС = 0;
         //новаяПеременная.СтатьяДвиженияДенежныхСредств = "ОплатаПокупателя";
         //новаяПеременная.ДокументПланированияПлатежа();
         //новаяПеременная.Проект();
         //новаяПеременная.КурсВзаиморасчетовПлан();
         //новаяПеременная.СуммаПлатежаПлан();
         //новаяПеременная.ДокументРасчетовСКонтрагентом();
         НовыйПКО.Записать();
         
         НовыйРКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
         НовыйРКО.Дата = ТекущаяДата();
         НовыйРКО.ОтражатьВУправленческомУчете = Истина;
         НовыйРКО.Оплачено=Истина;
         НовыйРКО.Организация = ОрганизацияОт.Ссылка;
         НОвыйРКО.Контрагент = КонтрагентОт.Ссылка;
         НовыйРКО.Касса=Касса1;
         НовыйРКО.СуммаДокумента = СуммаПоКассе2*(-1);
         нОВАЯпЕРЕМЕННАЯ1 = НОВЫЙРКО.РасшифровкаПлатежа.Добавить();
         новаяПеременная1.ДоговорКонтрагента = Договор1;
         //новаяПеременная1.Сделка();
         //новаяПеременная1.КурсВзаиморасчетов();
         //новаяПеременная1.СуммаПлатежа();
         //новаяПеременная1.КратностьВзаиморасчетов();
         //новаяПеременная1.СуммаВзаиморасчетов();
         //новаяПеременная1.СтавкаНДС();
         //новаяПеременная1.СуммаНДС();
         //новаяПеременная1.СтатьяДвиженияДенежныхСредств();
         //   новаяПеременная1.ДокументПланированияПлатежа();
         //   новаяПеременная1.Проект();
         //   новаяПеременная1.КурсВзаиморасчетовПлан();
         //   новаяПеременная1.СуммаПлатежаПлан();
         //   новаяПеременная1.ДокументРасчетовСКонтрагентом();
         НовыйРКО.Записать();
         Новаястрока = Многодокументов.Добавить();
         Новаястрока.Документ = НовыйПКО;
         Новаястрока.Документ = НовыйРКО;
         Вот здесь надо документ выводить??!!
      КонецЕсли;    
   КонецЕсли;
КонецПроцедуры
Сама кнопка
Процедура Кнопка1(Элемент)
   СоздаетНовыеДокументы(СуммаПоКассе1,СуммапоКассе2);
КонецПроцедуры

sertak

Новаястрока = Многодокументов.Добавить();
Новаястрока.Документ = НовыйПКО.Ссылка
Новаястрока = Многодокументов.Добавить();

Новаястрока.Документ = НовыйРКО.Ссылка;
Ну на коленке вот так получится.
МногоДокументов - это ТЧ, Документ - это реквизит ТЧ МногоДокументов с составным типом Прих.РКО, Расх.РКО.
Добавлено: 11 ноя 2014, 15:07


Многодокументов.Очистить() еще поставить надо перед заполнением.

ppkmlite

Новаястрока = Многодокументов.Добавить();
         Новаястрока.Документ = НовыйПКО;
Новаястрока = Многодокументов.Добавить();
         Новаястрока.Документ = НовыйРКО;
Документы выводятся,ура!! но не проводятся, они напроведенные!
Теперь нужно заполнить реквизиты, некоторые из них я беру на форме
НОвыйПКО.Контрагент = КонтрагентКому.Ссылка;
НовыйПКО.Касса=Касса3;
А есть реквизит, которого на форме нет, мне нужно его заполнить(чтобы он проставлялся в документе автомаически)-счет организациии.
НовыйПКО.СчетОрганизации = как мне обратиться к конкретной позиции, к конкретному счету?!(типз значения  СправочникСсылка.БанковскиеСчета)


ppkmlite

УТ, ОБЫЧНОЕ ПРИЛОЖЕНИЕ(НЕУПРАВЛЯЕМАЯ ФОРМА).
еЩЕ ВОПРОС,ЕСЛИ МНЕ НУЖНО ВЫВОДИТЬ ДОКУМЕНТЫ НА ЛЮБУЮ ДАТУ, А У МЕНЯ В ФУНКЦИИ
Функция СоздаетНовыеДокументы() Экспорт
....
НовыйПКО.Дата = ТекущаяДата();
.....
кАК МНЕ СДЕЛАТЬ,ЧТОБЫ МОЖНО БЫЛО НАПРИМЕР ВЫВОДИТЬ ДОКУМЕНТЫ ЗА ВЧЕРАШНИЙ ДЕНЬ?
ИЛИ ЭТО В ЗАПРОСЕ НУЖНО ПРЕДУСМОТРЕТЬ?
Добавлено: 11 ноя 2014, 21:26


тО ЕСТЬ  НА ФОРМЕ ВЫБИРАЮ ДАТУ , ОНА МОЖЕТ БЫТЬ МЕНЬШЕ ТЕКУЩЕЙ, И НА ЭТУ ДАТУ НУЖНО ВЫВЕСТИ ДОКУМЕНТЫ

sertak

ЦитироватькАК МНЕ СДЕЛАТЬ,ЧТОБЫ МОЖНО БЫЛО НАПРИМЕР ВЫВОДИТЬ ДОКУМЕНТЫ ЗА ВЧЕРАШНИЙ ДЕНЬ?
ИЛИ ЭТО В ЗАПРОСЕ НУЖНО ПРЕДУСМОТРЕТЬ?
В функции ОстатокПоКассе() у вас уже задается период: Запрос.УстановитьПараметр("Период", Период). Уже предусмотрено, т.е. так уже и должно работать.
Период - это реквизит, которому соответствует элемент на форме, в котором вы указываете дату.

А по поводу счета - найдите пример открытия формы выбора справочника, откройте справочник Банковские счета в обработчике нажатия кнопки.
Добавлено: 12 ноя 2014, 07:02


С периодом есть особенность: Остатки возвращаются на момент, на 1 секунду меньший, чем указанный период, т.е. при указании 12.11.2014 00:00:00 остатки снимутся на 11.11.2014 23:59:59, сооответственно, вы сами должны решить, какой момент времени более логично установить для новых документов:
НовыйПКО.Дата = ТекущаяДата(); //текущая дата
НовыйПКО.Дата = Период; //выбранная на форме дата
НовыйПКО.Дата = Период - 60*60*24; //на 1 сутки раньше, чем выбранная на форме дата

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск