нажав синю букву Т, навіть тримав, а також пробував через кнопку вставка, то якщо так роблю то на фоні таблиці створюється текст, але в таблицю не попадає
Цікаво як це Вам вдалось зробити? Ніяк цього не зміг повторити в себе (таке вдалось провторити тільки на формі таблиціЗначень розміщеної на формі документу)
нажав синю букву Т, навіть тримав, а також пробував через кнопку вставка, то якщо так роблю то на фоні таблиці створюється текст, але в таблицю не попадає
Ніяк не вдалось змоделювати вашу ситуацію. Єдине щоб на фоні табличної частини документу появилося поле введення, для цього вибирав Вставить-Реквизит диалога.
Коли нажимаєте Вставить-Текст. І коли ведете мишку на не на табличній частині біля мишки має бути синя туква Т. Коли мишку переміщаєте на табличну частину має змінитись на прямокутник з плюсиком в правому нижньому куті. Тоді в табличну частину можна буде вставити тестову колонку.
1. Можливо у вас слой табличної частини у вас не співпадає з активним слоєм (хоча в мене навіть на різних слоях працює) 2. Яка версія платформи у вас (остання 7.70.027) 3. Можливо ви намагаєтесь вставити колонку не в табличну частину документу, а на ТаблицюЗначень на формі? Тоді на неї ви не добавите текстову колонку. Колонки на формі Таблиці значень ви ж формуєте програмно
Сложность тут с учётом предложенного вами варианта в том как сделать что бы 1с больше не спотыкалась об один и тот же файл при выборе файла для втягивания... была мысль очищать файл в конце но тут вопрос как ей сказать что раз файл пустой нужно найти следующий
Вам вже всю потрібну інформацію виклали више.
Функция ОбработатьОдинТекстовийФайл(ВхФайл) Успех=1; //для контроля, если что-то пойдет не так в обработке файла ТекстФайл = СоздатьОбъект("Текст"); ТекстФайл.Открыть(ВхФайл); Для i = 1 По ТекстФайл.КоличествоСтрок() Цикл нужнаяСтрока=ТекстФайл.ПолучитьСтроку(i); //здесь анализируйте содержимое строки // получили строку и разносим в документ, как нужно Если НештатнаяСитуация тогда Успех = 0; КонецЕсли;
Сообщить(нужнаяСтрока); КонецЦикла;
Возврат Успех КонецФункции
Процедура ОбработатьВсеТекстовиеФайлиВКаталоге() ФС.УстТекКаталог(каталог); //здесь пропишите маршрут своего каталога с файлами ИмяФайла = ""; ИмяФайла = ФС.НайтиПервыйФайл("*.txt"); //здесь укажите нужную вам маску файлов
Пока СтрДлина(ИмяФайла)<>0 Цикл //тут обойдем все текстовые файли в каталоге ИмяФайла = ФС.НайтиСледующийФайл(); УспехОбработкиФайла=ОбработатьОдинТекстовийФайл(ИмяФайла); Если УспехОбпаботкиФайла=1 тогда // если очередной файл обработали, удаляем его с каталога ФС.УдалитьФайл(ИмяФайла); КонецЕсли; сообщить(ИмяФайла); КонецЦикла; КонецПроцедуры
В качестве экзотики и если не очень большие требования к времени загрузки, то можно подключить Google Translator.
Також не універсальне рішення. Наприклад: Цукерки "Вогник" Конфеты "Огонёк" Цукерки "Огонёк" Це один і той самий товар чи різні?
Цитата(xlmel @ 12.11.24, 18:15)
можно сделать для номенклатуры дополнительный реквизит или свойство
Також можливий такий варіант. Наприклад зробити окрему табличну частину для назви товару- куди записувати можливі назви які можуть бути і робити пошук ще по них. Але основте питання хто буде тратити свій час для заповнення всіх цих даних і слідкувати за правильністю заповнення (можливий варіант що для різних товарів ці іншомовні назви можуть співпадати)
У мене була подібна задача. Не панацея на всі випадки життя, але деякі подібні написи помогає вявляти при загрузці.
Коли потрібно робити загрузку 1. Заганяємо весь список товару в таблицю значень (Колонки: "ссилка" і "назва для пошуку") 2. "Назву для пошуку" попередньо перетворюємо: видаляємо з назви товару неважливі символи - пробіли, нерозривні пробіли, крапки, коми, дефіси, тире, лапки, символи переносу строки). 3. При загрузці назву товару проганяємо тим самим алгоритмом з п.2. і робимо пошук в таблиці значень по колонці "назва для пошуку".
Функция ВиправитиСтроку(дане) ччч=дане;
ччч=НРег(СтрЗаменить(ччч," ","")); // пробіл ччч=СтрЗаменить(ччч," ",""); // нерозривн пробыл ччч=СтрЗаменить(ччч," ",""); // табуляція ччч=СтрЗаменить(ччч,"?","і"); // на українське і ччч=СтрЗаменить(ччч,Символ(34),""); // лапки ччч=СтрЗаменить(ччч,".",""); // крапка ччч=СтрЗаменить(ччч,",",""); // кома ччч=СтрЗаменить(ччч,"'",""); // апостроф ччч=СтрЗаменить(ччч,";",""); // крапка з комою ччч=СтрЗаменить(ччч,":",""); // дві крапки ччч=СтрЗаменить(ччч,"-",""); // дефіс ччч=СтрЗаменить(ччч,"_",""); // нижнє підкреслення ччч=СтрЗаменить(ччч,"i","і"); //латинське і на українське ччч=СтрЗаменить(ччч,"/",""); // ччч=СтрЗаменить(ччч,"\",""); // ччч=СтрЗаменить(ччч,"|",""); //
в цій функції ви формуєте сам табличний документ. І повертаєте його в іншу свою процедуру з якої друкуєте. Не зовсім зрозуміло як ви друкуєте в ПДФ. 1. Виводиться на екран форма і ви через Файл/СохранитьКак (зберігаєте в ПДФ? 2. Програмно зберігається в ПДФ в вашім модулі куди повертаєте Табличний документ? 3. Друкуєте через ПДФ принтер?
Якщо перший варіанта то там має бути щось таке:
ТабличныйДокумент.Показать("назва під якою я хочу зберегти свій документ")
Попытка ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
УдалитьФайлы(ФайлВМассив1); УдалитьФайлы(ФайлВМассив2); //УдалитьФайлы(ИмяИтоговогоФайла); // інколи вилітає помилка при видаленні УдалитьФайлы(ПутьКФайлу);
ПолныйПутьКОбработке = "С:/мояобработка.epf"; Расширение=Прав(ПолныйПутьКОбработке ,4); Если Расширение=".erf" тогда Форма = ВнешниеОтчеты.ПолучитьФорму(ПолныйПутьКОбработке); ИначеЕсли Расширение=".epf" тогда Форма = ВнешниеОбработки.ПолучитьФорму(ПолныйПутьКОбработке); Иначе Форма=""; КонецЕсли;
Если Не Форма = "" Тогда Форма.Открыть(); КонецЕсли;
Якось так. Хоча яка ціль воших маніпуляцій? Можливо вашу задумку можна реалізувати іншим способом.
Ось мій варіант вибора принтера. в довіднику "Користувачів" в мене прописані назви принтерів які потрібно використовувати для різних варіантів друку (назву принтера необовязково вказувати повністю - головне щоб всі назви принтерів в компютері були різні)
Функция ПолучитьИмяПринтераДляПечати(Вид) ИмяПринтера=""; принтеры = Новый COMОбъект ("WScript.Network"); prn = принтеры.EnumPrinterConnections(); i = 0; Если Вид="Чек" тогда ПроверочнПринтер=ПараметрыСеанса.Користувач.ПринтерЧеков; Иначе ПроверочнПринтер=ПараметрыСеанса.Користувач.ПринтерОсновной; КонецЕсли;
Пока i < prn.Count()-1 Цикл // НовыйПринтер=ТЗПринтеры.Добавить(); ВремИмяПринтера=prn.Item(i+1); i = i + 2; Если Найти(ВремИмяПринтера,ПроверочнПринтер)>0 тогда ИмяПринтера=ВремИмяПринтера; Прервать; КонецЕсли; КонецЦикла; Возврат ИмяПринтера;
на формі елемента є реквізит Группа. Користувач буде його заповняти "руками". Як зробити щоб єлемент записався в вибрану групу?
Перевірив. Ніяк не получиться. Змінити групу таким чином неможливо. Так як при створенні єлемента він автоматично прописується в поточній групі яка зараз відкрита. І перезаписати в іншу групу таким чином неможливо (Помилка Объект заблокирован для редагування програмно - так як редагується інтерактивно).
Хоча якщо хочете заморочитись це можна зробити обманним шляхом: при створенні відкривати не форму справочника, а звіт який імітує вігляд цього справочника і так заповнювати. І при натисненні кнопки "Записати" на формі звіту записати всі дані в справочник. Але це дуже багато потрібно переписувати
kostya77 @ Сегодня, 10:03
, Ось код, яким я переношу записаний елелемент справочника в конкретну групу (непотрібні єлементи переношу в групу "мусор")
клиент= ТекущийЭлемент(); груп=СоздатьОбъект("Справочник.Контрагенти"); ТекСпр=СоздатьОбъект("Справочник.Контрагенти"); Если груп.найтипоКоду("__",0) =1 тогда Група=Груп.ТекущийЭлемент(); ТекСпр.найтиЭлемент(клиент); ТекСпр.Родитель=Група; ТекСпр.Записать(); КонецЕсли;
Цитата(kostya77 @ 29.04.24, 10:34)
а как при создании? Элемент создается из формы списка справочника
При створенні їз форми елемент справочника і так по замовчуванню створюєтьсь в тій групі яка зараз відкрита. Звісно можна прописати щоб сворюванся в конкретній групі, незалежно від того яка зараз відкрита група. Але думаю що це неправильний підхід, так як є декілька нюансів: 1. Елемент завжди буде створюватись тільки в одній конкретній групі. А Вам думаю потрібно створювати єлементи кожен в своїй групі. 2. Після створення цей елемент, як правило потрібно зразу використати в якомусь документі. Незручно буде коли ви створили єлемент в одній групі, а знаходитесь в іншій, і небачите для вибору в документ нового створеного елемента.
Якщо всеж таки жочете реалізувати це при своренні, то це можна прописати в процедурі
1. САМЕ ГОЛОВНЕ !!! Надіюсь це все ви робите на копії ???????
Даний збій малоймовірно може виникати тільки від того що на компютері була неправильна дата. Скоріш за все або сипеться вінчестер на компютері, або під час роботи 1С компютер вимикався (пропадало світло) Не знаю чи ві вірно все виконували в базі. Пораджу що можна зробити. 1. Операции. Проведение документов. На закладці "Последовательности" . Відмітити всі і "Виконати" 2. В конфігураторі. Тестирование и исправление. Вибрати всі (крім "Упаковки таблиць") А нижче "Тестирование и исправление". І ще по кнопці "Настройки" Спочатку пробувати з настройками "Создавать Обекти". А яко не поможе, то з настройками "Очищать ссилки" і Удалать Данние" . Тоді ці проблемні документи або створяться або почиститься мусор від них.
Якщо це не допоможе тоді прийдеться застосовувати тяжку алтилерію для перегляду і редагування DBF файлів. DBF_1сViewer_2_0.ert - тільки перегляд файлів. redaktor_dbf.rar - для редагування файлів (це ті якими я користуюсь. Звичайно є і інші. в своїй конфігурації шукаєте ці проблемні файли. DH931.dbf DT931.dbf і відкриваєте цими програмами. Запись 610 - це номер рядка в вашому файлі (перша колонка Номер Записи). По ній знайдете проблемний документ дату, суму.... А далі вже вирушуйте що з цим робити.
Ще можна попробувати через конфігуратор Администрирование Вігрузить данніе. Загрузить данніе
P.S. У вас всого два проблемних документи. Просто в 1С так реалізовано що сам документ і його таблична частина зберінаються в різних файлах
// ЭлСправ- ссилка на конкректний елемент справочника Если Метаданные.Справочники.МойСправочник.ОграничиватьКоличествоУровней тогда МаксимумУровней=Метаданные.Справочники.МойСправочник.КоличествоУровней; иначе МаксимумУровней=100; // хватає з великим запасорв в реальних базах КонецЕсли; Сообщить(ЭлСправ.ПолныйКод()); Ел1=ЭлСправ; Для к=1 по МаксимумУровней цикл Ел1=Ел1.Родитель; // по ссилці Если Ел1=Справочники.МойСправочник.ПустаяСсылка() тогда Прервать; КонецЕсли; Сообщить("-"+к+"-"+Ел1.Наименование); КонецЦикла;
kostya77 @ Сегодня, 11:04
, Не нужно в разные таблицы выгружать. Достаточно в одну ТЗ выгрузить. Отсортировать ТЗ по контрагенту. Потом обходить и когда контагент изменился выводить подвал по первой печатной форме и создавать новую печатную форму (или новую страницу в той же печатной форме). После цикла по таблице значений не забыть вывести последний подвал. Нужные итоги для подвала также сумировать до момента измененения контрагента. И потом обнулять. Или есть хороший метод "Свернуть" для таблицы значений. Но тогда небудет детализации по строкам табличной части.
Если Условие1 тогда Форма.Дата1.видимость(0); Форма.ТекстНаФорме.видимость(0); Форма.ТекстНаФорме1.видимость(1); ИначеЕсли Условие2 тогда Форма.Дата1.видимость(1); Форма.ТекстНаФорме.видимость(0); Форма.ТекстНаФорме1.видимость(1); ИначеЕсли Условие3 тогда Форма.Дата1.видимость(1); Форма.ТекстНаФорме.видимость(1); Форма.ТекстНаФорме1.видимость(0); Иначе Форма.Дата1.видимость(0); Форма.ТекстНаФорме.видимость(1); Форма.ТекстНаФорме1.видимость(0); КонецЕсли
4andriy @ Вчера, 14:56
, Можно раскрасить табличную часть журнала документов. Например так. Формексом
Функция КолонкаТекстВТабличнойЧастиЖурнала() ЦветПроба=Число(НомерДок); Возврат "BRUSH["+(ЦветПроба*1450)+"] "+"COUNT["+2+"]";;
// FONT[<Цвет>] - задает цвет шрифта строки; // BRUSH[<Цвет>] - задает цвет фона строки; // FONT_S[<Цвет>] - задает цвет шрифта строки, если она является текущей (не влияет на текущую ячейку); // BRUSH_S[<Цвет>] - задает цвет фона строки, если она является текущей (не влияет на текущую ячейку); // COUNT[<КоличествоКолонок>] - задает количество колонок, на которые распространяется раскраска; // INDENT[<Отступ>] - задает количество колонок, которое необходимо пропустить перед началом раскраски; // FONTSET[<КодШрифта>] - задает шрифт строки; // FONTSET_S[<КодШрифта>] - задает шрифт строки, если она является текущей;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!