7.7 1С 7.7 заполнение поля ДокументОснование в описании модуля

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем Sergio2002, 21 июн 2013.

  1. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    из 8-ки передаю в 7.7 файл, в котором перечисляются номер накладной в 7.7, и товары для
    автоматического формирования Накладной возврата от покупателя.
    Ни как не могу дойти до правильного описания процедуры, чтобы заполнение приходной
    накладной осуществлялось по ДокументОснование.
    Пробовал через запрос - не получилось.
    привожу описание
    Код:
     ИначеЕсли СтрЧислоВхождений(СокрЛП(Команда),"ВозвратОтПокупателя") > 0 Тогда[/size]
    
    Если СтрЧислоВхождений(Константа.КомандаСписания8,СокрЛП(Команда)) > 0 Тогда
    Возврат;
    КонецЕсли;
    сообщить("Получена команда ВозвратОтПокупателя"+СокрЛП(Команда));
    // Константа.КомандаСписания8=СокрЛП(Команда);
    
    ФайлОшибок="Z:\SIZO_1\error.txt";
    КомандаОшибок=СоздатьОбъект("Текст");
    КомандаОшибок.Открыть(ФайлОшибок);
    КомандаОшибок.Очистить();
    ФайлЗагрузки=СокрЛП(Каталог) +"\SIZO_1\out.txt";
    ЗагрузкиДок = СоздатьОбъект("Текст");
    ЗагрузкиДок.Открыть(ФайлЗагрузки);
    ПНК = СоздатьОбъект("Документ.ПоступлениеТоваров");
    ПНК.Новый();
    ПНК.ДатаДок=РабочаяДата();
    ПНК.МестоХранения=Константа.СкладДляНакл8;
    ПНК.Контрагент=Константа.Терминал; //Контра8;
    ПНК.ВидПоступления=13;
    НомерРНК=Строка(СокрЛП(ЗагрузкиДок.ПолучитьСтроку(2)));
    ДатаРНК=Дата(СокрЛП(Лев(ЗагрузкиДок.ПолучитьСтроку(3),10)));
    
    ПНК.ИспользоватьЖурнал("Общий.РасходнаяНакладная");
    ПНК.ДокументОснование.ВидыДляВыбора("РасходнаяНакладная");
    ПНК.ВыбратьПоНомеру(НомерРНК,ДатаРНК,"Документ");
    
    // //************************************************************   
    //	    ДатаНач = ДатаРНК;
    //  ДатаКон = РабочаяДата();
    // ЗапросРНК = СоздатьОбъект("Запрос");
    // ТекстЗапроса =
    // "//{{ЗАПРОС(ВыборРНКВозврата)
    // |Период с ДатаНач по ДатаКон;
    // |Обрабатывать НеПомеченныеНаУдаление;
    // |Без итогов;
    // //|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
    //
    // |Получатель = Документ.РасходнаяНакладная.Получатель;
    // |НомерРН = Документ.РасходнаяНакладная.НомерДок;
    // |Группировка ТекущийДокумент;
    // |Условие (НомерРН = НомерРНК);
    // |"//}}ЗАПРОС
    // ;
    // // Если ошибка в запросе, то выход из процедуры
    // Если ЗапросРНК.Выполнить(ТекстЗапроса) = 0 Тогда
    //  Возврат;
    // КонецЕсли;
    // НакОтм=0;
    //   Пока ЗапросРНК.Группировка() = 1 Цикл
    //	 Если Найти(СокрЛП(ЗапросРНК.НомерРН),НомерРНК) =0  Тогда
    //	 
    //	 Иначе 
    //	 ДокРНК = СоздатьОбъект("Документ.РасходнаяНакладная");
    //	 ДокРНК.НайтиДокумент(ЗапросРНК.ТекущийДокумент);
    //	 
    //	  Если  ДокРНК.Блокировка(1) = 1 Тогда
    //	   ДокРНК.Блокировка(0);
    //	   ДокРНК.Удалить(0); 
    //	   НакОтм=1;
    //	  Иначе
    //	   Сообщить("Внимание!Не могу отменить резерв!");
    //	   НакОтм=0;
    //	  КонецЕсли;
    //	 ПНК.ДокументОснование.ВидыДляВыбора("РасходнаяНакладная");
    //	 ПНК.ДокументОснование.ИспользоватьЖурнал("Журнал.Общий");
    //	 ПНК.ДокументОснованиеВводНаОсновании(ЗапросРНК.НомерРН);
    //	 КонецЕсли;
    //    КонецЦикла;
    //   //********************************************************************
    Для сч = 1 По ЗагрузкиДок.КоличествоСтрок() Цикл
    стр = ЗагрузкиДок.ПолучитьСтроку(сч);
    Если  ПустаяСтрока(стр) = 1 Тогда
    продолжить;
    КонецЕсли;
    Если Сч = 1 Тогда
    продолжить;
    КонецЕсли;
    Если Сч = 2 Тогда
    продолжить;
    КонецЕсли;
    Если Сч = 3 Тогда
    продолжить;
    КонецЕсли;
    // Сообщить("---------------"+стр);
    НомРазд=Найти(стр," ; ");
    Код8=СокрЛП(Сред(стр,1,НомРазд-1));
    //  Сообщить("Группы"+КодГруппы);   
    ВрСтр=Сред(стр,НомРазд+3 );
    стр=ВрСтр;
    //  Сообщить("стр"+стр);
    
    НомРазд=Найти(стр," ; ");
    Наим=Сред(стр,1,НомРазд-1);
    //  Сообщить("Код8"+Код8);   
    ВрСтр=Сред(стр,НомРазд+3 );
    стр=ВрСтр;
    //  Сообщить("стр"+стр);   
    НомРазд=Найти(стр," ; ");
    КолВо=Сред(стр,1,НомРазд-1);
    //  Сообщить("Наим"+Наим);   
    ВрСтр=Сред(стр,НомРазд+3);
    стр=ВрСтр;
    //  Сообщить("ВрСтр"+стр);   
    НомРазд=Найти(стр," ; ");
    Цена=Число(Сред(стр,1,НомРазд-1));
    //  Сообщить("НомРазд"+НомРазд);   
    //  Сообщить("КолВо"+КолВо);   
    ВрСтр=Сред(стр,НомРазд+3);
    Сумма=Число(ВрСтр);
    //  Сообщить("Цена"+Цена);
    Товарчик= СоздатьОбъект("Справочник.Номенклатура");
    ОстНом=0;
    Если Товарчик.НайтиПоРеквизиту("Код8",Код8,1) =1 Тогда
    //Если (Товарчик.НайтиПоНаименованию(Наим,0,1) = 1) Тогда
    ОстНом=СКТО("41.1", Товарчик.ТекущийЭлемент());
    Иначе
    Сообщить ("Неверный Код Товара");
    Возврат;
    КонецЕсли;
    Если (ОстНом < Число(КолВО)) Тогда
    Сообщить (Код8+" "+Наим+"; из "+КолВо+" шт. есть в наличии "+ОстНом+" шт.;");
    КомандаОшибок.ДобавитьСтроку(Код8+" "+Наим+"; из "+КолВо+" шт. есть в наличии "+ОстНом+" шт.;");
    Для Зад=1 По 2000 Цикл
    Зад=Зад+1;
    КонецЦикла;
    КомандаОшибок.Записать(ФайлОшибок);
    Возврат;
    Иначе
    ПНК.НоваяСтрока();							  
    ПНК.Товар= Товарчик.ТекущийЭлемент();
    ПНК.Количество=КолВо;  
    ПНК.Цена=Цена; 
    ПНК.Сумма= Сумма;
    ПНК.Всего= ПНК.Цена*ПНК.Количество;  
    КонецЕсли;
    
    КонецЦикла;
    
    ПНК.Записать();  
    ПНК.Провести();
    ЗагрузкиДок.Очистить();
    Сообщить("ВОЗВРАТ от Покупателя произведен по накладной "+СокрЛП(Команда));
    КомандаОшибок.ДобавитьСтроку("Создана накладная ВОЗВРАТА"+ПНК.НомерДок+" "+ПНК.ДатаДок+" по накладной "+СокрЛП(Команда));
    КомандаОшибок.КодоваяСтраница(0);
    КомандаОшибок.Записать(ФайлОшибок);
    
    Подскажите, пожалуйста, как описать процедуру так, чтобы в приходной накладной при ВИД ПОСТУПЛЕНИЯ - "Возврат от покупателя", заполнить ДОКУМЕНТ ОТРГРУЗКИ - "отгрузка товаров" (это должно, я так понимаю, осуществляться из ОБЩЕГО ЖУРНАЛА, расходная накладная (номер этой накладной 7.7 получает из текстового файла).
  2. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А можно как-то перефразировать вопрос? Лично я не понял, что требуется...

    Немного предыстории, что за конфигруации, где именно возникает проблема, и в чем она выражается.
  3. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    в 8-ке ведется учет всех накладных из 7.7, которые передаются в реальном
    масштабе времени из 7.7 в 8-ку. В какой-то момент времени в 8-ке формируется
    команда на возврат товара от покупателя и посредством текстового фала
    передается в 7.7. Последняя, должна, на основе полученного номера накладной с перечисленным товаром,
    создать приходную накладную возврата с данными "Возврат от покупателя" и ДокументОснование = номеру накладной.
    У меня никак не получается описать модуль приходной накладной (приведен пример выше)
    чтобы автоматически заполнилось поле ДокументОснование.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Все что вам нужно, находится в модуле формы документа ПоступлениеТовара. Процедура ВводНаОсновании
  5. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    Сначала надо найти документ основание по номеру
    ДокОсн=СоздатьОбъект("Документ.ВидДокОсн");
    ДокОсн.НайтиПоНомеру(НомерДокОснования, ЛюбаяДатаИзИнтервалаПериодичностиДокОсн)
    Если найден
    ПНК.ДокументОснование
    =ДокОсн.ТекущийДокумент();
  6. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Я изучил всю эту процедуру, и не только ее, а все, по которым идет процесс (отладчиком) дело в том, что там идет открытие формы и выбор из нее.
    А мне нужно не открывать форму, а прямо указать на документ.
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Процедура ВводНаОсновании вызывается до открытия формы.... Хряк вам указал как найти... Далее достаточно продублировать код.
  8. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Что-то подобное делал с самого начала (создавал объект)
    Попробовал по Вашему варианту
    Код:
    ДокОсн=СоздатьОбъект("Документ.ВидДокОсн");[/size]
    ДокОсн.НайтиПоНомеру(НомерРНК,ДатаРНК);
    ПНК.ДокументОснование=ДокОсн.ТекущийДокумент();
    и повторилась такая же ошибка, что и в моем первом варианте
    ДокОсн=СоздатьОбъект("Документ.ВидДокОсн");
    {Глобальный модуль(21599)}: Неудачная попытка создания объекта (Документ.ВидДокОсн)

    у меня подобное еще и в закомментированном блоке есть через запрос.
    В нем я нахожу необходимый документ, но он у меня не вставляется в поле ДокументОснование
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вместо
    Код:
    ДокОсн=СоздатьОбъект("Документ.ВидДокОсн");
    нужно
    Код:
    ДокОсн=СоздатьОбъект("Документ.ПоступлениеТоваров");
  10. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Процедура ЗаполнитьНаОсновании (не ВводНаОсновании)
    описывает работу уже после того, как документ выбран. В моем случае нужно
    именно выбрать документ.
    Через запрос я нахожу нужный документ, потом пишу равенство ДокументОснование= найденному документу
    процедура проходит это спокойно (отладчиком), но в поле ДОКУМЕНТОСНОВАНИЕ не записывается найденный документ.
    Просматривая последовательность отладчиком, я должен используя журнал.общий.РасходнаяНакладная выбрать документ.
    Вот и думаю, если описать мою процедуру через ПНК.ИспользоватьЖурнал("Общий.РасходнаяНакладная");
    я не знаю как привильно ее описать - если это конечно правильный выбор описания.

    Я делал так делал - писал тоже самое Неудачная попытка создания объекта - Тем более, что выше в описании у меня этот объект уже создан
    ДокОсн=СоздатьОбъект("Документ.ПоступлениеТоваров");
  11. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Все получилось. (поле заполнилось)
    я прописал не ДокОсн=СоздатьОбъект("Документ.ПоступлениеТоваров");
    а ДокОсн=СоздатьОбъект("Документ.РасходнаяНакладная");

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