Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.98/51: Рейтинг темы: голосов - 51, средняя оценка - 4.98
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
1

Проведение документа из модуля формы документа

04.06.2013, 18:36. Просмотров 9862. Ответов 56
Метки нет (Все метки)

Столкнулся с такой проблемой. Нужно провести документ из формы документа. Побывал на многих сайтах и ничего путного не нашел
только вот это кое что вроде нормальное попалось
http://v8.1c.ru/predpriyatie/typical_problems_Documents.htm

но ругается на эту строку
1C
1
Док = ПолеВводаДокумент.ПолучитьОбъект();
типо функции получить объект нет.

что можно сделать и реально ли провести документ из формы документа?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 18:36
Ответы с готовыми решениями:

Обратиться к реквизитам Документа из Модуля этого документа
Привет всем. У меня проблема вот с чем: в процедуре обработки документа нужно обратиться к...

Как изменить текст надписи формы документа при записи документа
Здравствуйте уважаемые, у меня простой вопрос - как мне при записи документа изменить надпись на...

Проведение документа
Я создаю на основании документа ОтгрузкаТоваровСоСкдлада документ ПриходныйКассовыйОрдер....

1С 8.1 Проведение документа
Создаю новый документ программно... и проводку в нем тоже: Движение =...

Проведение документа
Документ имеет принадлежность к бухгалтерскому учету. Документ создаётся сегодня, а проводится,...

56
Dethmontt
Модератор
Эксперт 1С
2736 / 2493 / 443
Регистрация: 10.03.2011
Сообщений: 9,057
Записей в блоге: 1
Завершенные тесты: 1
04.06.2013, 18:38 2
ПолеВводаДокумент Это реквизит так называется?
0
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 18:46  [ТС] 3
Цитата Сообщение от Dethmontt Посмотреть сообщение
ПолеВводаДокумент Это реквизит так называется?
как я понял из статьи походу да.

это не мой код. Это из статьи
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 18:46 4
Цитата Сообщение от delete2013 Посмотреть сообщение
что можно сделать и реально ли провести документ из формы документа?
1C
1
Записать(РежимЗаписиДокумента.Проведение);
1
04.06.2013, 18:46
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 19:43  [ТС] 5
Цитата Сообщение от Fenomen Посмотреть сообщение
Записать(РежимЗаписиДокумента.Проведение);
я так понимаю где эту функцию вызвать, то произойдет перепроведение документа или не?
а если есть уже в модуле документа процедура созданная с помощью конструктора для проведения документа, а я хочу перепровести документ и уже используя другой код для проведения чем есть уже в той процедуре. Так сделать можнО?
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 19:52 6
Цитата Сообщение от delete2013 Посмотреть сообщение
а если есть уже в модуле документа процедура созданная с помощью конструктора для проведения документа
Она и должна быть, иначе при проведении ничего не произойдет.

Цитата Сообщение от delete2013 Посмотреть сообщение
а я хочу перепровести документ и уже используя другой код для проведения чем есть уже в той процедуре. Так сделать можнО?
Зачем так?
Опишите задачу, которую решаете. Скорее всего есть более правильное решение.
0
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 20:32  [ТС] 7
Цитата Сообщение от Fenomen Посмотреть сообщение
Она и должна быть, иначе при проведении ничего не произойдет.
да, без нее никак. ДОлжна быть) не так объяснил.
Цитата Сообщение от Fenomen Посмотреть сообщение
Зачем так?
Опишите задачу, которую решаете. Скорее всего есть более правильное решение.
задача такова. Есть два документа Заказ и ТоваротранспортнаяНакладная. Документ Заказ является регистратором для регистра сведений Заказы и обработка проводится по такому коду.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр Заказы
    Движения.Заказы.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.Заказы.Добавить();
        Движение.Период = Дата;
        Движение.Клиент = Клиент;
        Движение.Реализатор = Реализатор;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
        Движение.Обработана=Ложь;
    КонецЦикла;
 
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Ресурс Обработана в регистре сведений Заказы используется для того, чтобы различать заказы, которые обработались Зав. Экспедицией и которые еще не обработаны т.е когда я создаю документ товаротранспортная накладная, то он заполняется некоторые поля из документа Заказы и получается которую запись документа Заказы я использую в данный момент мне надо ее будет перепровести уже под другим кодом, чтобы ресурс Обработана поставить в ИСТИНУ т.е уже в обработанную заявку.
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 20:43 8
delete2013, Вы не понимаете как работает периодический рег. сведений

При проведении ТоваротранспортнаяНакладная, Вам не нужно менять движения документа Заказ. Вам нужно добавить еще одно движение с ресурсом Обработана=Истина. Т.е. продублируйте процедуру проведения заказа в ТТН, просто изменив там Ложь, на Истина.

СрезПоследних даст Вам корректные данные.
0
Dethmontt
Модератор
Эксперт 1С
2736 / 2493 / 443
Регистрация: 10.03.2011
Сообщений: 9,057
Записей в блоге: 1
Завершенные тесты: 1
04.06.2013, 20:50 9
А не проще создать РС с одним измерением Заказ (СправочникСсылка.Заказы) и когда заказ обработан он в этот РС будет добавлять ссылку на самого себя
Проверка.
Если в этом РС есть Заказ - значит он обработан
0
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 21:02  [ТС] 10
Цитата Сообщение от Fenomen Посмотреть сообщение
Вы не понимаете как работает периодический рег. сведений
вполне возможно, что да. Да, я делал новое проведение в документе ТТН в этот же регистр. Но беда в чем, добавлялась в регистре новая запись от нового регистратора, а та старая запись от док. Заказы оставалась с значением Ложь. Использовал вот такой код
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр Заказы
    Движения.Заказы.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.Заказы.Добавить();
        Движение.Период = Дата;
        Движение.Клиент = Клиент;
        Движение.Реализатор = Реализатор;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
        Движение.Обработана=Истина;
    КонецЦикла;
 
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
может тут надо чтот еще дописать, но вот что я еще не понял


Цитата Сообщение от Dethmontt Посмотреть сообщение
А не проще создать РС с одним измерением Заказ (СправочникСсылка.Заказы) и когда заказ обработан он в этот РС будет добавлять ссылку на самого себя
Проверка.
Если в этом РС есть Заказ - значит он обработан
наверно на данном этапе моих знаний по 1С вашей идеи мне пока что не понять( не понял все равно как будет ссылка на самого себя в РС помогать где заказ обработан, а где нет(
0
Dethmontt
Модератор
Эксперт 1С
2736 / 2493 / 443
Регистрация: 10.03.2011
Сообщений: 9,057
Записей в блоге: 1
Завершенные тесты: 1
04.06.2013, 21:10 11
Есть регистр - в нем пусто
Есть 3 заказа

При работе с заказом проверяем запросом есть ли в регистре этот заказ - НЕТ (В регистре то пусто) Значит заказ не обработан

Нажимаем на форме заказа какую нибудь кнопку типа : "Обработать заказ" по нажатию этой кнопки заказ попадает в регистр и там становиться одна запись

Теперь при работе с заказом проверяем если он есть в регистре (а там сейчас 1 из 3х) то он обработан!

Добавлено через 1 минуту
В итоге можем смело делать кнопку "Вернуть заказ на доработку" - по нажатию которой заказ удаяется из регистра, соответственно он снова становиться НЕ Обработан
1
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 21:14  [ТС] 12
Цитата Сообщение от Dethmontt Посмотреть сообщение
Есть регистр - в нем пусто
Есть 3 заказа
При работе с заказом проверяем запросом есть ли в регистре этот заказ - НЕТ (В регистре то пусто) Значит заказ не обработан
Нажимаем на форме заказа какую нибудь кнопку типа : "Обработать заказ" по нажатию этой кнопки заказ попадает в регистр и там становиться одна запись
Теперь при работе с заказом проверяем если он есть в регистре (а там сейчас 1 из 3х) то он обработан! Добавлено через 1 минуту
В итоге можем смело делать кнопку "Вернуть заказ на доработку" - по нажатию которой заказ удаяется из регистра, соответственно он снова становиться НЕ Обработан
да идея вроде не плохая. Но мне она не подходит в данном случает. т.к дорабатывать заказ будет документ ТТН и ТТН смотрит в регистре есть заказы или нет. Если есть, то он их дорабатывает и потом будет помечать ресурс Обработана на истину и все.
ну или же я опять не до конца понял все сути решения вашего
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 21:24 13
Цитата Сообщение от delete2013 Посмотреть сообщение
Да, я делал новое проведение в документе ТТН в этот же регистр. Но беда в чем, добавлялась в регистре новая запись от нового регистратора, а та старая запись от док.
Никакой проблемы в новой записи нет. Сделайте две записи, и сделайте запрос к вирт. таблице СрезПоследних регистра. И вы увидите, что срез вернет Вам одну строку с последним значением ресурса. В этом и есть смысл периодического регистра сведений.
0
Dethmontt
Модератор
Эксперт 1С
2736 / 2493 / 443
Регистрация: 10.03.2011
Сообщений: 9,057
Записей в блоге: 1
Завершенные тесты: 1
04.06.2013, 21:24 14
на самом деле правильно так - как вам проще!
0
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 21:41  [ТС] 15
Цитата Сообщение от Fenomen Посмотреть сообщение
Никакой проблемы в новой записи нет. Сделайте две записи, и сделайте запрос к вирт. таблице СрезПоследних регистра. И вы увидите, что срез вернет Вам одну строку с последним значением ресурса. В этом и есть смысл периодического регистра сведений.
как я понял вы имели введу вот это
Проведение документа из модуля формы документа

и запрос
1C
1
2
3
4
5
6
7
Запрос.Текст="ВЫБРАТЬ
                     |  ЗаказыСрезПоследних.Клиент,
                     |  ЗаказыСрезПоследних.Реализатор,
                     |  ЗаказыСрезПоследних.Обработана,
                     |  ЗаказыСрезПоследних.Сумма
                     |ИЗ
                     |  РегистрСведений.Заказы.СрезПоследних(, Обработана = ЛОЖЬ) КАК ЗаказыСрезПоследних";
все равно выводит сообщения то, что запись не обработана.

но было бы не плохо изменить само значение на истино в регистре т.к при переходе в регистр сразу допустим кассир мог видеть какие заявки уже обработаны, а какие еще нет ЗавЭкспедицией
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 21:48 16
1C
1
2
3
4
5
6
7
8
9
Запрос.Текст="ВЫБРАТЬ
| ЗаказыСрезПоследних.Клиент,
| ЗаказыСрезПоследних.Реализатор,
| ЗаказыСрезПоследних.Обработана,
| ЗаказыСрезПоследних.Сумма
|ИЗ
| РегистрСведений.Заказы.СрезПоследних() КАК ЗаказыСрезПоследних"
|ГДЕ
|   НЕ ЗаказыСрезПоследних.Обработана";
В параметрах вирт. таблицы имеет смысл накладывать фильтр по измерениям.

Добавлено через 3 минуты
Цитата Сообщение от delete2013 Посмотреть сообщение
Обработана = ЛОЖЬ
Блин, зачем же все сравнивают два Булевых значения???
Обработана = Истина - эквивалентно Обработана.
Обработана = Ложь - эквивалентно НЕ Обработана.

Зачем делать лишние вычисления?
0
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 22:33  [ТС] 17
Все нашел решение своей проблеме как изменить реквезит Обработана на истино. Когда я буду открывать документ заказа, который мне нужно обработать уже документом ТТН (в форме заказа будет кнопка, которая вызывает форму документа ТТН). Вот когда я ее буду нажимать, то модально открывается форма документа ТТН. Если я сохраню этот документ, то тогда документ заказа будет перепроводиться под другому коду, а если я не сохраню документ ТТН, то никаких проведений происходить не будет

вот по этому условию обрабатываю записан ТТН документ или нет
1C
1
2
3
Если Не форма.Объект.Ссылка = ПредопределенноеЗначение("Документ.ТоваротранспортнаяНакладная.ПустаяСсылка") Тогда 
        Записать(РежимЗаписиДокумента.Проведение);    
    КонецЕсли;
а по этому разную запись в регистр при проведение
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Если РаботаСролями.АктивнаяРоль()=1 Тогда
        Движения.Заказы.Записывать = Истина;
        Для Каждого ТекСтрокаТовары Из Товары Цикл
            Движение = Движения.Заказы.Добавить();
            Движение.Период = Дата;
            Движение.Клиент = Клиент;
            Движение.Реализатор = Реализатор;
            Движение.Сумма = ТекСтрокаТовары.Сумма;
            Движение.Обработана=Истина;
        КонецЦикла;
 
    Иначе
        Движения.Заказы.Записывать = Истина;
        Для Каждого ТекСтрокаТовары Из Товары Цикл
            Движение = Движения.Заказы.Добавить();
            Движение.Период = Дата;
            Движение.Клиент = Клиент;
            Движение.Реализатор = Реализатор;
            Движение.Сумма = ТекСтрокаТовары.Сумма;
            Движение.Обработана=Ложь;
        КонецЦикла;
    КонецЕсли;
АктивнаяРоль() это уже моя функция, которая будет определять какая роль сейчас активна.

вот только столкнулся с новой проблемкой. Как я понял можно функцию Записать использовать в форме документа вот так
1C
1
Записать(РежимЗаписиДокумента.Проведение);
Но ругается на параметры функции
{Документ.Заказ.Форма.ФормаДокумента.Форма(43)}: Ошибка при вызове метода контекста (Записать)
Записать(РежимЗаписиДокумента.Проведение);
Несоответствие типов (параметр номер '1')
пока не понял в чем дело

Добавлено через 21 секунду
Цитата Сообщение от Fenomen Посмотреть сообщение
Блин, зачем же все сравнивают два Булевых значения??? Обработана = Истина - эквивалентно Обработана. Обработана = Ложь - эквивалентно НЕ Обработана.
да, вы правы
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 22:39 18
delete2013, Ваше решение не верно. Если пользователь, у которого РаботаСролями.АктивнаяРоль()=1, перепроведет документ, все у Вас полетит к чертям!

Движение где Обработана=Ложь; должен делать документ ТТН!
0
delete2013
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 82
04.06.2013, 23:01  [ТС] 19
Цитата Сообщение от Fenomen Посмотреть сообщение
Движение где Обработана=Ложь; должен делать документ ТТН!
да, было бы верней если движение документа заказов делал документ ТТН для присваивания Обработке истинного значения. Но как вызвать движение документа из другого документа мне не известно.


Цитата Сообщение от Fenomen Посмотреть сообщение
аше решение не верно. Если пользователь, у которого РаботаСролями.АктивнаяРоль()=1, перепроведет документ, все у Вас полетит к чертям!
та вроде все нормально. Хотя может да, решение не верное, но будет может работать если понять что не так в функции Записать. Только вот функция
1C
1
ЭтаФорма.аписать(РежимЗаписиДокумента.Проведение);
до сих пор выдает ошибку. Еще не нашел решения и причины почему
0
Fenomen
899 / 876 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
04.06.2013, 23:12 20
Цитата Сообщение от delete2013 Посмотреть сообщение
Но как вызвать движение документа из другого документа мне не известно.
Не нужно ничего вызывать. Вам нужно обработке проведения документа ТТН, сделать такое же движение как в заказе. И не нужно будет ничего придумывать с проведением из формы.
0
04.06.2013, 23:12
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 23:12

Проведение документа
Всем здравствуйте. Я только начинаю изучать 1С:Предприятие. Поэтому не пинайте. Итак,есть задача:...

Проведение документа по кварталу
Подскажите плиз! В типовой БП 2.0 надо создать документ, дата в котором будет автоматически...

Автоматичекое проведение документа
День добрый. Вот мне надо провести документ через определенное время. У меня типо конфигурация...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.