|
Внешнее заполнение табличной части в 3.0 | ☑ | ||
---|---|---|---|---|
0
Мисти
24.03.14
✎
00:17
|
Все частиуэе нашла, заполнение вставилось, ошибок нет, но ничего не заполняется!
Сама по себе процедура - работает (проверила в отладчике) Не хватает чего-то малого?? Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт Для ии = 0 По ОбъектыНазначения.Количество()-1 Цикл ДокОбъект = ОбъектыНазначения[ии].Ссылка.ПолучитьОбъект(); Запрос = Новый Запрос(); Запрос.УстановитьПараметр("Период", Новый Граница(ДокОбъект.МоментВремени(), ВидГраницы.Исключая)); Запрос.УстановитьПараметр("Организация", ДокОбъект.Организация); Запрос.УстановитьПараметр("Склад", ДокОбъект.СкладОтправитель); Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1 КАК Номенклатура, | ХозрасчетныйОстатки.КоличествоОстатокДт КАК Количество, | ХозрасчетныйОстатки.СуммаОстатокДт КАК сумма, | ХозрасчетныйОстатки.Субконто3 |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &Период, | Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежности), | , | Организация = &Организация | И Субконто3 = &Склад) КАК ХозрасчетныйОстатки"; ОстаткиМатериалов = Запрос.Выполнить().Выгрузить(); ДокОбъект.Товары.Очистить(); Для ии =0 по ОстаткиМатериалов.Количество()-1 Цикл Стр = ДокОбъект.Товары.Добавить(); Стр.Номенклатура = ОстаткиМатериалов[ии].Номенклатура; Стр.Количество = ОстаткиМатериалов[ии].Количество; Стр.ЕдиницаИзмерения = Стр.Номенклатура.ЕдиницаИзмерения; Стр.СчетУчета = ПланыСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежности; Стр.НовыйСчетУчета = ПланыСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежности; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
1
Мисти
24.03.14
✎
00:18
|
Ну не "записать()" же?
|
|||
2
PR
24.03.14
✎
00:24
|
С заполнением ТЧ в тонком клиенте "атас и немцы" :))
Все делается не так. Изучай примеры в типовых. |
|||
3
Мисти
24.03.14
✎
00:26
|
Ужасно! А ведь я начала с того, что скачала пример на инфостарте! За деньги практически. А пример оказался для 2.0.
|
|||
4
Мисти
24.03.14
✎
00:26
|
Где у них там заполнение-то есть?
|
|||
5
PR
24.03.14
✎
00:26
|
(3) Выкинь его. Он тебе ВООБЩЕ не поможет.
|
|||
6
PR
24.03.14
✎
00:27
|
(4) В БП вроде где-то есть, не помню.
|
|||
7
Aleksey
24.03.14
✎
00:32
|
(6) не в БП, а в БСП нужно пример смотреть
|
|||
8
Мисти
24.03.14
✎
00:34
|
БСП у меня ассоциируются с беспозвоночными. А с чем должно?
|
|||
9
PR
24.03.14
✎
00:35
|
(7) А, во, точно, там видел. Еще подумал, откуда в типовой БП внешние обработки? :))
|
|||
10
PR
24.03.14
✎
00:36
|
(8) Библиотека стандартных подсистем
|
|||
11
Мисти
24.03.14
✎
00:40
|
&НаСервере
Процедура ЗаполнитьДанныеКонтрагентаПоДаннымОрганизацииСервер() ПоДаннымКонтрагента = Объект.ПоДаннымОрганизации.Выгрузить(); ПоДаннымКонтрагента.Колонки.Дебет.Имя = "КредитК"; ПоДаннымКонтрагента.Колонки.Кредит.Имя = "Дебет"; ПоДаннымКонтрагента.Колонки.КредитК.Имя= "Кредит"; Для каждого СтрокаДвижений Из ПоДаннымКонтрагента Цикл Представление = СокрЛП(СтрокаДвижений.Представление); Если Лев(Представление, 8) = "Передано" Тогда Представление = "Принято" + Сред(Представление, 9); ИначеЕсли Лев(Представление, 7) = "Принято" Тогда Представление = "Передано" + Сред(Представление, 8); ИначеЕсли Лев(Представление, 7) = "Продажа" Тогда Представление = "Приход" + Сред(Представление, 8); ИначеЕсли Лев(Представление, 6) = "Приход" Тогда Представление = "Продажа" + Сред(Представление, 7); ИначеЕсли Лев(Представление, 21) = "Корректировка продажи" Тогда Представление = "Корректировка прихода" + Сред(Представление, 22); ИначеЕсли Лев(Представление, 21) = "Корректировка прихода" Тогда Представление = "Корректировка продажи" + Сред(Представление, 22); КонецЕсли; СтрокаДвижений.Представление = Представление; КонецЦикла; Объект.ПоДаннымКонтрагента.Загрузить(ПоДаннымКонтрагента); ПересчитатьОстаткиНаСервере(); КонецПроцедуры Ничего, вроде, особенного. |
|||
12
Мисти
24.03.14
✎
00:41
|
А где ее взять?
|
|||
13
Мисти
24.03.14
✎
00:44
|
v8: УФ. Заполнение ТЧ документа из внешней обработки - вот, нашла, но там - вроде, так и не работает почему-то.
|
|||
14
Aleksey
24.03.14
✎
01:11
|
(12) на http://users.v8.1c.ru/
|
|||
15
Kookish
24.03.14
✎
01:31
|
Вот что нарыл на просторах интернета (у меня работает):
Процедура ВыполнитьКоманду(Команда, Объекты) Экспорт // Команда - идентификатор команды, как описано в процедуре "СведенияОВнешнейОбработке" // Объекты - массив объектов, которые необходимо обработать. Если обработка запускается // из формы объекта, в массиве будет один элемент. Для Каждого ТекОбъект Из Объекты Цикл КлючПоиска = Новый Структура("Ключ", ТекОбъект); Окна = ПолучитьОкна(); Для Каждого Окно из Окна Цикл Если НЕ Окно.Основное И Найти(Окно.Заголовок, ТекОбъект) Тогда Форма = ОткрытьФорму("Документ.АктСверкиВзаиморасчетов.Форма.ФормаДокумента", КлючПоиска, , , Окно); ЗаполнитьИПересчитатьНаСервере(ТекОбъект); Форма.Прочитать(); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
16
Мисти
24.03.14
✎
11:00
|
(14) Их там 3 штуки разных!
Какую брать? (15) Неужели эта история с окнами обязательна? |
|||
17
Мисти
24.03.14
✎
11:01
|
А главное! "Выполнить команду" должно быть в модуле формы или модуле объекта?
|
|||
18
Мисти
24.03.14
✎
11:15
|
Форма = ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента", КлючПоиска, , , Окно);
- значит, видимо, в форме, а не в модуле, но если я эту "выполнитьКоманду" перенеошу в форму - ее не видно! Ругается ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2193)}: Метод объекта не обнаружен (ВыполнитьКоманду) ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения); |
|||
19
Мисти
24.03.14
✎
11:17
|
Или должна отработать часть - "выполнить в безопасном режиме"?
Если СценарийВБезопасномРежиме Тогда ВыполнитьСценарийВБезопасномРежиме(ВнешнийОбъект, ПараметрыКоманды, ОбъектыНазначения); Иначе Если ПараметрыКоманды = Неопределено Тогда ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения); Иначе ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды); КонецЕсли; КонецЕсли; |
|||
20
Мисти
24.03.14
✎
11:43
|
Ау?
|
|||
21
Мисти
24.03.14
✎
11:52
|
Нашла БСП, нашла там внешнее заполнение. Навороченное опять!!
Эх. А мне б - минимальный вариант! |
|||
22
Alien74
24.03.14
✎
12:16
|
(0)Я конечно фигню скажу, потому что я программист начинающий, но, а что, если вставить между концами циклов:
КонецЦикла; ДокОбъект.Записать(); КонецЦикла; |
|||
23
Kookish
24.03.14
✎
12:19
|
(21) Напишите мне, пришлю минимальный вариант.
|
|||
24
DmitriyDI
24.03.14
✎
12:19
|
(21) да выгружай в таблицу сразу запрос и используй СоздатьКолонки()
|
|||
25
DmitriyDI
24.03.14
✎
12:19
|
Форма.ТабличнаяЧасть.СоздатьКолонки()
|
|||
26
DmitriyDI
24.03.14
✎
12:20
|
(25) тьфу ты это не ТЗ,
|
|||
27
DmitriyDI
24.03.14
✎
12:23
|
выгружай в ТЗ и загружай так Объект.Товары.Загрузить(ТаблицаРезультата);
|
|||
28
DmitriyDI
24.03.14
✎
12:24
|
ДокОбъект.Товары.Загрузить(ОстаткиМатериалов ) будет у тебя
|
|||
29
cw014
24.03.14
✎
12:30
|
Без записи ничего не получится. Ты получаешь ссылку из массива, из ссылки создаешь объект, который правишь в контексте процедуры. При выходе из процедуры объект "пропадает", остается твоя ссылка на неизмененный объект
|
|||
30
AlexTim03
24.03.14
✎
12:49
|
(0) При заполнении в УФ на стороне клиента тебе не надо получать объект..точнее ты его и не получишь.
НА стороне клиента ты будешь работать с представлением табличной части - данныеформыколлекция. Сервер тебе должен вернуть какую-то коллекцию (например, массив стурктур) по которой ты и будешь заполнять свою "тч" (ее представление). И для нее все доступно: добавление строк, поиск и т.п. А если на стороне сервера делать с заполнением данных объекта - то да, его надо сохранять. |
|||
31
Мисти
24.03.14
✎
12:57
|
Короче - надо было записать, и всё остальное работало с самого начала, а я испробовала мильон вариантов.
Записывать не хотелось бы! Ведь по ошибке на кнопку можно нажать не в том документе, а тем более - в журнале документов. Кто научит, как без записи обойтись? (30) Как сделать на стороне клиента? |
|||
32
Мисти
24.03.14
✎
13:02
|
(23) Написала! Мне нужен вариант, чтоб не записывать!
|
|||
33
PR
24.03.14
✎
13:04
|
(32) Не получится.
|
|||
34
Мисти
24.03.14
✎
13:11
|
А вот в (30) написано, что можно!
|
|||
35
Aleksey
24.03.14
✎
13:24
|
типовая этого не может
|
|||
36
Kookish
24.03.14
✎
13:35
|
(32) Отправил. Подтверждаю (35) - при запуске обработки заполнения табличной части в бухгалтерии 3.0 она сначала требует записать документ, а потом вызывает обработку и передает ей массив объектов. Таким образом обработка может быть вызвана и для списка документов.
|
|||
37
Мисти
24.03.14
✎
13:50
|
Сначала записать - не страшно, главное, чтоб после заполнения она не записывала! Спасибо!
|
|||
38
Мисти
24.03.14
✎
16:11
|
(36) Спасибо!
Но как я поняла - там тоже запись идет потом Объект = ТекОбъект.ПолучитьОбъект(); // Тут идет заполнение реквизитов объекта. Объект.Записать(); |
|||
39
PR
24.03.14
✎
17:33
|
Блин, какая живучая упертость :))
Еще раз, в типовых сейчас ВСЕГДА записывается объект, получается, меняется, записывается, перечитывается в форме. Без записи после заполнения через типовой алгоритм НЕ ПОЛУЧИТСЯ. |
|||
40
Kookish
24.03.14
✎
20:57
|
(38) Именно так. В модуле обработки объект изменяется, потом _записывается_ в базу. После чего его отображение обновляется на форме командой Прочитать(). Для этого танцы с бубном из (15).
|
|||
41
banco
24.03.14
✎
21:34
|
(0) БП 3.0 на БСП, а в БСП есть механизм заполнения без записи объекта, пример можно посмотреть в БСП
|
|||
42
banco
24.03.14
✎
21:45
|
(39) вот и пример http://yadi.sk/d/QsEXf610L8yrP
|
|||
43
Aleksey
24.03.14
✎
22:07
|
(41) это в какой БСП
|
|||
44
Aleksey
24.03.14
✎
22:08
|
или имеется ввиду заполнения записанного объекта без записи?
|
|||
45
banco
24.03.14
✎
22:23
|
(43) еще с версии 2.1.3
имеется возможность разрабатывать дополнительные обработки по заполнению объектов программы, которые не требуют записи объектов в информационную базу. После выполнения такой обработки результат ее работы сразу виден в окне объекта. (44) для нового объекта. в (42) пример для БП 3.0 |
|||
46
Мисти
24.03.14
✎
22:54
|
Спасибо! Я такую уже нашла, когда всё свое в нее подставила - всё равно сначала всё записалось.
Да у них и самих записывается сразу! Какое-то там переименование номенклатуры - как бы оно не записалось, интересно? |
|||
47
banco
25.03.14
✎
07:44
|
(46) ничего не записывается, наверное что то не так делаешь, скачай обработку из (42) для БП и проверь.
|
|||
48
toypaul
гуру
25.03.14
✎
08:42
|
В БСП начиная с версия 2.1.3.1 есть возможность заполнять объект без записи в форме. для этого в команде тип вызова определяется как ЗаполнитьФорму, в нужном объекте добавляется два вызова - обработчки команды и обработчки передачи формы с клиентам на сервер.
пример есть в демо БСП соот-щей версии. з.ы. буквально вчера проверял это. но код на работе остался |
|||
49
toypaul
гуру
25.03.14
✎
08:44
|
(39) садись двойка.
|
|||
50
Kookish
26.03.14
✎
09:40
|
(42) Класс! Теперь буду знать. Спасибо.
|
|||
51
katc
26.03.14
✎
10:00
|
про запрос в цикле всем уже все равно. Это стало наверное нормой
|
|||
52
PR
26.03.14
✎
16:50
|
Хе, посмотрел, забавно сделали. Не доработал объект, не будет работать :))
А вот вопрос на засыпку. Все это работает для серверного вызова. А если мне нужно будет на форме настроить какие-то параметры перед печатью, в результате чего вызов получается должен быть клиентским, тогда как быть? :)) В смысле, как в параметрах передать форму? :)) |
|||
53
Поpyчик-4
26.03.14
✎
21:34
|
(52) Гугл. Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)
|
|||
54
PR
26.03.14
✎
23:52
|
(53) Что Гугл? Форму нельзя передавать с клиента на сервер.
|
|||
55
xReason
26.03.14
✎
23:58
|
(54) Что значит форму? данные формы вполне можно передать. Элементы также доступны на сервер. Что вам еще нужно для счастья?
Хотя Мисти наверно это лучше в терминах биологии все разжёвывать Есть пестик и есть тычинка, до данные с пестика передать тычинке. Как вы будете действовать? |
|||
56
xReason
26.03.14
✎
23:59
|
(55) блин, это же ботаника. Пора спать )))
|
|||
57
Леша1с
27.03.14
✎
10:05
|
(39)"Еще раз, в типовых сейчас ВСЕГДА записывается объект"
а это привет от УФ. Сколько споров было - какая УФ замечательная. |
|||
58
Леша1с
27.03.14
✎
10:07
|
(54) можно. И не только форму, а все её реквииты по отдельности, если надо.
Просто УФ работает через одно место, не являясь, на самом деле, клиентом и сервером. |
|||
59
PR
27.03.14
✎
10:32
|
(57) Не надо грязи. Уже нашли решение :))
|
|||
60
PR
27.03.14
✎
10:32
|
(58) Приведешь пример?
Очень важно, НЕ в модуле самой формы :)) |
|||
61
Леша1с
27.03.14
✎
10:36
|
(60) в смысле "не в модуле формы"? а что, 1С предоставляет еще какие-то средства по работе с формой?
А то, что "не клиент-сервер" - с формы можно запинуть "объект" в какое-либо "хранилище", и передавать его туда сюда ) |
|||
62
Леша1с
27.03.14
✎
10:38
|
(59) клиент и сервер в 1С - это сугубо искусственое образование, т.е. ничем не мотивируется, и логикой никакой не объясняется. По типу, вот это я, разработчик платформы, на клиенте только сделаю, а вот это - только на сервере. А там пусть конфигуристы конфигурят как хотят.
|
|||
63
Леша1с
27.03.14
✎
10:38
|
*искусственное
|
|||
64
PR
27.03.14
✎
10:38
|
(61) Что непонятного?
Есть форма объекта. Есть форма обработки. При открытии формы обработки в нее надо как-то передать форму объекта и ты говоришь, что это можно. Как? |
|||
65
PR
27.03.14
✎
10:38
|
(62) Смеялся :))
|
|||
66
Леша1с
27.03.14
✎
10:39
|
(64) сериализуй
|
|||
67
PR
27.03.14
✎
10:40
|
(66) Ты думаешь, перед тем как писать посты? :))
|
|||
68
toypaul
гуру
27.03.14
✎
10:41
|
(64) передать как форму Владельца?
|
|||
69
PR
27.03.14
✎
10:43
|
(68) К чему гадать? Попробуй, напишешь, если получится :))
|
|||
70
toypaul
гуру
27.03.14
✎
10:45
|
а чего гадать если в ОткрытьФорму есть параметр Владелец. тут и гадать не надо. делано не один раз
|
|||
71
Леша1с
27.03.14
✎
17:27
|
(70) да пусть смеется, все просмеет
|
|||
72
PR
27.03.14
✎
17:59
|
(70) Ну то есть работающий пример есть, я так понял?
|
|||
73
toypaul
гуру
03.04.14
✎
09:12
|
Кто-то пример хотел. Вот пожалуйста. Передача формы объекта в форму обработки. Внешняя обработка построенная по принципам БСП проверяет сама себя (для отладки). Может проверить из формы списка. Может проверить из открытой формы объекта.
&НаКлиенте Процедура Проверить(Команда) ПараметрыЗапуска = Новый Структура; ОбъектыНазначения = Новый Массив; ОбъектыНазначения.Добавить(Проформа); ПараметрыЗапуска.Вставить("ОбъектыНазначения",ОбъектыНазначения); ПараметрыЗапуска.Вставить("ДополнительнаяОбработкаСсылка",Объект.Макрос); ФормаОсновная = ПолучитьФорму("ВнешняяОбработка.ЗаполнениеПроформыПоПоказателю.Форма",ПараметрыЗапуска,ВладелецФормы); ФормаОсновная.Открыть(); Закрыть(); КонецПроцедуры &НаКлиенте Процедура ПроверитьФорму(Команда) ФормаПроверки = ПолучитьФорму("Документ.ОТ_Проформа.ФормаОбъекта",Новый Структура("Ключ",Проформа),ЭтаФорма); ФормаПроверки.Открыть(); ПараметрыЗапуска = Новый Структура; ПараметрыЗапуска.Вставить("ДополнительнаяОбработкаСсылка",Объект.Макрос); ФормаОсновная = ПолучитьФорму("ВнешняяОбработка.ЗаполнениеПроформыПоПоказателю.Форма",ПараметрыЗапуска,ФормаПроверки); ФормаОсновная.Открыть(); КонецПроцедуры |
|||
74
PR
03.04.14
✎
13:38
|
(73) Через владельца работает, да.
То есть получается команды использовать нельзя, потому что туда нельзя передать владельца. А с помощью своей кнопки да, можно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |