Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/58: Рейтинг темы: голосов - 58, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 5
1

Создать несколько документов программно

09.06.2013, 00:04. Показов 10966. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Существует документ "Распоряжение", на его основе при проведении документа требуется создать документы "Задание" количество которых равно количеству строк в табличной части "Распоряжения". При этом в случае если Проведенное "Распоряжение" после этого редактируется, то те документы которые были созданы обновлялись но не удалялись (т.к. допустим кто-то уже внес новые данные в эти документы вручную и не хочется чтобы эти данные удалились) или тем более не дублировались.

например:

------------------------------------------
Распоряжение имеет следующие поля:

Реквизиты: дата, сотрудник
Табличная часть: склад, количество
------------------------------------------
Задание имеет следующие поля:

Реквизиты: дата, сотрудник, склад, количество
Табличная часть: наименование товара, количество

сейчас у меня это реализовано так:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Процедура ОбработкаПроведения(Отказ, Режим)
    
    Для Каждого ТекСтрокаТабличнаяЧасть Из ТабличнаяЧасть Цикл
        МойДокЗадание = Документы.Задание.СоздатьДокумент();
        МойДокЗадание.Заполнить(Основание);
        МойДокЗадание.Дата = Дата;
        МойДокЗадание.Сотрудник = Сотрудник;
        МойДокЗадание.Склад = ТекСтрокаТабличнаяЧасть.Склад;
        МойДокЗадание.Количество = ТекСтрокаТабличнаяЧасть.Количество;
        МойДокЗадание.Записать();
        МойДокЗаданиеСсылка = МойДокЗадание.Ссылка;
    КонецЦикла;
 
КонецПроцедуры
но в этом коде есть существенный недостаток - он заново создает дубликаты при перепроведении "Распоряжения" и хотелось бы видеть или какие документы были созданы при проведении в "Распоряжении" или в "Задании" на основании какого документа оно создано.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2013, 00:04
Ответы с готовыми решениями:

Создание документов программно
как создать документ программно. пишу НовДок = документы.блаблабла.создатьдокумент(); или новдок...

1С 7.7. Несколько пиктограмм для табличной части журнала документов
Подскажите, как можно для одной строки таб.части журнала документов установить несколько пиктограмм...

Как выбрать несколько документов одного типа в обработке?
Мне нужно в шапке обработки выбрать несколько документов одного типа, и табличные части этих...

Вывести несколько табличных документов в Word с разной ориентацией страниц
Здравствуйте, коллеги Столкнулся с такой проблемой: необходимо вывести несколько печатных форм...

9
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
09.06.2013, 00:45 2
Определитесь с регламентом. Обычно д.б. чёткое соответствие, поэтому сначала производится попытка найти существующий док и обновить его. Иначе только - создать

Добавлено через 3 минуты
МойДокЗадание =
если найден - найденная ссылка.ПолучитьОбъект() Иначе создать далее по тексту
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 5
09.06.2013, 11:08  [ТС] 3
Я понимаю что нужно сделать условие поиска, по которому нужно отслеживать существует созданныйлдокумент или нет, но как раз именно это я и не знаю как реализовать
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
09.06.2013, 11:14 4
Цитата Сообщение от supreme666 Посмотреть сообщение
Существует документ "Распоряжение", на его основе
В одном из доков нужна ссылка на другой. В 1с принято заводить этот атрибут в "нижележащем" доке: Задание.Распоряжение(тип ДокСсылка.Распоряж)
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 5
09.06.2013, 12:20  [ТС] 5
Цитата Сообщение от duk337 Посмотреть сообщение
Определитесь с регламентом. Обычно д.б. чёткое соответствие, поэтому сначала производится попытка найти существующий док и обновить его. Иначе только - создать

Добавлено через 3 минуты
МойДокЗадание =
если найден - найденная ссылка.ПолучитьОбъект() Иначе создать далее по тексту

а не могли бы вы поподробнее расписать реализацию условия "если" с учетом того что я сделал следующие дополнения в код ?

создал в документе "Задание" реквизит "ДокументОснование" с типом данных "ДокументСсылка.Распоряжение"
создал в документе "Распоряжение" в табличной части реквизит "СформированноеЗадание" с типом данных "ДокументСсылка.Задание"

также в код проведения "Распоряжения" добавил код

1C
1
2
3
МойДокЗадание.ДокументОснование = Ссылка;
МойДокЗадание.Записать(); // эта строка уже была в предыдущем коде
ТекСтрокаТабличнаяЧасть.СформированноеЗадание = МойДокЗадание.Ссылка;
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
09.06.2013, 13:28 6
Цитата Сообщение от duk337 Посмотреть сообщение
В 1с принято заводить этот атрибут в "нижележащем" доке
для здоровья лучше избежать кольцевой ссылки. Т.е. оставляем только в "Задание".
синт.пом "ОбработкаЗаполнения".
Мне алгоритм неясен: штатный ВводНаОсновании или "по моему хотению"
Цитата Сообщение от supreme666 Посмотреть сообщение
ТекСтрокаТабличнаяЧасть.СформированноеЗадание = МойДокЗадание.Ссылка;
убей - не пойму
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 5
09.06.2013, 13:59  [ТС] 7
Цитата Сообщение от duk337 Посмотреть сообщение
для здоровья лучше избежать кольцевой ссылки. Т.е. оставляем только в "Задание".
синт.пом "ОбработкаЗаполнения".
Мне алгоритм неясен: штатный ВводНаОсновании или "по моему хотению"
убей - не пойму

смысл смотри вложенную картинку

один сотрудник готовит документ, который создает несколько документов на основании данных табличной части для других сотрудников и нужно чтобы не задваивать созданные документы при перепроведении первого нужно что-то сделать с кодом который я написал в самом начале темы
Миниатюры
Создать несколько документов программно  
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
09.06.2013, 14:41 8
забудь про свой код.
По каждой строке
Проверить, заполнен ли док.
Если нет - проверить, существует ли он.
Если нет - создать, записать, заполнить атрибут строки
Если да - обновить

это называется алгоритм
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 5
09.06.2013, 16:29  [ТС] 9
Цитата Сообщение от duk337 Посмотреть сообщение
забудь про свой код.
По каждой строке
Проверить, заполнен ли док.
Если нет - проверить, существует ли он.
Если нет - создать, записать, заполнить атрибут строки
Если да - обновить

это называется алгоритм
спасибо за совет, только вот было бы круто если бы вы хоть какой нибудь пример кода написали ибо в книжках о программировании 1с не описаны такие вещи, а вы очень абстрактными и очень общими фразами оперируете. также мне не понятно что значит "заполнен ли док." (какой док и что значит заполнен - создан или еще что-то), что такое "атрибут строки" (стандартный реквизит "ссылка", значение созданного мною столбца "Сформированное задание")
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
09.06.2013, 17:38 10
можно подумать, что на Вашем чердаке порядок должен наводить я.
1. Для Каждого ТекСтр Из ТЧ Цикл
2. Док=ТекСтр.СвязанныйДок - это Ваш, тип Ссылка.
3. Если ЗначениеЗаполнено(Док) тогда обновить
4. Попытаться найти этот док по ключам: я советовал вроде воткнуть в него ссылку на док-основание
5. Если нашли - ТекСтр.СвязанныйДок =док.Ссылка.
5.1. Обновить.
6. Создать док.
7. Обновить. (для всех случаев)

Распределение скриптов по функциям и процедурам - дело вкуса и ситуации (упр/неупр, например)

Добавлено через 3 минуты
я блок-схему рисовать не буду
1
09.06.2013, 17:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2013, 17:38
Помогаю со студенческими работами здесь

Вывод в печатную форму несколько выделенных документов
Доброе время суток Уважаемые профи 1С! Ребят помогите новичку разобраться! Задача стоит такая:...

Как программно обратиться к журналу документов
Добрый день! Конфигурация 1с 7.7 Подскажите как программно обратится к документу из журнала...

Как программно создать несколько StackPanel?
У меня есть следующий код: <ListBox Margin="0,75,0.2,18" Name="ListBox1"> ...

Как программно создать несколько текстовых полей на странице?
Как программно создать несколько текстовых полей на странице? На странице окно со скролом, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru