8.х Обработка создания пко и рко

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ppkmlite, 9 ноя 2014.

  1. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, вопрос такой. Делаю обработку которая бы создавала приходный и расходный кассовые ордера. На форме две кассы,при выборе касс выходит на форму остаток,если он отрицательный у организации 1,то создается приходный на организацию 1, соответственно расходный на организацию 2. Реквизиты должны проставляться те которые на форме выбраны(договор,контрагент).

    Эти документы нужно выводить списком на форму. Может кто сталкивался, подскажите. Это запросом нужно выводить?Как связать процедуру открытия кассы с созданием документа?

    Код:
    //Поле выбора кассы
    Процедура Касса3НачалоВыбора(Элемент, СтандартнаяОбработка)
        СтандартнаяОбработка=Ложь;
        Форма=Справочники.Кассы.ПолучитьФормуВыбора(,Элемент,);
        Форма.Отбор.Владелец.Установить(ОрганизацияКому, Истина);
        Форма.ЗакрыватьПриВыборе = Истина;
     
        Если ЗначениеЗаполнено(Элемент.Значение) Тогда
         
            Форма.ПараметрТекущаяСтрока=Элемент.Значение;
         
        КонецЕсли;
     
        Форма.РежимВыбора=Истина;
     
        Форма.Открыть();
    КонецПроцедуры
    Процедура ОбработкаВыбора1(ЗначениеВыбора, Источник)
        Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.Кассы") Тогда
            Строка = Касса3.Найти(ЗначениеВыбора,"Кассы");
            Если Строка = Неопределено Тогда
                Строка = Касса3.Добавить();
                Строка.Кассы = ЗначениеВыбора;
            Иначе
            КонецЕсли;
        КонецЕсли;
     
    КонецПроцедуры
    Я так понимаю, делать на кнопке сформировать.Создать новую команду, а вот какие процедуры нужны,затрудняюсь.
    Последнее редактирование модератором: 10 ноя 2014
  2. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Сделала функцию на создание приходного и расходного ордера.
    Код:
    Функция СоздаетНовыеДокументы() Экспорт
       Если СуммаДок < 0 Тогда
       НовыйПКО = Документы.Приходныйкассовыйордер.СоздатьДокумент();
       НовыйПКО.Дата = ТекущаяДата();
       НовыйПКО.ОтражатьВУправленческомУчете = Истина;
       НовыйПКО.Оплачено=Истина;
       НовыйПКО.Организация = ОрганизацияОт.Ссылка;
       НОвыйПКО.Контрагент = КонтрагентОт.Ссылка;
      НовыйПКО.Касса=Касса1.Ссылка;
       НовыйПКО.СуммаДокумента = Надпись1;
       НовыйПКО.Записать();
       Возврат НовыйПКО;
       КонецЕсли;
    КонецФункции
    Процедура Кнопка1(Элемент)
       ТабДок = СоздаетНовыеДокументы();
       Новаястрока = Многодокументов.Добавить();
       Новаястрока.Документ = ТабДок;
    КонецПроцедуры
    Но не выводит документы. Что я делаю не так?!
    Мне нужно чтобы вводились документы, если остаток по кассе отрицательный. На данный момент в запросе выводится любой остаток.
    Если КакаяНибудьПеременная < 0 Тогда
    моя функция
    КонецЕсли.
    Выходит сообщение "операция сравнения на больше меньше" допустиы долько для значений совпадающих примитивных типов.
    Последнее редактирование модератором: 10 ноя 2014
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    /vanga mode on/
    не выводит, потому что типы значений разные
    /vanga mode off/

    Каким образом происходит запрос остатков по всем кассам и как при этом сохраняются значения остатков?
    Что будет, если пользователь нажмет кнопку несколько раз?
  4. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Запрос остатков

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    Хорошо.
    Каким образом теперь из Надпись1 брать значение?

    Лично я сделал бы ТЧ, в которую сливал бы остатки по всем организациям и кассам через нажатие на кнопку.
    Далее уже проверял бы комбинацию организация+касса на нужное значение остатка по кассе и формировал бы нужные документы.
  6. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Вы меня извините, я новичек в 1с. У меня есть табличная часть,процедура на кнопке

    Код:
    Процедура Кнопка1(Элемент)
       ТабДок = СоздаетНовыеДокументы();
       Новаястрока = Многодокументов.Добавить();
       Новаястрока.Документ = ТабДок;
    КонецПроцедуры
    Создаю документ
    Функция СоздаетНовыеДокументы() Экспорт
       //Если СуммаДок < 0 Тогда
       НовыйПКО = Документы.Приходныйкассовыйордер.СоздатьДокумент();
       НовыйПКО.Дата = ТекущаяДата();
       НовыйПКО.ОтражатьВУправленческомУчете = Истина;
       НовыйПКО.Оплачено=Истина;
       НовыйПКО.Организация = ОрганизацияОт.Ссылка;
       НОвыйПКО.Контрагент = КонтрагентОт.Ссылка;
      НовыйПКО.Касса=Касса1.Ссылка;
       НовыйПКО.СуммаДокумента = Надпись1;
       НовыйПКО.Записать();
       Возврат НовыйПКО;
       //КонецЕсли;
    КонецФункции
    "Лично я сделал бы ТЧ, в которую сливал бы остатки по всем организациям и кассам через нажатие на кнопку."-объясните,я не совсем поняла
    Процедура Кнопка1(Элемент)
    Остаток = ОстатокПоКассе() ;
    если остаток > 0 Тогда ---вот так, объясните пожалуйста
    ТабДок = СоздаетНовыеДокументы();
    Новаястрока = Многодокументов.Добавить();
    Новаястрока.Документ = ТабДок;
    КонецПроцедуры
    Последнее редактирование модератором: 10 ноя 2014
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    Код:
    "ВЫБРАТЬ
    | ДенежныеСредстваОстатки.СуммаОстаток,
    | ДенежныеСредстваОстатки.БанковскийСчетКасса,
    | ДенежныеСредстваОстатки.Организация
    |ИЗ
    | РегистрНакопления.ДенежныеСредства.Остатки(&Период, ) КАК ДенежныеСредстваОстатки
    РезультатТЗ = Запрос.Выполнить.Выгрузить();
    Ищем строку в ТЗ по комбинации Организация + Касса, Проверяем в ней значение СуммаОстаток.
    Если <Значение_СуммаОстаток>  > 0 Тогда
    ТабДок = СоздаетНовыеДокументы();
    Новаястрока = Многодокументов.Добавить();
    Новаястрока.Документ = ТабДок;
    КонецЕсли;
    Синтаксис-помощник в данном случае поможет и обратите внимание на типы значений - очень помогает в процессе отладки кода.
    Последнее редактирование модератором: 10 ноя 2014
  8. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    В том дело, что не могу разобраться с типами значений, запуталась совсем. Выходит теперь ошибка, что операции сравнения на больше меньше только для значений совпадающих примитивных типов. То есть мне нужно узнать отрицательный остаток или нет, если да, то создать пко. Мне нужно, если я правильно понимаю, вернуть число и его сравнить??Помогите,пожалуйста
    Процедура Касса1ПриИзменении(Элемент)
    СуммаДок = ОстатокПоКассе();
    ост = СуммаДок;
    КонецПроцедуры

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

    Вложения:

  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    Пока вы не разберетесь с типами данных у вас ничего не получится. Все, что необходимо для решения задачи можно прочитать в С-П. Обратитесь и всегда сначала обращайтесь, пожалуйста, к нему.
    Я вам не смогу через форум передать понимание процессов, участвующих в вашей обработке.

    Если задача не решается сразу целиком, разбейте ее на подзадачи и решите каждую в отдельности, а потом соберите весь функционал в один.
    Последнее редактирование: 11 ноя 2014
  10. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Я прошла отладчиком. У меня теперь возникает вопрос, каким методом(да вообще каким способом) вывести документы на форму, так как они у меня создаются(если я захожу в список документов из меню-документы-касса...), а на форму не выводит
    Вот функция
    Код:
    Процедура СоздаетНовыеДокументы(СуммапоКассе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);
    КонецПроцедуры
    Последнее редактирование модератором: 11 ноя 2014
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    Эх, так и не разобрались с типами данных.....
    Код:
    Новаястрока = Многодокументов.Добавить();
    Новаястрока.Документ = НовыйПКО.ссылка;
    Новаястрока = Многодокументов.Добавить();
    Новаястрока.Документ = НовыйРКО.Ссылка;
    при условии, что тип данных реквизита ТЧ "Документ" обработки имеет составной тип данных и включает в себя типы:
    ДокументСсылка.ПриходныйКассовыйОрдер
    ДокументСсылка.РасходныйКассовыйОрдер
  12. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Спасибо за помощь, и еще очень глупый вопрос

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

    НовыйПКО.СчетОрганизации = как мне обратиться к конкретной позиции, к конкретному счету?!(типз значения СправочникСсылка.БанковскиеСчета)
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    Сделать реквизит формы/обработки вывести на форму, при начале выбора накладывать отбор по организации.
  14. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.576
    Симпатии:
    717
    Баллы:
    204
    Да проще завести еще один реквизит обработки "ДатаДокументов" и ее использовать. Если дата создания документа зависит от чего-то и изменяется динамически, то используйте операции + и - для даты и числом указывайте количество секунд, например:
    ЗначениеДаты - 86400 сдвинет на сутки назад ЗначениеДаты.

Поделиться этой страницей