Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=8017)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Создание Документа "ПоступлениеВКассу"

Автор: Yoja 05.07.12, 15:45

Здравствуйте!
1С 8.2 УНФ
Создаю Документ ПоступлениеВКассу
Кое что заполняю в этом документе, но самое главное не могу заполнить
поле ДокументОснование,
А документом основания служит РасходнаяНакладная.
Как решить эту проблему?
Прошу сильно не пинать,
Пытался получить ссылку на документ(текст в комментариях), не находит документов, хотя они 100% есть.

Процедура ЗвБДПоступлениеВКассур()
             Для Каждого СтрокаТабл Из ТЗПоступлениеВКассу Цикл
                  Дп = Документы.ПоступлениеВКассу.СоздатьДокумент();
                  Дп.Дата = СтрокаТабл.Дата;
                  Дп.ВидОперации = Перечисления.ВидыОперацийПоступлениеВКассу.ОтПокупателя;
                  Дп.Касса = Справочники.Кассы.НайтиПоКоду("000000001");
                  Дп.Статья = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000003");
                  Дп.ВалютаДенежныхСредств = Справочники.Валюты.НайтиПоНаименованию(СтрокаТабл.ВалютаДокумента);
                  Дп.СуммаДокумента = СтрокаТабл.СуммаДокумента;
                  Дп.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(СтрокаТабл.Контрагент);
                  Дп.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ОблагаетсяНДС;
                
                  //ДокСсылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Сред(СтрокаТабл.ДокументОснование,27,12));
                  //Если ДокСсылка.Пустая() Тогда
                  //    //Текст = "ru = ""Документ не найден!""; en = ""Document not found!""";
                  //    //Предупреждение(НСтр(Текст));
                  //    Сообщить(Сред(СтрокаТабл.ДокументОснование,27,12) +" Документ не найден");
                  //Иначе
                  //    ДокОбъект = ДокСсылка.ПолучитьОбъект();
               //    Дп.ДокументОснование = ДокОбъект;
               //    ДокОбъект.Записать();    
                  //КонецЕсли;  
                  
                  Дп.Комментарий = СтрокаТабл.Комментарий;
      
                  Если СтрокаТабл.Проведен = Истина Тогда
                      Дп.Записать(РежимЗаписиДокумента.Проведение);    
                      
                  Иначе
                      Дп.Записать();
                  КонецЕсли;
    
             КонецЦикла;
         КонецПроцедуры

Автор: DmitryS 05.07.12, 15:51

а если так:

 .НайтиПоНомеру(СтрокаТабл.ДокументОснование.Номер)

Автор: logist 05.07.12, 15:55

         
                  //ДокСсылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Сред(СтрокаТабл.ДокументОснование,27,12));
                  //Если ДокСсылка.Пустая() Тогда
                  //    //Текст = "ru = ""Документ не найден!""; en = ""Document not found!""";
                  //    //Предупреждение(НСтр(Текст));
                  //    Сообщить(Сред(СтрокаТабл.ДокументОснование,27,12) +" Документ не найден");
                  //Иначе
                  //    ДокОбъект = ДокСсылка.ПолучитьОбъект();
               //    Дп.ДокументОснование = ДокОбъект;
               //    ДокОбъект.Записать();    
                  //КонецЕсли;

Простите, но что это за маразм такой? "Сред(СтрокаТабл.ДокументОснование,27,12)"? Что хранится в "СтрокаТабл.ДокументОснование" ? И если там не ссылка то почему нельзя хранить там ссылку?
И то что в "Иначе" написано тоже, извините, говно-код.

Автор: Yoja 05.07.12, 15:58

Цитата(DmitryS @ 05.07.12, 16:51) http://pro1c.org.ua/index.php?act=findpost&pid=52691
//ДокСсылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Сред(СтрокаТабл.ДокументОснование,27,
12));
//Если ДокСсылка.Пустая() Тогда
// //Текст = "ru = ""Документ не найден!""; en = ""Document not found!""";
// //Предупреждение(НСтр(Текст));
// Сообщить(Сред(СтрокаТабл.ДокументОснование,27,12) +" Документ не найден");
//Иначе
// ДокОбъект = ДокСсылка.ПолучитьОбъект();
// Дп.ДокументОснование = ДокОбъект;
// ДокОбъект.Записать();
//КонецЕсли;
Простите, но что это за маразм такой? "Сред(СтрокаТабл.ДокументОснование,27,12)"? Что хранится в "СтрокаТабл.ДокументОснование" ? И если там не ссылка то почему нельзя хранить там ссылку?
И то что в "Иначе" написано тоже, извините, говно-код.


Верю, и принимаю критику, но это не совет.
Я ток познаю азы 1С

Автор: DmitryS 05.07.12, 16:00

Советую посмотреть в отладчике, что выдает Ваше выражение "Сред(СтрокаТабл.ДокументОснование,27,12)"

Автор: Yoja 05.07.12, 16:03

Цитата(DmitryS @ 05.07.12, 17:00) *
Советую посмотреть в отладчике, что выдает Ваше выражение "Сред(СтрокаТабл.ДокументОснование,27,12)"

СтрокаТабл.ДокументОснование содержит вот такие значения "Реализация товаров и услуг 00000000001 від 09.01.2012 0:00:00"

А выражение Сред(СтрокаТабл.ДокументОснование,27,12) выдает результат 00000000001

Автор: logist 05.07.12, 16:10

Цитата(Yoja @ 05.07.12, 17:03) *
СтрокаТабл.ДокументОснование содержит вот такие значения "Реализация товаров и услуг 00000000001 від 09.01.2012 0:00:00"

Это текст или ссылка? Посмотрите ТИП ЗНАЧЕНИЯ, если это ДокументСсылка (а я думаю что это ссылка) то не надо никаких поисков.
Сразу:
Дп.ДокументОснование = СтрокаТабл.ДокументОснование;


Если же это не ссылка, то создайте исходную таблицу так, что бы в этот столбец попадала именно ссылка.

Автор: DmitryS 05.07.12, 16:15

Я бы на Вашем месте поработал бы над созданием и заполнением таблицы "ТЗПоступлениеВКассу", чтобы в колонках "ДокументОснование", "Контрагент" были уже готовые ссылки, а не строковые значения.

Автор: logist 05.07.12, 16:17

Вобще, что у вас содержит эта таблица - текст что ли? Просто к чему вот это:

                  Дп.ВалютаДенежныхСредств = Справочники.Валюты.НайтиПоНаименованию(СтрокаТабл.ВалютаДокумента);
                  Дп.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(СтрокаТабл.Контрагент);


И ПКО содержит механизм заполнения на основании РН, поэтому разумней поступить так:
Для Каждого СтрокаТЗ Из ТЗ Цикл
НовДок = Документы.ПоступлениеВКассу.СоздатьДокумент();
НовДок.Заполнить(СтрокаТЗ.СсылкаНаРН);
// Ну и тут можно поменять в РКО что-то что не устраивает
НовДок.Записать();
КонецЦикла

Автор: Yoja 05.07.12, 17:04

Цитата(logist @ 05.07.12, 17:10) http://pro1c.org.ua/index.php?act=findpost&pid=52697
Вобще, что у вас содержит эта таблица - текст что ли? Просто к чему вот это:
Дп.ВалютаДенежныхСредств = Справочники.Валюты.НайтиПоНаименованию(СтрокаТабл.ВалютаДокумента);
Дп.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(СтрокаТабл.Контрагент);

И ПКО содержит механизм заполнения на основании РН, поэтому разумней поступить так:
Для Каждого СтрокаТЗ Из ТЗ Цикл
НовДок = Документы.ПоступлениеВКассу.СоздатьДокумент();
НовДок.Заполнить(СтрокаТЗ.СсылкаНаРН);
// Ну и тут можно поменять в РКО что-то что не устраивает
НовДок.Записать();
КонецЦикла


Таблица содержит текст.
И попробую применить ваш совет, спасибо

Цитата(DmitryS @ 05.07.12, 17:15) *
Я бы на Вашем месте поработал бы над созданием и заполнением таблицы "ТЗПоступлениеВКассу", чтобы в колонках "ДокументОснование", "Контрагент" были уже готовые ссылки, а не строковые значения.


А как должна выглядеть ссылка?
Вот это же она? Реализация товаров и услуг 00000000001 від 09.01.2012 0:00:00

Автор: logist 05.07.12, 22:18

Ну если:

Цитата(Yoja @ 05.07.12, 18:04) http://pro1c.org.ua/index.php?act=findpost&pid=52700
Дп.ДокументОснование = СтрокаТабл.ДокументОснование; - Это не сработало.


Давайте сюда код который формирует таблицу.

Автор: Yoja 06.07.12, 9:41

Код формирования таблицы

Процедура ПриходКассовыйОрдер()
    
     Запрос = База.NewObject("Запрос");
     Запрос.Текст = "ВЫБРАТЬ
     |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ПриходныйКассовыйОрдер.Ссылка) КАК Ссылка,
     |    ПриходныйКассовыйОрдер.ПометкаУдаления,
     |    ПриходныйКассовыйОрдер.Номер,
     |    ПриходныйКассовыйОрдер.Дата,
     |    ПриходныйКассовыйОрдер.Проведен,
     |    ПриходныйКассовыйОрдер.Организация,
     |    ПриходныйКассовыйОрдер.СчетКасса,
     |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ПриходныйКассовыйОрдер.ВидОперации) КАК ВидОперации,
     |    ПриходныйКассовыйОрдер.Контрагент,
     |    ПриходныйКассовыйОрдер.ДоговорКонтрагента,
     |    ПриходныйКассовыйОрдер.ВалютаДокумента,
     |    ПриходныйКассовыйОрдер.СуммаДокумента,
     |    ПриходныйКассовыйОрдер.ПринятоОт,
     |    ПриходныйКассовыйОрдер.Основание,
     |    ПриходныйКассовыйОрдер.Ответственный,
     |    ПриходныйКассовыйОрдер.Комментарий,
     |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ПриходныйКассовыйОрдер.ДокументОснование) КАК ДокументОснование,
     |    ПриходныйКассовыйОрдер.СчетОрганизации,
     |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ПриходныйКассовыйОрдер.СтавкаНДС) КАК СтавкаНДС,
     |    ПриходныйКассовыйОрдер.ВыручкаСНТТ,
     |    ПриходныйКассовыйОрдер.НомерОрдера,
     |    ПриходныйКассовыйОрдер.НазначениеДенежныхСредств,
     |    ПриходныйКассовыйОрдер.ПоОбособленномуПодразделению,
     |    ПриходныйКассовыйОрдер.РучнаяКорректировка,
     |    ПриходныйКассовыйОрдер.ВыводитьНаПечатьСуммуНДС,
     |    ПриходныйКассовыйОрдер.УДАЛИТЬОтражатьВНалоговомУчете
     |    ИЗ
     |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер";

    
     Результат = Запрос.Выполнить().Выгрузить();

     ТЗПоступлениеВКассу.Очистить();    
     Ном = 1;
     Для Каждого СтрокаТ из Результат Цикл
         СтрокаТаб = ТЗПоступлениеВКассу.Добавить();
         СтрокаТаб.Ном = Ном;
         СтрокаТаб.Ссылка = СтрокаТ.Ссылка;
         СтрокаТаб.ПометкаУдаления = СтрокаТ.ПометкаУдаления;
         СтрокаТаб.Номер = СтрокаТ.Номер;
         СтрокаТаб.Дата = СтрокаТ.Дата;
         СтрокаТаб.Проведен = СтрокаТ.Проведен;
         СтрокаТаб.Организация = СтрокаТ.Организация.Description;
         СтрокаТаб.СчетКасса = СтрокаТ.СчетКасса.Code;
         СтрокаТаб.ВидОперации = СтрокаТ.ВидОперации;
         СтрокаТаб.Контрагент = СтрокаТ.Контрагент.Description;
        
         Если СтрокаТ.ДоговорКонтрагента.Description = "Основний договір" Тогда
              СтрокаТаб.ДоговорКонтрагента = "Основной договор"
         Иначе    
             СтрокаТаб.ДоговорКонтрагента = СтрокаТ.ДоговорКонтрагента.Description;
         КонецЕсли;
        
         СтрокаТаб.ВалютаДокумента = СтрокаТ.ВалютаДокумента.Description;
         СтрокаТаб.СуммаДокумента = СтрокаТ.СуммаДокумента;
         СтрокаТаб.ПринятоОт = СтрокаТ.ПринятоОт;
         СтрокаТаб.Основание = СтрокаТ.Основание;
         СтрокаТаб.Ответственный = СтрокаТ.Ответственный.Description;
         СтрокаТаб.Комментарий = СтрокаТ.Комментарий;
         СтрокаТаб.ДокументОснование = СтрокаТ.ДокументОснование;
         СтрокаТаб.СчетОрганизации = СтрокаТ.СчетОрганизации.Description;
         СтрокаТаб.СтавкаНДС = СтрокаТ.СтавкаНДС;
         СтрокаТаб.ВыручкаСНТТ = СтрокаТ.ВыручкаСНТТ;
         СтрокаТаб.НомерОрдера = СтрокаТ.НомерОрдера;
         СтрокаТаб.НазначениеДенежныхСредств = СтрокаТ.НазначениеДенежныхСредств.Description;
         СтрокаТаб.ПоОбособленномуПодразделению = СтрокаТ.ПоОбособленномуПодразделению;
         СтрокаТаб.РучнаяКорректировка = СтрокаТ.РучнаяКорректировка;
         СтрокаТаб.ВыводитьНаПечатьСуммуНДС = СтрокаТ.ВыводитьНаПечатьСуммуНДС;
         СтрокаТаб.УДАЛИТЬОтражатьВНалоговомУчете = СтрокаТ.УДАЛИТЬОтражатьВНалоговомУчете;


         Ном = Ном + 1;
     КонецЦикла;

КонецПроцедуры

Автор: logist 06.07.12, 9:55

Не понял, если:

Цитата(Yoja @ 05.07.12, 18:04) *
Таблица содержит текст.

то как вы получаете поля Description и code?
Так же не совсем понятно зачем обрабатывать потом полученную таблицу. Опять же если у объектов доступны реквизиты, то в таблице скорее всего не текст, то соответственно можно все сделать на уровне запроса и получить готовую таблицу, из которой через ДокОбъект.Заполнить(СтрокаТЗ) или ЗаполнитьЗнченияСвойств и заполнить документ.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua