Примеры вопросов ко мне и ответов от меня в режиме консультаций по 1С (программирование)
С уважением, Алексей Карманов
Вопрос
Алексей, день добрый!
Подскажите решение такого вопроса:
- В печатном макете в одной из ячеек делаю Заполнение "шаблон" -- Дата Отгрузки: [Дата ] ---.
- Значение ячейки (формат даты) выставляю, чтобы было без времени. Но всё равно время выходит.
- В какую сторону нужно "копать" ? в коде или в макете?
Мой ответ
День добрый!
Вам нужно в коде, в котором подготавливаете табличный документ для вывода, там где вы заполняете параметр Дата написать что-то типа:
ОбластьВашегоМакета.Параметры.Дата = Формат(Док.Дата, "ДЛФ=Д"); |
То есть подставлять в параметр уже отформатированное значение.
**************************************************************
Вопрос
Здравствуйте!
- Есть Справочник. В нем создана форма.
- Имеются два реквизита "Дата" (тип Дата, состав даты Дата) и "СрокДействия" (тип Дата, состав даты Дата) .
- Нужно В событии "ПриИзменении" написать что если ставим Дату, то СрокДейсвтия равен Дата+360 дней
- С числами понятно как, а с датами не очень
- Можно для начала Пару примеров, чтобы я сам разобрался.
Спасибо!
Мой ответ
День добрый!
К датам тоже можно прибавлять числа. Они означают количество секунд.
Соответственно, чтобы прибавить к дате 360 дней можно написать так:
Дата + 360 * 24 * 60 * 60 |
Больше примеров на работу с датами здесь.
**************************************************************
Вопрос
Алексей, добрый день!
Сейчас решаю задачу по созданию документов Заказ клиента посредством загрузки их из xml XML файл выгружен из другой базы данных, ни как не связанной с 1С. Пример файл во вложении. Конфигурация УТ 11.1.5.
Что сделал: на форме списка Заказ клиента (ЗК) добавил кнопку. Ниже код, который она отрабатывает. Так вот, теперь не могу понять как же всетаки загрузить из xml в структуру. Первый элемент я получил, атрибуты тоже, а дальше, чтобы получить уже непосредственно атрибуты табличной части ... не пойму как.
Мой ответ
Здравствуйте!
Я вам пример разбора вашего XML набросал, разберитесь с ним и результатами, который он выводит и у вас всё получится:
XML = Новый ЧтениеXML; XML.ОткрытьФайл("d:\work\orderExport.xml"); Пока XML.Прочитать() Цикл Если XML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Сообщить("<" + XML.Имя + ">"); Пока XML.ПрочитатьАтрибут() Цикл Сообщить(XML.Имя + " = " + XML.Значение); КонецЦикла; КонецЕсли; Если XML.ТипУзла = ТипУзлаXML.Текст Тогда Сообщить(XML.Значение); КонецЕсли; Если XML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Сообщить(""); КонецЕсли; КонецЦикла; XML.Закрыть(); |
**************************************************************
Вопрос
Добрый день.
У меня возник такой вопрос: Как сравнить табличные части связанных документов (один вводится на основании другого), но реквизиты "Вес" и "Количество" могут отличаться и если они отличаются тогда присвоить значения подчиненного документа, очистить табличную часть и заполнить не получается потому что в документ-основание присутствуют другие реквизиты, которых нет в подчиненном документе.
Мой ответ
День добрый!
Пусть есть ДокОснование и ДокПодчиненный.
Бежим по табличной части документа основание
Для Каждого Строка Из ДокОснование.ИмяТабличнойЧасти Цикл // нам нужно найти строку соответствующую этой в подчиненном документе // и сравнить Вес и Количество например, будем искать по номенклатуре СтрокаПодчиненного = ДокПодчиненный.ИмяТабличнойЧасти. Найти(Строка.Номенклатура, "Номенклатура"); Если СтрокаПодчиненного <> Неопределено Тогда Если Строка.Вес <> СтрокаПодчиненного.Вес ИЛИ Строка.Количество <> СтрокаПодчиненного.Количество Тогда Строка.Вес = СтрокаПодчиненного.Вес; Строка.Количество = СтрокаПодчиненного.Количество; КонецЕсли; КонецЕсли; КонецЦикла; |
Если требуется устанавливать соответствие строк в обоих табличных частях сразу по нескольким колонкам, то возможно лучше пользоваться методом НайтиСтроки (см. в синтакс-помощнике).
Если же соответствие строк идёт один к одному - то нужно просто брать их по номеру, то из одной табличной части, то из другой.
**************************************************************
Вопрос
Доброго дня!
Вопрос такой:
Делаю печатную форму.
- На выводе количество страниц равно тому параметру ("количество"), которое указал пользователь.
- Нужно в Коде написать такое условие: Если Последняя страница, то Не надо ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
Это будет выглядеть так?:
Если НЕ Количество Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; |
Спасибо!
Мой ответ
День добрый!
Если вы знаете общее количество страниц, то просто подсчитывайте при выводе каждой страницы какая она по счету и если она последняя, то выводить разделитель не нужно.
Что-то типа такого:
ОбщееКоличествоСтраниц = 10; ВывелиСтраниц = 0; цикл выводящий страницы: вывод очередной страницы: ВывелиСтраниц = ВывелиСтраниц + 1; Если ВывелиСтраниц < ОбщееКоличествоСтраниц Тогда выводим разделитель КонецЕсли; |
**************************************************************
Вопрос
Стоит задачка:
- Создают печатную форму
- Запросом вытягиваю что нужно.
- Один из параметр Табличного документа Число, которое вводит пользователь
- Нужно чтобы на печать выходило столько листов сколько указал пользователь. Причём, если указано Число 5, то на первом листе д/б 1, на втором 2 и т. п.
Не получилось вставить число, выбранное пользователем в Таб. документ.
Совсем не понятно как сделать пункт 4.
Спасибо!
Мой ответ
День добрый!
Посмотрите в синтакс помощнике методы табличного документа.
Вы выводите секции, описанные в макете документа по их именам.
А также есть метод, который выводит разрыв страницы - вот вам и новая страница.
Делайте столько разрывов - сколько страниц вам нужно.
Внутри самого макета вам нужно сделать тип одной из выводимых ячеек в секции параметром. У этого параметра будет имя. Вот его и нужно заполнять перед выводом секции нужным числом.
Также посмотрите код любой из обработок выложенных у меня здесь. Там везде делается вывод разделителя страниц.
**************************************************************
Вопрос
У меня такой вопрос, может подскажите в какую сторону копать.
Организация занимается продажей кофейных аппаратов и ингредиентов к ним (кофе, стаканы, сахар и т.д.) тут все понятно, обычная торговля, если бы не одно НО.
Часть аппаратов сдаются клиентам в аренду. Аренда оплачивается в виде аренды + покупка некоторого количества ингредиентов. Как лучше сделать учет по аппаратом которые находятся в данный момент в аренде?
Заранее спасибо
Мой ответ
День добрый!
Ну покупка ингредиентов я так понимаю труда не составляет. Это обычная продажа контрагенту.
Вопрос в том как сделать учет номенклатуры, которая в аренде.
- заводим регистр накопления, например, "ТоварыВАренде":
- измерения: Номенклатура, Контрагент
- ресурс: Количество
Теперь пусть к нам пришла машина от поставщика.
Мы её оприходуем и УТ поставит эту номенклатуру в количестве 1 штуку на свой типовой регистр накопления, не знаю как он называется точно, но пусть "ОстаткиТовараНаСкладе".
Ок.
Теперь мы сдаем эту машину в аренду (для этого свой документ создадим "Передача в аренду").
Документ должен сделать следующие движения:
в минус по регистру ОстаткиТовараНаСкладе
в плюс по регистру ТоварыВАренде
Отлично.
Теперь нам вернули из аренды машину (другой документ).
Делаем обратные движения, то есть возвращаем товар на склад.
В любой момент мы можем проанализировать остатки по регистру ТоварыВАренде, чтобы понять у кого и какие машины находятся. Плюс можем всю историю операций поднять.
Всё это лучше оформить в виде отдельной подсистемы в УТ, по минимуму затрагивая типовой функционал.