Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Создание Документа "ПоступлениеВКассу" , Программно создать и заполнить документ          
Yoja Подменю пользователя
сообщение 05.07.12, 15:45
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 90
Спасибо сказали: 4 раз
Рейтинг: 0

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

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

DmitryS Подменю пользователя
сообщение 05.07.12, 15:51
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 15
Из: Киев
Спасибо сказали: 15 раз
Рейтинг: 0

а если так:

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

logist Подменю пользователя
сообщение 05.07.12, 15:55
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Yoja Подменю пользователя
сообщение 05.07.12, 15:58
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 90
Спасибо сказали: 4 раз
Рейтинг: 0

Цитата(DmitryS @ 05.07.12, 16:51) *
а если так:
.НайтиПоНомеру(СтрокаТабл.ДокументОснование.Номер)


Не получается, потому что СтрокаТабл.ДокументОснование - Табличное значение.
Я выгружаю всю информацию по Документа в Таблицу, а потом оттуда пишу в базу


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


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

DmitryS Подменю пользователя
сообщение 05.07.12, 16:00
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 15
Из: Киев
Спасибо сказали: 15 раз
Рейтинг: 0

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

Yoja Подменю пользователя
сообщение 05.07.12, 16:03
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 90
Спасибо сказали: 4 раз
Рейтинг: 0

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

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

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

logist Подменю пользователя
сообщение 05.07.12, 16:10
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

DmitryS Подменю пользователя
сообщение 05.07.12, 16:15
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 15
Из: Киев
Спасибо сказали: 15 раз
Рейтинг: 0

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

logist Подменю пользователя
сообщение 05.07.12, 16:17
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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


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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Yoja Подменю пользователя
сообщение 05.07.12, 17:04
Сообщение #10

Говорящий
***
Группа: Пользователи
Сообщений: 90
Спасибо сказали: 4 раз
Рейтинг: 0

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

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


ДокументОснование ТИП ЗНАЧЕНИЯ ДокументСсылка.РасходнаяНакладная
Дп.ДокументОснование = СтрокаТабл.ДокументОснование; - Это не сработало.
Может потому что когда ручками создаешь ПриходВКассу в этом поле ДокументОснование при первом клике выбираешь тип документа(Расходная, приходная и т.д.),
а потом уже сам документ?




Цитата(logist @ 05.07.12, 17:17) *
Вобще, что у вас содержит эта таблица - текст что ли? Просто к чему вот это:
Дп.ВалютаДенежныхСредств = Справочники.Валюты.НайтиПоНаименованию(СтрокаТабл.ВалютаДокумента);
Дп.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(СтрокаТабл.Контрагент);

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


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

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


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

logist Подменю пользователя
сообщение 05.07.12, 22:18
Сообщение #11

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

то разумеется, что это не сработает
Цитата(Yoja @ 05.07.12, 18:04) *
Дп.ДокументОснование = СтрокаТабл.ДокументОснование; - Это не сработало.


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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Yoja Подменю пользователя
сообщение 06.07.12, 9:41
Сообщение #12

Говорящий
***
Группа: Пользователи
Сообщений: 90
Спасибо сказали: 4 раз
Рейтинг: 0

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

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

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


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

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

logist Подменю пользователя
сообщение 06.07.12, 9:55
Сообщение #13

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 23.04.24, 21:36
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!