Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

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

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).
С этим счетом работает только один оператор, так что накосячить там некому :)


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