Имя: Пароль:
1C
1С v8
Внешнее заполнение табличной части в 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
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) Через владельца работает, да.
То есть получается команды использовать нельзя, потому что туда нельзя передать владельца. А с помощью своей кнопки да, можно.
AdBlock убивает бесплатный контент. 1Сергей