8.х ОБМЕН Создание документа в конвертации данных

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

  1. TopicStarter Overlay
    nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Всем привет. Проблема такая. Есть Источник (Общепит) и приемник (Бухгалтерия обычная). В общепите в регистр сведений ЦеныНоменклатуры данные попадают документом поступление товаров и услуг. А в обычной бухгалтерии, документом установка цен номенклатуры. Нужно Каким то образом выгрузить этот регистр, но в качестве регистратора создать новый документ Установка цен номенклатуры. На данный момент, в принципе, инетересует только один тип цен, но мало ли. Тогда получается нужно создать отдельный документ на каждый тип цен. А в общепите получить срезПоследних на дату окончания выгрузки. т.е. на эту дату. Посмотреть вложение 16313

    Подскажите пожалуйста.
  2. TopicStarter Overlay
    nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    РЕШЕНО!!!
    Создал ПВД. Способ выборки указал произвольный алгоритм. Правило конвертации указал "УстановкаЦенНоменклатуры". В процедуре ПередОбработкой прописал этот код, дабы создавать новый документ с каждым новым периодом и новым типом цен.
    Код:
    // Необходимо создавать документы для каждого типа цен.
    ЗапросТиповЦен = Новый Запрос;
    ЗапросТиповЦен.Текст =
    "ВЫБРАТЬ
    | ТипыЦенНоменклатуры.Ссылка
    |ИЗ
    | Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры";
    РезультатЗапросаТиповЦен = ЗапросТиповЦен.Выполнить();
    Если НЕ РезультатЗапросаТиповЦен.Пустой() Тогда
    ВыборкаТиповЦен = РезультатЗапросаТиповЦен.Выбрать();
    Пока ВыборкаТиповЦен.Следующий() Цикл
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЦеныНоменклатурыСрезПоследних.Период КАК Период,
    | ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
    | ЦеныНоменклатурыСрезПоследних.Регистратор,
    | ЦеныНоменклатурыСрезПоследних.НомерСтроки,
    | ЦеныНоменклатурыСрезПоследних.Активность,
    | ЦеныНоменклатурыСрезПоследних.Номенклатура,
    | ЦеныНоменклатурыСрезПоследних.Валюта,
    | ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСрезаЦен, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
    |
    |УПОРЯДОЧИТЬ ПО
    | Период
    |ИТОГИ ПО
    | Период,
    | ТипЦен";
    Запрос.УстановитьПараметр("ДатаСрезаЦен", ДатаОкончания);
    Запрос.УстановитьПараметр("ТипЦен"	  , ВыборкаТиповЦен.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
    ВыборкаПоПериоду = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаПоПериоду.Следующий() Цикл
    // Сначала обходим записи по периоду, дабы создать документы с нужной датой...
    ИсходящиеДанные = Новый Структура;
    Товары = Новый ТаблицаЗначений;
    Товары.Колонки.Добавить("Валюта");
    Товары.Колонки.Добавить("Номенклатура");
    Товары.Колонки.Добавить("Цена");
    ДатаДокумента	= ВыборкаПоПериоду.Период;
    ВыборкаПоТипуЦен = ВыборкаПоПериоду.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаПоТипуЦен.Следующий() Цикл
    ТипЦен = ВыборкаПоТипуЦен.ТипЦен;
    ВыборкаДетальныхЗаписей = ВыборкаПоТипуЦен.Выбрать();
    Пока ВыборкаДетальныхЗаписей.Следующий() Цикл
    НоваяСтрока			  = Товары.Добавить();
    НоваяСтрока.Валюта	   = ВыборкаДетальныхЗаписей.Валюта;
    НоваяСтрока.Номенклатура = ВыборкаДетальныхЗаписей.Номенклатура;
    НоваяСтрока.Цена		 = ВыборкаДетальныхЗаписей.Цена;
    КонецЦикла;
    ИсходящиеДанные.Вставить("НовыйДокумент", Истина);
    ИсходящиеДанные.Вставить("Дата"		 , ДатаДокумента);
    ИсходящиеДанные.Вставить("ТипЦен"	   , ТипЦен);
    ИсходящиеДанные.Вставить("Товары"	   , Товары);
    ВыгрузитьПоПравилу(ИсходящиеДанные, , , , "УстановкаЦенНоменклатуры");
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    Посмотреть вложение 16314
    Затем в ПКО необходимые данные указал, чтобы получить из входящих данных. А в процедуре ПередОбработкой табличной части "Товары" прописал это
    Код:
    Если Источник.Товары.Количество() = 0 Тогда
    Отказ = Истина;
    Иначе
    ВходящиеДанные = Новый Структура("Товары");
    ВходящиеДанные.Товары = Новый ТаблицаЗначений;
    ВходящиеДанные.Товары.Колонки.Добавить("Валюта");
    ВходящиеДанные.Товары.Колонки.Добавить("Номенклатура");
    ВходящиеДанные.Товары.Колонки.Добавить("Цена");
    Для каждого ТекСтрока Из Источник.Товары Цикл
    НовСтрока			   = ВходящиеДанные.Товары.Добавить();
    НовСтрока.Валюта		= ТекСтрока.Валюта;
    НовСтрока.Номенклатура  = ТекСтрока.Номенклатура;
    НовСтрока.Цена		  = ТекСтрока.Цена;
    КонецЦикла;
    КонецЕсли;
    
    Дабы проинициализировать ВходящиеДанные из которых получается табличная часть. И все гуд...
  3. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    только в ПВД создание таблицы значений Товары засунь внутрь цикла по типу цен, а то лишнего накидаешь

    ну и если не ставить галки получения из входящих данных, то в ПКО не надо кучу кода писать
  4. TopicStarter Overlay
    nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Там по группировкам же обход идет. Как раз заполняются детальные записи.
    Т.е. если убрать галку "Получить из входящих данных" на ПКО, на всех свойствах, включая табличную часть. То она все равно заполнится? И без кода?
  5. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Да, если в процедуру ВыгрузитьПоПравилу первым параметром передается структура, то она выступает в качестве Источника. Входящие данные при этом пустые.
    ПКС смотрит на наличие в источнике нужного свойства по наименованию и если оно есть, то его использует. Если в ПКО есть табличная часть, то в источнике должно быть свойство с таблицей значений, соответствующей структуре табличной части, с таким же наименованием, как у табличной части.

    у тебя таблица не чистится при смене типа цен, в следующий документ попадут все цены из предыдущего с той же датой
  6. TopicStarter Overlay
    nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    А, об этом. Да, я в курсе. Не охота переделывать. Просто в базе пока один тип цен. Поэтому написал на скорую руку. Завтра нормально переделаю. И еще про ВыгрузитьПоПравилу сделаю нормально. Спасибо))))

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