[РЕШЕНО] Как связана счет-фактура выданная и реализация товаров и услуг в БП 3.0?

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 15 дек 2014.

  1. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Как связаны документы счет-фактура выданная и реализация товаров и услуг в БП 3.0?
    Единственная связка которую нашел - это у счет-фактуры есть табличная часть ДокументыОснования, вот там проходит эта связка. Но не может же реализация из этой ТЧ вытягивать данные?
  2. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    И еще не понятно как реализовано в документе реализация товаров и услуг выписывание счет-фактур выданных. Нашел на форме кнопку ВыписатьСчетФактуру.
    В модуле формы нашел код
    Код:
    &НаКлиенте
    Процедура ВыписатьСчетФактуру(Команда)
    
        РеализацияТоваровУслугФормыКлиент.ВыписатьСчетФактуру(ЭтаФорма, Команда);
        УправлениеФормой(ЭтаФорма);
       
        ЗапуститьПроверкуКонтрагентов(Элементы.НадписьСчетФактура);
       
    КонецПроцедуры
    
    Устанавливаю точку останова, но при создании пропускается этот модуль. Получается не он задействован в создании счет-фактуры. Как ее программно выписать?
    --- Объединение сообщений, 15 дек 2014 ---
    Но именно он должен формирвоать данный документ?
    Почему точка останова не срабатывает. Форма ФормаДокументаОбщая
  3. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Не срабатывает - значит не в режиме отладки запущен сервер 1С (нет возможности отлаживать серверные процедуры/функции).
    MyNameNoName нравится это.
  4. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Спасибо, 1С запущен в режиме отладчика, точка останова вот тут срабатывает:
    Код:
    Процедура ВыписатьСчетФактуру(Форма, Команда) Экспорт
       
        РеквизитыСФ = УчетНДСКлиент.СоздатьСчетФактуруВыданный(Форма);
       
        Если РеквизитыСФ <> Неопределено Тогда
            РеализацияТоваровУслугФормыКлиентСервер.ЗаполнитьТекстПроСчетФактуру(Форма, РеквизитыСФ);
        КонецЕсли;
           
    КонецПроцедуры
    
    А как из обработки получить два значения: форма и команда.
    upload_2014-12-15_13-22-36.png

    К чему мне обратиться чтобы получить эти значения? Сам документ я получаю что дальше делать?
    --- Объединение сообщений, 15 дек 2014 ---
    Что это вообще за тип значений?

    Вложения:

  5. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Видимо нужно открыть какую-то форму :). И команда из этой открытой формы будет доступна.
    Вы лучше посмотрите, как работают эти процедуры по созданию С/Ф
    MyNameNoName нравится это.
  6. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Вчера весь вечер разбирался. Оказалось, я не там ставил точку останова. Я ставил на форме ФормаДокументаОбщая, а нужно было на форме ФормаДокументаТовары.
    Код тот же:
    Код:
    Процедура ВыписатьСчетФактуру(Команда)
       
        РеализацияТоваровУслугФормыКлиент.ВыписатьСчетФактуру(ЭтаФорма, Команда);
        УправлениеФормой(ЭтаФорма);
       
        ЗапуститьПроверкуКонтрагентов(Элементы.НадписьСчетФактура);
       
    КонецПроцедуры
    Но я так и не смог разобраться как мне через обработку передать значения ЭтаФорма и Команда.
    Я получаю сам документ, скажем, пусть будет Док, как мне получить ЭтаФорма и Команда?
    Что это за значения?
  7. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Получаете документ, получаете форму. Команда скорее всего является командой объекта метаданных.
    MyNameNoName нравится это.
  8. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Ничего не получается.
    Код:
    &НаСервере
    Процедура СоздатьСчетФактуруВыданнуюНаРеализациюНаСервере()
        Запрос=Новый Запрос();
        Запрос.Текст=
        "ВЫБРАТЬ
        |    РеализацияТоваровУслуг.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НДСЗаписиКнигиПродаж КАК НДСЗаписиКнигиПродаж
        |        ПО РеализацияТоваровУслуг.Ссылка = НДСЗаписиКнигиПродаж.СчетФактура
        |ГДЕ
        |    РеализацияТоваровУслуг.Дата >= &НачалоМесяца
        |    И РеализацияТоваровУслуг.Дата <= &КонецМесяца
        |    И РеализацияТоваровУслуг.Проведен = &Проведен";
        Запрос.УстановитьПараметр("НачалоМесяца",НачалоМесяца(Объект.ПериодПроведенияСчетФактур));
        Запрос.УстановитьПараметр("КонецМесяца",КонецМесяца(Объект.ПериодПроведенияСчетФактур));
        Запрос.УстановитьПараметр("Проведен",Истина);
        ТаблицаРеализацийДляСчетФактур=Запрос.Выполнить().Выгрузить();
        Если ТаблицаРеализацийДляСчетФактур.Количество()=0 Тогда
            Сообщить("Отсутствуют реализации для создания счет-фактур");
        Иначе
            Для Каждого Элемент Из ТаблицаРеализацийДляСчетФактур Цикл
                СоздатьДокументСчетФактуруВыданную(Элемент.Ссылка);  
            КонецЦикла;
        КонецЕсли;
    КонецПроцедуры
    Данный код работает на сервере, так как запрос не доступен на клиенте.
    Теперь мне необходимо написать функцию СоздатьДокументСчетФактуруВыданную().
    Но мне ее нужно писать на клиенте, так как получение формы доступно только на клиенте. Но в тоже время из серверной функции на клиент я не могу перейти. Как быть?
    --- Объединение сообщений, 16 дек 2014 ---
    Я хотел программно создать этот документ:
    Код:
    Процедура СоздатьДокументСчетФактуруВыданную(Реализация,СтавкаНДС,НДС)
        СчетФактураВыданный=Документы.СчетФактураВыданный.СоздатьДокумент();
        СчетФактураВыданный.Дата=Реализация.Дата;
        СчетФактураВыданный.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643");
        СчетФактураВыданный.ВидСчетаФактуры=Перечисления.ВидСчетаФактурыВыставленного.НаРеализацию;
        СчетФактураВыданный.Выставлен=Истина;
        СчетФактураВыданный.ГлавныйБухгалтер=Реализация.ГлавныйБухгалтер;
        СчетФактураВыданный.ДатаВыставления=НачалоДня(СчетФактураВыданный.Дата);
        СчетФактураВыданный.ДоговорКонтрагента=Реализация.ДоговорКонтрагента;
        СчетФактураВыданный.ДокументОснование=Реализация;
        СчетФактураВыданный.КодВидаОперации="01";
        СчетФактураВыданный.КодСпособаВыставления=1;
        СчетФактураВыданный.Контрагент=Реализация.Контрагент;
        СчетФактураВыданный.НомерИсправляемогоКорректировочногоДокумента="0";
        СчетФактураВыданный.Организация=Реализация.Организация;
        СчетФактураВыданный.Руководитель=Реализация.Руководитель;
        СчетФактураВыданный.СтавкаНДС=СтавкаНДС;
        СчетФактураВыданный.СуммаДокумента=Реализация.СуммаДокумента;
        СчетФактураВыданный.СуммаНДСДокумента=НДС;
        Стр=СчетФактураВыданный.ДокументыОснования.Добавить();
        Стр.ДокументОснование=Реализация;
        Стр.УчитыватьИсправлениеИсходногоДокумента=Ложь;
        Попытка
            СчетФактураВыданный.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            СчетФактураВыданный.Записать();
        КонецПопытки;
    Но тут тоже столкнулся с проблемой что необходимо табличную часть документа Счет-фактура заполнять, не могу пока разобраться как.
    --- Объединение сообщений, 16 дек 2014 ---
    Поэтому все-таки лучше бы разобраться как программно создать документ.
    Последнее редактирование: 16 дек 2014
  9. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Документ создается на сервере (как объект), опять же. после создания "коретка исполняемого кода" возвращается на клиента автоматом. Что мешает создать клиентскую процедуру, вызвать в ней серверную функцию, и вернуть на клиента ссылку на объект ?
    MyNameNoName нравится это.
  10. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Господа-эксперты.
    А как вернуть с серверной части ссылку на объект в клиентскую часть?
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.568
    Симпатии:
    717
    Баллы:
    204
    Дык форма объекта существует на клиенте и сервере. Функция возвращающая ссылку вроде без проблем возвратит значение и на сторону клиента, но что с этой ссылкой делать на клиенте - не совсем понятно....
    MyNameNoName нравится это.
  12. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Объект доступен только на сервере, на клиенте - ссылка.
    Для чего вам на клиенте объект? Или может что-то перепутали ?
    MyNameNoName нравится это.
  13. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Я уже сам запутался. Получается мне необходимо вернуть ссылку на клиент, а затем уже клиентской процедуре передать необходимые параметры. Правда что-то на практике не получилось сегодня так.
  14. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Смотрите, чтобы изменить объект(элемент, документ) его нужно обработать на сервере и только на сервере. На клиенте данные ТОЛЬКО отображаются.
  15. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Не получается получить форму документа:
    Код:
    &НаСервере
    Функция ПолучитьСчетФактуру()
        Запрос=Новый Запрос();
        Запрос.Текст=
        "ВЫБРАТЬ
        |    РеализацияТоваровУслуг.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НДСЗаписиКнигиПродаж КАК НДСЗаписиКнигиПродаж
        |        ПО РеализацияТоваровУслуг.Ссылка = НДСЗаписиКнигиПродаж.СчетФактура
        |ГДЕ
        |    РеализацияТоваровУслуг.Дата >= &НачалоМесяца
        |    И РеализацияТоваровУслуг.Дата <= &КонецМесяца
        |    И РеализацияТоваровУслуг.Проведен = &Проведен";
        Запрос.УстановитьПараметр("НачалоМесяца",НачалоМесяца(Объект.ПериодПроведенияСчетФактур));
        Запрос.УстановитьПараметр("КонецМесяца",КонецМесяца(Объект.ПериодПроведенияСчетФактур));
        Запрос.УстановитьПараметр("Проведен",Истина);
        ТаблицаРеализацийДляСчетФактур=Запрос.Выполнить().Выгрузить();
        ТЗСчетФактур=Новый Массив;
        Для Каждого Элемент Из ТаблицаРеализацийДляСчетФактур Цикл
            ТЗСчетФактур.Добавить(Элемент.Ссылка);
        КонецЦикла;
        Возврат ТЗСчетФактур;
    КонецФункции
    
    &НаКлиенте
    Процедура СоздатьСчетФактуруВыданнуюНаРеализацию(Команда)
        Если ЗначениеЗаполнено(Объект.ПериодПроведенияСчетФактур)=Ложь Тогда
            Предупреждение("Укажите период проведения счет-фактур выданных");
            Возврат;
        КонецЕсли;
        ТЗ=ПолучитьСчетФактуру();
        Для Каждого Элемент Из ТЗ Цикл
            Док=Элемент;
            Форма=Док.ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");
            РеализацияТоваровУслугФормыКлиент.ВыписатьСчетФактуру(Форма, Форма.Команда);
        КонецЦикла;
    КонецПроцедуры
    
    {Форма.Форма.Форма(1021)}: Метод объекта не обнаружен (ПолучитьФорму)
    Форма=Док.ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");
    Если код пишу вот так:
    Форма=ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары",,Док,,,);
    то форму получаю, но не конкретно этого объекта.
  16. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Зачем вам форма????? Вы ее открыть хотите ????????????????????????????????????????????????
    --- Объединение сообщений, 18 дек 2014 ---
    Элемент - это элемент формы, кнопка, поле ввода и т.п. ЭЛЕМЕНТ НЕ ИМЕЕТ ФОРМУ!!!!!!!!!!!!!!!!!
  17. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Большое спасибо, все получилось! Много времени на эту элементарщину потратил, но нашел решение. Спасибо.
  18. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Ну как бы дьявол кроется в деталях :)
  19. AlexHorse
    Offline

    AlexHorse

    Регистрация:
    16 май 2015
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Меня сейчас разорвёт от непонимания - как Вы это победили??
    Бьюсь три часа над подобной задачей - написал внешнюю обработку для загрузки документов реализации по внешним данным, теперь хочу добавить автоматическое формирование счетов фактур на основании имеющихся документов реализации.
    КАК мне из обработки передать форму проведённого документа в общую процедуру
    РеализацияТоваровУслугФормыКлиент.ВыписатьСчетФактуру(Форма, Форма.Команда) ???
    Проблемы с получением формы абсолютно такие же, как и у топикстартера...
    --- Объединение сообщений, 16 май 2015 ---
    Вот совсем не понял - что значит Зачем? Форму требует процедура ВыписатьСчетФактуру(ЭтаФорма, Команда) из общего модуля РеализацияТоваровУслугФормыКлиент . Значит надо её передать, а перед этим каким то макаром получить? Я совсем не понимаю каким... Помогите, плиз.
    Последнее редактирование: 16 май 2015

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