8.х Обработка перебора регистра по документам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем pal_vas, 1 дек 2008.

  1. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Стоит задача:
    Создать обработку, которая перебирает реестот документов на текущюю дату, и если в результате перебора находится один документ с определенным реквизитом, на основании этого дока создается еще один, с такой же таб частью...
    Кто нибуть делал подобное, выложите плиз пример :unsure: или на мыльце киньте pal_vas@mail.ru...
  2. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26

    напиши небольшой запрос по выборке документов с твоим условием и на основании создавай второй копированием
    а примером ожет тебе послужить штатный реестр документов... измени условие и все
  3. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    А как сделать чтобы проводилась проверка был уже создан документ на основании дока из реестра или нет, просто хотел сначала чтобы обработка работала только на текущую дату, тогда проблем не было бы, но юзеры оказывается заводят доки задним числом....
  4. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Проверяй реквизит "ДОкументОснование" или ищи подчиненные документы...
  5. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Гы, вместе мы сила!!!) :unsure: Спасибо за подсказку, обработку создал, вот код, поскажите поподробней, разжуйте плиз)), как сдесь искать подчиненные доки?
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    запрос = Новый запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	ПередаточнаяНакладная.Дата,
    |	ПередаточнаяНакладная.Организация,
    |	ПередаточнаяНакладная.СкладОтправитель,
    |	ПередаточнаяНакладная.СкладПолучатель
    |ИЗ
    |	Документ.ПередаточнаяНакладная КАК ПередаточнаяНакладная
    |ГДЕ
    |	ПередаточнаяНакладная.Дата = &Дата";
    Дата = ТекущаяДата();
    Запрос.УстановитьПараметр("Дата",Дата);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий()  цикл
    Документ = Документы.ПеремещениеТоваров.СоздатьДокумент();
    Документ.УстановитьНовыйНомер();
    Документ.Дата  = Выборка.дата;
    Документ.Организация = выборка.организация;
    Документ.ОтражатьВУправленческомУчете = Истина;
    Документ.СкладОтправитель = выборка.СкладОтправитель;
    Документ.СкладПолучатель = Выборка.СкладПолучатель;
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    КонецЦикла;
    
    
    
    
    КонецПроцедуры
    
  6. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Сначало уточни что ты имеешь ввиду парметром дата?? Т.е. если док отличается на секунду то он уже не уникален?? Так??
    Может лучше искать в интервала? И условие накладывать какое-нить другое...
    а также скажи документы вводяться как создать на основании или просто вручную???
  7. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Да, ты прав насчет даты я лохонулся..., доки вводятся не на основании...
    Смысл какой, раз в день из баз (РИБ) филиалов фирмы выгружаются доки, в том числе и "Передаточная накладная", необходимо создать некий робот который, допустим ночью перебирает реестр этих самых "Передаточных накладных" и если находит док. с реквизитом "Склад получатель" = Виртуальный, тогда необходимо создать док. перемещение, состав которого будет как в "Передаточная накладная", я так полагаю нужно сделать чтобы док."Перемещение" создавался на основании "Передаточная накладная"? или как лучше сделать посоветую....
  8. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Я бы сделал так ..
    При поиске идем ище склад виртуальный..
    т.е.
    |ГДЕ
    | ПередаточнаяНакладная.Склад = &Склад";
    | И ПередаточнаяНакладная.Дата между &ДатаНачала и &ДатаКонца
    ..
    устанавливаем парметры

    Пока Рез.Следующий Цикл
    ДокНовый = Документы.Перемещение.СоздатьДокумент();
    ДокНовый.Заполнить(Рез.Ссылка) - документ на основании которого
    докНовый.Записать(РежимЗаписи.Проведение);
    КонецЦикла;

    и еще.. если иСпользовать Заполнить.. то у тебя в Модулеобъекта документа Перемещение должен быть код процедуры обработкаЗаполнения()
  9. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое :unsure:
    А как теперь сделать чтобы документы не дублировались, ну тоесть на основании одного и того же дока не создавалось несколько.....
  10. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Вот код для создания и заполнения нового дока, плиз подскажите как теперь сделать чтобы на основании одного дока не создавалось несколько :unsure:
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    запрос = Новый запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	ПередаточнаяНакладная.Ссылка,
    |	ПередаточнаяНакладная.Дата,
    |	ПередаточнаяНакладная.СкладПолучатель,
    |	ПередаточнаяНакладная.ФилиалПолучателя,
    |	ПередаточнаяНакладная.Товары.(
    |		Ссылка,
    |		НомерСтроки,
    |		Номенклатура,
    |		КоличествоМест,
    |		ЕдиницаИзмерения,
    |		ЕдиницаИзмеренияМест,
    |		Коэффициент,
    |		Количество,
    |		Цена,
    |		ХарактеристикаНоменклатуры,
    |		УдалитьСпособСписанияОстаткаТоваров,
    |		СерияНоменклатуры,
    |		ДокументРезерва,
    |		Качество,
    |		ВнутреннийЗаказ
    |	)
    |ИЗ
    |	Документ.ПередаточнаяНакладная КАК ПередаточнаяНакладная
    |ГДЕ
    |	ПередаточнаяНакладная.Дата > &Начало
    |	И ПередаточнаяНакладная.Дата < &Конец
    |	И ПередаточнаяНакладная.СкладПолучатель = &Склад";
    Начало = Дата(2008,01,01,00,00,00);
    Конец = Дата(2010,01,01,00,00,00);
    Склад = Справочники.Склады.Передаточный;
    Запрос.УстановитьПараметр("Начало",Начало);
    Запрос.УстановитьПараметр("Конец",Конец);
    Запрос.УстановитьПараметр("Склад",Склад);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий()  цикл
    Документ = Документы.ПеремещениеТоваров.СоздатьДокумент();
    Документ.ЗаполнитьТоварыПоПоступлениюТоваровУпр(Выборка.ссылка);
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    КонецЦикла;
    
    Код:
    Процедура ЗаполнитьТоварыПоПоступлениюТоваровУпр(ДокументПоступления) Экспорт
    ТаблицаЗначенийТовары    = ДокументПоступления.Товары.Выгрузить();
    ЭтотОбъект.Дата = ДокументПоступления.Дата;
    ЭтотОбъект.
    ЭтотОбъект.Организация = ДокументПоступления.Организация;
    ЭтотОбъект.СкладОтправитель = ДокументПоступления.СкладПолучатель;
    ЭтотОбъект.ОтражатьВУправленческомУчете = Истина;
    ЭтотОбъект.СкладПолучатель = ДокументПоступления.СкладПолучатель;
    Для каждого СтрокаТаблицыЗначений Из ТаблицаЗначенийТовары Цикл
    НоваяСтрока = Товары.Добавить();
    НоваяСтрока.Номенклатура           =     СтрокаТаблицыЗначений.Номенклатура;
    НоваяСтрока.СерияНоменклатуры      =     СтрокаТаблицыЗначений.СерияНоменклатуры;
    НоваяСтрока.ЕдиницаИзмерения       =     СтрокаТаблицыЗначений.ЕдиницаИзмерения;
    НоваяСтрока.ЕдиницаИзмеренияМест       = СтрокаТаблицыЗначений.ЕдиницаИзмеренияМест;
    НоваяСтрока.Количество                 = СтрокаТаблицыЗначений.Количество;
    КонецЦикла; 
    
    КонецПроцедуры 
    
  11. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Сделай проверку на Докумен.ДокументОснование .. или типа того.. если есть.. то пошел в опу))
  12. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Слушай, сделал вот так:
    Код:
    Пока Выборка.Следующий()  цикл 
    Перемещение = Документы.ПеремещениеТоваров.НайтиПоРеквизиту("ДокументОснование",Выборка.ссылка);
    если  перемещение = неопределено тогда
    Документ = Документы.ПеремещениеТоваров.СоздатьДокумент();
    Документ.ЗаполнитьТоварыПоПоступлениюТоваровУпр(Выборка.ссылка);
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    конецесли; 
    КонецЦикла;
    
    
    Чот не работает, я в програмировании не силен, а сделать надо, подскажи что не так то у меня??? :unsure:
  13. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
  14. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Это код процедуры:

    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    запрос = Новый запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	ПередаточнаяНакладная.Ссылка,
    |	ПередаточнаяНакладная.Дата,
    |	ПередаточнаяНакладная.СкладПолучатель,
    |	ПередаточнаяНакладная.ФилиалПолучателя,
    |	ПередаточнаяНакладная.Товары.(
    |		Ссылка,
    |		НомерСтроки,
    |		Номенклатура,
    |		КоличествоМест,
    |		ЕдиницаИзмерения,
    |		ЕдиницаИзмеренияМест,
    |		Коэффициент,
    |		Количество,
    |		Цена,
    |		ХарактеристикаНоменклатуры,
    |		УдалитьСпособСписанияОстаткаТоваров,
    |		СерияНоменклатуры,
    |		ДокументРезерва,
    |		Качество,
    |		ВнутреннийЗаказ
    |	),
    |	ПередаточнаяНакладная.Доквведеный
    |ИЗ
    |	Документ.ПередаточнаяНакладная КАК ПередаточнаяНакладная
    |ГДЕ
    |	ПередаточнаяНакладная.Дата > &Начало
    |	И ПередаточнаяНакладная.Дата < &Конец
    |	И ПередаточнаяНакладная.СкладПолучатель = &Склад";
    Начало = Дата(2008,01,01,00,00,00);
    Конец = Дата(2010,01,01,00,00,00);
    Склад = Справочники.Склады.Передаточный;
    Запрос.УстановитьПараметр("Начало",Начало);
    Запрос.УстановитьПараметр("Конец",Конец);
    Запрос.УстановитьПараметр("Склад",Склад);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий()  цикл 
    если  не значениеЗаполнено(Выборка.докВведеный)     тогда
    Документ = Документы.ПеремещениеТоваров.СоздатьДокумент();
    Документ.ЗаполнитьТоварыПоПоступлениюТоваровУпр(Выборка.ссылка);
    Документ.Записать(РежимЗаписиДокумента.Проведение);
    конецесли; 
    КонецЦикла;
    
    
    
    КонецПроцедуры
    
    а это код обработки заполнения:
    Код:
    Процедура ЗаполнитьТоварыПоПоступлениюТоваровУпр(ДокументПоступления) Экспорт
    ТаблицаЗначенийТовары    = ДокументПоступления.Товары.Выгрузить();
    ЭтотОбъект.Дата = ДокументПоступления.Дата;
    ЭтотОбъект.ДокументОснование = ДокументПоступления;
    ЭтотОбъект.Организация = ДокументПоступления.Организация;
    ЭтотОбъект.СкладОтправитель = ДокументПоступления.СкладПолучатель;
    ЭтотОбъект.ОтражатьВУправленческомУчете = Истина;
    ЭтотОбъект.СкладПолучатель = ДокументПоступления.СкладПолучатель;
    Для каждого СтрокаТаблицыЗначений Из ТаблицаЗначенийТовары Цикл
    НоваяСтрока = Товары.Добавить();
    НоваяСтрока.Номенклатура           =     СтрокаТаблицыЗначений.Номенклатура;
    НоваяСтрока.СерияНоменклатуры      =     СтрокаТаблицыЗначений.СерияНоменклатуры;
    НоваяСтрока.ЕдиницаИзмерения       =     СтрокаТаблицыЗначений.ЕдиницаИзмерения;
    НоваяСтрока.ЕдиницаИзмеренияМест       = СтрокаТаблицыЗначений.ЕдиницаИзмеренияМест;
    НоваяСтрока.Количество                 = СтрокаТаблицыЗначений.Количество;
    КонецЦикла; 
    ДокументПоступления.Доквведеный = ЭтотОбъект.ссылка;
    КонецПроцедуры
    
  15. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Я так понимаю ты в параметр склад передаешь ссылку???
    т.е.
    склад = Справочники.Склады.найтиПонайменованию("Передаточный");
    Запрос.УстановитьПараметр("Склад",Склад)
    Начало = ДАта("20080101")

    Конец = КонецГода(ТекущаяДата());
  16. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Склад предопределенный,.... как мне при создании нового документа "Перемещение" присвоить реквизиту документа основания "ДокВведеный" ссылку на документ "Перемещение" созданный....
  17. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Возможно тебе надо указать явно
    документОснование = ДОкумент.Ссылка;


    вообще должо работать
  18. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Да как то не пашет,..., :unsure: к вечеру уже голова не варит блин....
    Давай еще раз, смотри в Документе "Передаточная накладная" есть реквизит "ДокВведеный" с типом Ссылка.Документы.Перемещение, как при создании нового документа "Перемещение товаров" в этот реквизит записать ссылку на этот новый созданный документ... :smile: :aua: :vis:
  19. TopicStarter Overlay
    pal_vas
    Offline

    pal_vas Опытный в 1С

    Регистрация:
    7 ноя 2008
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Всёёёёёёёё :unsure: одалел, все пашет :smile: , кому интересно могу описать косяки и код выложить...
  20. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    главное что решил...)) И в чем косяк был.. в двух словах.. без кода..

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