Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: Не записывается программно созданная операция

Я
   Прохожий1С
 
24.01.18 - 13:27
Пожалуйста, выручайте!
Суть проблемы такова: я провожу некий документ и при в модуле проведения этом программно создаю, заполняю и записываю еще одну отдельную операцию. И эта операция не сохраняется!
Ради проверки в модуле проведения открыл эту операцию модально. Она открылась, заполненная, редактируется, по кнопке Записать вроде бы записывается - но в базе отсутствует, а в мониторе пользователей мои попытки ее записать проходят якобы над <Объект не найден>.
 
  Рекламное место пустует
   1Сергей
 
1 - 24.01.18 - 13:29
А док записывается?
   1Сергей
 
2 - 24.01.18 - 13:29
проводится?
   Прохожий1С
 
3 - 24.01.18 - 13:30
(2) Да.
   1Сергей
 
4 - 24.01.18 - 13:33
Код показывай
   Прохожий1С
 
5 - 24.01.18 - 13:43
Процедура ОбработкаПроведения()  

...........//тут код проведения самого дока и в процессе заполняется ТЗ


    Если Тз.КоличествоСтрок() > 0
    Тогда  
        Тз.ВыбратьСтроки(); 
 
        Оп2 = СоздатьОбъект("Операция");
        Оп2.Новая();
        Пока Тз.ПолучитьСтроку() = 1
        Цикл 
            Оп2.НоваяПроводка(); 
            Оп2.Дебет.Счет = Тз.ДебетСчет;
            Оп2.Дебет.Суб1 = Тз.Суб1;
            Оп2.Кредит.Счет = Тз.КредитСчет;
            Оп2.Дебет.Суб2 = Тз.Суб2;
            Оп2.Сумма = Тз.Сум; 
        КонецЦикла;
        
        Оп2.Содержание = "Дополнительная операция";
        Оп2.ДатаОперации = ДатаДок; 
        Оп2.ЗаписатьПроводки();
        Оп2.Записать();  
        
        ОткрытьФормуМодально(КоррОперация.Документ);//вот тут все открылось, номер есть, дата есть, все проводки правильно заполнены


    КонецЕсли;
КонецПроцедуры
   Прохожий1С
 
6 - 24.01.18 - 13:44
(5) Т е.
 ОткрытьФормуМодально(Оп2.Документ);

разумеется
   Злопчинский
 
Ведущий
7 - 24.01.18 - 13:46
а к какому документу товя программно создаваемая операция относится.... операции без дока в 77 вроде как не могут быть...
   Смотрящий
 
8 - 24.01.18 - 13:47
на моменте создания объекта дыра логическая - тебе надо получить операцию документа и в нее писать проводки, а ты создаешь объект не привязанный к документу.

В бухне типовой клюшек посмотри как сделано
   VitShvets
 
9 - 24.01.18 - 13:47
У 7.7 есть ограничение на одновременную запись-проведение еще одного, другого документа из "Обработки проведения". Уже не помню, но как-то мы извращались пытаясь победить. На вскидку, два выхода:
1. Разрешить родительскому документу писать проводки. Тогда не придётся создавать отдельный документ Операция.
2. Програмно разделить транзакционность создания проведения. Открываем транзакцию, проводим родительский документ, создаём и проводим операцию, коммитим транзакцию если всё хорошо.
   Прохожий1С
 
10 - 24.01.18 - 13:53
(7) Могут.

(8) Через

    Док2.Новый();  
    Док2.ДатаДок = ДатаДок; 
    Док2.Записать();
 ...........
    Оп2.НайтиОперацию(Док2.ТекущийДокумент());

пробовали, не помогло.

(9) Видно, в этом и дело (
 
 
   Масянька
 
11 - 24.01.18 - 13:53
(9) Молодец! Отлично!
3. Симуляция закрытия док-та.
   Прохожий1С
 
12 - 24.01.18 - 14:02
(9) Писать проводки нельзя, т.к. эта доп. операция не каждый раз создаваться должна.
Транзакция что-то не помогла.

(11) Это как?
   VitShvets
 
13 - 24.01.18 - 14:08
(7) Операция в 7-ке это отдельный "предопределенный" служебный документ.
(10) Не правильно пробовал. Нельзя искать и править отдельную сущность операции. Нужно это делать в контексте проведения. Не помню как в 7.7, в 8-ке это предопределенная сущность "Движения" у документа-объекта. И в 7.7 по моему это можно делать только внутри обработки проведения. В (8) правильно написано, посмотри как в типовой бухии документу при проведении проводки добавляются. Там не создают операцию "СоздатьОбъект", а формируют движения в контексте самого проводимого документа.
(11) :) Ага. Есть ещё способ с параметром типа "Сам проведеись".
(12) Основной вопрос, зачем тебе именно отдельная операция. Ну у части документов будут проводки, у части нет.
(12) Дело не в транзакции, а в разделении процессов. Прогррамно, вне проведения, в идеале вообще отдельной обработкой:
1. Начали транзакцию.
2. Создали и заполнили документ, записали провели.
4. Создали и заполнили Операцию, записали провели.
5. Закрыли транзакцию.

1.
   Прохожий1С
 
14 - 24.01.18 - 14:16
(13) Это весьма кривая вспомогательная база.
Документ проводится, если на счете склада есть остатки. Если нет - выдает сообщение по всем несуществующим остаткам и не проводится. Тогда оператор вручную вводит операцию, которой кладет на счет склада остатки, и снова пытается провести этот документ. Да, учет у нас именно так ведется :)

Операция2 должна заполнить эти остатки, чтобы при повторном проведении документа они уже были (т.е. автоматизировать работу оператора).

Переписать базу, наладить нормальный учет, выгнать оператора или уволиться - не варианты :)
   Builder
 
15 - 24.01.18 - 14:44
(14)
1. Проверить остатки перед проведением документа (например попробовать ПриЗаписи().
2. Создать и провести операцию (опять же в форме документа).
3. Провести документ.
   Builder
 
16 - 24.01.18 - 14:46
+ к (15)
Есть и минусы, например при групповом перепроведении это все не будет работать.
   VitShvets
 
17 - 24.01.18 - 14:47
(14) Сделай им кнопку на форме "Проверить-исправить остатки". Пусть жмут перед проведением, ну или после проведения, если не хватило чего.
   Прохожий1С
 
18 - 24.01.18 - 15:11
(17) О, хорошая идея!
А нельзя ли как-нибудь ТЗ, формируемую во время проведения, сохранить, чтобы она была потом доступна из модуля формы? Не во внешний файл только.
Т.е. попытался провести - не провелось, зато вон тебе ТЗ со всеми данными - жмакнуть кнопку, записать операцию - еще раз попробовать провести.
   Ёпрст
 
19 - 24.01.18 - 15:30
   VitShvets
 
20 - 24.01.18 - 15:58
(18) Можно глобальную переменную сделать. А в форме проверять какого она значения. Можно в строковый реквизит документа затолкать при помощи ЗначениеВСтрокуВнутр, хотя не понятно зачем. Правильнее всего в твоей ситуации, как мне кажется, вытащить процедуру формирования ТЗ в глобальный модуль и получать актуальные данные перед действием. А то получится, что оператор нажал "провести" и чай пить пошел. Когда вернулся увидел нехватку и сформировал "операцию-приход". А на самом деле, пока он чаи гонял, ситуация в остатках сильно поменялась.
   Прохожий1С
 
21 - 24.01.18 - 16:03
Спасибо всем за советы!
Сделал как предлагали в (17) с глобальной переменной как в (20).
С этим счетом работает только один оператор, так что накосячить там некому :)



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует