ТЗ.ВыбратьСтроки(); ТекКонтрагент = "Начало"; СуммаКонтрагент = 0; Пока ТЗ.ПолучитьСтроку() = 1 Цикл Сч=Сч+1;
Контрагент = ТЗ.Контрагент; .......... //указываете реквизиты, которые нужны на печати
СуммаВсего = ТЗ.Контрагент.Итог("Сумма");
Если ТекКонтрагент<>ТЗ.Контрагент Тогда Если СуммаКонтрагент<>0 Тогда Таб.ВывестиСекцию("ИтогоКлиент"); КонецЕсли; ТекКонтрагент = ТЗ.Контрагент; СуммаКонтрагент = 0; КонецЕсли;
ПодчДокументы = ""; ДокПодч = СоздатьОбъект("Документ"); Если ДокПодч.ВыбратьПодчиненныеДокументы(,,ВашДокумент) = 1 тогда Пока ДокПодч.ПолучитьДокумент() = 1 Цикл ДокПодч.СнятьПометкуУдаления(); КонецЦикла; КонецЕсли;
зробили перше оновлення з релізу 1.2.54. зберегли конфігурації і так далі... можливо треба ще запускати "підпрємство" кожен раз. я давно не оновлював колнфігураціїї.
kserg2012 @ Сегодня, 12:35
, видел такие ставки, как 500 грн час. Сам я подхожу индивидуально к задаче. Иногда ставлю сумму в целом выполненую задачу, а иногда считаю по часам.
ИТС запрещает использовать ТекущаяДата(), но исчерпывающей информации на вопрос "Почему?" нет ни там, ни на ИС, поэтому написал данную заметку. Тем не менее, совсем не знакомым с темой, стоит прочитать статью на ИТС (по этой ссылке)и бегло статью на ИС "О времени и 1С" (к сожалению, ровно через неделю после моей публикации Юрий Пермитин удалил все свои статьи с инфостарта и ссылка уже не действительна).
Цитаты с ИТС:
2.1. Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса.
3.1. В клиентском коде использование функции ТекущаяДата также недопустимо. Это требование обусловлено тем, что текущее время, вычисленное в клиентском и серверном коде, не должно различаться.
2.2. В тех случаях, когда требуется «универсальная» отметка времени, не зависящая от часового пояса текущего сеанса пользователя, в контексте которого выполняется серверный вызов, следует использовать функцию УниверсальноеВремя.
А именно остались вопросы:
1. Раз уж по неведомой пока причине, запретили использовать ТекущаяДата(), то почему бы вместо неё не дать возможность всегда использовать ТекущаяДатаСеанса()? Почему в платформе не сделали функцию ТекущаяДатаСеанса() доступной на клиенте? Тем более, что инфа о времени сеанса клиента изначально физически лежит на клиенте.
Потому что ТекущаяДатаСеанса() - согласно СП это серверная дата и время + часовой пояс клиента. А значит мы страхуемся от того, что на клиенте время вообще от балды идёт, например отстаёт на секунду.
2. Хорошо, раз на клиенте недоступна ТекущаяДатаСеанса(), то почему ИТС не разрешает на клиенте вызывать ТекущаяДата()? Ведь ТекущаяДатаСеанса() выполненная на сервере по идее будет равняться ТекущаяДата() выполненная на клиенте. Вместо этого ИТС рекомендует вызывать метод БСП ДатаСеанса(), который как раз и вернёт значение равное ТекущаяДатаСеанса() только при этом не будет делать серверный вызов, за счёт того, что он был сделан однократно в начале сеанса и была вычислена ПоправкаКВремениСеанса = ТекущаяДатаСеанса(вычисленная на сервере) - ТекущаяДата(вычисленная на клиенте).
Ответ на данный вопрос вытекает из предыдущего: серверное и клиентское время время может отличаться не только на часовой пояс, и единственный выход пользоваться одинаковым временем, это брать его с сервера и добавлять клиентские часовые пояса - т.е. ровно то, что и делается в ТекущаяДатаСеанса() и ДатаСеанса()
Второй аргумент подсказал коллега (в достоверности не могу ручаться): ТекущаяДатаСеанса() на сервере и ТекущаяДата() на клиенте могут отличаться во фреше, т.к. это эталонное время для области в которой крутится сеанс и время Кластера соответсвенно.
3. Почему в качестве универсального времени ИТС указывает безальтернативно использовать УниверсальноеВремя()? Почему вместо этого нельзя использовать ТекущаяДата() вычисленное на сервере?
ТекущаяДата() на сервере тоже может меняться - например если сервер переехал. Или серверов может быть несколько. Поэтому УниверсальноеВремя() универсально в отличии от ТекущаяДата().
kostya77 @ Сегодня, 9:16
, Такое реализовано у нас для договоров через обработку прикрепленные файлы. Создан каталог для хранения файлов. Выбераем файл
//1 строка - тип //2 строка - длина //3 строка - точность //4 строка - ИД вида объекта //5 строка - флаг неотр. (?) //6 строка - флаг разделения триад (?) //7 строка - ИД объекта Функция ПолучитьИДобъекта(Объект) Перем Стр; Стр=ЗначениеВСтрокуВнутр(Объект); СЗ=СоздатьОбъект("СписокЗначений"); СЗ.ИзСтрокиСРазделителями(Сред(Стр,2,СтрДлина(Стр)-2)); Для Сч=1 По 7 Цикл Если (Сч=4) или (Сч=7) Тогда ДесИД=СЗ.ПолучитьЗначение(Сч); СЗ.УстановитьЗначение(Сч,_IdToStr(ДесИД)); КонецЕсли; КонецЦикла; Возврат СЗ; КонецФункции
//******************************************* Процедура СоздатьКаталогОбъекта() СЗ=ПолучитьИДобъекта(Объект); //Проверим, существует ли каталог для прикрепляемых файлов КаталогФайлов=КаталогИБ()+"Files\"; // "1MZ" - док.Договор Если СокрЛП(СЗ.ПолучитьЗначение(4)) = "1MZ" Тогда КаталогФайлов=КаталогИБ()+"Files\"; КонецЕсли; Если ФС.СуществуетФайл(КаталогФайлов)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогФайлов); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов объектов данного типа КаталогТипаОбъекта=КаталогФайлов+СокрЛП(СЗ.ПолучитьЗначение(1))+"\"; Если ФС.СуществуетФайл(КаталогТипаОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогТипаОбъекта); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов объектов данного вида КаталогВидаОбъекта=КаталогТипаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(4))+"\"; Если ФС.СуществуетФайл(КаталогВидаОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогВидаОбъекта); //то создадим его. КонецЕсли; //Проверим, существует ли каталог для записи файлов этого объекта КаталогОбъекта=КаталогВидаОбъекта+СокрЛП(СЗ.ПолучитьЗначение(7))+"\"; Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда //Если каталога нет, ФС.СоздатьКаталог(КаталогОбъекта); //то создадим его. КонецЕсли; КонецПроцедуры
//********************************************* Процедура ВыбратьФайл() ТекКат=""; ИмяФайла=""; ИмяФайла1=""; Если ФС.ВыбратьФайл(0,ИмяФайла,ТекКат,"Выберите файл:",,,120)=1 Тогда Если ФС.СуществуетФайл(КаталогОбъекта)=0 Тогда СоздатьКаталогОбъекта(); КонецЕсли; //Приведём длину имени файла в соответствие... МаксДлИмениФайла=120; ПозРасш=НайтиПослВх(ИмяФайла,"."); РасшФайла=Прав(ИмяФайла,СтрДлина(ИмяФайла)-ПозРасш); НазвФайла=Лев(ИмяФайла,Мин(ПозРасш-1,МаксДлИмениФайла-СтрДлина(РасшФайла)-1)); ИмяФайла1=НазвФайла+"."+РасшФайла; //Проверим, есть ли такой файл в папке... Если ФС.СуществуетФайл(КаталогОбъекта+ИмяФайла)=1 Тогда //Проверим наличие файла с таким же именем в каталоге приёмнике Если Не(Вопрос("Файл с именем "+ИмяФайла+" |в каталоге "+КаталогОбъекта+" уже существует! |Перезаписать файл "+ИмяФайла+"?","Да+Нет+Отмена",30)="Да") Тогда Возврат; КонецЕсли; КонецЕсли; Если ФС.СуществуетФайл(КаталогОбъекта+"files.vtf")=0 Тогда СоздатьКаталогОбъекта(); КонецЕсли; //Копируем файл в папку... ФС.КопироватьФайл(ТекКат+ИмяФайла,КаталогОбъекта+ИмяФайла1,0); Иначе Возврат; КонецЕсли; КонецПроцедуры
Есль такой вариант (но я не проверял): Добавь в док реквизит текстовый и кнопку на форму для выбора файла, при выборе файла в реквизит попадает путь + имя файла , а на кнопку открытия вешай :
Если КонтрагентДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Контрагент", КонтрагентДляОтбора); КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ПустоеЗначение(ВидДокументаДляОтбора) = 1 Тогда ВидДокументаДляОтбора=1; КонецЕсли; УстановитьОтбор(СписокВидовДокументов.ПолучитьЗначение(ВидДокументаДляОтбора), );
Если АвторДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Автор", АвторДляОтбора); АвторДляОтбора = АвторДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ФирмаДляОтбора.Выбран()>0 Тогда УстановитьОтбор("Фирма", ФирмаДляОтбора); ФирмаДляОтбора = ФирмаДляОтбора.ТекущийЭлемент(); Иначе УстановитьОтбор(""); КонецЕсли;
Если ВидОтбора.ТекущаяСтрока() = 6 Тогда // нет быстрого отбора Возврат; КонецЕсли;
ЗначениеИзменилось=0;
Если ВидОтбора.ТекущаяСтрока() = 1 Тогда СтароеЗначение=КонтрагентДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Контрагенты"); Если ВыбЗначение.Выбрать("Выбор контрагента","Форма списка")=1 Тогда КонтрагентДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 2 Тогда СтароеЗначение=ВидДокументаДляОтбора; Если ПустоеЗначение(ВидДокументаДляОтбора)>0 Тогда ВыбЗначение = ""; Иначе ВыбЗначение = СписокВидовДокументов.ПолучитьЗначение(ВидДокументаДляОтбора); КонецЕсли; СписокВидовДокументов.ВыбратьЗначение(ВыбЗначение,"Выбор вида документов",,,0); ВидДокументаДляОтбора = СписокВидовДокументов.НайтиЗначение(ВыбЗначение); Если ВидДокументаДляОтбора<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 3 Тогда СтароеЗначение=АвторДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Пользователи"); Если ВыбЗначение.Выбрать("Выбор автора","Форма списка")=1 Тогда АвторДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 4 Тогда СтароеЗначение=ТипДляОтбора; Если ПустоеЗначение(ТипДляОтбора)>0 Тогда ВыбЗначение = ""; Иначе ВыбЗначение = ТипыУчета.ПолучитьЗначение(ТипДляОтбора); КонецЕсли; ТипыУчета.ВыбратьЗначение(ВыбЗначение,"Выбор типа учета",,,0); ТипДляОтбора = ТипыУчета.НайтиЗначение(ВыбЗначение); Если ТипДляОтбора<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли;
ИначеЕсли ВидОтбора.ТекущаяСтрока() = 5 Тогда СтароеЗначение=ФирмаДляОтбора; ВыбЗначение = СоздатьОбъект("Справочник.Фирмы"); Если ВыбЗначение.Выбрать("Выбор фирмы","Форма списка")=1 Тогда ФирмаДляОтбора = ВыбЗначение; Если ВыбЗначение<>СтароеЗначение Тогда ЗначениеИзменилось=1; КонецЕсли; КонецЕсли;
КонецЕсли;
Если ЗначениеИзменилось=1 Тогда ПриУстановкеБыстрогоОтбора(); КонецЕсли;
Ниже описан порядок действий для добавления "скрепки" (присоединение файлов) к новому документу "НашНовыйДокумент" (как пример).
1. Копируем справочник с наименованием содержащим на конце словосочетание "ПрисоединенныеФайлы". Например "АвансовыйОтчетПрисоединенныеФайлы".
2. Меняем наименование так, чтобы префикс точно соответствовал наименованию документа, а окончание содержало "ПрисоединенныеФайлы". В нашем случае: "НашНовыйДокументПрисоединенныеФайлы".
3. Меняем ТИП у реквизита "ВладелецФайла" справочника "НашНовыйДокументПрисоединенныеФайлы" на "НашНовыйДокумент".
4. Включаем в состав определяемых типов "ПрисоединенныйФайл" и "ПрисоединенныйФайлОбъект" наш новый справочник "НашНовыйДокументПрисоединенныеФайлы".
5. Расширим состав определяемого типа "ВладелецПрисоединенныхФайлов" нашим документом (ДокументСсылка) "НашНовыйДокумент".
6. Расширим состав типов свойства "Источник" у подписки "ПереопределитьПолучаемуюФормуПрисоединенногоФайла", включив в него справочник "НашНовыйДокументПрисоединенныеФайлы".
7. Расширим состав типов свойства "Источник" подписки УстановитьПометкуУдаленияПрисоединенныхФайловДокументов, включив в него наш новый документ (ДокументОбъект) "НашНовыйДокументПрисоединенныеФайлы".
8. Расширим состав общей команды "ПрисоединенныеФайлы" и "ПрисоединенныеФайлыБП", включив в него наш новый документ (ДокументСсылка).
Xmdrug @ Сегодня, 15:22
, Ну ручной операцией можно. Но это только по счетам, а вот по регистрам надо другим документом типа корректировка регистров. Другого ничего не нашел в утп. Надо читать литературу.
Ledi29 @ Вчера, 22:46
, Перечисление "СтавкиНДС". В конфигураторе добавить новое значение перечисления. Но этого мало потом, необходимо еще в общих модулях (или модулях документов) описать расчет ставки НДС.
Максон @ Сегодня, 14:38
, В конфигураторе. Находите свой документ. Открываете его форму и там есть макеты печатных форм. И там уже их правите, как хотите. Но если не сильно ориентируетеся в 1с, лучше обращаться к программистам 1с
MK-61 @ Вчера, 15:59
, Добрый день! Попробовал у себя на конфигурации 1с7.7 "ПУБ" в монополном режиме изменить расчет БИ. Установил расчет бухгалтерских итогов на 4 квартал 2022. Прошло без вопросов. До этого расчет БИ стоял 4 квартал 2030 года.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!