|   |   | 
| 
 | v7: Групповое создание документов на основании заказов | ☑ | ||
|---|---|---|---|---|
| 0
    
        kissolo 13.09.20✎ 19:28 | 
        Бухгалтерия 7.7
 Надо создать на основании выбранных заказов документы вида "расходная накладная". Заказы выведены в тз ТаблицаДокументыНаОтправку на форме обработки, пользователь отмечает нужные документы и запускает формирование накладных. Не могу понять, изза чего происходит такой глюк - все документы создаются на основании первого выбранного заказа, ощущение, что КонтекстФормы1 не обнуляется (это я даже вижу в отладчике - то обнуляется, то нет..). Образец кода группового формирования документов взят с ИС. Вот сам код: Процедура СформироватьНакладную(Док,КонтекстФормы1) Перем КонтекстФормы1; Сообщить(""+Док.ТекущийДокумент()+". грп="+док.Заказчик); //создаю на основании документа ДОК расходную накладную, пишу ее в переменную КонтекстФормы1, не записываю ОткрытьФорму("Документ.РасходнаяНакладная",КонтекстФормы1,Док); // копирую реквизиты заполненного на основании ДОКа документа расх.накладной в ДокНа, который и записываю ДокНа = СоздатьОбъект("Документ.РасходнаяНакладная"); ДокНа.Новый(); ЧЧ = 0;ММ = 0;СС = 0; Док.ПолучитьВремя(ЧЧ,ММ,СС); ДокНа.УстановитьВремя(ЧЧ,ММ,СС+1); КонтекстФормы1.УстановитьВремя(ЧЧ,ММ,СС+1); ДокНа.ДатаДок = Док.ДатаДок; КолРек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(Сч); ДокНа.УстановитьАтрибут(Рек,КонтекстФормы1.ПолучитьАтрибут(Рек)); КонецЦикла; КолРек = Метаданные.ОбщийРеквизитДокумента(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.ОбщийРеквизитДокумента(Сч); ДокНа.УстановитьАтрибут(Рек,КонтекстФормы1.ПолучитьАтрибут(Рек)); КонецЦикла; Таб = СоздатьОбъект("ТаблицаЗначений"); КонтекстФормы1.ВыгрузитьТабличнуюЧасть(Таб); ДокНа.ЗагрузитьТабличнуюЧасть(Таб); ДокНа.Записать(); ДокНа.Провести(); Сообщить("Сформирована расх. накладная "+ДокНа+". грп="+ДокНа.Грузополучатель+" "+ДокНа.Грузополучатель1); // обнуляю переменную КонтекстФормы1 - что не очень получается :( //Если ТипЗначенияСтр(КонтекстФормы1) = "ГрупповойКонтекст" Тогда КонтекстФормы1.Форма.Закрыть(0); //КонецЕсли; КонтекстФормы1=""; КонецПроцедуры // СформироватьНакладную Процедура СформироватьРасходныеНакладные() ТаблицаДокументыНаОтправку.ВыбратьСтроки(); Пока ТаблицаДокументыНаОтправку.ПолучитьСтроку() = 1 Цикл Если СокрЛП(ТаблицаДокументыНаОтправку._ФлагВыбора) = "" Тогда Продолжить; КонецЕсли; Док1 = СоздатьОбъект("Документ"); Док = ТаблицаДокументыНаОтправку._ТекущийДокумент; // Заказ флУжеЕстьРН = 0; Док1.ВыбратьПОдчиненныеДокументы(,,Док); Пока Док1.ПолучитьДокумент() = 1 Цикл Если (Док1.Вид() = "РасходнаяНакладная") и (Док1.ПометкаУдаления() = 0) Тогда Мессага = "Для заказа " + ТаблицаДокументыНаОтправку.Номер + " от " + ТаблицаДокументыНаОтправку.Дата + " уже есть реализация " + Док1; Сообщить(Мессага); флУжеЕстьРН = 1; КонецЕсли; КонецЦикла; Если флУжеЕстьРН=0 Тогда СформироватьНакладную(Док); КонецЕсли; КонецЦикла; ОбновитьСписокДокументов(); КонецПроцедуры | |||
| 1
    
        ДенисЧ 13.09.20✎ 19:30 | 
        Процедура СформироватьНакладную(Док,КонтекстФормы1)
 ... СформироватьНакладную(Док); Что-то меня тут смущает | |||
| 2
    
        kissolo 13.09.20✎ 19:36 | 
        (1) Прошу прощения, это я уже пробовал контекстФормы1 передавать как переменную, каждый раз заново инициализируя. 
 Конечно Процедура СформироватьНакладную(Док) | |||
| 3
    
        Ёпрст гуру 13.09.20✎ 20:19 | 
        (0)
 Процедура СформироватьНакладную(Док,КонтекстФормы1) Перем КонтекстФормы1; зачет ага | |||
| 4
    
        Ёпрст гуру 13.09.20✎ 20:23 | 
        ну и в твоём коде, форма открытого дока будет закрыта после окончания цикла     | |||
| 5
    
        Ёпрст гуру 13.09.20✎ 20:24 | 
        и..делать это через открытие формы, моветон. Это всё от лени, лени прописывать код в обработке.     | |||
| 6
    
        Ёпрст гуру 13.09.20✎ 20:25 | 
        если че, ложное закрытие формы спасёт, или обработка ожидания, или формековское генерация внешнего события     | |||
| 7
    
        Cthulhu 13.09.20✎ 20:32 | 
        ну и, хм... Метаданные.ОбщийРеквизитДокумента(); незаслужено забыто...
 короче - неаккуратный и невнимательно написанный говнокод | |||
| 8
    
        kissolo 13.09.20✎ 23:29 | 
        (3) я уже написал выше, переменная "контекстФормы1" в параметрах осталась от последнего варианта, когда я извращался по-разному, пытаясь заставить заработать обработку. Так-то она у меня локальная в пределах процедуры.
 (4) Почему она не закрывается при завершении процедуры формирования конкретного документа? КонтекстФормы1 - это же локальная переменная! Тем более, что там принудительная команда стоит. Как мне закрывать форму при завершении процедуры "СформироватьНакладную"? (5) скажите, как это сделать оптимальнее? Повторять процедуры заполнения шапки и табличной части в обработке не хочется. Мало ли что мы в дальнейшем поменяем в коде документа, вдруг забудем внести эти изменения в обработку? Предыдущим вариантом было - вынесение процедур заполнения документа из модуля формы в глобальный модуль, чтобы там их запускать и при обычном вводе на основании (или при простом вводе документа), и при создании документов в обработке. Мне этот вариант, найденный в интернете и переработанный под себя, показался правильнее - я не трогаю основной код документа, и при этом все заполняется так, как мне надо. (7) Из общих реквизитов документа в конфигурации есть только комменты. Которые при вводе на основании не заполняются. Смысл их переносить? | |||
| 9
    
        kissolo 13.09.20✎ 23:37 | 
        (6) Почитал про ложное закрытие формы. 
 Спасибо, попробую. | |||
| 10
    
        GreyK 14.09.20✎ 01:42 | 
        (0) А зачем тебе нужно контекст формы открывать?     | |||
| 11
    
        Duke1C 14.09.20✎ 10:17 | 
        (10) +1. Создавай сразу, без открытия формы. Только не мешало бы проверочку организовать, на предмет того, что накладная уже создавалась на основании конкретного заказа. А то юзеры наформируют тебе...     | |||
| 12
    
        GreyK 14.09.20✎ 12:45 | 
        +(10) Для взятия контекста документа в 7ке есть специальная функция вроде ГлВзятьКнотекст().     | |||
| 13
    
        kissolo 14.09.20✎ 23:09 | 
        (10), (11) если я правильно понял вопрос, вы предлагаете сразу открывать форму нового расходного ордера, заполнять его на основании заказа, записывать его и проводить?
 Такой вариант не работает. Если я в процедуре ВводНаОсновании() пытаюсь записать документ - программа ругается. (11) В исходном моем коде такая проверка (на существующие расх. накладные) есть. (12) Не покажете на примере, как ее можно использовать? | |||
| 14
    
        GreyK 14.09.20✎ 23:20 | 
        (13) Откуда вы запускаете процедуру СформироватьРасходныеНакладные()?     | |||
| 15
    
        kissolo 14.09.20✎ 23:50 | 
        (14) из кнопки на форме.     | |||
| 16
    
        GreyK 14.09.20✎ 23:51 | 
        (13) В 7ке есть примеры использования этой функции, достаточно поиском по конфигурации пройтись.    
 Пример. В форме документа: //__________________________________________________________________ Процедура ПриИзмененииДаты() Если ДатаГод(СтараяДата) <> ДатаГод(ДатаДок) Тогда глУстановитьНомерДок(глВзятьКонтекст(Контекст)); КонецЕсли; КонецПроцедуры //ПриИзмененииДаты() В глобальнике: //_____________________________________________________________________________ Процедура глУстановитьНомерДок(Конт,Префикс="-") Экспорт фЭтоАнгар=0; Если (Конт.вид()="Приход")или(Конт.Вид()="РасходнаяНакладная")или(Конт.Вид()="Счет")или(Конт.Вид()="СписаниеИзлишки") Тогда Если Конт.Склад=Константа.СкладАнгар Тогда фЭтоАнгар=1; КонецЕсли; КонецЕсли; Если Конт.вид()="Перемещение" Тогда Если (Конт.СкладИсточник=Константа.СкладАнгар)или(Конт.СкладПолучатель=Константа.СкладАнгар) Тогда фЭтоАнгар=1; КонецЕсли; КонецЕсли; Если фЭтоАнгар=0 Тогда Если (Конт.вид()="жРасходнаяНакладная")или(Конт.Вид()="РасходнаяНакладная") Тогда мПерем=СокрЛП(Конт.РБ.префикс)+СокрЛП(Конт.Фирма.ПрефиксНомеровДокументов)+СокрЛП(Конт.ВидОплаты.Префикс); Конт.УстановитьНовыйНомер(""+мПерем+Префикс); ИначеЕсли (Конт.вид()="жСчет")или(Конт.вид()="ПлатежноеПоручение") Тогда мПерем=СокрЛП(Конт.Фирма.ПрефиксНомеровДокументовПП); Конт.УстановитьНовыйНомер(""+мПерем+Префикс); ИначеЕсли (Конт.вид()="ПриходныйОрдер")или(Конт.вид()="РасходныйОрдер") Тогда мПерем=СокрЛП(Конт.Фирма.ПрефиксНомеровДокументов)+СокрЛП(Конт.Касса.Префикс); Конт.УстановитьНовыйНомер(""+мПерем+Префикс); ИначеЕсли Конт.РБ.Выбран()=1 Тогда Конт.УстановитьНовыйНомер(""+СокрЛП(Конт.РБ.Префикс)+СокрЛП(Конт.Фирма.ПрефиксНомеровДокументов)+Префикс); Иначе Сообщить("У Распр.базы "+ Конт.РБ + " не указан префикс!!!"); КонецЕсли; КонецЕсли; КонецПроцедуры | |||
| 17
    
        kissolo 15.09.20✎ 00:00 | 
        (16) офф. Подскажите, как прятать код в спойлер? 
 Чего сейчас удалось добиться. Документы создаются по всем заказам, но для первого заказа почему-то создаются 2 документа (пошагово посмотрел - контекст не закрывается по какой-то причине). Примечание к коду - на форме есть объект "Текст", который вызывает процедуру "обновление". При нажатии на кнопку [Сформировать накладные] сначала инициализируется переменная "флПервыйЗапуск=1;" Потом запускается процедура "СформироватьРасходныеНакладные()" Сам код (убрал лишние процедуры, не относящиеся к проблеме): Перем КонтекстФормы,Док; Перем Работаем; Перем флПервыйЗапуск; Процедура СформироватьНакладную(КонтекстФормы) // копирую реквизиты заполненного на основании ДОКа документа расх.накладной в ДокНа ДокНа = СоздатьОбъект("Документ.РасходнаяНакладная"); ДокНа.Новый(); ЧЧ = 0;ММ = 0;СС = 0; Док.ПолучитьВремя(ЧЧ,ММ,СС); ДокНа.УстановитьВремя(ЧЧ,ММ,СС+1); КонтекстФормы.УстановитьВремя(ЧЧ,ММ,СС+1); ДокНа.ДатаДок = Док.ДатаДок; КолРек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(Сч); ДокНа.УстановитьАтрибут(Рек,КонтекстФормы.ПолучитьАтрибут(Рек)); КонецЦикла; КолРек = Метаданные.ОбщийРеквизитДокумента(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.ОбщийРеквизитДокумента(Сч); ДокНа.УстановитьАтрибут(Рек,КонтекстФормы.ПолучитьАтрибут(Рек)); КонецЦикла; Таб = СоздатьОбъект("ТаблицаЗначений"); КонтекстФормы.ВыгрузитьТабличнуюЧасть(Таб); ДокНа.ЗагрузитьТабличнуюЧасть(Таб); ДокНа.Записать(); ДокНа.Провести(); Сообщить("Сформирована расх. накладная "+ДокНа+"("+ДокНа.ДокОснование+")"+". грп="+ДокНа.Грузополучатель+" "+ДокНа.Грузополучатель1); КонецПроцедуры // СформироватьНакладную Процедура СформироватьРасходныеНакладные() Если флПервыйЗапуск=1 Тогда //в нажатии на кнопку формирования расх.накладных переменная флПервыйЗапуск устанавливается в 1 (в формуле кнопки) ТаблицаДокументыНаОтправку.ВыбратьСтроки(); флПервыйЗапуск = 0; КонецЕсли; Если ТаблицаДокументыНаОтправку.ПолучитьСтроку()=1 Тогда Сообщить("флПервыйЗапуск="+флПервыйЗапуск+". Строка в тз="+ТаблицаДокументыНаОтправку.НомерСтроки); Если СокрЛП(ТаблицаДокументыНаОтправку._ФлагВыбора) = "" Тогда //эта строка не отмечена дл формирования накладной СформироватьРасходныеНакладные(); Возврат; КонецЕсли; Док = ТаблицаДокументыНаОтправку._ТекущийДокумент; // Заказ флУжеЕстьРН = 0; Док1 = СоздатьОбъект("Документ"); Док1.ВыбратьПОдчиненныеДокументы(,,Док); Пока Док1.ПолучитьДокумент() = 1 Цикл Если (Док1.Вид() = "РасходнаяНакладная") и (Док1.ПометкаУдаления() = 0) Тогда Мессага = "Для заказа " + ТаблицаДокументыНаОтправку.Номер + " от " + ТаблицаДокументыНаОтправку.Дата + " уже есть реализация " + Док1; Сообщить(Мессага); флУжеЕстьРН = 1; КонецЕсли; КонецЦикла; Если флУжеЕстьРН=0 Тогда Сообщить(""+Док.ТекущийДокумент()+". грп="+док.Заказчик); //создаю на основании документа ДОК расходную накладную, пишу ее в переменную КонтекстФормы, не записываю ОткрытьФорму("Документ.РасходнаяНакладная",КонтекстФормы,Док); СформироватьНакладную(КонтекстФормы); Иначе СформироватьРасходныеНакладные(); Возврат; КонецЕсли; КонецЕсли; КонецПроцедуры Функция Обновление() Если ТипЗначенияСтр(КонтекстФормы) = "ГрупповойКонтекст" Тогда Сообщить("Обновление. Закрываю КонтекстФормы="+КонтекстФормы+". грп="+КонтекстФормы.Грузополучатель+" "+КонтекстФормы.Грузополучатель1); КонтекстФормы.Форма.Закрыть(0); Работаем = 1; Форма.Закрыть(0); Иначе Сообщить("Обновление. Пропуск"); КонецЕсли; КонецФункции Процедура ПриЗакрытии() Если Работаем = 1 Тогда Сообщить("ПриЗакрытии. Работаем=1"); Работаем = 0; СтатусВозврата(0); СформироватьРасходныеНакладные(); КонецЕсли; КонецПроцедуры На всякий случай привожу полученные сообщения: флПервыйЗапуск=0. Строка в тз=1 Заказ 5259 (18.08.20). грп=Барышня Сформирована расх. накладная Отгрузка товаров, продукции 00005249 (18.08.20)(Заказ 5259 (18.08.20)). грп=Барышня Барышня Обновление. Закрываю КонтекстФормы=ГрупповойКонтекст. грп=Барышня ПриЗакрытии. Работаем=1 флПервыйЗапуск=0. Строка в тз=2 Заказ 5260 (18.08.20). грп=Триптих Сформирована расх. накладная Отгрузка товаров, продукции 00005250 (18.08.20)(Заказ 5259 (18.08.20)). грп=Барышня Барышня Обновление. Закрываю КонтекстФормы=ГрупповойКонтекст. грп=Барышня ПриЗакрытии. Работаем=1 флПервыйЗапуск=0. Строка в тз=2 Заказ 5260 (18.08.20). грп=Триптих Сформирована расх. накладная Отгрузка товаров, продукции 00005252 (18.08.20)(Заказ 5260 (18.08.20)). грп=Триптих Триптих Обновление. Закрываю КонтекстФормы=ГрупповойКонтекст. грп=Триптих ПриЗакрытии. Работаем=1 флПервыйЗапуск=0. Строка в тз=2 Для заказа 5260 от 18.08.20 уже есть реализация Отгрузка товаров, продукции 00005252 (18.08.20) флПервыйЗапуск=0. Строка в тз=3 Заказ 5261 (18.08.20). грп=Мальта Сформирована расх. накладная Отгрузка товаров, продукции 00005254 (18.08.20)(Заказ 5261 (18.08.20)). грп=Мальта Мальта Обновление. Закрываю КонтекстФормы=ГрупповойКонтекст. грп=Мальта ПриЗакрытии. Работаем=1 флПервыйЗапуск=0. Строка в тз=2 Для заказа 5260 от 18.08.20 уже есть реализация Отгрузка товаров, продукции 00005252 (18.08.20) флПервыйЗапуск=0. Строка в тз=3 Для заказа 5261 от 18.08.20 уже есть реализация Отгрузка товаров, продукции 00005254 (18.08.20) флПервыйЗапуск=0. Строка в тз=4 Заказ 5262 (18.08.20). грп=Саймон Сформирована расх. накладная Отгрузка товаров, продукции 00005256 (18.08.20)(Заказ 5262 (18.08.20)). грп=Саймон Саймон Обновление. Закрываю КонтекстФормы=ГрупповойКонтекст. грп=Саймон ПриЗакрытии. Работаем=1 флПервыйЗапуск=0. Строка в тз=2 Для заказа 5260 от 18.08.20 уже есть реализация Отгрузка товаров, продукции 00005252 (18.08.20) флПервыйЗапуск=0. Строка в тз=3 Для заказа 5261 от 18.08.20 уже есть реализация Отгрузка товаров, продукции 00005254 (18.08.20) флПервыйЗапуск=0. Строка в тз=4 Для заказа 5262 от 18.08.20 уже есть реализация Отгрузка товаров, продукции 00005256 (18.08.20) Обновление. Пропуск | |||
| 18
    
        GreyK 15.09.20✎ 00:15 | 
        (17) Не обращай внимания на спойлер, он не всегда работает правильно.
 Что за таблица ТаблицаДокументыНаОтправку? Что в ней содержится? | |||
| 19
    
        GreyK 15.09.20✎ 00:37 | 
        (17) Может так надо:
 Процедура Сформировать() Если ТаблицаДокументыНаОтправку.КоличествоСтрок() > 0 Тогда ТаблицаДокументыНаОтправку.ВыбратьСтроки(); Пока ТаблицаДокументыНаОтправку.ПолучитьСтроку()=1 Цикл Если СокрЛП(ТаблицаДокументыНаОтправку._ФлагВыбора) = "" Тогда Продолжить; КонецЕсли; Док = ТаблицаДокументыНаОтправку._ТекущийДокумент; // Заказ флУжеЕстьРН = 0; Док1 = СоздатьОбъект("Документ"); Док1.ВыбратьПОдчиненныеДокументы(,,Док); Пока Док1.ПолучитьДокумент() = 1 Цикл Если (Док1.Вид() = "РасходнаяНакладная") и (Док1.ПометкаУдаления() = 0) Тогда Мессага = "Для заказа " + ТаблицаДокументыНаОтправку.Номер + " от " + ТаблицаДокументыНаОтправку.Дата + " уже есть реализация " + Док1; Сообщить(Мессага); флУжеЕстьРН = 1; КонецЕсли; КонецЦикла; Если флУжеЕстьРН=0 Тогда ДокНа = СоздатьОбъект("Документ.РасходнаяНакладная"); ДокНа.Новый(); ЧЧ = 0;ММ = 0;СС = 0; Док.ПолучитьВремя(ЧЧ,ММ,СС); ДокНа.УстановитьВремя(ЧЧ,ММ,СС+1); КонтекстФормы.УстановитьВремя(ЧЧ,ММ,СС+1); ДокНа.ДатаДок = Док.ДатаДок; ДокНа.УстановитьНовыйНомер(); КолРек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(Сч); ДокНа.УстановитьАтрибут(Рек,КонтекстФормы.ПолучитьАтрибут(Рек)); КонецЦикла; КолРек = Метаданные.ОбщийРеквизитДокумента(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.ОбщийРеквизитДокумента(Сч); ДокНа.УстановитьАтрибут(Рек,КонтекстФормы.ПолучитьАтрибут(Рек)); КонецЦикла; Таб = СоздатьОбъект("ТаблицаЗначений"); КонтекстФормы.ВыгрузитьТабличнуюЧасть(Таб); ДокНа.ЗагрузитьТабличнуюЧасть(Таб); ДокНа.Записать(); ДокНа.Провести(); Сообщить("Сформирована расх. накладная "+ДокНа+"("+ДокНа.ДокОснование+")"+". грп="+ДокНа.Грузополучатель+" "+ДокНа.Грузополучатель1); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры | |||
| 20
    
        GreyK 15.09.20✎ 01:09 | 
        +(19) Что намудрилось с копированием
 //******************************************* Процедура Сформировать() Если ТаблицаДокументыНаОтправку.КоличествоСтрок() > 0 Тогда ТаблицаДокументыНаОтправку.ВыбратьСтроки(); Пока ТаблицаДокументыНаОтправку.ПолучитьСтроку()=1 Цикл Если СокрЛП(ТаблицаДокументыНаОтправку._ФлагВыбора) = "" Тогда Продолжить; КонецЕсли; Док = ТаблицаДокументыНаОтправку._ТекущийДокумент; // Заказ флУжеЕстьРН = 0; Док1 = СоздатьОбъект("Документ"); Док1.ВыбратьПОдчиненныеДокументы(,,Док); Пока Док1.ПолучитьДокумент() = 1 Цикл Если (Док1.Вид() = "РасходнаяНакладная") и (Док1.ПометкаУдаления() = 0) Тогда Мессага = "Для заказа " + ТаблицаДокументыНаОтправку.Номер + " от " + ТаблицаДокументыНаОтправку.Дата + " уже есть реализация " + Док1; Сообщить(Мессага); флУжеЕстьРН = 1; КонецЕсли; КонецЦикла; Если флУжеЕстьРН=0 Тогда ДокНа = СоздатьОбъект("Документ.РасходнаяНакладная"); ДокНа.Новый(); ЧЧ = 0;ММ = 0;СС = 0; Док.ПолучитьВремя(ЧЧ,ММ,СС); ДокНа.УстановитьВремя(ЧЧ,ММ,СС+1); ДокНа.ДатаДок = Док.ДатаДок; ДокНа.УстановитьНовыйНомер(); КолРек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.Документ("РасходнаяНакладная").РеквизитШапки(Сч); ДокНа.УстановитьАтрибут(Рек,Док.ПолучитьАтрибут(Рек)); КонецЦикла; КолРек = Метаданные.ОбщийРеквизитДокумента(); Для Сч = 1 По КолРек Цикл Рек = Метаданные.ОбщийРеквизитДокумента(Сч); ДокНа.УстановитьАтрибут(Рек,Док.ПолучитьАтрибут(Рек)); КонецЦикла; Таб = СоздатьОбъект("ТаблицаЗначений"); Док.ВыгрузитьТабличнуюЧасть(Таб); ДокНа.ЗагрузитьТабличнуюЧасть(Таб); ДокНа.Записать(); ДокНа.Провести(); Сообщить("Сформирована расх. накладная "+ДокНа+"("+ДокНа.ДокОснование+")"+". грп="+ДокНа.Грузополучатель+" "+ДокНа.Грузополучатель1); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры | |||
| 21
    
        kissolo 15.09.20✎ 10:33 | 
        (18) таблица значений на экранной форме. Туда записываются заказы, которые есть в базе за указанный период. и пользователь флажки проставляет - какие заказы надо обработать - создать расходные накладные по ним.     | |||
| 22
    
        Ёпрст гуру 15.09.20✎ 10:34 | 
        (21) дык перепиши полностью код фрагстера с нимфостарта     | |||
| 23
    
        Ёпрст гуру 15.09.20✎ 10:35 | 
        так то идея, так себе..мелькание окошка открытия-закрытия формы..+ можно нарваться на ошибки с предупреждением\вопросом.. не, проще всё в самом коде слепить, чем форму открывать и с неё реквизиты считывать     | |||
| 24
    
        Ёпрст гуру 15.09.20✎ 10:35 | 
        и это будет, в разы быстрее по скорости работы     | |||
| 25
    
        kissolo 15.09.20✎ 10:45 | 
        (20) Док - это заказ. на основании которого надо создать и заполнить расходную накладную (которая в переменной ДокНА находится). Реквизиты шапки и табличной части в документах не совпадают. просто скопировать реквизиты не получится. тем более в расходной накладной еще и пересчет табличной части идет.
 (22) полностью не получится - у него выборка документов в коде - всех подряд. а у меня на откуп пользователю. что он отметил - по тем и формирую. Но имхо это некритично. в остальном - код взят оттуда. и не работает корректно. (23) зато формирование табличной части и пересчет ее - все в одном месте. и код самой конфигурации не трогается. Но если не поучится - так и вернусь к исходномуварианту - вынес все процедуры заполнения дока и пересчета в гл. модуль, чтобы запускать и из дока, и из обработки. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |