8.х ОБМЕН Конвертация табличной части в документы

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем ximera, 10 авг 2011.

  1. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток.

    Собственно имеется старая редакция торговли 8.7 и бухгалтерия 2.0, требуется наладить обмен между в данный момент по банку. В торговле за банк отвечает выписка она же Движение денежных средств, в бухгалтерии соответственно выписка разбивается на поступление и на списание с расчетного счета. Как в конвертации данных сделать так, чтобы ТЧ документа движение денежных средств разбивалась на документы поступления и списания с расчетного счета. Насколько я понимаю то для документов поступления/списания надо ставить флажок - получать из входящих данных, а для документа движения - при выгрузке как то выгружать каждую строку в структуру что ли
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    вы конфигуратор в БП открывали? там 2 документа: списание с расчетного счета и поступление на расчетный счет
  3. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    хммм... вроде же в вопросе проблему конкретно описал... да, я знаю что представляет из себя выписка:
    Выписка в БП = списание с расчетного счета и поступление на расчетный счет
    Выписка в ТиС = движение денежных средст.

    Надо табличное поле документа Движение денежных средств разбить на документы поступление на расчетный счет и на документы списания с расчетного счета.
  4. fineosun
    Offline

    fineosun Опытный в 1С

    Регистрация:
    15 мар 2011
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Не очень хорошо знаю типовые, из каждого движения денежных средств должно получаться одно поступление и одно списание?

    В любом случае, лучше всего сделать два правила - движение ден средств -> поступление и движение ден средств -> списание, а вот вызывать их можно по-разному, либо из правила выгрузки данных одно из них, а потом если нужно, то из него второе, либо оба из правила выгрузки данных
  5. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    точную версию конфигурации сказать можете?
  6. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    ок, могу

    Торговля + Склад 7.70.878
    Бухгалтерия предприятия 2.0.19.9
  7. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
  8. TheSerg
    Offline

    TheSerg

    Регистрация:
    17 авг 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Код:
     
    Табл = Источник;
    Табл.ВыбратьСтроки();
    Пока Табл.ПолучитьСтроку()=1 Цикл
    Если ТипЗнч(Табл) = Тип("Документ.ИмяДокумента1") Тогда
    ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
    ВыборкаДанных.НоваяКолонка("Номер");
    ВыборкаДанных.НоваяКолонка("Дата");
    ВыборкаДанных.НоваяКолонка("Комментарий");
    ВыборкаДанных.НоваяКолонка("Ответственный");
    ВыборкаДанных.НоваяКолонка("ПометкаУдаления");
    ВыборкаДанных.НоваяКолонка("Проведен");
    ВыборкаДанных.НоваяКолонка("СкладОтправитель");
    ВыборкаДанных.НоваяКолонка("СкладПолучатель");
    ВыборкаДанных.НоваяКолонка("Организация");
    ВыборкаДанных.НоваяКолонка("ВидОперации");
    ВыборкаДанных.НоваяКолонка("НДСвСтоимостиТоваров");
    ВыборкаДанных.НоваяКолонка("ОтражатьВНалоговомУчете");
    
    ВыборкаДанных.НоваяКолонка("Товары");
    
    ТаблЧасть = СоздатьОбъект("ТаблицаЗначений");
    ТаблЧасть.НоваяКолонка("Количество");
    ТаблЧасть.НоваяКолонка("Номенклатура");
    ТаблЧасть.НоваяКолонка("ЦенаВРознице");
    ТаблЧасть.НоваяКолонка("СуммаВРознице");
    
    ВыборкаДанных.УдалитьСтроки();
    ВыборкаДанных.НоваяСтрока();
    
    ВыборкаДанных.Номер = ПривестиНомерКДлине(Источник.НомерДок,11);
    ВыборкаДанных.Дата = Источник.ДатаДок;
    ВыборкаДанных.Комментарий = "Розница реализация"+" "+Источник.Комментарий;
    ВыборкаДанных.Ответственный = Источник.Автор;
    ВыборкаДанных.ПометкаУдаления = Источник.ПометкаУдаления();
    ВыборкаДанных.Проведен = Источник.Проведен();
    ВыборкаДанных.СкладОтправитель = Источник.Склад;
    //	ВыборкаДанных.СкладПолучатель;
    ВыборкаДанных.Организация = Источник.Фирма;
    ВыборкаДанных.ВидОперации = "ТоварыПродукция";
    ВыборкаДанных.НДСвСтоимостиТоваров = "НеИзменять";
    ВыборкаДанных.ОтражатьВНалоговомУчете = 1;
    
    Табл = Источник;
    Табл.ВыбратьСтроки();
    ТаблЧасть.УдалитьСтроки();
    Пока Табл.ПолучитьСтроку() = 1 Цикл
    ТаблЧасть.НоваяСтрока();
    ТаблЧасть.Количество = Табл.Количество;
    ТаблЧасть.Номенклатура = Табл.Номенклатура;
    ТаблЧасть.ЦенаВРознице = Табл.Цена;
    ТаблЧасть.СуммаВРознице = Табл.Сумма;
    КонецЦикла;
    
    ВыборкаДанных.Товары = ТаблЧасть;
    
    ВыгрузитьПоПравилу(ВыборкаДанных, , , , "ИмяПКОДляДокумента1");
    Отказ = 1;
    ИначеЕсли ТипЗнч(Табл) = Тип("Документ.ИмяДокумента2") Тогда
    ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
    ВыборкаДанных.НоваяКолонка("Номер");
    ВыборкаДанных.НоваяКолонка("Дата");
    ВыборкаДанных.НоваяКолонка("Комментарий");
    ВыборкаДанных.НоваяКолонка("Ответственный");
    ВыборкаДанных.НоваяКолонка("ПометкаУдаления");
    ВыборкаДанных.НоваяКолонка("Проведен");
    ВыборкаДанных.НоваяКолонка("СкладОтправитель");
    ВыборкаДанных.НоваяКолонка("СкладПолучатель");
    ВыборкаДанных.НоваяКолонка("Организация");
    ВыборкаДанных.НоваяКолонка("ВидОперации");
    ВыборкаДанных.НоваяКолонка("НДСвСтоимостиТоваров");
    ВыборкаДанных.НоваяКолонка("ОтражатьВНалоговомУчете");
    
    ВыборкаДанных.НоваяКолонка("Товары");
    
    ТаблЧасть = СоздатьОбъект("ТаблицаЗначений");
    ТаблЧасть.НоваяКолонка("Количество");
    ТаблЧасть.НоваяКолонка("Номенклатура");
    ТаблЧасть.НоваяКолонка("ЦенаВРознице");
    ТаблЧасть.НоваяКолонка("СуммаВРознице");
    
    ВыборкаДанных.УдалитьСтроки();
    ВыборкаДанных.НоваяСтрока();
    
    ВыборкаДанных.Номер = ПривестиНомерКДлине(Источник.НомерДок,11);
    ВыборкаДанных.Дата = Источник.ДатаДок;
    ВыборкаДанных.Комментарий = "Розница реализация"+" "+Источник.Комментарий;
    ВыборкаДанных.Ответственный = Источник.Автор;
    ВыборкаДанных.ПометкаУдаления = Источник.ПометкаУдаления();
    ВыборкаДанных.Проведен = Источник.Проведен();
    ВыборкаДанных.СкладОтправитель = Источник.Склад;
    //	ВыборкаДанных.СкладПолучатель;
    ВыборкаДанных.Организация = Источник.Фирма;
    ВыборкаДанных.ВидОперации = "ТоварыПродукция";
    ВыборкаДанных.НДСвСтоимостиТоваров = "НеИзменять";
    ВыборкаДанных.ОтражатьВНалоговомУчете = 1;
    
    Табл = Источник;
    Табл.ВыбратьСтроки();
    ТаблЧасть.УдалитьСтроки();
    Пока Табл.ПолучитьСтроку() = 1 Цикл
    ТаблЧасть.НоваяСтрока();
    ТаблЧасть.Количество = Табл.Количество;
    ТаблЧасть.Номенклатура = Табл.Номенклатура;
    ТаблЧасть.ЦенаВРознице = Табл.Цена;
    ТаблЧасть.СуммаВРознице = Табл.Сумма;
    КонецЦикла;
    
    ВыборкаДанных.Товары = ТаблЧасть;
    
    ВыгрузитьПоПравилу(ВыборкаДанных, , , , "ИмяПКОДляДокумента2");
    Отказ = 1;
    КонецЕсли;
    КонецЦикла;
    
    1. Создаешь два ПКО для Документа1 и Документа2, где объект источник пустой.
    2. Создаешь ПКО с источником документа, табличную часть, которого надо разбить, и в ПКГС перед обработкой этого ПКО вставляешь примерно такой код.
    Суть этого кода в том что обходя табличную часть исходного документа в зависимости от типа документа табличной части мы формирует две отдельные структуры для разных документов и передаем их соответсвующим правилам для выгрузки.
  9. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    Что сделал я на текущий момент:
    1. Создал ПКО для документов ПоступлениеНаРасчетныйСчет и СписаниеСРасчетногоСчета, источник - пустой. Для свойств указал необходимые правила конвертации, поставил галки - получать из входящих данных.
    2. Для документа "Движение денежных средств" создал правила выгрузки данных, в событии "Перед выгрузкой" добавил следующий код (аналогично коду TheSerg):

    Код:
    РасчетныйСчет = Объект.РасчетныйСчет;
    Объект.ВыбратьСтроки();
    Пока Объект.ПолучитьСтроку()=1 Цикл
    Если Объект.Приход > 0 тогда   // поступление на расчетный счет
    ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
    ВыборкаДанных.НоваяКолонка("Номер");
    ВыборкаДанных.НоваяКолонка("Дата");
    ВыборкаДанных.НоваяКолонка("НомерВходящегоДокумента");
    ВыборкаДанных.НоваяКолонка("ДатаВходящегоДокумента");
    ВыборкаДанных.НоваяКолонка("Контрагент");
    ВыборкаДанных.НоваяКолонка("ДоговорКонтрагента");
    ВыборкаДанных.НоваяКолонка("СуммаДокумента");
    ВыборкаДанных.НоваяКолонка("СчетОрганизации");
    ВыборкаДанных.УдалитьСтроки();
    ВыборкаДанных.НоваяСтрока();
    
    ВыборкаДанных.Номер = ПривестиНомерКДлине(Объект.НомерДок,11);
    ВыборкаДанных.Дата 		= Объект.ДатаДок;
    ВыборкаДанных.НомерВходящегоДокумента 		= Объект.НомерПлатДок;
    ВыборкаДанных.ДатаВходящегоДокумента 		= Объект.ДатаПлатДокум;
    ВыборкаДанных.Контрагент 			= Объект.Клиент;
    ВыборкаДанных.ДоговорКонтрагента 			= Объект.Договор;
    ВыборкаДанных.СуммаДокумента 				= Объект.Приход;
    ВыборкаДанных.СчетОрганизации 				= РасчетныйСчет;
    
    
    ВыгрузитьПоПравилу(ВыборкаДанных,,,, "ПоступлениеНаРасчетныйСчет");
    Отказ = 1;
    
    иначе // списание с расчетного счета
    
    ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
    ВыборкаДанных.НоваяКолонка("Номер");
    ВыборкаДанных.НоваяКолонка("Дата");
    ВыборкаДанных.НоваяКолонка("НомерВходящегоДокумента");
    ВыборкаДанных.НоваяКолонка("ДатаВходящегоДокумента");
    ВыборкаДанных.НоваяКолонка("Контрагент");
    ВыборкаДанных.НоваяКолонка("ДоговорКонтрагента");
    ВыборкаДанных.НоваяКолонка("СуммаДокумента");
    ВыборкаДанных.НоваяКолонка("СчетОрганизации");
    ВыборкаДанных.УдалитьСтроки();
    ВыборкаДанных.НоваяСтрока();
    
    ВыборкаДанных.Номер = ПривестиНомерКДлине(Объект.НомерДок,11);
    ВыборкаДанных.Дата = Объект.ДатаДок;
    ВыборкаДанных.НомерВходящегоДокумента 		= Объект.НомерПлатДок;
    ВыборкаДанных.ДатаВходящегоДокумента 		= Объект.ДатаПлатДокум;
    ВыборкаДанных.Контрагент 				= Объект.Клиент;
    ВыборкаДанных.ДоговорКонтрагента 			= Объект.Договор;
    ВыборкаДанных.СуммаДокумента 				= Объект.Расход;
    ВыборкаДанных.СчетОрганизации 				= РасчетныйСчет;
    
    
    ВыгрузитьПоПравилу(ВыборкаДанных,,,,"СписаниеСРасчетногоСчета");
    Отказ = 1;
    КонецЕсли;
    КонецЦикла;
    
    
    Вопрос вот в чем. При данном вызове "ВыгрузитьПоПравилу (ВыборкаДанных,,,,"СписаниеСРасчетногоСчета");" У меня выгружаются все 11 строк документа выписки, т.е. в бухгалтерии создаются 11 документов списания. Вроде бы все замечательно, но они пустые. При таком вызове "ВыгрузитьПоПравилу (Объект,,ВыборкаДанных,,"СписаниеСРасчетногоСчета");" выгружается только первая строка, т.е. создается только один документ, но он в свою очередь заполнен как надо. Что я сделал не так?
  10. TheSerg
    Offline

    TheSerg

    Регистрация:
    17 авг 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Ты в структуре документа "ВыборкаДанных" не описал саму табличную часть.

    создание структуры табличной части

    Код:
    ВыборкаДанных.НоваяКолонка("Товары");
    
    ТаблЧасть = СоздатьОбъект("ТаблицаЗначений");
    ТаблЧасть.НоваяКолонка("Количество");
    ТаблЧасть.НоваяКолонка("Номенклатура");
    ТаблЧасть.НоваяКолонка("ЦенаВРознице");
    ТаблЧасть.НоваяКолонка("СуммаВРознице");
    
    запись строк табличной части, и передача ее общей структуре документа

    Код:
    Пока Табл.ПолучитьСтроку() = 1 Цикл
    ТаблЧасть.НоваяСтрока();
    ТаблЧасть.Количество = Табл.Количество;
    ТаблЧасть.Номенклатура = Табл.Номенклатура;
    ТаблЧасть.ЦенаВРознице = Табл.Цена;
    ТаблЧасть.СуммаВРознице = Табл.Сумма;
    КонецЦикла;
    
    ВыборкаДанных.Товары = ТаблЧасть;
    
    Только реквизиты заменить на соответствующие вашим реквизитам табличной части документа приемника.
  11. Bond_HD
    Offline

    Bond_HD

    Регистрация:
    3 дек 2013
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Большое спасибо, очень помогло. Есть только один вопрос. Я переношу данные из ТиС 7.7 в ТиС 7.7. Мне нужно разбить "заявку покупателя" на "Реализация(купля-продажа)" и "Счет-фактуру". как сделать, что бы выгружаемая счет-Фактура была на основании выгружаемой Реализации?

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