Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Автозаполнение из табличной части справочника в табличную часть документа

Здравствуйте , помогите пожалуйста с кодом
Мне нужно чтобы автоматически заполнялась табличная часть документа из табличной части справочника.
При заполнении документа , автоматически заполнялось ОстановкиМаршрута на 2 скрине.
Из справочника "Маршруты" в ней табличная часть "ОстановкиМаршрута" в "Документ1" в форму элемента "ОстановкиМаршрута"
Ответ: А если ТЧ справочника изменится, нужно ли менять ТЧ документа?

Добавлено через 3 минуты
Так нужно заполнять табличную часть документа? Или выводит список остановок при позиционировании на строке документа?
Вопрос: 1с 8.3 Вывод картинок в табличной части документа

Имеется документ с табличной частью, с реквизитом Номенклатура (тип СправочникСсылка.Номенклатура ). Нужно при изменении Номенклатуры выводить соответствующую картинку из справочника.

Есть одна особенность картинки хранятся в отдельном справочнике ФотоБанк с реквизитом Фото (тип ХранилищеЗначения). На который и ссылается реквизит Изображение справочника Номенклатура.
(Добавление картинки в Справочник было рассмотрено в этой теме: )

Подскажите, пожалуйста, как все же реализовать вывод картинок в табличной части документа.
Ответ: После долгих мучений, картинка выводиться в табличную часть документа, но очень маленькая. А если в конфигураторе поменять высоту колонки, то картинка выводиться в ее реальном размере (но выходит со стороки - см. скрин 2), хотя стоит в свойстве АвтоРазмер. Как это исправить? И какое свойство надо изменить, чтобы картинка была по центру ячейки?
1C
1
2
3
4
5
6
7
8
9
10
11
12
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    Номенклатура = СтрокаТабличнойЧасти.Номенклатура;   
    СтрокаТабличнойЧасти.АдресФото = ПолучитьСсылкуКартинки(Номенклатура);
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьСсылкуКартинки(Ссылка)
     АдресФото = ПолучитьНавигационнуюСсылку(Ссылка.Изображение,"Фото");
     Возврат АдресФото;
КонецФункции
Вопрос: Заполнить количество в табличной части документа

Доброго времени суток.
  • Задача - заполнить табличную часть документа "Акт списания ЕГАИС" (далее - док) из данных таблицы значений (далее - ТЗ).
  • Проблема - не заполняется столбец "Количество" (остальные заполняются).
В ТЗ для колонки Количество прописано ОписаниеТипов с квалификаторами числа: длина 15, точность 3. Параметры совпадает с этими же параметрами колонки Количество дока, на отладке у значений колонки Количество в ТЗ эти параметры присутствуют.

ТЗ заполняется по данным документа "остатки ЕГАИС" (далее - док2). В док2 параметры колонки "Количество": длина 10, точность 0. Грешу на то, что количества попадают в ТЗ изначально без дробной части.

Функция, переводящая табличную часть док2 в ТЗ:
Код:
функция получитьТЧвТЗ(доп,тч)
    кч=новый квалификаторыЧисла(15,3);
    типЧ=новый описаниеТипов("число",кч);
   
    т="
    |выбрать алкогольнаяПродукция ап,
        |количество колво
        |поместить вт из &тч как тч;
    |выбрать н.номенклатура ном, вт.колво колво, вт.ап
    |из вт левое соединение
        |регистрСведений.соответствиеНоменклатурыЕГАИС н
        |по вт.ап=н.алкогольнаяПродукция где колво"+доп;
    з=новый запрос;
    м=новый МенеджерВременныхТаблиц;
    з.МенеджерВременныхТаблиц=м;
    з.Текст=т;
    з.УстановитьПараметр("тч",тч);
    в=з.Выполнить().выбрать();
   
    ы=новый таблицаЗначений;
    ы.Колонки.Добавить("ап");
    ы.Колонки.Добавить("колво", типЧ);
    ы.Колонки.добавить("ном");
   
    пока в.Следующий() цикл
        стр=ы.Добавить();
        стр.ап=в.ап;
        стр.колво=в.колво;
        стр.ном=в.ном;
    КонецЦикла;
       
    возврат ы;
КонецФункции
процедура, заполняющая табличную часть результирующего документа:
Код:
&НаСервере
Процедура создатьАктСписанияНаСервере()
    докТЧ=получитьДокТЧ();   
    тзб=получитьТЧвТЗ(">0",докТЧ);   
   
    докСписания=документы.АктСписанияЕГАИС.СоздатьДокумент();   
    докСписания.Дата=ТекущаяДата();
    докСписания.ПричинаСписания=перечисления.ПричиныСписанийЕГАИС.Недостача;
    докСписания.Магазин=справочники.Магазины.НайтиПоНаименованию(магазин);
    докСписания.склад=справочники.склады.НайтиПоНаименованию(склад);
    докСписания.организация=справочники.организации.НайтиПоНаименованию(организация);
   
    для каждого стр из тзб цикл
        с=докСписания.Товары.Добавить();
        с.Номенклатура=стр.ном;
        с.Количество=стр.колво;
        с.АлкогольнаяПродукция=стр.ап;
    КонецЦикла;
   
    докСписания.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
--- Объединение сообщений, 29 дек 2016 ---
ЗЫ: при этом в отладке вот тут
Код:
для каждого стр из тзб цикл
        с=докСписания.Товары.Добавить();
        с.Номенклатура=стр.ном;
        с.Количество=стр.колво;
        с.АлкогольнаяПродукция=стр.ап;
    КонецЦикла;
Нужное количество заполняется, но без нулей в дробной части:
Ответ:
ВЗЛЕТЕЛО!!!! ааа, вот радость-то! оказалось, в документе-результате колонка с количествами называется не Количество, а КоличествоУпаковок.
Код:
 
для каждого стр из тзб цикл
        с=докСписания.Товары.Добавить();
        с.Номенклатура=стр.ном;
        с.КоличествоУпаковок=стр.колво;//с.Количество - неправильно
        с.АлкогольнаяПродукция=стр.ап;
   КонецЦикла;
день прожит не зря
Вопрос: Условие на номенклатуру из табличной части документа в запросе 1с 77

Всем доброго дня!! Делаю отчет в 7ке - вывожу данные из документов (из шапки), и нужно условие - на номенклатуру из табличной части, подскажите синтаксис, заранее благодарю.
Ответ: Mixmaister666,

Если вам нужны агрегатные функции по реквизитам шапки, то не взлетит.
7ка, если в запросе у вас участвуют реквизиты табличной части, делает запрос к таблице табличной части документа с джойном к таблице шапки. Реквизиты шапки будут дублировать в каждой строке. Если в запросе нет агрегатной функции по реквизиту шапки - всё нормально, результат запроса свернётся по группировкам. Если есть, по каждому такому реквизиту шапки значение помножится на количество строк в документе.
Вопрос: В отчете не получается перебрать строки табличной части документа

В отчете не получается перебрать строки табличной части документа
В запросе обращаюсь к регистру сведений ДанныеКлиента.
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеКлиента.Период,
| ДанныеКлиента.Контрагент,
| ДанныеКлиента.Регистратор как регистратор1

|ИЗ
| РегистрСведений.ДанныеКлиента КАК ДанныеКлиента";

результат= Запрос.Выполнить();
Выборка = результат.Выбрать();
пока Выборка.следующий() цикл
тч=Выборка.Регистратор1.ПолучитьОбъект();
// ТМЦ - это табличная часть в документе, который является регистратором движения
Для каждого строка из ТЧ.тмц цикл
тов=ТЧ.товар;
конецЦикла;

Пишет "Поле объекта не обнаружено Товар", хотя там есть такое поле
Ответ:
Зачем так сложно?
У Вас же все регистраторы уже выбраны запросом. Только проверьте, является ли регистратор документом Заказ, и все, должен работать первый вариант обхода результатов.
Вопрос: Загрузка в табличную часть документа данных из DBF-файла

Здравствуйте!

Нужно вывести данные в табличную часть документа "ДоговорНаПоставкуГаза" из DBF-файла.
Имеются реквизиты в табличной части "Реестр": ЛицевойСчет, ФИО, ПочтовыйИндекс, УчастокОбслуживания, НаселенныйПункт, Улица, НомерДома, НомерКвартиры,  НомерКомнаты, ДатаЗаключенияДоговораНаПоставкуГаза, НомерДоговораНаПоставкуГаза, ДатаВыдачиДоговораНаРуки, НомерМобильногоТелефона, НомерДомашнегоТелефона, КодАдресаПоФИАС.

Сама база данных просчитывается с помощью подобного кода по нажатию кнопки "Загрузить":

Процедура ДействияФормыВыгрузить(Кнопка)
Таблица = Новый XBase;
    Таблица.ОткрытьФайл( 
        "D:\dogovor\выгрузка\281117.dbf",// путь к базе

        ,// путь к индексу

        Истина// только чтение

    );
 
    Сообщить("В таблице " + Таблица.КоличествоЗаписей() + " записей.");
    Сообщить("Таблица имеет кодировку: " + Таблица.Кодировка);
 
    Таблица.Первая();// перешли к первой записи

    Пока Не Таблица.ВКонце() Цикл
        Если Не Таблица.ЗаписьУдалена() Тогда
            Сообщить(
                Строка(Таблица.LS) + " " +
                Таблица.FIO + " " + 
                Таблица.INDEX + " " +
                Таблица.RAION + " " +
                Таблица.NASPUNKT + " " +
                Таблица.UL + " " +
                Таблица.DOM + " " +
                Таблица.KV + " " +
                Таблица.KOMNATA + " " +
                Таблица.DDOG + " " +
                Таблица.NDOG + " " +
                Таблица.DVID + " " +
                Таблица.T_SOT + " " +
                Таблица.T_DOM + " " +
                Таблица.KOD            
            );
        КонецЕсли;
        Таблица.Следующая();// переходим к следующей записи

            
            КонецЦикла;    

    Таблица.ЗакрытьФайл();

КонецПроцедуры
Ответ: Всё, получилось! Я решил проблему путём удаления старой формы документа и создания новой.
Вопрос: С помощью запроса получить элементы табличной части документа-регистратора

Собственно вопрос в теме: Как с помощью запроса получить элементы табличной части документа-регистратора из вирт. таблицы регистра Бухгалтерии?
ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Счет,
    ХозрасчетныйОстаткиИОбороты.Подразделение,
    ХозрасчетныйОстаткиИОбороты.Субконто2,
    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ХозрасчетныйОстаткиИОбороты.ПериодСекунда,
    ХозрасчетныйОстаткиИОбороты.Регистратор,
    АвансовыйОтчетТовары.Номенклатура
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Авто, , , , ) КАК ХозрасчетныйОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.Товары КАК АвансовыйОтчетТовары
        ПО ХозрасчетныйОстаткиИОбороты.Регистратор = АвансовыйОтчетТовары.Ссылка
ГДЕ
    ХозрасчетныйОстаткиИОбороты.Счет.Ссылка В ИЕРАРХИИ(&Счет)

АвансовыйОтчетТовары - искомая Таб.Часть документа АвансовыйОтчет. При выгрузке результат - NULL. В чем косяк?
Ответ: () Как этот трэш учитывает ручные корректировки движений документа и операции введенные вручную?
Вопрос: Групповая обработка табличных частей документов.

Кто-нибудь сталкивался с такой обработкой. Допустим мне в данный момент в табличную часть документа отчеторозничныхпродажах нужно внести счет учета 41.02 по всем документам за определённый период. Формы неуправляемые. Понятно, что можно для данного случая быстро настрочить. Но такие ситуации временами происходят. И хотелось бы иметь под рукой какой-нибудь универсальный инструмент.
Ответ: хм, я у себя набором "ИР" справился
внедренцы когда пилили обмен - в доп.тч документа внесли записи с допинфой по всем товароам, даже если нет допинфы... спустыми значениями... пришлось подпрограммливать и чистить накачанное
Вопрос: Реализация списка выбора в табличной части документа

Хочу реализовать список выбора в табличной части документа.
1. Добавила в табличную часть документа новый реквизит "Выбранное значение" с типом строка.
2. Перетащила его на форму документа.
3. На форме для этого элемента установила свойство "Кнопка выпадающего списка".
4. Добавила для элемента событие "НачалоВыбораИзСписка" для программного добавления значений списка выбора:
1C
1
2
3
4
5
6
7
8
9
&НаКлиенте
Процедура ПереченьНоменклатурыВыбранноеЗначениеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    Элементы.ПереченьНоменклатурыВыбранноеЗначение.СписокВыбора.Добавить("Выбранное значение 1");
    Элементы.ПереченьНоменклатурыВыбранноеЗначение.СписокВыбора.Добавить("Выбранное значение 2");
    Элементы.ПереченьНоменклатурыВыбранноеЗначение.СписокВыбора.Добавить("Выбранное значение 3");
    Элементы.ПереченьНоменклатурыВыбранноеЗначение.СписокВыбора.Добавить("Выбранное значение 4");
    Элементы.ПереченьНоменклатурыВыбранноеЗначение.СписокВыбора.Добавить("Выбранное значение 5");
    Элементы.ПереченьНоменклатурыВыбранноеЗначение.СписокВыбора.Добавить("Выбранное значение 6");
КонецПроцедуры
Но при тестировании выпадающий список не появляется. Делала все по примеру из интернета, но значения не добавляются. Список пустой.
Ответ: Спасибо!
Вопрос: Загрузка и выгрузка табличной части документа в Excel

Учусь.

Есть Документ в котором Табличные Части -> ПереченьТоваров с Реквизитами Товар Цена Количество Сумма.
Создано 2 документа.
Открываю один из них.
На форме добавлена кнопка Выгрузить в файл.
Модуль:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&НаКлиенте
Процедура Команда1(Команда)
    // Вставить содержимое обработчика.
    Передача();
КонецПроцедуры
 
&НаСервереБезКонтекста  
Процедура Передача()  
    ApplicationExcel= Новый COMОбъект("Excel.Application");  
    ApplicationExcel.Visible = Истина;  
    ApplicationExcel.Workbooks.Open ("E:\1C\Клиенты.xlsx");
    Док=Документы.Оприходование;
    i=2;  
    //Сообщить( Док.ТекущийДокумент());
 
    
    КоличетсвоСтрок = ЭтотОбъект.ПереченьТоваров.Количество();
    Если КоличествоСтрок <> 0 Тогда
    Для каждого Строчка из ЭтотОбъект.ПереченьТоваров Цикл
        ApplicationExcel.Sheets(1).Cells(i, 1).Value=Строчка.Товар;
ApplicationExcel.Sheets(1).Cells(i, 2).Value=Строчка.Количество;
        i=i+1;
    КонецЦикла
    КонецЕсли
        
        //Пока Выборка.ПолучитьСтроку() > 0 Цикл    
        //ApplicationExcel.Sheets(1).Cells(i, 1).Value=Выборка.Товар; //тут пишет что нет такого реквизита
        
        //i=i+1;
    //КонецЦикла;
КонецПроцедуры
Не получается. В последней попытке, приведенной, я даже не могу открыть документ. {Переменная ЭтотДокумент не определена}. Подскажите, помогите, первый день в 1С8.3, прошу с кодом пояснением. Либо как обратиться к полям/реквизитам открытого пользователем документа. В закомментированном коде есть другая реализация, ошибку также указал.
Ответ: Документ Оприходование:
Данные:
Реквизиты: Фирмы, Филиалы
Табличные части: ПереченьТоваров [Товар, Цена, Количество, Сумма]
Форма: Добавлена одна команда - Команда1
Добавлена одна Кнопка (для этой команды)
Модуль:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
&НаКлиенте
Процедура ПереченьТоваровКоличествоПриИзменении(Элемент)
    СтрТабЧасти=Элементы.ПереченьТоваров.ТекущиеДанные;
    СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество;
КонецПроцедуры
 
&НаКлиенте
Процедура ПереченьТоваровЦенаПриИзменении(Элемент)
    СтрТабЧасти=Элементы.ПереченьТоваров.ТекущиеДанные;
    СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество;
КонецПроцедуры
 
&НаКлиенте
Процедура Команда1(Команда)
    // Вставить содержимое обработчика.
    Передача();
КонецПроцедуры
 
&НаСервере
Процедура Передача()  
    ApplicationExcel= Новый COMОбъект("Excel.Application");  
    ApplicationExcel.Visible = Истина;  
    ApplicationExcel.Workbooks.Open ("E:\1C\Клиенты.xlsx");
    ТЧ=Объект.ПереченьТоваров;
    i=2;  
    
    КоличествоСтрок = ТЧ.Количество();
    //Сообщить (КоличествоСтрок);
    Если КоличествоСтрок <> 0 Тогда
    Для каждого Строчка из ТЧ Цикл
        ApplicationExcel.Sheets(1).Cells(i, 1).Value=Строчка.Товар;
        i=i+1;
    КонецЦикла
    КонецЕсли
        
        //Пока Выборка.ПолучитьСтроку() > 0 Цикл    
        //ApplicationExcel.Sheets(1).Cells(i, 1).Value=Выборка.Товар;
        
        //i=i+1;
    //КонецЦикла;
КонецПроцедуры
Сейчас ошибка {Произошла исключительная ситуация 0x800a03ec}